-
-
Save SamuXarick/2e70e77b4f049fc258866cc4ccd0a31d to your computer and use it in GitHub Desktop.
My attempt at creating a "circular tile search"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function MainClass::GetAirportMinDistanceToTown(tile, size_x, size_y) | |
{ | |
local perimeter_min_x = GetTileX(tile); | |
local perimeter_min_y = GetTileY(tile); | |
local perimeter_max_x = perimeter_min_x + size_x - 1; | |
local perimeter_max_y = perimeter_min_y + size_y - 1; | |
local mindist = _map_size_x + _map_size_y; | |
for (local w = perimeter_min_x; w <= perimeter_max_x; w++) { | |
for (local h = perimeter_min_y; h <= perimeter_max_y; h++) { | |
local cur_tile = GSMap.GetTileIndex(w, h); | |
if (!GSMap.IsValidTile(cur_tile)) return _map_size_x + _map_size_y; | |
if (GetTileX(cur_tile) == perimeter_min_x || GetTileX(cur_tile) == perimeter_max_x || GetTileY(cur_tile) == perimeter_min_y || GetTileY(cur_tile) == perimeter_max_y) { | |
local dist = GSTown.GetDistanceManhattanToTile(_town, cur_tile); | |
if (mindist > dist) mindist = dist; | |
} | |
} | |
} | |
// GSLog.Info("tile: " + tile + "; size_x: " + size_x + "; size_y: " + size_y + "; mindist: " + mindist); | |
return mindist; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if (GetTileX(_tile_N) < GetTileX(_tile_W) && GetTileY(_tile_W) < GetTileY(_tile_S) && GetTileX(_tile_S) > GetTileX(_tile_E) && GetTileY(_tile_E) > GetTileY(_tile_N)) { | |
// GSLog.Info("_tile_N = " + _tile_N + "; _tile_W = " + _tile_W + "; _tile_S = " + _tile_S + "; _tile_E = " + _tile_E); | |
local old_n = _tile_num; | |
while (GetTileX(_tile) <= GetTileX(_tile_W)) { | |
if (!_tile_queue.HasItem(_tile)) { | |
if (GetAirportMinDistanceToTown(_tile, _noisiest_airport_width, _noisiest_airport_height) <= distance) { | |
_tile_queue.AddItem(_tile, _tile_num++); | |
} else { | |
_map_size--; | |
} | |
// GSLog.Info("_tile_num = " + _tile_num + "; _tile = " + _tile + "; tileX = " + GetTileX(_tile) + "; tileX_W = " + GetTileX(_tile_W)); | |
// GSSign.BuildSign(_tile, "" + _tile_num); | |
} | |
if (GetTileX(_tile) + 1 > GetTileX(_tile_W)) break; | |
_tile = GSMap.GetTileIndex(GetTileX(_tile) + 1, GetTileY(_tile)); | |
} | |
_tile_N = GSMap.GetTileIndex(GetTileX(_tile_N) + 1, GetTileY(_tile_N) + 1); | |
// GSCompanyMode(_company) && GSSign.BuildSign(_tile_N, "_tile_N"); | |
// GSController.Break("tileX_N = " + GetTileX(_tile_N) + "; tileY_N = " + GetTileY(_tile_N)); | |
while (GetTileY(_tile) <= GetTileY(_tile_S)) { | |
if (!_tile_queue.HasItem(_tile)) { | |
if (GetAirportMinDistanceToTown(_tile, _noisiest_airport_width, _noisiest_airport_height) <= distance) { | |
_tile_queue.AddItem(_tile, _tile_num++); | |
} else { | |
_map_size--; | |
} | |
// GSLog.Info("_tile_num = " + _tile_num + "; _tile = " + _tile + "; tileY = " + GetTileY(_tile) + "; tileY_S = " + GetTileY(_tile_S)); | |
// GSSign.BuildSign(_tile, "" + _tile_num); | |
} | |
if (GetTileY(_tile) + 1 > GetTileY(_tile_S)) break; | |
_tile = GSMap.GetTileIndex(GetTileX(_tile), GetTileY(_tile) + 1); | |
} | |
_tile_W = GSMap.GetTileIndex(GetTileX(_tile_W) - 1, GetTileY(_tile_W) + 1); | |
// GSCompanyMode(_company) && GSSign.BuildSign(_tile_W, "_tile_W"); | |
// GSController.Break("tileX_W = " + GetTileX(_tile_W) + "; tileY_W = " + GetTileY(_tile_W)); | |
while (GetTileX(_tile) >= GetTileX(_tile_E)) { | |
if (!_tile_queue.HasItem(_tile)) { | |
if (GetAirportMinDistanceToTown(_tile, _noisiest_airport_width, _noisiest_airport_height) <= distance) { | |
_tile_queue.AddItem(_tile, _tile_num++); | |
} else { | |
_map_size--; | |
} | |
// GSLog.Info("_tile_num = " + _tile_num + "; _tile = " + _tile + "; tileX = " + GetTileX(_tile) + "; tileX_E = " + GetTileX(_tile_E)); | |
// GSSign.BuildSign(_tile, "" + _tile_num); | |
} | |
if (GetTileX(_tile) - 1 < GetTileX(_tile_E)) break; | |
_tile = GSMap.GetTileIndex(GetTileX(_tile) - 1, GetTileY(_tile)); | |
} | |
_tile_S = GSMap.GetTileIndex(GetTileX(_tile_S) - 1, GetTileY(_tile_S) - 1); | |
// GSCompanyMode(_company) && GSSign.BuildSign(_tile_S, "_tile_S"); | |
// GSController.Break("tileX_S = " + GetTileX(_tile_S) + "; tileY_S = " + GetTileY(_tile_S)); | |
while (GetTileY(_tile) >= GetTileY(_tile_N)) { | |
if (!_tile_queue.HasItem(_tile)) { | |
if (GetAirportMinDistanceToTown(_tile, _noisiest_airport_width, _noisiest_airport_height) <= distance) { | |
_tile_queue.AddItem(_tile, _tile_num++); | |
} else { | |
_map_size--; | |
} | |
// GSLog.Info("_tile_num = " + _tile_num + "; _tile = " + _tile + "; tileY = " + GetTileY(_tile) + "; tileY_N = " + GetTileY(_tile_N)); | |
// GSSign.BuildSign(_tile, "" + _tile_num); | |
} | |
if (GetTileY(_tile) - 1 < GetTileY(_tile_N)) break; | |
_tile = GSMap.GetTileIndex(GetTileX(_tile), GetTileY(_tile) - 1); | |
} | |
_tile_E = GSMap.GetTileIndex(GetTileX(_tile_E) + 1, GetTileY(_tile_E) - 1); | |
// GSCompanyMode(_company) && GSSign.BuildSign(_tile_E, "_tile_E"); | |
// GSController.Break("tileX_E = " + GetTileX(_tile_E) + "; tileY_E = " + GetTileY(_tile_E)); | |
local added = _tile_num - old_n; | |
GSLog.Info("old_n: " + old_n + "; _tile_num: " + _tile_num + "; added: " + added + "; " + (_tile_num * 100 / _map_size) + "% queued"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment