|
@@ -65,20 +65,21 @@ int AiNew_Build_Bridge(Player *p, TileIn
|
|
|
type2 = type;
|
|
|
type = bridge_type;
|
|
|
// We found two bridges, exit
|
|
|
if (type2 != 0) break;
|
|
|
}
|
|
|
}
|
|
|
// There is only one bridge that can be build..
|
|
|
// There is only one bridge that can be built
|
|
|
if (type2 == 0 && type != 0) type2 = type;
|
|
|
|
|
|
// Now, simply, build the bridge!
|
|
|
if (p->ainew.tbt == AI_TRAIN)
|
|
|
return AI_DoCommand(tile_a, tile_b, (0<<8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
|
|
|
|
|
|
return AI_DoCommand(tile_a, tile_b, (0x80 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
|
|
|
if (p->ainew.tbt == AI_TRAIN) {
|
|
|
return AI_DoCommand(tile_a, tile_b, (0x00 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
|
|
|
} else {
|
|
|
return AI_DoCommand(tile_a, tile_b, (0x80 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// Build the route part by part
|
|
|
// Basicly what this function do, is build that amount of parts of the route
|
|
|
// that go in the same direction. It sets 'part' to the last part of the route builded.
|
|
@@ -99,42 +100,45 @@ int AiNew_Build_RoutePart(Player *p, Ai_
|
|
|
int cost = 0;
|
|
|
int res;
|
|
|
// We need to calculate the direction with the parent of the parent.. so we skip
|
|
|
// the first pieces and the last piece
|
|
|
if (part < 1) part = 1;
|
|
|
// When we are done, stop it
|
|
|
if (part >= PathFinderInfo->route_length - 1) { PathFinderInfo->position = -2; return 0; }
|
|
|
if (part >= PathFinderInfo->route_length - 1) {
|
|
|
PathFinderInfo->position = -2;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
if (PathFinderInfo->rail_or_road) {
|
|
|
// Tunnel code
|
|
|
if ((AI_PATHFINDER_FLAG_TUNNEL & route_extra[part]) != 0) {
|
|
|
cost += AI_DoCommand(route[part], 0, 0, flag, CMD_BUILD_TUNNEL);
|
|
|
PathFinderInfo->position++;
|
|
|
// TODO: problems!
|
|
|
if (CmdFailed(cost)) {
|
|
|
DEBUG(ai,0)("[AiNew - BuildPath] We have a serious problem: tunnel could not be build!");
|
|
|
DEBUG(ai,0)("[AiNew - BuildPath] We have a serious problem: tunnel could not be built!");
|
|
|
return 0;
|
|
|
}
|
|
|
return cost;
|
|
|
}
|
|
|
// Bridge code
|
|
|
if ((AI_PATHFINDER_FLAG_BRIDGE & route_extra[part]) != 0) {
|
|
|
cost += AiNew_Build_Bridge(p, route[part], route[part-1], flag);
|
|
|
PathFinderInfo->position++;
|
|
|
// TODO: problems!
|
|
|
if (CmdFailed(cost)) {
|
|
|
DEBUG(ai,0)("[AiNew - BuildPath] We have a serious problem: bridge could not be build!");
|
|
|
DEBUG(ai,0)("[AiNew - BuildPath] We have a serious problem: bridge could not be built!");
|
|
|
return 0;
|
|
|
}
|
|
|
return cost;
|
|
|
}
|
|
|
|
|
|
// Build normal rail
|
|
|
// Keep it doing till we go an other way
|
|
|
if (route_extra[part-1] == 0 && route_extra[part] == 0) {
|
|
|
if (route_extra[part - 1] == 0 && route_extra[part] == 0) {
|
|
|
while (route_extra[part] == 0) {
|
|
|
// Get the current direction
|
|
|
dir = AiNew_GetRailDirection(route[part-1], route[part], route[part+1]);
|
|
|
// Is it the same as the last one?
|
|
|
if (old_dir != -1 && old_dir != dir) break;
|
|
|
old_dir = dir;
|