-
-
Save SamuXarick/01f2d14c3248dd741c644f1215881d6c to your computer and use it in GitHub Desktop.
The error is when calculating the inner area... Line 89
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::AreTilesQueued(min_noise_level_increase = null) | |
{ | |
if (min_noise_level_increase == null) min_noise_level_increase = GSController.GetSetting("min_noise_level_increase"); | |
local distance_outer = min_noise_level_increase == 1 ? _max_dist : min(_max_dist, GetMaxNoiseToleranceLevelDistance(min_noise_level_increase)); | |
local distance_inner = min(_max_dist, GetMinNoiseToleranceLevelDistance(min_noise_level_increase)); | |
if (!AreTileVariablesInitialized()) { | |
local town_location_x = GetTileX(_town_location); | |
local town_location_y = GetTileY(_town_location); | |
local tile_Nx_outer = max(_min_x, town_location_x - distance_outer - (_noisiest_airport_width - 1)); | |
local tile_Ny_outer = max(_min_y, town_location_y - distance_outer - (_noisiest_airport_height - 1)); | |
local tile_Wx_outer = min(_max_x, town_location_x + distance_outer); | |
local tile_Wy_outer = max(_min_y, town_location_y - distance_outer - (_noisiest_airport_height - 1)); | |
local tile_Sx_outer = min(_max_x, town_location_x + distance_outer); | |
local tile_Sy_outer = min(_max_y, town_location_y + distance_outer); | |
local tile_Ex_outer = max(_min_x, town_location_x - distance_outer - (_noisiest_airport_width - 1)); | |
local tile_Ey_outer = min(_max_y, town_location_y + distance_outer); | |
// local tile_N_outer = GSMap.GetTileIndex(tile_Nx_outer, tile_Ny_outer); | |
// local tile_W_outer = GSMap.GetTileIndex(tile_Wx_outer, tile_Wy_outer); | |
// local tile_S_outer = GSMap.GetTileIndex(tile_Sx_outer, tile_Sy_outer); | |
// local tile_E_outer = GSMap.GetTileIndex(tile_Ex_outer, tile_Ey_outer); | |
local tile_Nx_inner = max(_min_x, town_location_x - distance_inner / 2 - (_noisiest_airport_width - 1)); | |
local tile_Ny_inner = max(_min_y, town_location_y - distance_inner / 2 - (_noisiest_airport_height - 1)); | |
local tile_Wx_inner = min(_max_x, town_location_x + distance_inner / 2); | |
local tile_Wy_inner = max(_min_y, town_location_y - distance_inner / 2 - (_noisiest_airport_height - 1)); | |
local tile_Sx_inner = min(_max_x, town_location_x + distance_inner / 2); | |
local tile_Sy_inner = min(_max_y, town_location_y + distance_inner / 2); | |
local tile_Ex_inner = max(_min_x, town_location_x - distance_inner / 2 - (_noisiest_airport_width - 1)); | |
local tile_Ey_inner = min(_max_y, town_location_y + distance_inner / 2); | |
local tile_N_inner = GSMap.GetTileIndex(tile_Nx_inner, tile_Ny_inner); | |
local tile_W_inner = GSMap.GetTileIndex(tile_Wx_inner, tile_Wy_inner); | |
local tile_S_inner = GSMap.GetTileIndex(tile_Sx_inner, tile_Sy_inner); | |
local tile_E_inner = GSMap.GetTileIndex(tile_Ex_inner, tile_Ey_inner); | |
local virtual_Nx_outer = town_location_x - distance_outer - (_noisiest_airport_width - 1); | |
local virtual_Ny_outer = town_location_y - distance_outer - (_noisiest_airport_height - 1); | |
local virtual_Wx_outer = town_location_x + distance_outer; | |
local virtual_Wy_outer = town_location_y - distance_outer - (_noisiest_airport_height - 1); | |
local virtual_Sx_outer = town_location_x + distance_outer; | |
local virtual_Sy_outer = town_location_y + distance_outer; | |
local virtual_Ex_outer = town_location_x - distance_outer - (_noisiest_airport_width - 1); | |
local virtual_Ey_outer = town_location_y + distance_outer; | |
local virtual_Nx_inner = town_location_x - distance_inner / 2 - (_noisiest_airport_width - 1); | |
local virtual_Ny_inner = town_location_y - distance_inner / 2 - (_noisiest_airport_height - 1); | |
local virtual_Wx_inner = town_location_x + distance_inner / 2; | |
local virtual_Wy_inner = town_location_y - distance_inner / 2 - (_noisiest_airport_height - 1); | |
local virtual_Sx_inner = town_location_x + distance_inner / 2; | |
local virtual_Sy_inner = town_location_y + distance_inner / 2; | |
local virtual_Ex_inner = town_location_x - distance_inner / 2 - (_noisiest_airport_width - 1); | |
local virtual_Ey_inner = town_location_y + distance_inner / 2; | |
// PlaceSign(tile_N_outer, "tile_N_outer"); | |
// PlaceSign(tile_W_outer, "tile_W_outer"); | |
// PlaceSign(tile_S_outer, "tile_S_outer"); | |
// PlaceSign(tile_E_outer, "tile_E_outer"); | |
PlaceSign(tile_N_inner, "tile_N_inner", true); | |
PlaceSign(tile_W_inner, "tile_W_inner", true); | |
PlaceSign(tile_S_inner, "tile_S_inner", true); | |
PlaceSign(tile_E_inner, "tile_E_inner", true); | |
local diff_Nx = tile_Nx_outer - virtual_Nx_outer; | |
local diff_Ny = tile_Ny_outer - virtual_Ny_outer; | |
local diff_Wx = virtual_Wx_outer - tile_Wx_outer; | |
local diff_Wy = tile_Wy_outer - virtual_Wy_outer; | |
local diff_Sx = virtual_Sx_outer - tile_Sx_outer; | |
local diff_Sy = virtual_Sy_outer - tile_Sy_outer; | |
local diff_Ex = tile_Ex_outer - virtual_Ex_outer; | |
local diff_Ey = virtual_Ey_outer - tile_Ey_outer; | |
local min_diff = min(diff_Nx, min(diff_Ny, min(diff_Wx, min(diff_Wy, min(diff_Sx, min(diff_Sy, min(diff_Ex, diff_Ey))))))); | |
GSLog.Info("virtual_N_outer = " + virtual_Nx_outer + "," + virtual_Ny_outer + " ; virtual_W_outer = " + virtual_Wx_outer + "," + virtual_Wy_outer + " ; virtual_S_outer = " + virtual_Sx_outer + "," + virtual_Sy_outer + " ; virtual_E_outer = " + virtual_Ex_outer + "," + virtual_Ey_outer); | |
virtual_Nx_outer += min_diff; | |
virtual_Ny_outer += min_diff; | |
virtual_Wx_outer -= min_diff; | |
virtual_Wy_outer += min_diff; | |
virtual_Sx_outer -= min_diff; | |
virtual_Sy_outer -= min_diff; | |
virtual_Ex_outer += min_diff; | |
virtual_Ey_outer -= min_diff; | |
local area_outer = (tile_Sx_outer - tile_Nx_outer + 1) * (tile_Sy_outer - tile_Ny_outer + 1); | |
local area_inner = (((min(tile_Sx_inner - 1, _max_x)) - (max(tile_Nx_inner + 1, _min_x)) + 1) * ((min(tile_Sy_inner - 1, _max_y)) - (max(tile_Ny_inner + 1, _min_y)) + 1)); | |
local tile_map = area_outer - area_inner; | |
GSLog.Info("tile_N_outer = " + tile_Nx_outer + "," + tile_Ny_outer + " ; tile_W_outer = " + tile_Wx_outer + "," + tile_Wy_outer + " ; tile_S_outer = " + tile_Sx_outer + "," + tile_Sy_outer + " ; tile_E_outer = " + tile_Ex_outer + "," + tile_Ey_outer); | |
GSLog.Info("virtual_N_outer = " + virtual_Nx_outer + "," + virtual_Ny_outer + " ; virtual_W_outer = " + virtual_Wx_outer + "," + virtual_Wy_outer + " ; virtual_S_outer = " + virtual_Sx_outer + "," + virtual_Sy_outer + " ; virtual_E_outer = " + virtual_Ex_outer + "," + virtual_Ey_outer); | |
GSLog.Info("tile_N_inner = " + tile_Nx_inner + "," + tile_Ny_inner + " ; tile_S_inner = " + tile_Sx_inner + "," + tile_Sy_inner); | |
// GSLog.Info("virtual_N_inner = " + virtual_Nx_inner + "," + virtual_Ny_inner + " ; virtual_W_inner = " + virtual_Wx_inner + "," + virtual_Wy_inner + " ; virtual_S_inner = " + virtual_Sx_inner + "," + virtual_Sy_inner + " ; virtual_E_inner = " + virtual_Ex_inner + "," + virtual_Ey_inner); | |
GSLog.Info("diff_Nx = " + diff_Nx + "; diff_Wx = " + diff_Wx + "; diff_Sx = " + diff_Sx + "; diff_Ex = " + diff_Ex); | |
GSLog.Info("diff_Ny = " + diff_Ny + "; diff_Wy = " + diff_Wy + "; diff_Sy = " + diff_Sy + "; diff_Ey = " + diff_Ey); | |
GSLog.Info("min_diff = " + min_diff); | |
assert(abs(virtual_Nx_outer - virtual_Wx_outer) == abs(virtual_Sx_outer - virtual_Ex_outer)); | |
assert(abs(virtual_Ny_outer - virtual_Ey_outer) == abs(virtual_Sy_outer - virtual_Wy_outer)); | |
_tile = { | |
/* Current tile in iteration */ | |
x = virtual_Nx_outer, | |
y = virtual_Ny_outer | |
/* North corner */ | |
N = { | |
x = virtual_Nx_outer, | |
y = virtual_Ny_outer | |
}, | |
/* West corner */ | |
W = { | |
x = virtual_Wx_outer, | |
y = virtual_Wy_outer | |
}, | |
/* South Corner */ | |
S = { | |
x = virtual_Sx_outer, | |
y = virtual_Sy_outer | |
}, | |
/* East Corner */ | |
E = { | |
x = virtual_Ex_outer, | |
y = virtual_Ey_outer | |
}, | |
min_x = tile_Nx_outer, | |
max_x = tile_Sx_outer, | |
min_y = tile_Ny_outer, | |
max_y = tile_Sy_outer, | |
map = tile_map | |
}; | |
// GSController.Break(""); | |
} | |
if ((_tile.N.x < _tile.W.x || _tile.W.y < _tile.S.y || _tile.S.x > _tile.E.x || _tile.E.y > _tile.N.y)) { | |
GSLog.Info("_tile.N = " + _tile.N.x + "," + _tile.N.y + " ; _tile.W = " + _tile.W.x + "," + _tile.W.y + " ; _tile.S = " + _tile.S.x + "," + _tile.S.y + " ; _tile.E = " + _tile.E.x + "," + _tile.E.y); | |
local old_n = _tile_num; | |
/* Walk N -> W */ | |
while (_tile.x <= _tile.W.x) { | |
if (_tile.x >= _tile.min_x && _tile.x <= _tile.max_x && _tile.y >= _tile.min_y && _tile.y <= _tile.max_y && !_tile_queue.HasItem(GSMap.GetTileIndex(_tile.x, _tile.y))) { | |
EvaluateTile(GSMap.GetTileIndex(_tile.x, _tile.y)); | |
GSLog.Info("_tile_num = " + _tile_num + "; _tile = " + GSMap.GetTileIndex(_tile.x, _tile.y) + "; tileX = " + _tile.x + "; tileX_W = " + _tile.W.x); | |
PlaceSign(GSMap.GetTileIndex(_tile.x, _tile.y), "" + _tile_num); | |
} | |
if ((_tile.x + 1) > _tile.W.x) break; | |
_tile.x++; | |
} | |
_tile.N.x++; | |
_tile.N.y++; | |
if (_tile.N.x >= _tile.min_x && _tile.N.x <= _tile.max_x && _tile.N.y >= _tile.min_y && _tile.N.y <= _tile.max_y) PlaceSign(GSMap.GetTileIndex(_tile.N.x, _tile.N.y), "_tile.N"); | |
GSController.Break("_tile.N.x = " + _tile.N.x + "; _tile.N.y = " + _tile.N.y); | |
/* Walk W -> S */ | |
while (_tile.y <= _tile.S.y) { | |
if (_tile.x >= _tile.min_x && _tile.x <= _tile.max_x && _tile.y >= _tile.min_y && _tile.y <= _tile.max_y && !_tile_queue.HasItem(GSMap.GetTileIndex(_tile.x, _tile.y))) { | |
EvaluateTile(GSMap.GetTileIndex(_tile.x, _tile.y)); | |
GSLog.Info("_tile_num = " + _tile_num + "; _tile = " + GSMap.GetTileIndex(_tile.x, _tile.y) + "; tileY = " + _tile.y + "; tileY_S = " + _tile.S.y); | |
PlaceSign(GSMap.GetTileIndex(_tile.x, _tile.y), "" + _tile_num); | |
} | |
if ((_tile.y + 1) > _tile.S.y) break; | |
_tile.y++; | |
} | |
_tile.W.x--; | |
_tile.W.y++; | |
if (_tile.W.x >= _tile.min_x && _tile.W.x <= _tile.max_x && _tile.W.y >= _tile.min_y && _tile.W.y <= _tile.max_y) PlaceSign(GSMap.GetTileIndex(_tile.W.x, _tile.W.y), "_tile.W"); | |
GSController.Break("_tile.W.x = " + _tile.W.x + "; _tile.W.y = " + _tile.W.y); | |
/* Walk S -> E */ | |
while (_tile.x >= _tile.E.x) { | |
if (_tile.x >= _tile.min_x && _tile.x <= _tile.max_x && _tile.y >= _tile.min_y && _tile.y <= _tile.max_y && !_tile_queue.HasItem(GSMap.GetTileIndex(_tile.x, _tile.y))) { | |
EvaluateTile(GSMap.GetTileIndex(_tile.x, _tile.y)); | |
GSLog.Info("_tile_num = " + _tile_num + "; _tile = " + GSMap.GetTileIndex(_tile.x, _tile.y) + "; tileX = " + _tile.x + "; tileX_E = " + _tile.E.x); | |
PlaceSign(GSMap.GetTileIndex(_tile.x, _tile.y), "" + _tile_num); | |
} | |
if ((_tile.x - 1) < _tile.E.x) break; | |
_tile.x--; | |
} | |
_tile.S.x--; | |
_tile.S.y--; | |
if (_tile.S.x >= _tile.min_x && _tile.S.x <= _tile.max_x && _tile.S.y >= _tile.min_y && _tile.S.y <= _tile.max_y) PlaceSign(GSMap.GetTileIndex(_tile.S.x, _tile.S.y), "_tile.S"); | |
GSController.Break("_tile.S.x = " + _tile.S.x + "; _tile.S.y = " + _tile.S.y); | |
/* Walk E -> N */ | |
while (_tile.y >= _tile.N.y) { | |
if (_tile.x >= _tile.min_x && _tile.x <= _tile.max_x && _tile.y >= _tile.min_y && _tile.y <= _tile.max_y && !_tile_queue.HasItem(GSMap.GetTileIndex(_tile.x, _tile.y))) { | |
EvaluateTile(GSMap.GetTileIndex(_tile.x, _tile.y)); | |
GSLog.Info("_tile_num = " + _tile_num + "; _tile = " + GSMap.GetTileIndex(_tile.x, _tile.y) + "; tileY = " + _tile.y + "; tileY_N = " + _tile.N.y); | |
PlaceSign(GSMap.GetTileIndex(_tile.x, _tile.y), "" + _tile_num); | |
} | |
if ((_tile.y - 1) < _tile.N.y) break; | |
_tile.y--; | |
} | |
_tile.E.x++; | |
_tile.E.y--; | |
if (_tile.E.x >= _tile.min_x && _tile.E.x <= _tile.max_x && _tile.E.y >= _tile.min_y && _tile.E.y <= _tile.max_y) PlaceSign(GSMap.GetTileIndex(_tile.E.x, _tile.E.y), "_tile.E"); | |
GSController.Break("_tile.E.x = " + _tile.E.x + "; _tile.E.y = " + _tile.E.y); | |
local added = _tile_num - old_n; | |
GSLog.Info("_tile.map: " + _tile.map + "; _tile_num: " + _tile_num + "; added: " + added + "; " + (_tile_num * 100 / _tile.map) + "% queued"); | |
} else { | |
assert(_tile_num == _tile_queue.Count()); | |
} | |
return _tile_num == _tile.map; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment