Skip to content

Instantly share code, notes, and snippets.

@SamuXarick
Created July 5, 2022 16:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SamuXarick/8d52f07327ac1e80c2b699786fa3df53 to your computer and use it in GitHub Desktop.
Save SamuXarick/8d52f07327ac1e80c2b699786fa3df53 to your computer and use it in GitHub Desktop.
Rail::_Cost
function Rail::_Cost(path, new_node, self)
{
/* path == null means this is the first node of a path, so the cost is 0. */
if (path == null) return 0;
local new_tile;
local prev_tile;
local pprev_tile;
local ppprev_tile;
local costs = 0;
for (local j = 0; j < new_node.len(); j++) {
local num_tiles_new_node = new_node[j].len();
new_tile = new_node[j][0][0];
AILog.Info("new_tile = " + new_tile);
local prev_node = path.GetParent();
local num_tiles_prev_node = prev_node[j].len();
prev_tile = prev_node[j].top()[0];
AILog.Info("prev_tile " + prev_tile);
num_tiles_prev_node--;
if (num_tiles_prev_node > 0) {
pprev_tile = prev_node[j][num_tiles_prev_node - 1][0];
num_tiles_prev_node--;
if (num_tiles_prev_node > 0) {
ppprev_tile = prev_node[j][num_tiles_prev_node - 1][0];
} else {
/* num_tiles_prev_node == 0 */
local pprev_node = prev_node.GetParent();
if (pprev_node != null) {
ppprev_tile = pprev_node[j].top()[0];
} else {
ppprev_tile = 0;
}
}
} else {
/* num_tiles_prev_node == 0 */
local pprev_node = prev_node.GetParent();
if (pprev_node != null) {
pprev_tile = pprev_node[j].top()[0];
local num_tiles_pprev_node = pprev_node[j].len();
num_tiles_pprev_node--;
if (num_tiles_pprev_node > 0) {
ppprev_tile = pprev_node[j][num_tiles_pprev_node - 1][0];
} else {
/* num_tiles_pprev_node == 0 */
local ppprev_node = pprev_node.GetParent();
if (ppprev_node != null) {
ppprev_tile = ppprev_node[j].len()[0];
} else {
ppprev_tile = 0;
}
}
} else {
pprev_tile = 0;
ppprev_tile = 0;
}
}
for (local i = 0; i < new_node[j].len(); i++) {
costs += self._CostSingleTile(ppprev_tile, pprev_tile, prev_tile, new_tile, self);
ppprev_tile = pprev_tile;
pprev_tile = prev_tile;
prev_tile = new_tile;
new_tile = new_node[j][i][0];
}
}
return path.GetCost() + costs;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment