src/ai/default/default.cpp
changeset 8005 2318a0547719
parent 7967 a230c063a672
child 8006 d56d68c938b5
equal deleted inserted replaced
8004:1c54bc6f4bdf 8005:2318a0547719
  1651 
  1651 
  1652 			j = p->attr;
  1652 			j = p->attr;
  1653 			k = 0;
  1653 			k = 0;
  1654 
  1654 
  1655 			// Build the rail
  1655 			// Build the rail
  1656 			for (i = 0; i != 6; i++, j >>= 1) {
  1656 			FOR_EACH_SET_BIT(i, j) {
  1657 				if (j & 1) {
  1657 				k = i;
  1658 					k = i;
  1658 				ret = DoCommand(c, railtype, i, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_SINGLE_RAIL);
  1659 					ret = DoCommand(c, railtype, i, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_SINGLE_RAIL);
  1659 				if (CmdFailed(ret)) return CMD_ERROR;
  1660 					if (CmdFailed(ret)) return CMD_ERROR;
  1660 				total_cost.AddCost(ret);
  1661 					total_cost.AddCost(ret);
       
  1662 				}
       
  1663 			}
  1661 			}
  1664 
  1662 
  1665 			/* signals too? */
  1663 			/* signals too? */
  1666 			if (j & 3) {
  1664 			if (j & 3) {
  1667 				// Can't build signals on a road.
  1665 				// Can't build signals on a road.
  2852 {
  2850 {
  2853 	AiRoadEnum are;
  2851 	AiRoadEnum are;
  2854 	TileIndex tile;
  2852 	TileIndex tile;
  2855 	DiagDirection dir = p->ai.cur_dir_a;
  2853 	DiagDirection dir = p->ai.cur_dir_a;
  2856 	uint32 bits;
  2854 	uint32 bits;
  2857 	int i;
       
  2858 
  2855 
  2859 	are.dest = p->ai.cur_tile_b;
  2856 	are.dest = p->ai.cur_tile_b;
  2860 	tile = TILE_MASK(p->ai.cur_tile_a + TileOffsByDiagDir(dir));
  2857 	tile = TILE_MASK(p->ai.cur_tile_a + TileOffsByDiagDir(dir));
  2861 
  2858 
  2862 	if (IsRoadStopTile(tile) || IsTileDepotType(tile, TRANSPORT_ROAD)) return false;
  2859 	if (IsRoadStopTile(tile) || IsTileDepotType(tile, TRANSPORT_ROAD)) return false;
  2863 	bits = GetTileTrackStatus(tile, TRANSPORT_ROAD, ROADTYPES_ROAD) & _ai_road_table_and[dir];
  2860 	bits = GetTileTrackStatus(tile, TRANSPORT_ROAD, ROADTYPES_ROAD) & _ai_road_table_and[dir];
  2864 	if (bits == 0) return false;
  2861 	if (bits == 0) return false;
  2865 
  2862 
  2866 	are.best_dist = (uint)-1;
  2863 	are.best_dist = (uint)-1;
  2867 
  2864 
  2868 	for_each_bit(i, bits) {
  2865 	uint i;
       
  2866 	FOR_EACH_SET_BIT(i, bits) {
  2869 		FollowTrack(tile, 0x3000 | TRANSPORT_ROAD, ROADTYPES_ROAD, (DiagDirection)_dir_by_track[i], (TPFEnumProc*)AiEnumFollowRoad, NULL, &are);
  2867 		FollowTrack(tile, 0x3000 | TRANSPORT_ROAD, ROADTYPES_ROAD, (DiagDirection)_dir_by_track[i], (TPFEnumProc*)AiEnumFollowRoad, NULL, &are);
  2870 	}
  2868 	}
  2871 
  2869 
  2872 	if (DistanceManhattan(tile, are.dest) <= are.best_dist) return false;
  2870 	if (DistanceManhattan(tile, are.dest) <= are.best_dist) return false;
  2873 
  2871