OpenTTD Source 20241224-master-gf74b0cf984
terraform_gui.cpp File Reference

GUI related to terraforming the map. More...

#include "stdafx.h"
#include "core/backup_type.hpp"
#include "clear_map.h"
#include "company_func.h"
#include "company_base.h"
#include "house.h"
#include "gui.h"
#include "window_gui.h"
#include "window_func.h"
#include "viewport_func.h"
#include "command_func.h"
#include "signs_func.h"
#include "sound_func.h"
#include "base_station_base.h"
#include "textbuf_gui.h"
#include "genworld.h"
#include "tree_map.h"
#include "landscape_type.h"
#include "tilehighlight_func.h"
#include "strings_func.h"
#include "newgrf_object.h"
#include "object.h"
#include "hotkeys.h"
#include "engine_base.h"
#include "terraform_gui.h"
#include "terraform_cmd.h"
#include "zoom_func.h"
#include "rail_cmd.h"
#include "landscape_cmd.h"
#include "object_cmd.h"
#include "widgets/terraform_widget.h"
#include "table/strings.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  TerraformToolbarWindow
 Terra form toolbar managing class. More...
 
struct  ScenarioEditorLandscapeGenerationWindow
 Landscape generation window handler in the scenario editor. More...
 

Functions

void CcTerraform (Commands, const CommandCost &result, Money, TileIndex tile)
 
static void GenerateDesertArea (TileIndex end, TileIndex start)
 Scenario editor command that generates desert areas.
 
static void GenerateRockyArea (TileIndex end, TileIndex start)
 Scenario editor command that generates rocky areas.
 
bool GUIPlaceProcDragXY (ViewportDragDropSelectionProcess proc, TileIndex start_tile, TileIndex end_tile)
 A central place to handle all X_AND_Y dragged GUI functions.
 
void PlaceProc_DemolishArea (TileIndex tile)
 Start a drag for demolishing an area.
 
WindowShowTerraformToolbar (Window *link)
 Show the toolbar for terraforming in the game.
 
static void CommonRaiseLowerBigLand (TileIndex tile, bool mode)
 Raise/Lower a bigger chunk of land at the same time in the editor.
 
static void ResetLandscapeConfirmationCallback (Window *, bool confirmed)
 Callback function for the scenario editor 'reset landscape' confirmation window.
 
WindowShowEditorTerraformToolbar ()
 Show the toolbar for terraforming in the scenario editor.
 

Variables

static constexpr NWidgetPart _nested_terraform_widgets []
 
static WindowDesc _terraform_desc (WDP_MANUAL, "toolbar_landscape", 0, 0, WC_SCEN_LAND_GEN, WC_NONE, WDF_CONSTRUCTION, _nested_terraform_widgets, &TerraformToolbarWindow::hotkeys)
 
static uint8_t _terraform_size = 1
 
static const int8_t _multi_terraform_coords [][2]
 
static constexpr NWidgetPart _nested_scen_edit_land_gen_widgets []
 
static WindowDesc _scen_edit_land_gen_desc (WDP_AUTO, "toolbar_landscape_scen", 0, 0, WC_SCEN_LAND_GEN, WC_NONE, WDF_CONSTRUCTION, _nested_scen_edit_land_gen_widgets, &ScenarioEditorLandscapeGenerationWindow::hotkeys)
 

Detailed Description

GUI related to terraforming the map.

Definition in file terraform_gui.cpp.

Function Documentation

◆ CcTerraform()

void CcTerraform ( Commands  cmd,
const CommandCost result,
Money  ,
TileIndex  tile 
)

Definition at line 48 of file terraform_gui.cpp.

◆ CommonRaiseLowerBigLand()

static void CommonRaiseLowerBigLand ( TileIndex  tile,
bool  mode 
)
static

Raise/Lower a bigger chunk of land at the same time in the editor.

When raising get the lowest point, when lowering the highest point, and set all tiles in the selection to that height.

Todo:
: Incorporate into game itself to allow for ingame raising/lowering of larger chunks at the same time OR remove altogether, as we have 'level land' ?
Parameters
tileThe top-left tile where the terraforming will start
modetrue for raising, false for lowering land

Definition at line 403 of file terraform_gui.cpp.

References _settings_client, OrthogonalTileArea::ClampToMap(), SoundSettings::confirm, OrthogonalTileArea::h, MAX_TILE_HEIGHT, SLOPE_N, SND_1F_CONSTRUCTION_OTHER, ClientSettings::sound, TileHeight(), and OrthogonalTileArea::w.

Referenced by ScenarioEditorLandscapeGenerationWindow::OnPlaceObject().

◆ GenerateDesertArea()

static void GenerateDesertArea ( TileIndex  end,
TileIndex  start 
)
static

◆ GenerateRockyArea()

static void GenerateRockyArea ( TileIndex  end,
TileIndex  start 
)
static

◆ GUIPlaceProcDragXY()

bool GUIPlaceProcDragXY ( ViewportDragDropSelectionProcess  proc,
TileIndex  start_tile,
TileIndex  end_tile 
)

A central place to handle all X_AND_Y dragged GUI functions.

Parameters
procProcedure related to the dragging
start_tileBegin of the dragging
end_tileEnd of the dragging
Returns
Returns true if the action was found and handled, and false otherwise. This allows for additional implements that are more local. For example X_Y drag of convertrail which belongs in rail_gui.cpp and not terraform_gui.cpp

Definition at line 112 of file terraform_gui.cpp.

References _ctrl_pressed, _settings_game, GameSettings::construction, DDSP_CREATE_DESERT, DDSP_CREATE_ROCKS, DDSP_DEMOLISH_AREA, DDSP_LEVEL_AREA, DDSP_LOWER_AND_LEVEL_AREA, DDSP_RAISE_AND_LEVEL_AREA, ConstructionSettings::freeform_edges, GenerateDesertArea(), GenerateRockyArea(), LM_LEVEL, LM_LOWER, LM_RAISE, Map::MaxX(), Map::MaxY(), TileDiffXY(), TileX(), and TileY().

Referenced by BuildAirToolbarWindow::OnPlaceMouseUp(), BuildDocksToolbarWindow::OnPlaceMouseUp(), BuildRailToolbarWindow::OnPlaceMouseUp(), BuildRoadToolbarWindow::OnPlaceMouseUp(), TerraformToolbarWindow::OnPlaceMouseUp(), and ScenarioEditorLandscapeGenerationWindow::OnPlaceMouseUp().

◆ PlaceProc_DemolishArea()

◆ ResetLandscapeConfirmationCallback()

static void ResetLandscapeConfirmationCallback ( Window ,
bool  confirmed 
)
static

◆ ShowEditorTerraformToolbar()

Window * ShowEditorTerraformToolbar ( )

Show the toolbar for terraforming in the scenario editor.

Returns
The allocated toolbar if the window was newly opened, else nullptr.

Definition at line 751 of file terraform_gui.cpp.

Referenced by ScenarioEditorToolbarWindow::OnHotkey(), and ScenarioEditorLandscapeGenerationWindow::TerraformToolbarEditorGlobalHotkeys().

◆ ShowTerraformToolbar()

Window * ShowTerraformToolbar ( Window link)

Show the toolbar for terraforming in the game.

Parameters
linkThe toolbar we might want to link to.
Returns
The allocated toolbar if the window was newly opened, else nullptr.

Definition at line 368 of file terraform_gui.cpp.

References _current_text_dir, _local_company, CloseWindowById(), Window::height, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Window::left, Window::SetDirty(), TD_RTL, Window::top, WC_SCEN_LAND_GEN, and Window::width.

Referenced by MenuClickForest(), MainToolbarWindow::OnHotkey(), and TerraformToolbarWindow::TerraformToolbarGlobalHotkeys().

Variable Documentation

◆ _multi_terraform_coords

const int8_t _multi_terraform_coords[][2]
static
Initial value:
= {
{ 0, -2},
{ 4, 0}, { -4, 0}, { 0, 2},
{ -8, 2}, { -4, 4}, { 0, 6}, { 4, 4}, { 8, 2},
{-12, 0}, { -8, -2}, { -4, -4}, { 0, -6}, { 4, -4}, { 8, -2}, { 12, 0},
{-16, 2}, {-12, 4}, { -8, 6}, { -4, 8}, { 0, 10}, { 4, 8}, { 8, 6}, { 12, 4}, { 16, 2},
{-20, 0}, {-16, -2}, {-12, -4}, { -8, -6}, { -4, -8}, { 0,-10}, { 4, -8}, { 8, -6}, { 12, -4}, { 16, -2}, { 20, 0},
{-24, 2}, {-20, 4}, {-16, 6}, {-12, 8}, { -8, 10}, { -4, 12}, { 0, 14}, { 4, 12}, { 8, 10}, { 12, 8}, { 16, 6}, { 20, 4}, { 24, 2},
{-28, 0}, {-24, -2}, {-20, -4}, {-16, -6}, {-12, -8}, { -8,-10}, { -4,-12}, { 0,-14}, { 4,-12}, { 8,-10}, { 12, -8}, { 16, -6}, { 20, -4}, { 24, -2}, { 28, 0},
}

