Loading

Revision differences

Old revision #phtxvttpaNew revision #p2xv8lx23
1function Utils::AreOtherStationsNearby(tile, cargoClass, stationId) {  1function Utils::getValidOffsetTile(tile, offsetX, offsetY) {
2    local stationType = cargoClass == AICargo.CC_PASSENGERS ? AIStation.STATION_BUS_STOP : AIStation.STATION_TRUCK_STOP;  2    local oldX = AIMap.GetTileX(tile);
   3    local oldY = AIMap.GetTileY(tile);
3     4     
4    //check if there are other stations squareSize squares nearby  4    local newX = oldX;
5    local squareSize = AIStation.GetCoverageRadius(stationType);  5    local newY = oldY;
6    if (stationId == null) {  6   
7        squareSize = squareSize * 2;  7    if (offsetX > 0) {
8    }  8        for (local x = offsetX; x > 0; x--) {
9  9            if (AIMap.IsValidTile(AIMap.GetTileIndex(newX + 1, newY))) {
10    local square = AITileList();  10                newX = newX + 1;
11    if(!AIController.GetSetting("is_friendly")) {  11            }
12        //dont care about enemy stations when is_friendly is off  12        }
13        square.AddRectangle(Utils.getValidOffsetTile(tile, (-1) * squareSize, (-1) * squareSize),  13    } else {
14            Utils.getValidOffsetTile(tile, squareSize, squareSize));  14        for (local x = offsetX; x < 0; x++) {
15  15            if (AIMap.IsValidTile(AIMap.GetTileIndex(newX - 1, newY))) {
16        //if another road station of mine is nearby return true  16                newX = newX - 1;
17        for(local tile = square.Begin(); square.HasNext(); tile = square.Next()) {  17            }
18            if(Utils.isTileMyRoadStation(tile, cargoClass)) { //negate second expression to merge your stations  18        }
19                return true;    
20            }    
21        }    
22    }    
23    else {    
24        square.AddRectangle(Utils.getValidOffsetTile(tile, (-1) * squareSize, (-1) * squareSize),    
25            Utils.getValidOffsetTile(tile, squareSize, squareSize));    
26    
27        //if any other station is nearby, except my own airports, return true    
28        for (local tile = square.Begin(); square.HasNext(); tile = square.Next()) {    
29            if(AITile.IsStationTile(tile)) {    
30                if (AITile.GetOwner(tile) != AICompany.ResolveCompanyID(AICompany.COMPANY_SELF)) {    
31                    return true;    
32                } else {    
33                    local stationTiles = AITileList_StationType(AIStation.GetStationID(tile), stationType);    
34                    if (stationTiles.HasItem(tile)) {    
35                        return true;    
36                    }    
37                }    
38            }    
39        }    
40    }    
41    
42    if(!((AITile.IsBuildable(tile) || AIRoad.IsRoadTile(tile)) && AITile.GetSlope(tile) == AITile.SLOPE_FLAT)) {    
43        return true;    
44    }  20    }  
45     21     
46    return false;  22    if (offsetY > 0) {
47}; 23        for (local y = offsetY; y > 0; y--) {
   24            if (AIMap.IsValidTile(AIMap.GetTileIndex(newX, newY + 1))) {
   25                newY = newY + 1;
   26            }
   27        }
   28    } else {
   29        for (local y = offsetY; y < 0; y++) {
   30            if (AIMap.IsValidTile(AIMap.GetTileIndex(newX, newY - 1))) {
   31                newY = newY - 1;
   32            }
   33        }
   34    }
   35   
   36    return AIMap.GetTileIndex(newX, newY);
   37}