87 return station + ::TileOffsByDiagDir(::ReverseDiagDir(::GetRoadStopDir(station))); |
87 return station + ::TileOffsByDiagDir(::ReverseDiagDir(::GetRoadStopDir(station))); |
88 } |
88 } |
89 |
89 |
90 /* static */ bool AIRoad::BuildRoad(TileIndex start, TileIndex end) |
90 /* static */ bool AIRoad::BuildRoad(TileIndex start, TileIndex end) |
91 { |
91 { |
|
92 if (start == end) return false; |
92 if (!::IsValidTile(start)) return false; |
93 if (!::IsValidTile(start)) return false; |
93 if (!::IsValidTile(end)) return false; |
94 if (!::IsValidTile(end)) return false; |
94 if (start == end) return false; |
|
95 /* Not on one line */ |
95 /* Not on one line */ |
96 if (TileX(start) != TileX(end) && |
96 if (TileX(start) != TileX(end) && |
97 TileY(start) != TileY(end)) return false; |
97 TileY(start) != TileY(end)) return false; |
98 |
98 |
99 return AIObject::DoCommand(end, start, (TileY(start) != TileY(end) ? 4 : 0) | (start < end ? 1 : 2) | (ROADTYPE_ROAD << 3), CMD_BUILD_LONG_ROAD); |
99 return AIObject::DoCommand(end, start, (TileY(start) != TileY(end) ? 4 : 0) | (start < end ? 1 : 2) | (ROADTYPE_ROAD << 3), CMD_BUILD_LONG_ROAD); |
100 } |
100 } |
101 |
101 |
102 /* static */ bool AIRoad::BuildRoadFull(TileIndex start, TileIndex end) |
102 /* static */ bool AIRoad::BuildRoadFull(TileIndex start, TileIndex end) |
103 { |
103 { |
|
104 if (start == end) return false; |
104 if (!::IsValidTile(start)) return false; |
105 if (!::IsValidTile(start)) return false; |
105 if (!::IsValidTile(end)) return false; |
106 if (!::IsValidTile(end)) return false; |
106 if (start == end) return false; |
|
107 /* Not on one line */ |
107 /* Not on one line */ |
108 if (TileX(start) != TileX(end) && |
108 if (TileX(start) != TileX(end) && |
109 TileY(start) != TileY(end)) return false; |
109 TileY(start) != TileY(end)) return false; |
110 |
110 |
111 return AIObject::DoCommand(end, start, (TileY(start) != TileY(end) ? 4 : 0) | (start < end ? 2 : 1), CMD_BUILD_LONG_ROAD); |
111 return AIObject::DoCommand(end, start, (TileY(start) != TileY(end) ? 4 : 0) | (start < end ? 2 : 1), CMD_BUILD_LONG_ROAD); |
112 } |
112 } |
113 |
113 |
114 /* static */ bool AIRoad::BuildRoadDepot(TileIndex tile, TileIndex front) |
114 /* static */ bool AIRoad::BuildRoadDepot(TileIndex tile, TileIndex front) |
115 { |
115 { |
|
116 if (tile == front) return false; |
116 if (!::IsValidTile(tile)) return false; |
117 if (!::IsValidTile(tile)) return false; |
117 if (!::IsValidTile(front)) return false; |
118 if (!::IsValidTile(front)) return false; |
118 if (tile == front) return false; |
|
119 |
119 |
120 uint entrance_dir = (TileX(tile) == TileX(front)) ? (TileY(tile) < TileY(front) ? 1 : 3) : (TileX(tile) < TileX(front) ? 2 : 0); |
120 uint entrance_dir = (TileX(tile) == TileX(front)) ? (TileY(tile) < TileY(front) ? 1 : 3) : (TileX(tile) < TileX(front) ? 2 : 0); |
121 |
121 |
122 return AIObject::DoCommand(tile, entrance_dir, ROADTYPE_ROAD << 2, CMD_BUILD_ROAD_DEPOT); |
122 return AIObject::DoCommand(tile, entrance_dir, ROADTYPE_ROAD << 2, CMD_BUILD_ROAD_DEPOT); |
123 } |
123 } |
124 |
124 |
125 /* static */ bool AIRoad::BuildRoadStation(TileIndex tile, TileIndex front, bool truck, bool drive_through) |
125 /* static */ bool AIRoad::BuildRoadStation(TileIndex tile, TileIndex front, bool truck, bool drive_through) |
126 { |
126 { |
|
127 if (tile == front) return false; |
127 if (!::IsValidTile(tile)) return false; |
128 if (!::IsValidTile(tile)) return false; |
128 if (!::IsValidTile(front)) return false; |
129 if (!::IsValidTile(front)) return false; |
129 if (tile == front) return false; |
|
130 |
130 |
131 uint entrance_dir; |
131 uint entrance_dir; |
132 if (drive_through) { |
132 if (drive_through) { |
133 entrance_dir = TileY(tile) != TileY(front); |
133 entrance_dir = TileY(tile) != TileY(front); |
134 } else { |
134 } else { |