Loading

Find "outlet roads" in ci

  1. function TilesInCity(city)
  2. {
  3.     tiles = AITileList();
  4.     neighbors = AITileList();
  5.  
  6.     function AddNeighbor(tile)
  7.     {
  8.         if ( AITown.IsWithinTownInfuence(city, tile) )
  9.         {
  10.             neighbors.AddTile(tile);
  11.             tiles.AddTile(tile);
  12.         }
  13.     }
  14.  
  15.     while ( neighbors.Count() > 0 )
  16.     {
  17.         t = neighbors.Begin();
  18.         neighbors.RemoveTop(1);
  19.  
  20.         // orthogonals
  21.         AddNeighbor(tile - AIMap.GetTileIndex(1,0));
  22.         AddNeighbor(tile - AIMap.GetTileIndex(0,1));
  23.         AddNeighbor(tile - AIMap.GetTileIndex(-1,0));
  24.         AddNeighbor(tile - AIMap.GetTileIndex(0,-1));
  25.     }
  26.  
  27.     return tiles;
  28. }
  29.  
  30. function CityOutletRoads(city)
  31. {
  32.     outlets = AITileList();
  33.  
  34.     function IsOutlet(tile)
  35.     {
  36.         if ( !AIRoad.IsRoadTile(tile) )
  37.             return false;
  38.  
  39.         neighbors = [
  40.             tile - AIMap.GetTileIndex(1,0),
  41.             tile - AIMap.GetTileIndex(1,1),
  42.             tile - AIMap.GetTileIndex(0,1)
  43.             tile - AIMap.GetTileIndex(0,0)
  44.         ];
  45.  
  46.         neighboringRoads = 0;
  47.  
  48.         foreach ( tile in neighbors )
  49.         {
  50.             if ( !AITile.IsBuildable(tile) )
  51.                 return false;
  52.  
  53.             if ( AIRoad.IsRoadTile(tile) )
  54.                 neighboringRoads++;
  55.         }
  56.  
  57.         return neighboringRoads == 1;
  58.     }
  59.  
  60.     foreach ( tile, val in TilesInCity(city) )
  61.     {
  62.         if ( IsOutlet(tile) )
  63.             outlets.AddTile(tile);
  64.     }
  65.  
  66.     return outlets;
  67. }

Comments