mirror of https://github.com/OpenTTD/OpenTTD
(svn r1998) Give penalty 100 to the AI for using foundations (buildonslopes). This prevents it from building long road lines on foundations unless really necessary.
parent
2d9611f948
commit
e76912303c
2
ai.h
2
ai.h
|
@ -37,6 +37,8 @@
|
||||||
#define AI_PATHFINDER_PENALTY 150
|
#define AI_PATHFINDER_PENALTY 150
|
||||||
// The penalty given to a tile that is going up
|
// The penalty given to a tile that is going up
|
||||||
#define AI_PATHFINDER_TILE_GOES_UP_PENALTY 450
|
#define AI_PATHFINDER_TILE_GOES_UP_PENALTY 450
|
||||||
|
// The penalty given to a tile which would have to use fundation
|
||||||
|
#define AI_PATHFINDER_FOUNDATION_PENALTY 100
|
||||||
// Changing direction is a penalty, to prevent curved ways (with that: slow ways)
|
// Changing direction is a penalty, to prevent curved ways (with that: slow ways)
|
||||||
#define AI_PATHFINDER_DIRECTION_CHANGE_PENALTY 200
|
#define AI_PATHFINDER_DIRECTION_CHANGE_PENALTY 200
|
||||||
// Same penalty, only for when road already exists
|
// Same penalty, only for when road already exists
|
||||||
|
|
|
@ -394,7 +394,11 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
|
||||||
}
|
}
|
||||||
|
|
||||||
// We should give a penalty when the tile is going up or down.. this is one way to do so!
|
// We should give a penalty when the tile is going up or down.. this is one way to do so!
|
||||||
// Too bad we have to count it from the parent.. but that is not so bad
|
// Too bad we have to count it from the parent.. but that is not so bad.
|
||||||
|
// We also dislike long routes on slopes, since they do not look too realistic
|
||||||
|
// when there is a flat land all around, they are more expensive to build, and
|
||||||
|
// especially they essentially block the ability to connect or cross the road
|
||||||
|
// from one side.
|
||||||
if (parent_ti.tileh != 0 && parent->path.parent != NULL) {
|
if (parent_ti.tileh != 0 && parent->path.parent != NULL) {
|
||||||
// Skip if the tile was from a bridge or tunnel
|
// Skip if the tile was from a bridge or tunnel
|
||||||
if (parent->path.node.user_data[0] == 0 && current->user_data[0] == 0) {
|
if (parent->path.node.user_data[0] == 0 && current->user_data[0] == 0) {
|
||||||
|
@ -403,12 +407,16 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
|
||||||
// Maybe is BRIDGE_NO_FOUNDATION a bit strange here, but it contains just the right information..
|
// Maybe is BRIDGE_NO_FOUNDATION a bit strange here, but it contains just the right information..
|
||||||
if (r >= 15 || (r == 0 && (BRIDGE_NO_FOUNDATION & (1 << ti.tileh)))) {
|
if (r >= 15 || (r == 0 && (BRIDGE_NO_FOUNDATION & (1 << ti.tileh)))) {
|
||||||
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
|
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
|
||||||
|
} else {
|
||||||
|
res += AI_PATHFINDER_FOUNDATION_PENALTY;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!(IsRoad(parent->path.node.tile) && IsTileType(parent->path.node.tile, MP_TUNNELBRIDGE))) {
|
if (!(IsRoad(parent->path.node.tile) && IsTileType(parent->path.node.tile, MP_TUNNELBRIDGE))) {
|
||||||
r = GetRoadFoundation(parent_ti.tileh, AiNew_GetRoadDirection(parent->path.parent->node.tile, parent->path.node.tile, current->tile));
|
r = GetRoadFoundation(parent_ti.tileh, AiNew_GetRoadDirection(parent->path.parent->node.tile, parent->path.node.tile, current->tile));
|
||||||
if (r >= 15 || r == 0)
|
if (r >= 15 || r == 0)
|
||||||
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
|
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
|
||||||
|
else
|
||||||
|
res += AI_PATHFINDER_FOUNDATION_PENALTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue