1
0
Fork 0

Feature: Remove all industries button in scenario editor (#8550)

pull/8664/head
Kuhnovic 2021-02-10 16:35:50 +01:00 committed by GitHub
parent f1f281b318
commit 83ddb1501f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 81 additions and 25 deletions

View File

@ -37,6 +37,7 @@
#include "smallmap_gui.h" #include "smallmap_gui.h"
#include "widgets/dropdown_type.h" #include "widgets/dropdown_type.h"
#include "widgets/industry_widget.h" #include "widgets/industry_widget.h"
#include "clear_map.h"
#include "table/strings.h" #include "table/strings.h"
@ -244,6 +245,14 @@ static const NWidgetPart _nested_build_industry_widgets[] = {
NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN),
NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN),
EndContainer(), EndContainer(),
NWidget(NWID_SELECTION, COLOUR_DARK_GREEN, WID_DPI_SCENARIO_EDITOR_PANE),
NWidget(NWID_VERTICAL),
NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0),
SetDataTip(STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES, STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP),
NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_DPI_REMOVE_ALL_INDUSTRIES_WIDGET), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0),
SetDataTip(STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES, STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP),
EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_MATRIX, COLOUR_DARK_GREEN, WID_DPI_MATRIX_WIDGET), SetMatrixDataTip(1, 0, STR_FUND_INDUSTRY_SELECTION_TOOLTIP), SetFill(1, 0), SetResize(1, 1), SetScrollbar(WID_DPI_SCROLLBAR), NWidget(WWT_MATRIX, COLOUR_DARK_GREEN, WID_DPI_MATRIX_WIDGET), SetMatrixDataTip(1, 0, STR_FUND_INDUSTRY_SELECTION_TOOLTIP), SetFill(1, 0), SetResize(1, 1), SetScrollbar(WID_DPI_SCROLLBAR),
NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_DPI_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_DPI_SCROLLBAR),
@ -289,11 +298,6 @@ class BuildIndustryWindow : public Window {
this->enabled[i] = false; this->enabled[i] = false;
} }
if (_game_mode == GM_EDITOR) { // give room for the Many Random "button"
this->index[this->count] = INVALID_INDUSTRYTYPE;
this->enabled[this->count] = true;
this->count++;
}
/* Fill the arrays with industries. /* Fill the arrays with industries.
* The tests performed after the enabled allow to load the industries * The tests performed after the enabled allow to load the industries
* In the same way they are inserted by grf (if any) * In the same way they are inserted by grf (if any)
@ -392,6 +396,13 @@ public:
this->FinishInitNested(0); this->FinishInitNested(0);
this->SetButtons(); this->SetButtons();
/* Show scenario editor tools in editor. */
if (_game_mode != GM_EDITOR) {
auto *se_tools = this->GetWidget<NWidgetStacked>(WID_DPI_SCENARIO_EDITOR_PANE);
se_tools->SetDisplayedPlane(SZSP_HORIZONTAL);
this->ReInit();
}
} }
void OnInit() override void OnInit() override
@ -578,9 +589,53 @@ public:
} }
} }
static void AskManyRandomIndustriesCallback(Window *w, bool confirmed)
{
if (!confirmed) return;
if (Town::GetNumItems() == 0) {
ShowErrorMessage(STR_ERROR_CAN_T_GENERATE_INDUSTRIES, STR_ERROR_MUST_FOUND_TOWN_FIRST, WL_INFO);
} else {
extern void GenerateIndustries();
_generating_world = true;
GenerateIndustries();
_generating_world = false;
}
}
static void AskRemoveAllIndustriesCallback(Window *w, bool confirmed)
{
if (!confirmed) return;
for (Industry* industry : Industry::Iterate()) delete industry;
/* Clear farmland. */
for (TileIndex tile = 0; tile < MapSize(); tile++) {
if (IsTileType(tile, MP_CLEAR) && GetRawClearGround(tile) == CLEAR_FIELDS) {
MakeClear(tile, CLEAR_GRASS, 3);
}
}
MarkWholeScreenDirty();
}
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, int widget, int click_count) override
{ {
switch (widget) { switch (widget) {
case WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET: {
assert(_game_mode == GM_EDITOR);
this->HandleButtonClick(WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET);
ShowQuery(STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION, STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY, nullptr, AskManyRandomIndustriesCallback);
break;
}
case WID_DPI_REMOVE_ALL_INDUSTRIES_WIDGET: {
assert(_game_mode == GM_EDITOR);
this->HandleButtonClick(WID_DPI_REMOVE_ALL_INDUSTRIES_WIDGET);
ShowQuery(STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION, STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY, nullptr, AskRemoveAllIndustriesCallback);
break;
}
case WID_DPI_MATRIX_WIDGET: { case WID_DPI_MATRIX_WIDGET: {
int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_DPI_MATRIX_WIDGET); int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_DPI_MATRIX_WIDGET);
if (y < this->count) { // Is it within the boundaries of available data? if (y < this->count) { // Is it within the boundaries of available data?
@ -610,22 +665,14 @@ public:
break; break;
case WID_DPI_FUND_WIDGET: { case WID_DPI_FUND_WIDGET: {
if (this->selected_type == INVALID_INDUSTRYTYPE) { if (this->selected_type != INVALID_INDUSTRYTYPE)
this->HandleButtonClick(WID_DPI_FUND_WIDGET); {
if (_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && GetIndustrySpec(this->selected_type)->IsRawIndustry()) {
if (Town::GetNumItems() == 0) { DoCommandP(0, this->selected_type, InteractiveRandom(), CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY));
ShowErrorMessage(STR_ERROR_CAN_T_GENERATE_INDUSTRIES, STR_ERROR_MUST_FOUND_TOWN_FIRST, WL_INFO); this->HandleButtonClick(WID_DPI_FUND_WIDGET);
} else { } else {
extern void GenerateIndustries(); HandlePlacePushButton(this, WID_DPI_FUND_WIDGET, SPR_CURSOR_INDUSTRY, HT_RECT);
_generating_world = true;
GenerateIndustries();
_generating_world = false;
} }
} else if (_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && GetIndustrySpec(this->selected_type)->IsRawIndustry()) {
DoCommandP(0, this->selected_type, InteractiveRandom(), CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY));
this->HandleButtonClick(WID_DPI_FUND_WIDGET);
} else {
HandlePlacePushButton(this, WID_DPI_FUND_WIDGET, SPR_CURSOR_INDUSTRY, HT_RECT);
} }
break; break;
} }

View File

@ -2605,12 +2605,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Random
# Fund new industry window # Fund new industry window
STR_FUND_INDUSTRY_CAPTION :{WHITE}Fund new industry STR_FUND_INDUSTRY_CAPTION :{WHITE}Fund new industry
STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choose the appropriate industry from this list STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choose the appropriate industry from this list
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Many random industries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Create random industries
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cover the map with randomly placed industries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cover the map with randomly placed industries
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Create random industries
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to create many random industries?
STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Cost: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Cost: {YELLOW}{CURRENCY_LONG}
STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospect STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospect
STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Build STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Build
STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fund STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fund
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Remove all industries
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Remove all industries currently present on the map
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remove all industries
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to remove all industries?
# Industry cargoes window # Industry cargoes window
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry chain for {STRING} industry STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry chain for {STRING} industry

View File

@ -12,11 +12,14 @@
/** Widgets of the #BuildIndustryWindow class. */ /** Widgets of the #BuildIndustryWindow class. */
enum DynamicPlaceIndustriesWidgets { enum DynamicPlaceIndustriesWidgets {
WID_DPI_MATRIX_WIDGET, ///< Matrix of the industries. WID_DPI_SCENARIO_EDITOR_PANE, ///< Pane containing SE-only widgets.
WID_DPI_SCROLLBAR, ///< Scrollbar of the matrix. WID_DPI_REMOVE_ALL_INDUSTRIES_WIDGET, ///< Remove all industries button.
WID_DPI_INFOPANEL, ///< Info panel about the industry. WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET, ///< Create random industries button.
WID_DPI_DISPLAY_WIDGET, ///< Display chain button. WID_DPI_MATRIX_WIDGET, ///< Matrix of the industries.
WID_DPI_FUND_WIDGET, ///< Fund button. WID_DPI_SCROLLBAR, ///< Scrollbar of the matrix.
WID_DPI_INFOPANEL, ///< Info panel about the industry.
WID_DPI_DISPLAY_WIDGET, ///< Display chain button.
WID_DPI_FUND_WIDGET, ///< Fund button.
}; };
/** Widgets of the #IndustryViewWindow class. */ /** Widgets of the #IndustryViewWindow class. */