OpenTTD Source
20240915-master-g3784a3d3d6
|
Go to the documentation of this file.
44 #include "table/strings.h"
61 if (_game_mode != GM_EDITOR)
return;
78 if (_game_mode != GM_EDITOR)
return;
165 this->last_user_action = INVALID_WID_TT;
179 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
186 this->last_user_action = widget;
191 this->last_user_action = widget;
196 this->last_user_action = widget;
201 this->last_user_action = widget;
206 this->last_user_action = widget;
210 ShowBuildTreesToolbar();
215 this->last_user_action = widget;
222 default: NOT_REACHED();
226 void OnPlaceObject([[maybe_unused]]
Point pt,
TileIndex tile)
override
228 switch (this->last_user_action) {
253 default: NOT_REACHED();
262 Point OnInitialPosition([[maybe_unused]] int16_t sm_width, [[maybe_unused]] int16_t sm_height, [[maybe_unused]]
int window_number)
override
272 switch (select_proc) {
273 default: NOT_REACHED();
312 static inline HotkeyList hotkeys{
"terraform", {
324 static constexpr
NWidgetPart _nested_terraform_widgets[] = {
332 SetFill(0, 1),
SetDataTip(SPR_IMG_TERRAFORM_DOWN, STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND),
334 SetFill(0, 1),
SetDataTip(SPR_IMG_TERRAFORM_UP, STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND),
336 SetFill(0, 1),
SetDataTip(SPR_IMG_LEVEL_LAND, STR_LANDSCAPING_LEVEL_LAND_TOOLTIP),
343 SetFill(0, 1),
SetDataTip(SPR_IMG_BUY_LAND, STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND),
350 SetFill(0, 1),
SetDataTip(SPR_IMG_TRANSMITTER, STR_SCENEDIT_TOOLBAR_PLACE_OBJECT),
359 _nested_terraform_widgets,
360 &TerraformToolbarWindow::hotkeys
373 if (link ==
nullptr) {
374 w = AllocateWindowDescFront<TerraformToolbarWindow>(_terraform_desc, 0);
380 w = AllocateWindowDescFront<TerraformToolbarWindow>(_terraform_desc, 0);
392 static uint8_t _terraform_size = 1;
405 if (_terraform_size == 1) {
407 mode ? STR_ERROR_CAN_T_RAISE_LAND_HERE : STR_ERROR_CAN_T_LOWER_LAND_HERE;
411 assert(_terraform_size != 0);
412 TileArea ta(tile, _terraform_size, _terraform_size);
415 if (ta.
w == 0 || ta.
h == 0)
return;
442 static const int8_t _multi_terraform_coords[][2] = {
444 { 4, 0}, { -4, 0}, { 0, 2},
445 { -8, 2}, { -4, 4}, { 0, 6}, { 4, 4}, { 8, 2},
446 {-12, 0}, { -8, -2}, { -4, -4}, { 0, -6}, { 4, -4}, { 8, -2}, { 12, 0},
447 {-16, 2}, {-12, 4}, { -8, 6}, { -4, 8}, { 0, 10}, { 4, 8}, { 8, 6}, { 12, 4}, { 16, 2},
448 {-20, 0}, {-16, -2}, {-12, -4}, { -8, -6}, { -4, -8}, { 0,-10}, { 4, -8}, { 8, -6}, { 12, -4}, { 16, -2}, { 20, 0},
449 {-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},
450 {-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},
453 static constexpr
NWidgetPart _nested_scen_edit_land_gen_widgets[] = {
466 SetFill(0, 1),
SetDataTip(SPR_IMG_TERRAFORM_DOWN, STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND),
468 SetFill(0, 1),
SetDataTip(SPR_IMG_TERRAFORM_UP, STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND),
470 SetFill(0, 1),
SetDataTip(SPR_IMG_LEVEL_LAND, STR_LANDSCAPING_LEVEL_LAND_TOOLTIP),
472 SetFill(0, 1),
SetDataTip(SPR_IMG_ROCKS, STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE),
475 SetFill(0, 1),
SetDataTip(SPR_IMG_DESERT, STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA),
478 SetFill(0, 1),
SetDataTip(SPR_IMG_TRANSMITTER, STR_SCENEDIT_TOOLBAR_PLACE_OBJECT),
519 old_generating_world.
Restore();
525 if (!st->IsInUse())
delete st;
545 this->last_user_action = INVALID_WID_ETT;
561 size.width = std::max<uint>(size.width,
ScaleGUITrad(59));
562 size.height = std::max<uint>(size.height,
ScaleGUITrad(31));
565 void DrawWidget(
const Rect &r,
WidgetID widget)
const override
569 int center_x =
RoundDivSU(r.left + r.right, 2);
570 int center_y =
RoundDivSU(r.top + r.bottom, 2);
572 int n = _terraform_size * _terraform_size;
573 const int8_t *coords = &_multi_terraform_coords[0][0];
582 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
589 this->last_user_action = widget;
594 this->last_user_action = widget;
599 this->last_user_action = widget;
604 this->last_user_action = widget;
609 this->last_user_action = widget;
614 this->last_user_action = widget;
625 size += _terraform_size;
628 _terraform_size = size;
644 default: NOT_REACHED();
656 void OnPlaceObject([[maybe_unused]]
Point pt,
TileIndex tile)
override
658 switch (this->last_user_action) {
683 default: NOT_REACHED();
695 switch (select_proc) {
696 default: NOT_REACHED();
728 static inline HotkeyList hotkeys{
"terraform_editor", {
740 WDP_AUTO,
"toolbar_landscape_scen", 0, 0,
743 _nested_scen_edit_land_gen_widgets,
744 &ScenarioEditorLandscapeGenerationWindow::hotkeys
753 return AllocateWindowDescFront<ScenarioEditorLandscapeGenerationWindow>(_scen_edit_land_gen_desc, 0);
static debug_inline uint TileY(TileIndex tile)
Get the Y component of a tile.
@ MP_CLEAR
A tile without any structures, i.e. grass, rocks, farm fields etc.
void SetTileSelectSize(int w, int h)
Highlight w by h tiles at the cursor.
@ DDSP_DEMOLISH_AREA
Clear area.
@ TROPICZONE_DESERT
Tile is desert.
static bool ResetToCurrentNewGRFConfig()
Tries to reset the engine mapping to match the current NewGRF configuration.
int last_user_action
Last started user action.
void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallbackProc *callback, bool focus)
Show a confirmation window with standard 'yes' and 'no' buttons The window is aligned to the centre o...
List of hotkeys for a window.
Dimensions (a width and height) of a rectangle in 2D.
constexpr bool IsInsideMM(const T x, const size_t min, const size_t max) noexcept
Checks if a value is in an interval.
@ DDSP_CREATE_ROCKS
Fill area with rocks.
@ WDF_CONSTRUCTION
This window is used for construction; close it whenever changing company.
TreeGround GetTreeGround(Tile t)
Returns the groundtype for tree tiles.
Class to backup a specific variable and restore it later.
static debug_inline uint MaxX()
Gets the maximum X coordinate within the map, including MP_VOID.
ViewportDragDropSelectionProcess
Drag and drop selection process, or, what to do with an area of land when you've selected it.
static const CursorID ANIMCURSOR_RAISELAND
696 - 698 - raise land tool
@ DDSP_LEVEL_AREA
Level area.
@ INVALID_OWNER
An invalid owner.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
void CloseWindowById(WindowClass cls, WindowNumber number, bool force, int data)
Close a window by its class and window number (if it is open).
void SetRedErrorSquare(TileIndex tile)
Set a tile to display a red error square.
@ LM_LEVEL
Level the land.
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
bool _ctrl_pressed
Is Ctrl pressed?
@ SND_15_BEEP
19 == 0x13 GUI button click
bool HandlePlacePushButton(Window *w, WidgetID widget, CursorID cursor, HighLightStyle mode)
This code is shared for the majority of the pushbuttons.
void RaiseButtons(bool autoraise=false)
Raise the buttons of the window.
ClientSettings _settings_client
The current settings for this game.
static uint GetUIClassCount()
Get the number of classes available to the user.
static const CursorID ANIMCURSOR_DEMOLISH
704 - 707 - demolish dynamite
static const uint MAX_TILE_HEIGHT
Maximum allowed tile height.
ViewportPlaceMethod
Viewport place method (type of highlighted area and placed objects)
@ DC_EXEC
execute the given command
uint8_t landscape
the landscape we're currently in
virtual EventState OnHotkey(int hotkey)
A hotkey has been pressed.
uint16_t h
The height of the area.
void OnPaint() override
The window must be repainted.
bool Succeeded() const
Did this command succeed?
GameCreationSettings game_creation
settings used during the creation of a game (map)
static debug_inline TileType GetTileType(Tile tile)
Get the tiletype of a given tile.
void MakeClear(Tile t, ClearGround g, uint density)
Make a clear tile.
High level window description.
constexpr int RoundDivSU(int a, uint b)
Computes round(a / b) for signed a and unsigned b.
int ScaleGUITrad(int value)
Scale traditional pixel dimensions to GUI zoom level.
@ WDP_AUTO
Find a place automatically.
@ WKC_GLOBAL_HOTKEY
Fake keycode bit to indicate global hotkeys.
ResizeInfo resize
Resize information.
Common return value for all commands.
SoundSettings sound
sound effect settings
int32_t WindowNumber
Number to differentiate different windows of the same class.
void HandleButtonClick(WidgetID widget)
Do all things to make a button look clicked and mark it to be unclicked in a few ticks.
int height
Height of the window (number of pixels down in y direction)
void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process)
highlighting tiles while only going over them with the mouse
void ShowCreateScenario()
Show the window to create a scenario.
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
@ HT_DIAGONAL
Also allow 'diagonal rectangles'. Only usable in combination with HT_RECT or HT_POINT.
@ DDSP_BUILD_OBJECT
Build an object.
@ ES_NOT_HANDLED
The passed event is not handled.
void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method)
Selects tiles while dragging.
Represents the covered area of e.g.
TileIndexDiff TileDiffXY(int x, int y)
Calculates an offset for the given coordinate(-offset).
GameSettings _settings_game
Game settings of a running game or the scenario editor.
bool IsBuoyTile(Tile t)
Is tile t a buoy tile?
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Point GetToolbarAlignedWindowPosition(int window_width)
Computer the position of the top-left corner of a window to be opened right under the toolbar.
int left
x position of left edge of the window
bool freeform_edges
allow terraforming the tiles at the map edges
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub, ZoomLevel zoom)
Draw a sprite, not in a viewport.
@ DDSP_LOWER_AND_LEVEL_AREA
Lower / level area.
Coordinates of a point in 2D.
@ SLOPE_N
the north corner of the tile is raised
WindowNumber window_number
Window number within the window class.
static EventState TerraformToolbarEditorGlobalHotkeys(int hotkey)
Handler for global hotkeys of the ScenarioEditorLandscapeGenerationWindow.
@ DC_BANKRUPT
company bankrupts, skip money check, skip vehicle on tile check in some cases
@ LM_LOWER
Lower the land.
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
@ MP_TREES
Tile got trees.
static const ObjectType OBJECT_OWNED_LAND
Owned land 'flag'.
bool _generating_world
Whether we are generating the map or not.
@ LM_RAISE
Raise the land.
bool IsWidgetLowered(WidgetID widget_index) const
Gets the lowered state of a widget.
bool confirm
Play sound effect on successful constructions or other actions.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
void CreateNestedTree()
Perform the first part of the initialization of a nested widget tree.
static uint MaxY()
Gets the maximum Y coordinate within the map, including MP_VOID.
void Restore()
Restore the variable.
@ WC_SCEN_LAND_GEN
Landscape generation (in Scenario Editor); Window numbers:
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override)
Mark a tile given by its index dirty for repaint.
@ DDSP_RAISE_AND_LEVEL_AREA
Raise / level area.
EventState
State of handling an event.
@ HT_RECT
rectangle (stations, depots, ...)
@ VPM_X_AND_Y
area of land in X and Y directions
void PlaceProc_Sign(TileIndex tile)
PlaceProc function, called when someone pressed the button if the sign-tool is selected.
void FinishInitNested(WindowNumber window_number=0)
Perform the second part of the initialization of a nested widget tree.
WidgetLookup widget_lookup
Indexed access to the nested widget tree. Do not access directly, use Window::GetWidget() instead.
Base class for all station-ish types.
int top
y position of top edge of the window
void OnTimeout() override
Called when this window's timeout has been reached.
uint16_t w
The width of the area.
void RaiseWidgetWhenLowered(WidgetID widget_index)
Marks a widget as raised and dirty (redraw), when it is marked as lowered.
bool click_beep
Beep on a random selection of buttons.
int width
width of the window (number of pixels to the right in x direction)
Landscape generation window handler in the scenario editor.
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
@ WDP_MANUAL
Manually align the window (so no automatic location finding)
static debug_inline uint TileHeight(Tile tile)
Returns the height of a tile.
@ SND_1F_CONSTRUCTION_OTHER
29 == 0x1D Construction: other (non-water, non-rail, non-bridge)
@ WC_TOWN_VIEW
Town view; Window numbers:
ConstructionSettings construction
construction of things in-game
Data structure for an opened window.
Commands
List of commands.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
void DrawWidgets() const
Paint all widgets of a window.
@ TROPICZONE_NORMAL
Normal tropiczone.
static debug_inline uint TileX(TileIndex tile)
Get the X component of a tile.
Window * ShowBuildObjectPicker()
Show our object picker.
@ HT_POINT
point (lower land, raise land, level land, ...)
void ClampToMap()
Clamp the tile area to map borders.
Specification of a rectangle with absolute coordinates of all edges.
void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
Change the ownership of all the items of a company.
void SetTropicZone(Tile tile, TropicZone type)
Set the tropic zone.
@ TD_RTL
Text is written right-to-left by default.
TextDirection _current_text_dir
Text direction of the currently selected language.
All data for a single hotkey.
static const CursorID ANIMCURSOR_LOWERLAND
699 - 701 - lower land tool
@ DDSP_CREATE_DESERT
Fill area with desert.