Add anywhere mode to ignore house zone scenario editor setting

See: #177
pull/182/head
Jonathan G Rennison 4 years ago
parent 348530b052
commit ce6cdc551f

@ -2010,6 +2010,10 @@ STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_HELPTEXT :Allow manually
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_GRF :Ignore house GRF restrictions: {STRING2}
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_GRF_HELPTEXT :Allow manually adding houses even if this is not permitted by the house GRF.
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_OFF :Off
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_WITHIN_TOWN :Within town
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_ANYWHERE :Anywhere
# Config errors
STR_CONFIG_ERROR :{WHITE}Error with the configuration file...
STR_CONFIG_ERROR_ARRAY :{WHITE}... error in array '{RAW_STRING}'

@ -663,7 +663,7 @@ struct DebugSettings {
struct ScenarioSettings {
bool multiple_buildings; ///< allow manually adding more than one church/stadium
bool house_ignore_dates; ///< allow manually adding houses regardless of date restrictions
bool house_ignore_zones; ///< allow manually adding houses regardless of zone restrictions
uint8 house_ignore_zones; ///< allow manually adding houses regardless of zone restrictions
bool house_ignore_grf; ///< allow manually adding houses regardless of GRF restrictions
};

@ -5341,12 +5341,18 @@ def = false
str = STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_DATES
strhelp = STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_DATES_HELPTEXT
[SDTC_BOOL]
[SDTC_VAR]
var = scenario.house_ignore_zones
type = SLE_UINT8
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
def = false
guiflags = SGF_MULTISTRING
def = 0
min = 0
max = 2
interval = 1
str = STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES
strhelp = STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_HELPTEXT
strval = STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_OFF
[SDTC_BOOL]
var = scenario.house_ignore_grf

@ -1959,7 +1959,7 @@ static void PlaceProc_House(TileIndex tile)
int best_zone = (int)HZB_BEGIN - 1;
for (const Town *t : Town::Iterate()) {
HouseZonesBits town_zone = TryGetTownRadiusGroup(t, tile);
if (HasBit(house_zones, town_zone) || (_settings_client.scenario.house_ignore_zones && town_zone != HZB_END)) {
if (HasBit(house_zones, town_zone) || (_settings_client.scenario.house_ignore_zones == 1 && town_zone != HZB_END) || _settings_client.scenario.house_ignore_zones == 2) {
/* If CTRL is NOT pressed keep only single town on the list, the best one.
* Otherwise add all towns to the list so they can be shown to the player. */
if (!_ctrl_pressed) {
@ -1979,6 +1979,13 @@ static void PlaceProc_House(TileIndex tile)
return;
}
if (towns.size() > 16 && _settings_client.scenario.house_ignore_zones == 2) {
std::sort(towns.begin(), towns.end(), [&](const TownID a, const TownID b) {
return DistanceSquare(tile, Town::Get(a)->xy) < DistanceSquare(tile, Town::Get(a)->xy);
});
towns.resize(16);
}
CommandContainer cmd = {
tile,
_cur_house, // p1 - house type and town index (town not yet set)

Loading…
Cancel
Save