src/ai/api/ai_road.cpp
branchnoai
changeset 9803 c86d5834fb11
parent 9801 03a3eebd7fb7
child 9833 89a64246458f
equal deleted inserted replaced
9802:1095a6d029ed 9803:c86d5834fb11
    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 {