Merge pull request #14868 from Gymnasiast/refactor/reduce-g-game-command-error-text

Reduce usage of gGameCommandErrorText
This commit is contained in:
Michael Steenbeek 2021-06-10 13:21:32 +02:00 committed by GitHub
commit f9ad9ad3a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 34 deletions

View File

@ -176,14 +176,14 @@ static bool window_editor_bottom_toolbar_check_object_selection()
{
rct_window* w;
ObjectType missingObjectType = Editor::CheckObjectSelection();
auto [missingObjectType, errorString] = Editor::CheckObjectSelection();
if (missingObjectType == ObjectType::None)
{
window_close_by_class(WC_EDITOR_OBJECT_SELECTION);
return true;
}
context_show_error(STR_INVALID_SELECTION_OF_OBJECTS, gGameCommandErrorText, {});
context_show_error(STR_INVALID_SELECTION_OF_OBJECTS, errorString, {});
w = window_find_by_class(WC_EDITOR_OBJECT_SELECTION);
if (w != nullptr)
{
@ -219,7 +219,8 @@ void window_editor_bottom_toolbar_jump_forward_from_object_selection()
*/
void window_editor_bottom_toolbar_jump_forward_to_invention_list_set_up()
{
if (Editor::CheckPark())
auto [checksPassed, errorString] = Editor::CheckPark();
if (checksPassed)
{
window_close_all();
context_open_window(WC_EDITOR_INVENTION_LIST);
@ -227,7 +228,7 @@ void window_editor_bottom_toolbar_jump_forward_to_invention_list_set_up()
}
else
{
context_show_error(STR_CANT_ADVANCE_TO_NEXT_EDITOR_STAGE, gGameCommandErrorText, {});
context_show_error(STR_CANT_ADVANCE_TO_NEXT_EDITOR_STAGE, errorString, {});
}
gfx_invalidate_screen();

View File

@ -453,7 +453,7 @@ namespace Editor
*
* rct2: 0x006AB9B8
*/
ObjectType CheckObjectSelection()
std::pair<ObjectType, rct_string_id> CheckObjectSelection()
{
bool isTrackDesignerManager = gScreenFlags & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER);
@ -461,52 +461,46 @@ namespace Editor
{
if (!editor_check_object_group_at_least_one_selected(ObjectType::Paths))
{
gGameCommandErrorText = STR_AT_LEAST_ONE_PATH_OBJECT_MUST_BE_SELECTED;
return ObjectType::Paths;
return { ObjectType::Paths, STR_AT_LEAST_ONE_PATH_OBJECT_MUST_BE_SELECTED };
}
}
if (!editor_check_object_group_at_least_one_selected(ObjectType::Ride))
{
gGameCommandErrorText = STR_AT_LEAST_ONE_RIDE_OBJECT_MUST_BE_SELECTED;
return ObjectType::Ride;
return { ObjectType::Ride, STR_AT_LEAST_ONE_RIDE_OBJECT_MUST_BE_SELECTED };
}
if (!isTrackDesignerManager)
{
if (!editor_check_object_group_at_least_one_selected(ObjectType::ParkEntrance))
{
gGameCommandErrorText = STR_PARK_ENTRANCE_TYPE_MUST_BE_SELECTED;
return ObjectType::ParkEntrance;
return { ObjectType::ParkEntrance, STR_PARK_ENTRANCE_TYPE_MUST_BE_SELECTED };
}
if (!editor_check_object_group_at_least_one_selected(ObjectType::Water))
{
gGameCommandErrorText = STR_WATER_TYPE_MUST_BE_SELECTED;
return ObjectType::Water;
return { ObjectType::Water, STR_WATER_TYPE_MUST_BE_SELECTED };
}
}
return ObjectType::None;
return { ObjectType::None, STR_NONE };
}
/**
*
* rct2: 0x0066FEAC
*/
bool CheckPark()
std::pair<bool, rct_string_id> CheckPark()
{
int32_t parkSize = park_calculate_size();
if (parkSize == 0)
{
gGameCommandErrorText = STR_PARK_MUST_OWN_SOME_LAND;
return false;
return { false, STR_PARK_MUST_OWN_SOME_LAND };
}
if (gParkEntrances.empty())
{
gGameCommandErrorText = STR_NO_PARK_ENTRANCES;
return false;
return { false, STR_NO_PARK_ENTRANCES };
}
for (const auto& parkEntrance : gParkEntrances)
@ -516,12 +510,10 @@ namespace Editor
switch (footpath_is_connected_to_map_edge(parkEntrance, direction, 0))
{
case FOOTPATH_SEARCH_NOT_FOUND:
gGameCommandErrorText = STR_PARK_ENTRANCE_WRONG_DIRECTION_OR_NO_PATH;
return false;
return { false, STR_PARK_ENTRANCE_WRONG_DIRECTION_OR_NO_PATH };
case FOOTPATH_SEARCH_INCOMPLETE:
case FOOTPATH_SEARCH_TOO_COMPLEX:
gGameCommandErrorText = STR_PARK_ENTRANCE_PATH_INCOMPLETE_OR_COMPLEX;
return false;
return { false, STR_PARK_ENTRANCE_PATH_INCOMPLETE_OR_COMPLEX };
case FOOTPATH_SEARCH_SUCCESS:
// Run the search again and unown the path
footpath_is_connected_to_map_edge(parkEntrance, direction, (1 << 5));
@ -531,11 +523,10 @@ namespace Editor
if (gPeepSpawns.empty())
{
gGameCommandErrorText = STR_PEEP_SPAWNS_NOT_SET;
return false;
return { false, STR_PEEP_SPAWNS_NOT_SET };
}
return true;
return { true, STR_NONE };
}
uint8_t GetSelectedObjectFlags(ObjectType objectType, size_t index)

View File

@ -21,8 +21,8 @@ namespace Editor
void LoadTrackManager();
bool LoadLandscape(const utf8* path);
bool CheckPark();
ObjectType CheckObjectSelection();
std::pair<bool, rct_string_id> CheckPark();
std::pair<ObjectType, rct_string_id> CheckObjectSelection();
void OpenWindowsForCurrentStep();

View File

@ -313,14 +313,14 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertExecute(GameActions::
uint8_t crossingMode = (_type & FOOTPATH_ELEMENT_INSERT_QUEUE) || (_slope != TILE_ELEMENT_SLOPE_FLAT)
? CREATE_CROSSING_MODE_NONE
: CREATE_CROSSING_MODE_PATH_OVER_TRACK;
if (!entrancePath
&& !map_can_construct_with_clear_at(
{ _loc, zLow, zHigh }, &map_place_non_scenery_clear_func, quarterTile, GAME_COMMAND_FLAG_APPLY | GetFlags(),
&res->Cost, crossingMode))
auto canBuild = MapCanConstructWithClearAt(
{ _loc, zLow, zHigh }, &map_place_non_scenery_clear_func, quarterTile, GAME_COMMAND_FLAG_APPLY | GetFlags(),
crossingMode);
if (!entrancePath && canBuild->Error != GameActions::Status::Ok)
{
return MakeResult(
GameActions::Status::NoClearance, STR_CANT_BUILD_FOOTPATH_HERE, gGameCommandErrorText, gCommonFormatArgs);
return canBuild;
}
res->Cost += canBuild->Cost;
gFootpathGroundFlags = gMapGroundFlags;