33 #include "table/strings.h"
54 for (
const auto *spec : cls.Specs()) {
55 if (spec !=
nullptr && spec->IsEverAvailable())
return true;
66 const auto *objclass = this->GetClass(
id);
68 return objclass->name;
76 const auto *spec = this->GetSpec(cls_id,
id);
77 return (spec ==
nullptr || !spec->IsEverAvailable()) ?
INVALID_STRING_ID : spec->name;
82 const auto *spec = this->GetSpec(cls_id,
id);
83 return spec->IsAvailable();
86 void DrawType(
int x,
int y,
int cls_id,
int id)
const override
88 const auto *spec = this->GetSpec(cls_id,
id);
89 if (spec->grf_prop.grffile ==
nullptr) {
104 items.insert(GetPickerItem(spec));
120 this->ConstructWindow();
124 void SetStringParameters(
WidgetID widget)
const override
130 int size = spec ==
nullptr ? 0 : spec->
size;
160 if (spec !=
nullptr) {
162 if (spec->
views >= 4) size.height +=
resize.height;
175 if (spec !=
nullptr) {
187 this->PickerWindow::UpdateWidgetSize(widget, size, padding, fill,
resize);
192 void DrawWidget(
const Rect &r,
WidgetID widget)
const override
198 if (spec ==
nullptr)
break;
224 if (spec ==
nullptr)
break;
230 if (callback_res > 0x400) {
234 if (message != STR_NULL && message != STR_UNDEFINED) {
239 int y =
DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, message, TC_ORANGE) - r.top - 1;
241 if (y > this->info_height) {
254 this->PickerWindow::DrawWidget(r, widget);
261 if (spec ==
nullptr) {
281 this->UpdateSelectSize(spec);
285 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
287 this->PickerWindow::OnInvalidateData(data, gui_scope);
289 if (!gui_scope)
return;
299 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
311 this->PickerWindow::OnClick(pt, widget, click_count);
316 void OnPlaceObject([[maybe_unused]]
Point pt,
TileIndex tile)
override
334 if (pt.x == -1)
return;
367 static inline HotkeyList hotkeys{
"buildobject", {
372 static constexpr
NWidgetPart _nested_build_object_widgets[] = {
404 _nested_build_object_widgets,
405 &BuildObjectWindow::hotkeys
412 if (ObjectPickerCallbacks::instance.IsActive()) {
413 return AllocateWindowDescFront<BuildObjectWindow>(_build_object_desc, 0);
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
constexpr static debug_inline uint GB(const T x, const uint8_t s, const uint8_t n)
Fetch n bits from x, started at bit s.
The window used for building objects.
int info_height
The height of the info box.
static EventState BuildObjectGlobalHotkeys(int hotkey)
Handler for global hotkeys of the BuildObjectWindow.
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
void OnInit() override
Notification that the nested widget tree gets initialized.
void UpdateButtons(const ObjectSpec *spec)
Update buttons to show the selection to the user.
void OnInvalidateData([[maybe_unused]] int data=0, [[maybe_unused]] bool gui_scope=true) override
Some data on this window has become invalid.
Struct containing information relating to NewGRF classes for stations and airports.
static std::span< NewGRFClass< Tspec, Tindex, Tmax > const > Classes()
Get read-only span of all classes of this type.
static NewGRFClass * Get(Tindex class_index)
Get a particular class.
const Tspec * GetSpec(uint index) const
Get a spec from the class at a given index.
StringID GetClassName(int id) const override
Get the name of a class.
void DrawType(int x, int y, int cls_id, int id) const override
Draw preview image of an item.
void SetSelectedClass(int id) const override
Set the selected class.
StringID GetTypeTooltip() const override
Get the tooltip string for the type grid.
bool IsActive() const override
Should picker class/type selection be enabled?
StringID GetClassTooltip() const override
Get the tooltip string for the class list.
bool IsTypeAvailable(int cls_id, int id) const override
Test if an item is currently buildable.
int GetSelectedType() const override
Get the selected type.
void SetSelectedType(int id) const override
Set the selected type.
int GetSelectedClass() const override
Get the index of the selected class.
StringID GetTypeName(int cls_id, int id) const override
Get the item of a type.
void FillUsedItems(std::set< PickerItem > &items) override
Fill a set with all items that are used by the current player.
Helper for PickerCallbacks when the class system is based on NewGRFClass.
static const int PREVIEW_LEFT
Offset from left edge to draw preview.
@ PCWHK_FOCUS_FILTER_BOX
Focus the edit box for editing the filter string.
@ PFI_POSITION
Update scroll positions.
static const int PREVIEW_WIDTH
Width of each preview button.
static const int PREVIEW_BOTTOM
Offset from bottom edge to draw preview.
static const int PREVIEW_HEIGHT
Height of each preview button.
Functions related to commands.
CompanyID _current_company
Company currently doing an action.
Functions related to companies.
bool _ctrl_pressed
Is Ctrl pressed?
int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_view str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly over multiple lines.
bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height)
Set up a clipping area for only drawing into a certain area.
@ SA_CENTER
Center both horizontally and vertically.
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Hotkey related functions.
TileIndexDiff TileDiffXY(int x, int y)
Calculates an offset for the given coordinate(-offset).
static debug_inline uint TileY(TileIndex tile)
Get the Y component of a tile.
static debug_inline uint TileX(TileIndex tile)
Get the X component of a tile.
Base for the NewGRF implementation.
@ CBID_OBJECT_FUND_MORE_TEXT
Called to determine more text in the fund object window.
static const uint CALLBACK_FAILED
Different values for Callback result evaluations.
@ CBM_OBJ_FUND_MORE_TEXT
additional text in fund window
void ErrorUnknownCallbackResult(uint32_t grfid, uint16_t cbid, uint16_t cb_res)
Record that a NewGRF returned an unknown/invalid callback result.
void DrawNewObjectTileInGUI(int x, int y, const ObjectSpec *spec, uint8_t view)
Draw representation of an object (tile) for GUI purposes.
uint16_t GetObjectCallback(CallbackID callback, uint32_t param1, uint32_t param2, const ObjectSpec *spec, Object *o, TileIndex tile, uint8_t view)
Perform a callback for an object.
Functions related to NewGRF objects.
static const uint8_t OBJECT_SIZE_1X1
The value of a NewGRF's size property when the object is 1x1 tiles: low nibble for X,...
ObjectClassID
Class IDs for objects.
@ INVALID_OBJECT_CLASS
Class for the less fortunate.
@ OBJECT_CLASS_BEGIN
The lowest valid value.
void StartTextRefStackUsage(const GRFFile *grffile, uint8_t numEntries, const uint32_t *values)
Start using the TTDP compatible string code parsing.
StringID GetGRFStringID(uint32_t grfid, StringID stringid)
Returns the index for this stringid associated with its grfID.
void StopTextRefStackUsage()
Stop using the TTDP compatible string code parsing.
Header of Action 04 "universal holder" structure and functions.
Functions related to objects.
Command definitions related to objects.
void InitializeObjectGui()
Reset all data of the object GUI.
Window * ShowBuildObjectPicker()
Show our object picker.
static ObjectPickerSelection _object_gui
Settings of the object picker.
std::unique_ptr< NWidgetBase > MakePickerTypeWidgets()
Create nested widgets for the type picker widgets.
std::unique_ptr< NWidgetBase > MakePickerClassWidgets()
Create nested widgets for the class picker widgets.
A number of safeguards to prevent using unsafe methods.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
ClientSettings _settings_client
The current settings for this game.
Functions related to sound.
@ SND_15_BEEP
19 == 0x13 GUI button click
void DrawOrigTileSeqInGUI(int x, int y, const DrawTileSprites *dts, PaletteID default_palette)
Draw TTD sprite sequence in GUI.
Definition of base types and functions in a cross-platform compatible way.
#define MAX_UVALUE(type)
The largest value that can be entered in a variable.
void SetDParam(size_t n, uint64_t v)
Set a string parameter v at index n in the global string parameter array.
Functions related to OTTD's strings.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames)
Class to backup a specific variable and restore it upon destruction of this object to prevent stack v...
SoundSettings sound
sound effect settings
bool freeform_edges
allow terraforming the tiles at the map edges
Dimensions (a width and height) of a rectangle in 2D.
Data about how and where to blit pixels.
Ground palette sprite of a tile, together with its sprite layout.
uint16_t local_id
id defined by the grf file for this entity
const struct GRFFile * grffile
grf file that introduced this entity
ConstructionSettings construction
construction of things in-game
List of hotkeys for a window.
All data for a single hotkey.
static uint MaxY()
Gets the maximum Y coordinate within the map, including MP_VOID.
static debug_inline uint MaxX()
Gets the maximum X coordinate within the map, including MP_VOID.
Tindex class_index
Class index of this spec, invalid until class is allocated.
uint8_t sel_view
Selected view of the object.
ObjectClassID sel_class
Selected object class.
uint16_t sel_type
Selected object type within the class.
Allow incrementing of ObjectClassID variables.
bool IsEverAvailable() const
Check whether the object might be available at some point in this game with the current game mode.
static const ObjectSpec * Get(ObjectType index)
Get the specification associated with a specific ObjectType.
GRFFilePropsBase< 2 > grf_prop
Properties related the the grf file.
uint8_t size
The size of this objects; low nibble for X, high nibble for Y.
uint Index() const
Gets the index of this spec.
uint8_t views
The number of views.
uint16_t callback_mask
Bitmask of requested/allowed callbacks.
An object, such as transmitter, on the map.
Coordinates of a point in 2D.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
constexpr uint Horizontal() const
Get total horizontal padding of RectPadding.
constexpr uint Vertical() const
Get total vertical padding of RectPadding.
Specification of a rectangle with absolute coordinates of all edges.
int Width() const
Get width of Rect.
Rect Shrink(int s) const
Copy and shrink Rect by s pixels.
int Height() const
Get height of Rect.
bool click_beep
Beep on a random selection of buttons.
High level window description.
Data structure for an opened window.
void ReInit(int rx=0, int ry=0, bool reposition=false)
Re-initialize a window, and optionally change its size.
void InvalidateData(int data=0, bool gui_scope=true)
Mark this window's data as invalid (in need of re-computing)
virtual void SetStringParameters([[maybe_unused]] WidgetID widget) const
Initialize string parameters for a widget.
ResizeInfo resize
Resize information.
virtual EventState OnHotkey(int hotkey)
A hotkey has been pressed.
virtual void OnInit()
Notification that the nested widget tree gets initialized.
Owner GetTileOwner(Tile tile)
Returns the owner of a tile.
constexpr TileIndex INVALID_TILE
The very nice invalid tile marker.
Functions related to tile highlights.
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows).
void SetObjectToPlaceWnd(CursorID icon, PaletteID pal, HighLightStyle mode, Window *w)
Change the cursor and mouse click/drag handling to a mode for performing special operations like tile...
void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method)
Selects tiles while dragging.
void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process)
highlighting tiles while only going over them with the mouse
@ HT_DIAGONAL
Also allow 'diagonal rectangles'. Only usable in combination with HT_RECT or HT_POINT.
@ HT_RECT
rectangle (stations, depots, ...)
void SetTileSelectSize(int w, int h)
Highlight w by h tiles at the cursor.
Functions related to (drawing on) viewports.
ViewportDragDropSelectionProcess
Drag and drop selection process, or, what to do with an area of land when you've selected it.
@ DDSP_BUILD_OBJECT
Build an object.
ViewportPlaceMethod
Viewport place method (type of highlighted area and placed objects)
@ VPM_X_AND_Y
area of land in X and Y directions
Window functions not directly related to making/drawing windows.
Functions, definitions and such used only by the GUI.
@ WDF_CONSTRUCTION
This window is used for construction; close it whenever changing company.
@ WDP_AUTO
Find a place automatically.
int32_t WindowNumber
Number to differentiate different windows of the same class.
EventState
State of handling an event.
@ ES_NOT_HANDLED
The passed event is not handled.
@ WC_BUILD_OBJECT
Build object; Window numbers:
@ WC_BUILD_TOOLBAR
Build toolbar; Window numbers:
Functions related to zooming.
int ScaleSpriteTrad(int value)
Scale traditional pixel dimensions to GUI zoom level, for drawing sprites.
int ScaleGUITrad(int value)
Scale traditional pixel dimensions to GUI zoom level.