Definition at line 442 of file terraform_gui.cpp.

◆ _nested_scen_edit_land_gen_widgets

constexpr NWidgetPart _nested_scen_edit_land_gen_widgets[]
staticconstexpr

Definition at line 453 of file terraform_gui.cpp.

◆ _nested_terraform_widgets

constexpr NWidgetPart _nested_terraform_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_LANDSCAPING_TOOLBAR, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN),
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_LOWER_LAND), SetMinimalSize(22, 22),
SetFill(0, 1), SetDataTip(SPR_IMG_TERRAFORM_DOWN, STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND),
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_RAISE_LAND), SetMinimalSize(22, 22),
SetFill(0, 1), SetDataTip(SPR_IMG_TERRAFORM_UP, STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND),
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_LEVEL_LAND), SetMinimalSize(22, 22),
SetFill(0, 1), SetDataTip(SPR_IMG_LEVEL_LAND, STR_LANDSCAPING_LEVEL_LAND_TOOLTIP),
NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetMinimalSize(4, 22), EndContainer(),
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_DEMOLISH), SetMinimalSize(22, 22),
SetFill(0, 1), SetDataTip(SPR_IMG_DYNAMITE, STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC),
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_BUY_LAND), SetMinimalSize(22, 22),
SetFill(0, 1), SetDataTip(SPR_IMG_BUY_LAND, STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND),
SetFill(0, 1), SetDataTip(SPR_IMG_PLANTTREES, STR_SCENEDIT_TOOLBAR_PLANT_TREES),
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_PLACE_SIGN), SetMinimalSize(22, 22),
SetFill(0, 1), SetDataTip(SPR_IMG_SIGN, STR_SCENEDIT_TOOLBAR_PLACE_SIGN),
SetFill(0, 1), SetDataTip(SPR_IMG_TRANSMITTER, STR_SCENEDIT_TOOLBAR_PLACE_OBJECT),
}
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
constexpr NWidgetPart SetMinimalSize(int16_t x, int16_t y)
Widget part function for setting the minimal size.
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
@ WID_TT_LEVEL_LAND
Level land button.
@ WID_TT_DEMOLISH
Demolish aka dynamite button.
@ WID_TT_SHOW_PLACE_OBJECT
Should the place object button be shown?
@ WID_TT_RAISE_LAND
Raise land button.
@ WID_TT_PLACE_OBJECT
Place object button.
@ WID_TT_PLANT_TREES
Plant trees button (note: opens separate window, no place-push-button).
@ WID_TT_PLACE_SIGN
Place sign button.
@ WID_TT_BUY_LAND
Buy land button.
@ WID_TT_LOWER_LAND
Lower land button.
@ WWT_IMGBTN
(Toggle) Button with image
Definition widget_type.h:52
@ WWT_PUSHIMGBTN
Normal push-button (no toggle button) with image caption.
@ NWID_HORIZONTAL
Horizontal container.
Definition widget_type.h:75
@ WWT_PANEL
Simple depressed panel.
Definition widget_type.h:50
@ WWT_STICKYBOX
Sticky box (at top-right of a window, after WWT_DEFSIZEBOX)
Definition widget_type.h:66
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition widget_type.h:61
@ WWT_CLOSEBOX
Close box (at top-left of a window)
Definition widget_type.h:69
@ NWID_SELECTION
Stacked widgets, only one visible at a time (eg in a panel with tabs).
Definition widget_type.h:80

Definition at line 324 of file terraform_gui.cpp.

◆ _terraform_size

uint8_t _terraform_size = 1
static

Definition at line 392 of file terraform_gui.cpp.