Merge remote-tracking branch 'upstream/develop' into new-save-format

This commit is contained in:
Gymnasiast 2021-07-19 19:04:19 +02:00
commit b2ffbb3639
No known key found for this signature in database
GPG Key ID: DBFFF47AB2CA3EDD
123 changed files with 1741 additions and 1543 deletions

View File

@ -11,7 +11,7 @@ assignees: ''
Fill in the placeholders below. Delete any headings and placeholders that you do not fill in.
-->
**OS:** [e.g. Windows 10]
**Version:** [e.g. 0.3.3]
**Version:** [e.g. 0.3.4]
**Commit/Build:** [e.g. 426e106]
<!-- Explanation of the issue -->

View File

@ -7,7 +7,7 @@ env:
OPENRCT2_BUILD_SERVER: GitHub
OPENRCT2_ORG_TOKEN: ${{ secrets.OPENRCT2_ORG_TOKEN }}
BACKTRACE_IO_TOKEN: ${{ secrets.BACKTRACE_IO_TOKEN }}
OPENRCT2_VERSION: 0.3.3
OPENRCT2_VERSION: 0.3.4
jobs:
lint-commit:
name: Lint Commit Message

View File

@ -180,26 +180,6 @@ execute_process(
)
# Defines
if (USE_MMAP)
add_definitions(-DUSE_MMAP)
endif ()
if (DISABLE_NETWORK)
add_definitions(-DDISABLE_NETWORK)
endif ()
if (DISABLE_HTTP)
add_definitions(-DDISABLE_HTTP)
endif ()
if (DISABLE_TTF)
add_definitions(-DNO_TTF)
endif ()
if (ENABLE_LIGHTFX)
add_definitions(-D__ENABLE_LIGHTFX__)
endif ()
if (ENABLE_SCRIPTING)
add_definitions(-DENABLE_SCRIPTING)
endif ()
if (NOT DISABLE_DISCORD_RPC)
if (UNIX AND NOT APPLE)
find_package(DiscordRPC)
@ -366,6 +346,27 @@ if(NOT DISABLE_GUI)
include("${ROOT_DIR}/src/openrct2-ui/CMakeLists.txt" NO_POLICY_SCOPE)
endif()
# Defines
if (USE_MMAP)
target_compile_options(libopenrct2 PUBLIC -DUSE_MMAP)
endif ()
if (DISABLE_NETWORK)
target_compile_options(libopenrct2 PUBLIC -DDISABLE_NETWORK)
endif ()
if (DISABLE_HTTP)
target_compile_options(libopenrct2 PUBLIC -DDISABLE_HTTP)
endif ()
if (DISABLE_TTF)
target_compile_options(libopenrct2 PUBLIC -DNO_TTF)
endif ()
if (ENABLE_LIGHTFX)
target_compile_options(libopenrct2 PUBLIC -D__ENABLE_LIGHTFX__)
endif ()
if (ENABLE_SCRIPTING)
target_compile_options(libopenrct2 PUBLIC -DENABLE_SCRIPTING)
endif ()
# g2
add_custom_command(
OUTPUT g2.dat

View File

@ -170,6 +170,8 @@ The following people are not part of the development team, but have been contrib
* Ryan D. (rctdude2)
* (zrowny)
* Emre Aydin (aemreaydin)
* Daniel Karandikar (DKarandikar)
* Struan Clark (xtruan)
## Toolchain
* (Balletie) - macOS

View File

@ -3647,6 +3647,7 @@ STR_6449 :{WINDOW_COLOUR_2}Tracks:
STR_6450 :{BLACK}“{STRING}”
STR_6451 :{BLACK}“{STRING}” - {STRING}
STR_6452 :{WINDOW_COLOUR_2}Sells: {BLACK}{STRING}
STR_6453 :Copy version info
#############
# Scenarios #

View File

@ -3695,6 +3695,7 @@ STR_6449 :{WINDOW_COLOUR_2}Kantoj:
STR_6450 :{BLACK}“{STRING}”
STR_6451 :{BLACK}“{STRING}” - {STRING}
STR_6452 :{WINDOW_COLOUR_2}Vendas: {BLACK}{STRING}
STR_6453 :Kopii informojn de versio
#############
# Scenarios #

View File

@ -95,6 +95,7 @@ STR_0090 :Mineur
STR_0091 :Manège Inconnu (59)
STR_0092 :Moteur à induction linéaire
STR_0093 :Montagnes russes hybrides
STR_0094 :Montagnes russes à rail unique
STR_0512 :Des voitures individuelles descendent des pentes régulières en virage
STR_0513 :Grand huit que les passagers parcourent debout
STR_0514 :Des voitures suspendues sous la voie se balancent dans les virages des montagnes russes
@ -175,6 +176,7 @@ STR_0599 :Des voitures individuelles descendent des pentes régulières en vi
STR_0600 :Train de mine à propulsion franchissant une voie régulière et alambiquée
STR_0602 :Train de montagnes russes propulsé hors de la station par des moteurs à induction linéaire et fonçant dans des inversions renversantes
STR_0603 :Train de montagnes russes en bois avec des rails en acier, permettant des grandes chutes et des inversions.
STR_0604 :Les passagers parcourent une voie à rail unique dans des voitures mono-places, à travers des inversions et des virages serrés
STR_0767 :Visiteur {INT32}
STR_0768 :Agent dentretien {INT32}
STR_0769 :Mécanicien {INT32}
@ -3296,18 +3298,18 @@ STR_6014 :Les visiteurs ne paieront que les tickets pour entrer dans les attr
STR_6015 :Incliné
STR_6016 :Modifier case
STR_6017 :Merci de ralentir un peu
STR_6018 :Construction dattraction - Tourner à gauche
STR_6019 :Construction dattraction - Tourner à droite
STR_6020 :Construction dattraction - Utiliser la voie par défaut
STR_6021 :Construction dattraction - Pente descendante
STR_6022 :Construction dattraction - Pente ascendante
STR_6023 :Construction dattraction - Activer/désactiver la remontée à chaîne
STR_6024 :Construction dattraction - Incliner à gauche
STR_6025 :Construction dattraction - Incliner à droite
STR_6026 :Construction dattraction - Morceau précédent
STR_6027 :Construction dattraction - Morceau suivante
STR_6028 :Construction dattraction - Construire lactuel
STR_6029 :Construction dattraction - Démolir lactuel
STR_6018 :Construction - Tourner à gauche
STR_6019 :Construction - Tourner à droite
STR_6020 :Construction - Utiliser la voie par défaut
STR_6021 :Construction - Pente descendante
STR_6022 :Construction - Pente ascendante
STR_6023 :Construction - Activer/désactiver la remontée à chaîne
STR_6024 :Construction - Incliner à gauche
STR_6025 :Construction - Incliner à droite
STR_6026 :Construction - Morceau précédent
STR_6027 :Construction - Morceau suivante
STR_6028 :Construction - Construire lactuel
STR_6029 :Construction - Démolir lactuel
STR_6030 :Pipette de décor. Cliquez sur un décor sur la carte afin de sélectionner la même pièce et la construire.
STR_6031 :Description du serveur :
STR_6032 :Message de bienvenue du serveur :
@ -3643,20 +3645,64 @@ STR_6392 :Impossible de trouver {STRING} à cet emplacement.
STR_6393 :Choix des objectifs
STR_6394 :Objectif
STR_6395 :Maintenance
STR_6396 :Désactiver écran de veille et économie dénergie pour moniteur
STR_6397 :Si coché, lécran de veille et autres paramètres déconomie dénergie pour moniteur seront désactivés pendant quOpenRCT2 tourne
STR_6398 :Le fichier contient des types d'attractions non-supportés. Veuillez mettre à jour OpenRCT2.
STR_6399 :OpenRCT2 a besoin des fichiers originaux de RollerCoaster Tycoon 2 pour fonctionner. Veuillez indiquez le chemin où vous avez installé RollerCoaster Tycoon 2 dans la variable "game_path" dans le fichier config.ini, puis redémarrez OpenRCT2.
STR_6400 :J'ai téléchargé l'installeur GOG hors-ligne de RollerCoaster Tycoon 2, mais je ne l'ai pas encoré installé
STR_6401 :J'ai déjà installé RollerCoaster Tycoon 2
STR_6396 :Désactiver écr. de veille et éco. dénergie du moniteur
STR_6397 :Si coché, lécran de veille et dautres fonctionnalités déconomie dénergie du moniteur seront désactivés pendant quOpenRCT2 est lancé.
STR_6398 :Le fichier contient des types dattractions non supportés. Veuillez mettre à jour OpenRCT2 vers une version plus récente.
STR_6399 :OpenRCT2 a besoin des fichiers originaux de RollerCoaster Tycoon 2 pour fonctionner. Veuillez indiquer le chemin où vous avez installé RollerCoaster Tycoon 2 dans la variable “game_path” dans le fichier config.ini, puis redémarrez OpenRCT2.
STR_6400 :Jai téléchargé linstalleur GOG hors-ligne de RollerCoaster Tycoon 2, mais je ne lai pas encore installé
STR_6401 :Jai déjà installé RollerCoaster Tycoon 2
STR_6402 :Configuration des données OpenRCT2
STR_6403 :Sélectionnez la situation qui s'applique dans votre cas
STR_6404 :Veuillez sélectionnez l'installeur GOG de RollerCoaster Tycoon 2.
STR_6405 :Selection installeur GOG
STR_6403 :Sélectionnez la situation qui sapplique à votre cas
STR_6404 :Veuillez sélectionnez linstalleur GOG de RollerCoaster Tycoon 2.
STR_6405 :Sélectionner linstalleur GOG
STR_6406 :Installeur GOG RollerCoaster Tycoon 2
STR_6407 :Ceci peut prendre quelques minutes.
STR_6408 :Veuillez installer "innoextract" pour extraire l'installeur GOG, et redémarrez OpenRCT2.
STR_6409 :Le fichier sélectionné n'est pas l'installeur GOG hors-ligne de RollerCoaster Tycoon 2. Soit vous avez téléchargé l'installeur de GOG Galaxy ou vous avez sélectionné le mauvais fichier.
STR_6408 :Veuillez installer “innoextract” pour extraire linstalleur GOG, et redémarrez OpenRCT2.
STR_6409 :Le fichier sélectionné nest pas linstalleur GOG hors-ligne de RollerCoaster Tycoon 2. Vous avez peut-être téléchargé linstalleur de GOG Galaxy ou sélectionné le mauvais fichier.
STR_6410 :Zoom avant/arrière
STR_6411 :Afficher les boutons de zoom dans la barre doutils
STR_6412 :Entrée pavé numérique
STR_6413 :Maj
STR_6414 :Maj gauche
STR_6415 :Maj droite
STR_6416 :Ctrl
STR_6417 :Ctrl gauche
STR_6418 :Ctrl droite
STR_6419 :Alt
STR_6420 :Alt gauche
STR_6421 :Alt droite
STR_6422 :Cmd
STR_6423 :Cmd gauche
STR_6424 :Cmd droite
STR_6425 :Joystick gauche
STR_6426 :Joystick droite
STR_6427 :Joystick haut
STR_6428 :Joystick bas
STR_6429 :Joystick {INT32}
STR_6430 :Bouton gauche souris
STR_6431 :Bouton droite souris
STR_6432 :Bouton souris {INT32}
STR_6433 :Supprimer
STR_6434 :Supprimer toutes les combinaisons pour ce raccourci.
STR_6435 :{WINDOW_COLOUR_2}Vandales arrêtés : {BLACK}{COMMA16}
STR_6436 :Permuter la visibilité
STR_6437 :Invisible
STR_6438 :I
STR_6439 :Inspecteur de cases - Permuter la visibilité
STR_6440 :Eau transparente
STR_6441 :Au moins un objet de surface dallée (hors file dattente) doit être sélectionné.
STR_6442 :Au moins un objet de surface de file dattente doit être sélectionné.
STR_6443 :Au moins un object de rambarde doit être sélectionné.
STR_6444 :Surfaces dallée
STR_6445 :Rambardes
STR_6446 :{WINDOW_COLOUR_2}Nom de la surface : {BLACK}{STRINGID}
STR_6447 :{WINDOW_COLOUR_2}Nom de la rambarde : {BLACK}{STRINGID}
STR_6448 :Format dobjet non supporté
STR_6449 :{WINDOW_COLOUR_2}Pistes :
STR_6450 :{BLACK}“{STRING}”
STR_6451 :{BLACK}“{STRING}” - {STRING}
STR_6452 :{WINDOW_COLOUR_2}Vend : {BLACK}{STRING}
STR_6453 :Copier les informations de version
#############
# Scenarios #

View File

@ -3686,6 +3686,24 @@ STR_6432 :Mouse {INT32}
STR_6433 :Rimuovi
STR_6434 :Rimuovi tutte le associazioni per questa scorciatoia.
STR_6435 :{WINDOW_COLOUR_2}Vandalismi fermati: {BLACK}{COMMA16}
STR_6436 :Attiva/disattiva invisibilità
STR_6437 :Invisibile
STR_6438 :I
STR_6439 :Analizzatore celle: Attiva/disattiva invisibilità
STR_6440 :Acqua trasparente
STR_6441 :Occorre selezionare almeno un oggetto di superficie sentiero di tipo non coda.
STR_6442 :Occorre selezionare almeno un oggetto di superficie sentiero code.
STR_6443 :Occorre selezionare almeno un oggetto di parapetto sentieri.
STR_6444 :Superfici sentieri
STR_6445 :Parapetti sentieri
STR_6446 :{WINDOW_COLOUR_2}Nome superficie: {BLACK}{STRINGID}
STR_6447 :{WINDOW_COLOUR_2}Nome parapetto: {BLACK}{STRINGID}
STR_6448 :Formato oggetto non supportato
STR_6449 :{WINDOW_COLOUR_2}Tracce:
STR_6450 :{BLACK}“{STRING}”
STR_6451 :{BLACK}“{STRING}” - {STRING}
STR_6452 :{WINDOW_COLOUR_2}Vende: {BLACK}{STRING}
STR_6453 :Copia info versione
#############

View File

@ -4,7 +4,7 @@
STR_0000 :
STR_0001 :{STRINGID} {COMMA16}
STR_0002 :스파이럴 롤러코스터
STR_0003 :스탠드업 롤러코스터
STR_0003 :스탠드 업 롤러코스터
STR_0004 :서스펜디드 스윙잉 코스터
STR_0005 :인버티드 롤러코스터
STR_0006 :주니어 롤러코스터
@ -813,7 +813,7 @@ STR_1424 :보도
STR_1425 :보도
STR_1426 :대기 줄
STR_1427 :{WINDOW_COLOUR_2}손님: {BLACK}{COMMA32}명/시간
STR_1428 :{WINDOW_COLOUR_2}입장료:
STR_1428 :{WINDOW_COLOUR_2}탑승료:
STR_1429 :{POP16}{POP16}{POP16}{CURRENCY2DP}
STR_1430 :무료
STR_1431 :걷는 중
@ -3698,6 +3698,7 @@ STR_6449 :{WINDOW_COLOUR_2}트랙:
STR_6450 :{BLACK}“{STRING}”
STR_6451 :{BLACK}“{STRING}” - {STRING}
STR_6452 :{WINDOW_COLOUR_2}판매: {BLACK}{STRING}
STR_6453 :버전 정보 복사
#############
# Scenarios #

View File

@ -3695,6 +3695,7 @@ STR_6449 :{WINDOW_COLOUR_2}Trilhos:
STR_6450 :{BLACK}“{STRING}”
STR_6451 :{BLACK}“{STRING}” - {STRING}
STR_6452 :{WINDOW_COLOUR_2}Vende: {BLACK}{STRING}
STR_6453 :Copiar informações da versão
#############
# Scenarios #

43
debian/changelog vendored
View File

@ -1,7 +1,48 @@
openrct2 (0.3.3-develop-1) unstable; urgency=medium
openrct2 (0.3.4-develop-1) unstable; urgency=medium
* Nightly develop build.
openrct2 (0.3.4) stable; urgency=medium
* Feature: [#13967] Track List window now displays the path to the design when debugging tools are on.
* Feature: [#14071] “Vandals stopped” statistic for security guards.
* Feature: [#14169] Lighting effects for shops and stalls.
* Feature: [#14296] Allow using early scenario completion in multiplayer.
* Feature: [#14538] [Plugin] Add property for getting current plugin api version.
* Feature: [#14620] [Plugin] Add properties related to guest generation.
* Feature: [#14636] [Plugin] Add properties related to climate and weather.
* Feature: [#14731] Opaque water (like in RCT1).
* Change: [#14496] [Plugin] Rename Object to LoadedObject to fix conflicts with Typescript's Object interface.
* Change: [#14536] [Plugin] Rename ListView to ListViewWidget to make it consistent with names of other widgets.
* Change: [#14751] “No construction above tree height” limitation now allows placing high trees.
* Change: [#14841] Redesign the About window, including new button to copy the current version info.
* Fix: [#11829] Visual glitches and crashes when using RCT1 assets from mismatched or corrupt CSG1.DAT and CSG1i.DAT files.
* Fix: [#12262] Windows can appear off screen with small screens or high scaling.
* Fix: [#13581] Opening the Options menu causes a noticeable drop in FPS.
* Fix: [#13894] Block brakes do not animate.
* Fix: [#13986] OpenGL: Track preview window, flip/rotate button do not update the thumbnail.
* Fix: [#14315] Crash when trying to rename Air Powered Vertical Coaster in Korean.
* Fix: [#14330] join_server uses default_port from config.
* Fix: [#14415] Entrances/exits are removed when built on top of each other.
* Fix: [#14449] Surface smoothing at extra zoom levels not working.
* Fix: [#14468] Cannot close Options window on Android.
* Fix: [#14493] [Plugin] isHidden only works for tile elements up to the first element with a base height of over 32.
* Fix: [#14587] Confusing message when joining server with mismatched network version.
* Fix: [#14604] American-style Steam Trains are not imported correctly from RCT1 saves.
* Fix: [#14638] The “About OpenRCT2” window cannot be themed.
* Fix: [#14682] Crash when painting Swinging Ships with invalid subtype.
* Fix: [#14707] Crash when window is closed during text input.
* Fix: [#14710] Ride/Track Design preview does not show if it costs more money than available.
* Fix: [#14774] Incorrect import of scenery research caused all scenery to be unlocked.
* Fix: [#14806] Incorrect function call in WallPlaceAction plugin code.
* Fix: [#14871] Crash when trying to place track when there are no free tile elements.
* Fix: [#14880] Unable to close changelog window when its content fails to load.
* Fix: [#14945] Incorrect drop height penalty on log flume ride.
* Fix: [#14964] Unable to build in multiplayer as client with "Build while paused" cheat enabled when the host is paused.
* Improved: [#14511] “Unlock operating limits” cheat now also unlocks all music.
* Improved: [#14712, #14716] Improve startup times.
* Improved: [#14982] Add Malgun Gothic and change Nanum Gothic filename for Korean.
openrct2 (0.3.3) stable; urgency=medium
* Feature: [#12110] Add Hybrid Coaster (Rocky Mountain Construction I-Box) track type.

View File

@ -1,7 +1,12 @@
0.3.3+ (in development)
0.3.4+ (in development)
------------------------------------------------------------------------
- Improved: [#12626] Allow using RCT2 saves to mark RCT Classic (.sea) parks as finished and vice versa.
0.3.4 (2021-07-19)
------------------------------------------------------------------------
- Feature: [#13967] Track List window now displays the path to the design when debugging tools are on.
- Feature: [#14071] “Vandals stopped” statistic for security guards.
- Feature: [#14169] Lighting effects for shops and stalls.
- Feature: [#14296] Allow using early scenario completion in multiplayer.
- Feature: [#14538] [Plugin] Add property for getting current plugin api version.
- Feature: [#14620] [Plugin] Add properties related to guest generation.
@ -10,7 +15,9 @@
- Change: [#14496] [Plugin] Rename Object to LoadedObject to fix conflicts with Typescript's Object interface.
- Change: [#14536] [Plugin] Rename ListView to ListViewWidget to make it consistent with names of other widgets.
- Change: [#14751] “No construction above tree height” limitation now allows placing high trees.
- Change: [#14841] Redesign the About window, including new button to copy the current version info.
- Fix: [#11829] Visual glitches and crashes when using RCT1 assets from mismatched or corrupt CSG1.DAT and CSG1i.DAT files.
- Fix: [#12262] Windows can appear off screen with small screens or high scaling.
- Fix: [#13581] Opening the Options menu causes a noticeable drop in FPS.
- Fix: [#13894] Block brakes do not animate.
- Fix: [#13986] OpenGL: Track preview window, flip/rotate button do not update the thumbnail.
@ -28,8 +35,13 @@
- Fix: [#14710] Ride/Track Design preview does not show if it costs more money than available.
- Fix: [#14774] Incorrect import of scenery research caused all scenery to be unlocked.
- Fix: [#14806] Incorrect function call in WallPlaceAction plugin code.
- Fix: [#14871] Crash when trying to place track when there are no free tile elements.
- Fix: [#14880] Unable to close changelog window when its content fails to load.
- Fix: [#14945] Incorrect drop height penalty on log flume ride.
- Fix: [#14964] Unable to build in multiplayer as client with "Build while paused" cheat enabled when the host is paused.
- Improved: [#14511] “Unlock operating limits” cheat now also unlocks all music.
- Improved: [#14712, #14716]: Improve startup times.
- Improved: [#14712, #14716] Improve startup times.
- Improved: [#14982] Add Malgun Gothic and change Nanum Gothic filename for Korean.
0.3.3 (2021-03-13)
------------------------------------------------------------------------

View File

@ -66,6 +66,9 @@
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
<releases>
<release version="0.3.4" date="2021-07-19">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.4</url>
</release>
<release version="0.3.3" date="2021-03-13">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.3</url>
</release>

View File

@ -13,7 +13,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.3.3</string>
<string>0.3.4</string>
<key>CFBundleSignature</key>
<string>ORCT</string>
<key>LSMinimumSystemVersion</key>

View File

@ -1,5 +1,5 @@
Last updated: 2021-03-13
Release version: 0.3.3
Last updated: 2021-07-19
Release version: 0.3.4
------------------------------------------------------------------------

View File

@ -10,7 +10,7 @@ An open-source re-implementation of RollerCoaster Tycoon 2. A construction and m
### Download
| Latest release | Latest development build |
|----------------|--------------------------|
| [![OpenRCT2.org](https://img.shields.io/badge/master-v0.3.3-green.svg)](https://openrct2.org/downloads/master/latest) | [![OpenRCT2.org](https://img.shields.io/badge/develop-v0.3.3+-blue.svg)](https://openrct2.org/downloads/develop/latest) |
| [![OpenRCT2.org](https://img.shields.io/badge/master-v0.3.4-green.svg)](https://openrct2.org/downloads/master/latest) | [![OpenRCT2.org](https://img.shields.io/badge/develop-v0.3.4+-blue.svg)](https://openrct2.org/downloads/develop/latest) |
---

View File

@ -4,7 +4,7 @@
# It should be dot sourced into your environment
if [[ "$GITHUB_ACTIONS" != "true" ]]; then
export OPENRCT2_BUILD_SERVER=$(hostname)
export OPENRCT2_VERSION=0.3.3
export OPENRCT2_VERSION=0.3.4
GITHUB_REF=$(git rev-parse --symbolic-full-name HEAD)
GITHUB_SHA=$(git rev-parse HEAD)
fi

View File

@ -10,7 +10,7 @@ android {
targetSdkVersion 28
versionCode 2
versionName '0.3.3'
versionName '0.3.4'
externalNativeBuild {
cmake {

View File

@ -46,11 +46,11 @@ namespace OpenRCT2::Ui
class InputManager
{
private:
uint32_t _lastJoystickCheck;
uint32_t _lastJoystickCheck{};
std::vector<SDL_Joystick*> _joysticks;
std::queue<InputEvent> _events;
ScreenCoordsXY _viewScroll;
uint32_t _mouseState;
uint32_t _mouseState{};
std::vector<uint8_t> _keyboardState;
void CheckJoysticks();

View File

@ -253,7 +253,8 @@ InteractionInfo ViewportInteractionGetItemRight(const ScreenCoordsXY& screenCoor
if ((gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) && gEditorStep != EditorStep::RollercoasterDesigner)
return info;
auto flags = static_cast<int32_t>(~EnumsToFlags(ViewportInteractionItem::Terrain, ViewportInteractionItem::Water));
constexpr auto flags = static_cast<int32_t>(
~EnumsToFlags(ViewportInteractionItem::Terrain, ViewportInteractionItem::Water));
info = get_map_coordinates_from_pos(screenCoords, flags);
auto tileElement = info.Element;

View File

@ -86,14 +86,21 @@ static bool WindowFitsOnScreen(const ScreenCoordsXY& loc, int32_t width, int32_t
return WindowFitsBetweenOthers(loc, width, height);
}
static ScreenCoordsXY ClampWindowToScreen(const ScreenCoordsXY& pos, const int32_t screenWidth, const int32_t width)
static ScreenCoordsXY ClampWindowToScreen(
const ScreenCoordsXY& pos, const int32_t screenWidth, const int32_t screenHeight, const int32_t width, const int32_t height)
{
auto screenPos = pos;
if (screenPos.x < 0)
if (width > screenWidth || screenPos.x < 0)
screenPos.x = 0;
if (screenPos.x + width > screenWidth)
else if (screenPos.x + width > screenWidth)
screenPos.x = screenWidth - width;
auto toolbarAllowance = (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) ? 0 : (TOP_TOOLBAR_HEIGHT + 1);
if (height - toolbarAllowance > screenHeight || screenPos.y < toolbarAllowance)
screenPos.y = toolbarAllowance;
else if (screenPos.y + height - toolbarAllowance > screenHeight)
screenPos.y = screenHeight + toolbarAllowance - height;
return screenPos;
}
@ -115,7 +122,7 @@ static ScreenCoordsXY GetAutoPositionForNewWindow(int32_t width, int32_t height)
{
if (WindowFitsWithinSpace(cornerPos, width, height))
{
return ClampWindowToScreen(cornerPos, screenWidth, width);
return ClampWindowToScreen(cornerPos, screenWidth, screenHeight, width, height);
}
}
@ -139,7 +146,7 @@ static ScreenCoordsXY GetAutoPositionForNewWindow(int32_t width, int32_t height)
auto screenPos = w->windowPos + offset;
if (WindowFitsWithinSpace(screenPos, width, height))
{
return ClampWindowToScreen(screenPos, screenWidth, width);
return ClampWindowToScreen(screenPos, screenWidth, screenHeight, width, height);
}
}
}
@ -164,7 +171,7 @@ static ScreenCoordsXY GetAutoPositionForNewWindow(int32_t width, int32_t height)
auto screenPos = w->windowPos + offset;
if (WindowFitsOnScreen(screenPos, width, height))
{
return ClampWindowToScreen(screenPos, screenWidth, width);
return ClampWindowToScreen(screenPos, screenWidth, screenHeight, width, height);
}
}
}
@ -180,7 +187,7 @@ static ScreenCoordsXY GetAutoPositionForNewWindow(int32_t width, int32_t height)
}
}
return ClampWindowToScreen(screenPos, screenWidth, width);
return ClampWindowToScreen(screenPos, screenWidth, screenHeight, width, height);
}
static ScreenCoordsXY GetCentrePositionForNewWindow(int32_t width, int32_t height)

View File

@ -392,7 +392,7 @@ namespace OpenRCT2::Ui::Windows
{
number = GetNewWindowNumber();
custom_info = new CustomWindowInfo(owner, desc);
enabled_widgets = (1 << WIDX_CLOSE);
enabled_widgets = (1ULL << WIDX_CLOSE);
// Set window tab
page = desc.TabIndex.value_or(0);

View File

@ -7,10 +7,12 @@
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#include <SDL_clipboard.h>
#include <openrct2-ui/interface/Widget.h>
#include <openrct2-ui/windows/Window.h>
#include <openrct2/Context.h>
#include <openrct2/OpenRCT2.h>
#include <openrct2/Version.h>
#include <openrct2/drawing/Drawing.h>
#include <openrct2/localisation/Localisation.h>
#include <openrct2/localisation/LocalisationService.h>
@ -18,9 +20,9 @@
#include <openrct2/ui/UiContext.h>
static constexpr const int32_t WW = 400;
static constexpr const int32_t WH = 385;
static constexpr const int32_t WH = 352;
static constexpr const rct_string_id WINDOW_TITLE = STR_ABOUT;
constexpr int32_t TABHEIGHT = 50;
static constexpr const int32_t TABHEIGHT = 50;
// clang-format off
enum
@ -40,9 +42,15 @@ enum WINDOW_ABOUT_WIDGET_IDX {
WIDX_PAGE_START,
// About OpenRCT2
WIDX_CHANGELOG = WIDX_PAGE_START,
WIDX_JOIN_DISCORD,
WIDX_INTRO = WIDX_PAGE_START,
WIDX_OPENRCT2_LOGO,
WIDX_VERSION,
WIDX_COPY_BUILD_INFO,
WIDX_NEW_VERSION,
WIDX_CHANGELOG,
WIDX_JOIN_DISCORD,
WIDX_CONTRIBUTORS,
WIDX_COPYRIGHT,
};
#define WIDGETS_MAIN \
@ -53,9 +61,15 @@ enum WINDOW_ABOUT_WIDGET_IDX {
static rct_widget window_about_openrct2_widgets[] = {
WIDGETS_MAIN,
MakeWidget({100, WH - TABHEIGHT - (14 + 3) * 2}, {200, 14}, WindowWidgetType::Button, WindowColour::Secondary, STR_CHANGELOG_ELLIPSIS), // changelog button
MakeWidget({100, WH - TABHEIGHT - (14 + 3) * 1}, {200, 14}, WindowWidgetType::Button, WindowColour::Secondary, STR_JOIN_DISCORD ), // "join discord" button
MakeWidget({100, WH - TABHEIGHT - (14 + 3) * 0}, {200, 14}, WindowWidgetType::Placeholder, WindowColour::Secondary, STR_UPDATE_AVAILABLE ), // "new version" button
MakeWidget({10, 60}, {WW - 20, 20}, WindowWidgetType::LabelCentred, WindowColour::Secondary, STR_ABOUT_OPENRCT2_DESCRIPTION), // Introduction
MakeWidget({30, 90}, {128, 128}, WindowWidgetType::Placeholder, WindowColour::Secondary, STR_NONE), // OpenRCT2 Logo
MakeWidget({168, 100}, {173, 24}, WindowWidgetType::Placeholder, WindowColour::Secondary, STR_NONE), // Build version
MakeWidget({344, 100 }, {24, 24}, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_COPY, STR_COPY_BUILD_HASH ), // "Copy build info" button
MakeWidget({168, 115 + 24}, {200, 14}, WindowWidgetType::Placeholder, WindowColour::Secondary, STR_UPDATE_AVAILABLE ), // "new version" button
MakeWidget({168, 115 + 48}, {200, 14}, WindowWidgetType::Button, WindowColour::Secondary, STR_CHANGELOG_ELLIPSIS), // changelog button
MakeWidget({168, 115 + 72}, {200, 14}, WindowWidgetType::Button, WindowColour::Secondary, STR_JOIN_DISCORD ), // "join discord" button
MakeWidget({10, 250}, {WW - 20, 50}, WindowWidgetType::LabelCentred, WindowColour::Secondary, STR_ABOUT_OPENRCT2_DESCRIPTION_2), // Contributors
MakeWidget({10, 300}, {WW - 20, 50}, WindowWidgetType::LabelCentred, WindowColour::Secondary, STR_ABOUT_OPENRCT2_DESCRIPTION_3), // Copyright
{ WIDGETS_END }
};
@ -73,7 +87,7 @@ static rct_widget *window_about_page_widgets[] = {
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_ABOUT_OPENRCT2) | (1ULL << WIDX_TAB_ABOUT_RCT2)
static uint64_t window_about_page_enabled_widgets[] = {
DEFAULT_ENABLED_WIDGETS | (1ULL << WIDX_CHANGELOG) | (1 << WIDX_JOIN_DISCORD),
DEFAULT_ENABLED_WIDGETS | (1ULL << WIDX_COPY_BUILD_INFO) | (1ULL << WIDX_CHANGELOG) | (1ULL << WIDX_JOIN_DISCORD),
DEFAULT_ENABLED_WIDGETS,
};
@ -150,6 +164,9 @@ static void window_about_openrct2_mouseup(rct_window* w, rct_widgetindex widgetI
case WIDX_NEW_VERSION:
context_open_window_view(WV_NEW_VERSION_INFO);
break;
case WIDX_COPY_BUILD_INFO:
SDL_SetClipboardText(gVersionInfoFull);
break;
}
}
@ -164,6 +181,7 @@ static void window_about_openrct2_common_paint(rct_window* w, rct_drawpixelinfo*
ScreenCoordsXY aboutOpenRCT2Coords(w->windowPos.x + aboutOpenRCT2.left + 45, y);
ScreenCoordsXY aboutRCT2Coords(w->windowPos.x + aboutRCT2.left + 45, y);
// Draw tab names
{
auto ft = Formatter();
ft.Add<rct_string_id>(STR_TITLE_SEQUENCE_OPENRCT2);
@ -182,33 +200,10 @@ static void window_about_openrct2_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
window_about_openrct2_common_paint(w, dpi);
int32_t lineHeight = font_get_line_height(FontSpriteBase::MEDIUM);
ScreenCoordsXY aboutCoords(
w->windowPos.x + (w->width / 2), w->windowPos.y + w->widgets[WIDX_PAGE_BACKGROUND].top + lineHeight);
int32_t width = w->width - 20;
aboutCoords.y += DrawTextWrapped(
dpi, aboutCoords, width, STR_ABOUT_OPENRCT2_DESCRIPTION, {}, { w->colours[1], TextAlignment::CENTRE })
+ lineHeight;
rct_size16 logoSize = gfx_get_sprite_size(SPR_G2_LOGO);
gfx_draw_sprite(dpi, ImageId(SPR_G2_LOGO), aboutCoords - ScreenCoordsXY{ logoSize.width / 2, 0 });
aboutCoords.y += logoSize.height + lineHeight * 2;
// About OpenRCT2 text
aboutCoords.y += DrawTextWrapped(
dpi, aboutCoords, width, STR_ABOUT_OPENRCT2_DESCRIPTION_2, {},
{ w->colours[1], TextAlignment::CENTRE })
+ lineHeight + 5;
// Copyright disclaimer; hidden when using truetype fonts to prevent
// the text from overlapping the changelog button.
if (!LocalisationService_UseTrueTypeFont())
{
DrawTextWrapped(
dpi, aboutCoords, width, STR_ABOUT_OPENRCT2_DESCRIPTION_3, {}, { w->colours[1], TextAlignment::CENTRE });
}
// Draw logo on placeholder widget
ScreenCoordsXY logoCoords = w->windowPos
+ ScreenCoordsXY(w->widgets[WIDX_OPENRCT2_LOGO].left, w->widgets[WIDX_OPENRCT2_LOGO].top);
gfx_draw_sprite(dpi, ImageId(SPR_G2_LOGO), logoCoords);
// Version info
utf8 buffer[256];
@ -217,8 +212,12 @@ static void window_about_openrct2_paint(rct_window* w, rct_drawpixelinfo* dpi)
auto ft = Formatter();
ft.Add<const char*>(buffer);
aboutCoords.y = w->windowPos.y + WH - 25;
DrawTextWrapped(dpi, aboutCoords, width, STR_STRING, ft, { w->colours[1], TextAlignment::CENTRE });
auto const& versionPlaceholder = w->widgets[WIDX_VERSION];
auto width = versionPlaceholder.right - versionPlaceholder.left;
auto centreX = versionPlaceholder.left + width / 2;
auto centreY = (versionPlaceholder.top + versionPlaceholder.bottom - font_get_line_height(FontSpriteBase::MEDIUM)) / 2;
auto centrePos = w->windowPos + ScreenCoordsXY(centreX, centreY);
DrawTextWrapped(dpi, centrePos, width, STR_STRING, ft, { w->colours[1], TextAlignment::CENTRE });
}
static void window_about_openrct2_invalidate(rct_window* w)

View File

@ -114,9 +114,9 @@ public:
void OnOpen() override
{
widgets = window_banner_widgets;
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_BANNER_TEXT) | (1 << WIDX_BANNER_NO_ENTRY)
| (1 << WIDX_BANNER_DEMOLISH) | (1 << WIDX_MAIN_COLOUR) | (1 << WIDX_TEXT_COLOUR_DROPDOWN)
| (1 << WIDX_TEXT_COLOUR_DROPDOWN_BUTTON);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_BANNER_TEXT) | (1ULL << WIDX_BANNER_NO_ENTRY)
| (1ULL << WIDX_BANNER_DEMOLISH) | (1ULL << WIDX_MAIN_COLOUR) | (1ULL << WIDX_TEXT_COLOUR_DROPDOWN)
| (1ULL << WIDX_TEXT_COLOUR_DROPDOWN_BUTTON);
WindowInitScrollWidgets(this);
}

View File

@ -85,6 +85,8 @@ public:
*/
bool SetPersonality(int personality)
{
enabled_widgets = (1ULL << WIDX_CLOSE);
switch (personality)
{
case WV_NEW_VERSION_INFO:
@ -94,7 +96,7 @@ public:
}
_personality = WV_NEW_VERSION_INFO;
NewVersionProcessInfo();
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_OPEN_URL);
enabled_widgets |= (1ULL << WIDX_OPEN_URL);
widgets[WIDX_OPEN_URL].type = WindowWidgetType::Button;
return true;
@ -103,7 +105,6 @@ public:
{
return false;
}
enabled_widgets = (1 << WIDX_CLOSE);
_personality = WV_CHANGELOG;
return true;

View File

@ -446,7 +446,7 @@ static rct_string_id window_cheats_page_titles[] = {
class CheatsWindow final : public Window
{
private:
char _moneySpinnerText[MONEY_STRING_MAXLENGTH];
char _moneySpinnerText[MONEY_STRING_MAXLENGTH]{};
money32 _moneySpinnerValue = CHEATS_MONEY_DEFAULT;
int32_t _selectedStaffSpeed = 1;
int32_t _parkRatingSpinnerValue{};

View File

@ -81,9 +81,9 @@ rct_window* window_clear_scenery_open()
window = WindowCreate(
ScreenCoordsXY(context_get_width() - WW, 29), WW, WH, &window_clear_scenery_events, WC_CLEAR_SCENERY, 0);
window->widgets = window_clear_scenery_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_INCREMENT) | (1 << WIDX_DECREMENT) | (1 << WIDX_PREVIEW)
| (1 << WIDX_SMALL_SCENERY) | (1 << WIDX_LARGE_SCENERY) | (1 << WIDX_FOOTPATH);
window->hold_down_widgets = (1 << WIDX_INCREMENT) | (1 << WIDX_DECREMENT);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_INCREMENT) | (1ULL << WIDX_DECREMENT)
| (1ULL << WIDX_PREVIEW) | (1ULL << WIDX_SMALL_SCENERY) | (1ULL << WIDX_LARGE_SCENERY) | (1ULL << WIDX_FOOTPATH);
window->hold_down_widgets = (1ULL << WIDX_INCREMENT) | (1ULL << WIDX_DECREMENT);
WindowInitScrollWidgets(window);
window_push_others_below(window);
@ -202,8 +202,8 @@ static void window_clear_scenery_update(rct_window* w)
static void window_clear_scenery_invalidate(rct_window* w)
{
// Set the preview image button to be pressed down
w->pressed_widgets = (1 << WIDX_PREVIEW) | (gClearSmallScenery ? (1 << WIDX_SMALL_SCENERY) : 0)
| (gClearLargeScenery ? (1 << WIDX_LARGE_SCENERY) : 0) | (gClearFootpath ? (1 << WIDX_FOOTPATH) : 0);
w->pressed_widgets = (1ULL << WIDX_PREVIEW) | (gClearSmallScenery ? (1ULL << WIDX_SMALL_SCENERY) : 0)
| (gClearLargeScenery ? (1ULL << WIDX_LARGE_SCENERY) : 0) | (gClearFootpath ? (1ULL << WIDX_FOOTPATH) : 0);
// Update the preview image (for tool sizes up to 7)
window_clear_scenery_widgets[WIDX_PREVIEW].image = LandTool::SizeToSpriteIndex(gLandToolSize);

View File

@ -71,10 +71,10 @@ rct_window* custom_currency_window_open()
window = WindowCreateCentred(400, 100, &_windowCustomCurrencyEvents, WC_CUSTOM_CURRENCY_CONFIG, 0);
window->widgets = window_custom_currency_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RATE) | (1 << WIDX_RATE_UP) | (1 << WIDX_RATE_DOWN)
| (1 << WIDX_SYMBOL_TEXT) | (1 << WIDX_AFFIX_DROPDOWN) | (1 << WIDX_AFFIX_DROPDOWN_BUTTON);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_RATE) | (1ULL << WIDX_RATE_UP) | (1ULL << WIDX_RATE_DOWN)
| (1ULL << WIDX_SYMBOL_TEXT) | (1ULL << WIDX_AFFIX_DROPDOWN) | (1ULL << WIDX_AFFIX_DROPDOWN_BUTTON);
window->hold_down_widgets = (1 << WIDX_RATE_UP) | (1 << WIDX_RATE_DOWN);
window->hold_down_widgets = (1ULL << WIDX_RATE_UP) | (1ULL << WIDX_RATE_DOWN);
WindowInitScrollWidgets(window);
window->colours[0] = COLOUR_LIGHT_BROWN;
window->colours[1] = COLOUR_LIGHT_BROWN;

View File

@ -71,8 +71,9 @@ rct_window* window_debug_paint_open()
&window_debug_paint_events, WC_DEBUG_PAINT, WF_STICK_TO_FRONT | WF_TRANSPARENT);
window->widgets = window_debug_paint_widgets;
window->enabled_widgets = (1 << WIDX_TOGGLE_SHOW_WIDE_PATHS) | (1 << WIDX_TOGGLE_SHOW_BLOCKED_TILES)
| (1 << WIDX_TOGGLE_SHOW_BOUND_BOXES) | (1 << WIDX_TOGGLE_SHOW_SEGMENT_HEIGHTS) | (1 << WIDX_TOGGLE_SHOW_DIRTY_VISUALS);
window->enabled_widgets = (1ULL << WIDX_TOGGLE_SHOW_WIDE_PATHS) | (1ULL << WIDX_TOGGLE_SHOW_BLOCKED_TILES)
| (1ULL << WIDX_TOGGLE_SHOW_BOUND_BOXES) | (1ULL << WIDX_TOGGLE_SHOW_SEGMENT_HEIGHTS)
| (1ULL << WIDX_TOGGLE_SHOW_DIRTY_VISUALS);
WindowInitScrollWidgets(window);
window_push_others_below(window);

View File

@ -82,7 +82,7 @@ rct_window* window_ride_demolish_prompt_open(Ride* ride)
}
w->widgets = window_ride_demolish_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_CANCEL) | (1 << WIDX_DEMOLISH);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_CANCEL) | (1ULL << WIDX_DEMOLISH);
WindowInitScrollWidgets(w);
w->number = ride->id;
_demolishRideCost = -ride_get_refund_price(ride);
@ -107,7 +107,7 @@ rct_window* window_ride_refurbish_prompt_open(Ride* ride)
}
w->widgets = window_ride_refurbish_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_CANCEL) | (1 << WIDX_REFURBISH);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_CANCEL) | (1ULL << WIDX_REFURBISH);
WindowInitScrollWidgets(w);
w->number = ride->id;
_demolishRideCost = -ride_get_refund_price(ride);

View File

@ -110,8 +110,8 @@ rct_window* window_editor_bottom_toolbar_open()
WC_BOTTOM_TOOLBAR, WF_STICK_TO_FRONT | WF_TRANSPARENT | WF_NO_BACKGROUND);
window->widgets = window_editor_bottom_toolbar_widgets;
window->enabled_widgets |= (1 << WIDX_PREVIOUS_STEP_BUTTON) | (1 << WIDX_NEXT_STEP_BUTTON) | (1 << WIDX_PREVIOUS_IMAGE)
| (1 << WIDX_NEXT_IMAGE);
window->enabled_widgets |= (1ULL << WIDX_PREVIOUS_STEP_BUTTON) | (1ULL << WIDX_NEXT_STEP_BUTTON)
| (1ULL << WIDX_PREVIOUS_IMAGE) | (1ULL << WIDX_NEXT_IMAGE);
WindowInitScrollWidgets(window);
set_all_scenery_items_invented();

View File

@ -256,8 +256,8 @@ rct_window* window_editor_inventions_list_open()
w = WindowCreateCentred(
WW, WH, &window_editor_inventions_list_events, WC_EDITOR_INVENTION_LIST, WF_NO_SCROLLING | WF_RESIZABLE);
w->widgets = window_editor_inventions_list_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RESIZE) | (1 << WIDX_TAB_1) | (1 << WIDX_RANDOM_SHUFFLE)
| (1 << WIDX_MOVE_ITEMS_TO_BOTTOM) | (1 << WIDX_MOVE_ITEMS_TO_TOP);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_RESIZE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_RANDOM_SHUFFLE)
| (1ULL << WIDX_MOVE_ITEMS_TO_BOTTOM) | (1ULL << WIDX_MOVE_ITEMS_TO_TOP);
WindowInitScrollWidgets(w);
w->selected_tab = 0;
w->research_item = nullptr;
@ -447,8 +447,8 @@ static void window_editor_inventions_list_cursor(
*/
static void window_editor_inventions_list_invalidate(rct_window* w)
{
w->pressed_widgets |= 1 << WIDX_PREVIEW;
w->pressed_widgets |= 1 << WIDX_TAB_1;
w->pressed_widgets |= 1ULL << WIDX_PREVIEW;
w->pressed_widgets |= 1ULL << WIDX_TAB_1;
w->widgets[WIDX_CLOSE].type = gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR ? WindowWidgetType::Empty
: WindowWidgetType::CloseBox;

View File

@ -382,9 +382,9 @@ rct_window* window_editor_object_selection_open()
window->widgets = _window_editor_object_selection_widgets.data();
window->widgets[WIDX_FILTER_TEXT_BOX].string = _filter_string;
window->enabled_widgets = (1 << WIDX_ADVANCED) | (1 << WIDX_INSTALL_TRACK) | (1 << WIDX_FILTER_DROPDOWN)
| (1 << WIDX_FILTER_TEXT_BOX) | (1 << WIDX_FILTER_CLEAR_BUTTON) | (1 << WIDX_CLOSE) | (1 << WIDX_LIST_SORT_TYPE)
| (1UL << WIDX_LIST_SORT_RIDE);
window->enabled_widgets = (1ULL << WIDX_ADVANCED) | (1ULL << WIDX_INSTALL_TRACK) | (1ULL << WIDX_FILTER_DROPDOWN)
| (1ULL << WIDX_FILTER_TEXT_BOX) | (1ULL << WIDX_FILTER_CLEAR_BUTTON) | (1ULL << WIDX_CLOSE)
| (1ULL << WIDX_LIST_SORT_TYPE) | (1UL << WIDX_LIST_SORT_RIDE);
_filter_flags = gConfigInterface.object_selection_filter_flags;
std::fill_n(_filter_string, sizeof(_filter_string), 0x00);
@ -806,12 +806,12 @@ static void window_editor_object_selection_invalidate(rct_window* w)
w->widgets[WIDX_FILTER_DROPDOWN].right = w->width - 137;
// Set pressed widgets
w->pressed_widgets |= 1 << WIDX_PREVIEW;
w->pressed_widgets |= 1ULL << WIDX_PREVIEW;
window_editor_object_selection_set_pressed_tab(w);
if (w->list_information_type & 1)
w->pressed_widgets |= (1 << WIDX_ADVANCED);
w->pressed_widgets |= (1ULL << WIDX_ADVANCED);
else
w->pressed_widgets &= ~(1 << WIDX_ADVANCED);
w->pressed_widgets &= ~(1ULL << WIDX_ADVANCED);
// Set window title and buttons
auto ft = Formatter::Common();
@ -885,15 +885,16 @@ static void window_editor_object_selection_invalidate(rct_window* w)
if (ridePage)
{
w->enabled_widgets |= (1 << WIDX_FILTER_RIDE_TAB_ALL) | (1 << WIDX_FILTER_RIDE_TAB_TRANSPORT)
| (1 << WIDX_FILTER_RIDE_TAB_GENTLE) | (1 << WIDX_FILTER_RIDE_TAB_COASTER) | (1 << WIDX_FILTER_RIDE_TAB_THRILL)
| (1 << WIDX_FILTER_RIDE_TAB_WATER) | (1 << WIDX_FILTER_RIDE_TAB_STALL);
w->enabled_widgets |= (1ULL << WIDX_FILTER_RIDE_TAB_ALL) | (1ULL << WIDX_FILTER_RIDE_TAB_TRANSPORT)
| (1ULL << WIDX_FILTER_RIDE_TAB_GENTLE) | (1ULL << WIDX_FILTER_RIDE_TAB_COASTER)
| (1ULL << WIDX_FILTER_RIDE_TAB_THRILL) | (1ULL << WIDX_FILTER_RIDE_TAB_WATER)
| (1ULL << WIDX_FILTER_RIDE_TAB_STALL);
for (int32_t i = 0; i < 7; i++)
w->pressed_widgets &= ~(1 << (WIDX_FILTER_RIDE_TAB_ALL + i));
if ((_filter_flags & FILTER_RIDES) == FILTER_RIDES)
w->pressed_widgets |= (1 << WIDX_FILTER_RIDE_TAB_ALL);
w->pressed_widgets |= (1ULL << WIDX_FILTER_RIDE_TAB_ALL);
else
{
for (int32_t i = 0; i < 6; i++)
@ -926,9 +927,10 @@ static void window_editor_object_selection_invalidate(rct_window* w)
else
{
w->enabled_widgets &= ~(
(1 << WIDX_FILTER_RIDE_TAB_ALL) | (1 << WIDX_FILTER_RIDE_TAB_TRANSPORT) | (1 << WIDX_FILTER_RIDE_TAB_GENTLE)
| (1 << WIDX_FILTER_RIDE_TAB_COASTER) | (1 << WIDX_FILTER_RIDE_TAB_THRILL) | (1 << WIDX_FILTER_RIDE_TAB_WATER)
| (1 << WIDX_FILTER_RIDE_TAB_STALL));
(1ULL << WIDX_FILTER_RIDE_TAB_ALL) | (1ULL << WIDX_FILTER_RIDE_TAB_TRANSPORT)
| (1ULL << WIDX_FILTER_RIDE_TAB_GENTLE) | (1ULL << WIDX_FILTER_RIDE_TAB_COASTER)
| (1ULL << WIDX_FILTER_RIDE_TAB_THRILL) | (1ULL << WIDX_FILTER_RIDE_TAB_WATER)
| (1ULL << WIDX_FILTER_RIDE_TAB_STALL));
for (int32_t i = WIDX_FILTER_RIDE_TAB_FRAME; i <= WIDX_FILTER_RIDE_TAB_STALL; i++)
w->widgets[i].type = WindowWidgetType::Empty;

View File

@ -176,31 +176,31 @@ static rct_window_event_list *window_editor_objective_options_page_events[] = {
#pragma region Enabled widgets
static uint64_t window_editor_objective_options_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_OBJECTIVE) |
(1 << WIDX_OBJECTIVE_DROPDOWN) |
(1 << WIDX_OBJECTIVE_ARG_1_INCREASE) |
(1 << WIDX_OBJECTIVE_ARG_1_DECREASE) |
(1 << WIDX_OBJECTIVE_ARG_2_INCREASE) |
(1 << WIDX_OBJECTIVE_ARG_2_DECREASE) |
(1 << WIDX_PARK_NAME) |
(1 << WIDX_SCENARIO_NAME) |
(1 << WIDX_CATEGORY) |
(1 << WIDX_CATEGORY_DROPDOWN) |
(1 << WIDX_DETAILS),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_OBJECTIVE) |
(1ULL << WIDX_OBJECTIVE_DROPDOWN) |
(1ULL << WIDX_OBJECTIVE_ARG_1_INCREASE) |
(1ULL << WIDX_OBJECTIVE_ARG_1_DECREASE) |
(1ULL << WIDX_OBJECTIVE_ARG_2_INCREASE) |
(1ULL << WIDX_OBJECTIVE_ARG_2_DECREASE) |
(1ULL << WIDX_PARK_NAME) |
(1ULL << WIDX_SCENARIO_NAME) |
(1ULL << WIDX_CATEGORY) |
(1ULL << WIDX_CATEGORY_DROPDOWN) |
(1ULL << WIDX_DETAILS),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2)
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2)
};
static uint64_t window_editor_objective_options_page_hold_down_widgets[] = {
(1 << WIDX_OBJECTIVE_ARG_1_INCREASE) |
(1 << WIDX_OBJECTIVE_ARG_1_DECREASE) |
(1 << WIDX_OBJECTIVE_ARG_2_INCREASE) |
(1 << WIDX_OBJECTIVE_ARG_2_DECREASE),
(1ULL << WIDX_OBJECTIVE_ARG_1_INCREASE) |
(1ULL << WIDX_OBJECTIVE_ARG_1_DECREASE) |
(1ULL << WIDX_OBJECTIVE_ARG_2_INCREASE) |
(1ULL << WIDX_OBJECTIVE_ARG_2_DECREASE),
0
};
@ -270,7 +270,7 @@ static void window_editor_objective_options_draw_tab_images(rct_window* w, rct_d
gfx_draw_sprite(dpi, ImageId(spriteIndex), w->windowPos + ScreenCoordsXY{ widget->left, widget->top });
// Tab 2
if (!(w->disabled_widgets & (1 << WIDX_TAB_2)))
if (!(w->disabled_widgets & (1ULL << WIDX_TAB_2)))
{
widget = &w->widgets[WIDX_TAB_2];
spriteIndex = SPR_TAB_RIDE_0;
@ -1126,10 +1126,10 @@ static void window_editor_objective_options_update_disabled_widgets(rct_window*
const auto& rideManager = GetRideManager();
if (std::any_of(rideManager.begin(), rideManager.end(), [](const Ride& ride) { return ride.IsRide(); }))
{
w->disabled_widgets &= ~(1 << WIDX_TAB_2);
w->disabled_widgets &= ~(1ULL << WIDX_TAB_2);
}
else
{
w->disabled_widgets |= (1 << WIDX_TAB_2);
w->disabled_widgets |= (1ULL << WIDX_TAB_2);
}
}

View File

@ -639,13 +639,13 @@ static void window_editor_scenario_options_financial_invalidate(rct_window* w)
if (((gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && (gParkFlags & PARK_FLAGS_NO_MONEY_SCENARIO))
|| (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && (gParkFlags & PARK_FLAGS_NO_MONEY)))
{
w->pressed_widgets |= (1 << WIDX_NO_MONEY);
w->pressed_widgets |= (1ULL << WIDX_NO_MONEY);
for (int32_t i = WIDX_INITIAL_CASH; i <= WIDX_FORBID_MARKETING; i++)
w->widgets[i].type = WindowWidgetType::Empty;
}
else
{
w->pressed_widgets &= ~(1 << WIDX_NO_MONEY);
w->pressed_widgets &= ~(1ULL << WIDX_NO_MONEY);
w->widgets[WIDX_INITIAL_CASH].type = WindowWidgetType::Spinner;
w->widgets[WIDX_INITIAL_CASH_INCREASE].type = WindowWidgetType::Button;
w->widgets[WIDX_INITIAL_CASH_DECREASE].type = WindowWidgetType::Button;
@ -662,9 +662,9 @@ static void window_editor_scenario_options_financial_invalidate(rct_window* w)
}
if (gParkFlags & PARK_FLAGS_FORBID_MARKETING_CAMPAIGN)
w->pressed_widgets |= (1 << WIDX_FORBID_MARKETING);
w->pressed_widgets |= (1ULL << WIDX_FORBID_MARKETING);
else
w->pressed_widgets &= ~(1 << WIDX_FORBID_MARKETING);
w->pressed_widgets &= ~(1ULL << WIDX_FORBID_MARKETING);
w->widgets[WIDX_CLOSE].type = (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) ? WindowWidgetType::Empty
: WindowWidgetType::CloseBox;
@ -933,15 +933,15 @@ static void window_editor_scenario_options_guests_invalidate(rct_window* w)
// Guests prefer less intense rides checkbox
if (gParkFlags & PARK_FLAGS_PREF_LESS_INTENSE_RIDES)
w->pressed_widgets |= (1 << WIDX_GUEST_PREFER_LESS_INTENSE_RIDES);
w->pressed_widgets |= (1ULL << WIDX_GUEST_PREFER_LESS_INTENSE_RIDES);
else
w->pressed_widgets &= ~(1 << WIDX_GUEST_PREFER_LESS_INTENSE_RIDES);
w->pressed_widgets &= ~(1ULL << WIDX_GUEST_PREFER_LESS_INTENSE_RIDES);
// Guests prefer more intense rides checkbox
if (gParkFlags & PARK_FLAGS_PREF_MORE_INTENSE_RIDES)
w->pressed_widgets |= (1 << WIDX_GUEST_PREFER_MORE_INTENSE_RIDES);
w->pressed_widgets |= (1ULL << WIDX_GUEST_PREFER_MORE_INTENSE_RIDES);
else
w->pressed_widgets &= ~(1 << WIDX_GUEST_PREFER_MORE_INTENSE_RIDES);
w->pressed_widgets &= ~(1ULL << WIDX_GUEST_PREFER_MORE_INTENSE_RIDES);
w->widgets[WIDX_CLOSE].type = (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) ? WindowWidgetType::Empty
: WindowWidgetType::CloseBox;
@ -1285,22 +1285,22 @@ static void window_editor_scenario_options_park_invalidate(rct_window* w)
// Set checkboxes
pressedWidgets = w->pressed_widgets;
pressedWidgets &= ~(1 << WIDX_FORBID_TREE_REMOVAL);
pressedWidgets &= ~(1 << WIDX_FORBID_LANDSCAPE_CHANGES);
pressedWidgets &= ~(1 << WIDX_FORBID_HIGH_CONSTRUCTION);
pressedWidgets &= ~(1 << WIDX_HARD_PARK_RATING);
pressedWidgets &= ~(1 << WIDX_HARD_GUEST_GENERATION);
pressedWidgets &= ~(1ULL << WIDX_FORBID_TREE_REMOVAL);
pressedWidgets &= ~(1ULL << WIDX_FORBID_LANDSCAPE_CHANGES);
pressedWidgets &= ~(1ULL << WIDX_FORBID_HIGH_CONSTRUCTION);
pressedWidgets &= ~(1ULL << WIDX_HARD_PARK_RATING);
pressedWidgets &= ~(1ULL << WIDX_HARD_GUEST_GENERATION);
if (gParkFlags & PARK_FLAGS_FORBID_TREE_REMOVAL)
pressedWidgets |= (1 << WIDX_FORBID_TREE_REMOVAL);
pressedWidgets |= (1ULL << WIDX_FORBID_TREE_REMOVAL);
if (gParkFlags & PARK_FLAGS_FORBID_LANDSCAPE_CHANGES)
pressedWidgets |= (1 << WIDX_FORBID_LANDSCAPE_CHANGES);
pressedWidgets |= (1ULL << WIDX_FORBID_LANDSCAPE_CHANGES);
if (gParkFlags & PARK_FLAGS_FORBID_HIGH_CONSTRUCTION)
pressedWidgets |= (1 << WIDX_FORBID_HIGH_CONSTRUCTION);
pressedWidgets |= (1ULL << WIDX_FORBID_HIGH_CONSTRUCTION);
if (gParkFlags & PARK_FLAGS_DIFFICULT_PARK_RATING)
pressedWidgets |= (1 << WIDX_HARD_PARK_RATING);
pressedWidgets |= (1ULL << WIDX_HARD_PARK_RATING);
if (gParkFlags & PARK_FLAGS_DIFFICULT_GUEST_GENERATION)
pressedWidgets |= (1 << WIDX_HARD_GUEST_GENERATION);
pressedWidgets |= (1ULL << WIDX_HARD_GUEST_GENERATION);
w->pressed_widgets = pressedWidgets;

View File

@ -210,10 +210,11 @@ rct_window* window_footpath_open()
window = WindowCreate(ScreenCoordsXY(0, 29), WW, WH, &window_footpath_events, WC_FOOTPATH, 0);
window->widgets = window_footpath_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_FOOTPATH_TYPE) | (1 << WIDX_QUEUELINE_TYPE)
| (1 << WIDX_RAILINGS_TYPE) | (1 << WIDX_DIRECTION_NW) | (1 << WIDX_DIRECTION_NE) | (1 << WIDX_DIRECTION_SW)
| (1 << WIDX_DIRECTION_SE) | (1 << WIDX_SLOPEDOWN) | (1 << WIDX_LEVEL) | (1 << WIDX_SLOPEUP) | (1 << WIDX_CONSTRUCT)
| (1 << WIDX_REMOVE) | (1 << WIDX_CONSTRUCT_ON_LAND) | (1 << WIDX_CONSTRUCT_BRIDGE_OR_TUNNEL);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_FOOTPATH_TYPE) | (1ULL << WIDX_QUEUELINE_TYPE)
| (1ULL << WIDX_RAILINGS_TYPE) | (1ULL << WIDX_DIRECTION_NW) | (1ULL << WIDX_DIRECTION_NE) | (1ULL << WIDX_DIRECTION_SW)
| (1ULL << WIDX_DIRECTION_SE) | (1ULL << WIDX_SLOPEDOWN) | (1ULL << WIDX_LEVEL) | (1ULL << WIDX_SLOPEUP)
| (1ULL << WIDX_CONSTRUCT) | (1ULL << WIDX_REMOVE) | (1ULL << WIDX_CONSTRUCT_ON_LAND)
| (1ULL << WIDX_CONSTRUCT_BRIDGE_OR_TUNNEL);
WindowInitScrollWidgets(window);
window_push_others_right(window);
@ -566,9 +567,9 @@ static void window_footpath_update(rct_window* w)
static void window_footpath_invalidate(rct_window* w)
{
// Press / unpress footpath and queue type buttons
w->pressed_widgets &= ~(1 << WIDX_FOOTPATH_TYPE);
w->pressed_widgets &= ~(1 << WIDX_QUEUELINE_TYPE);
w->pressed_widgets |= gFootpathSelection.IsQueueSelected ? (1 << WIDX_QUEUELINE_TYPE) : (1 << WIDX_FOOTPATH_TYPE);
w->pressed_widgets &= ~(1ULL << WIDX_FOOTPATH_TYPE);
w->pressed_widgets &= ~(1ULL << WIDX_QUEUELINE_TYPE);
w->pressed_widgets |= gFootpathSelection.IsQueueSelected ? (1ULL << WIDX_QUEUELINE_TYPE) : (1ULL << WIDX_FOOTPATH_TYPE);
// Enable / disable construct button
window_footpath_widgets[WIDX_CONSTRUCT].type = _footpathConstructionMode == PATH_CONSTRUCTION_MODE_BRIDGE_OR_TUNNEL
@ -638,7 +639,7 @@ static void window_footpath_paint(rct_window* w, rct_drawpixelinfo* dpi)
ScreenCoordsXY screenCoords;
WindowDrawWidgets(w, dpi);
if (!(w->disabled_widgets & (1 << WIDX_CONSTRUCT)))
if (!(w->disabled_widgets & (1ULL << WIDX_CONSTRUCT)))
{
// Get construction image
uint8_t direction = (_footpathConstructDirection + get_current_rotation()) % 4;
@ -1325,23 +1326,23 @@ static void window_footpath_set_enabled_and_pressed_widgets()
int32_t slope = gFootpathConstructSlope;
if (slope == TILE_ELEMENT_SLOPE_SE_SIDE_UP)
{
pressedWidgets |= (1 << WIDX_SLOPEDOWN);
pressedWidgets |= (1ULL << WIDX_SLOPEDOWN);
}
else if (slope == TILE_ELEMENT_SLOPE_FLAT)
{
pressedWidgets |= (1 << WIDX_LEVEL);
pressedWidgets |= (1ULL << WIDX_LEVEL);
}
else
{
pressedWidgets |= (1 << WIDX_SLOPEUP);
pressedWidgets |= (1ULL << WIDX_SLOPEUP);
}
// Enable / disable directional widgets
direction = _footpathConstructValidDirections;
if (direction != INVALID_DIRECTION)
{
disabledWidgets |= (1 << WIDX_DIRECTION_NW) | (1 << WIDX_DIRECTION_NE) | (1 << WIDX_DIRECTION_SW)
| (1 << WIDX_DIRECTION_SE);
disabledWidgets |= (1ULL << WIDX_DIRECTION_NW) | (1ULL << WIDX_DIRECTION_NE) | (1ULL << WIDX_DIRECTION_SW)
| (1ULL << WIDX_DIRECTION_SE);
direction = (direction + currentRotation) & 3;
disabledWidgets &= ~(1 << (WIDX_DIRECTION_NW + direction));
@ -1350,9 +1351,9 @@ static void window_footpath_set_enabled_and_pressed_widgets()
else
{
// Disable all bridge mode widgets
disabledWidgets |= (1 << WIDX_DIRECTION_GROUP) | (1 << WIDX_DIRECTION_NW) | (1 << WIDX_DIRECTION_NE)
| (1 << WIDX_DIRECTION_SW) | (1 << WIDX_DIRECTION_SE) | (1 << WIDX_SLOPE_GROUP) | (1 << WIDX_SLOPEDOWN)
| (1 << WIDX_LEVEL) | (1 << WIDX_SLOPEUP) | (1 << WIDX_CONSTRUCT) | (1 << WIDX_REMOVE);
disabledWidgets |= (1ULL << WIDX_DIRECTION_GROUP) | (1ULL << WIDX_DIRECTION_NW) | (1ULL << WIDX_DIRECTION_NE)
| (1ULL << WIDX_DIRECTION_SW) | (1ULL << WIDX_DIRECTION_SE) | (1ULL << WIDX_SLOPE_GROUP) | (1ULL << WIDX_SLOPEDOWN)
| (1ULL << WIDX_LEVEL) | (1ULL << WIDX_SLOPEUP) | (1ULL << WIDX_CONSTRUCT) | (1ULL << WIDX_REMOVE);
}
w->pressed_widgets = pressedWidgets;

View File

@ -116,9 +116,9 @@ rct_window* window_game_bottom_toolbar_open()
ScreenCoordsXY(0, screenHeight - toolbar_height), screenWidth, toolbar_height, &window_game_bottom_toolbar_events,
WC_BOTTOM_TOOLBAR, WF_STICK_TO_FRONT | WF_TRANSPARENT | WF_NO_BACKGROUND);
window->widgets = window_game_bottom_toolbar_widgets;
window->enabled_widgets |= (1 << WIDX_LEFT_OUTSET) | (1 << WIDX_MONEY) | (1 << WIDX_GUESTS) | (1 << WIDX_PARK_RATING)
| (1 << WIDX_MIDDLE_OUTSET) | (1 << WIDX_MIDDLE_INSET) | (1 << WIDX_NEWS_SUBJECT) | (1 << WIDX_NEWS_LOCATE)
| (1 << WIDX_RIGHT_OUTSET) | (1 << WIDX_DATE);
window->enabled_widgets |= (1ULL << WIDX_LEFT_OUTSET) | (1ULL << WIDX_MONEY) | (1ULL << WIDX_GUESTS)
| (1ULL << WIDX_PARK_RATING) | (1ULL << WIDX_MIDDLE_OUTSET) | (1ULL << WIDX_MIDDLE_INSET) | (1ULL << WIDX_NEWS_SUBJECT)
| (1ULL << WIDX_NEWS_LOCATE) | (1ULL << WIDX_RIGHT_OUTSET) | (1ULL << WIDX_DATE);
window->frame_no = 0;
WindowInitScrollWidgets(window);
@ -309,25 +309,25 @@ static void window_game_bottom_toolbar_invalidate(rct_window* w)
window_game_bottom_toolbar_widgets[WIDX_NEWS_LOCATE].type = WindowWidgetType::FlatBtn;
window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].colour = 2;
window_game_bottom_toolbar_widgets[WIDX_MIDDLE_INSET].colour = 2;
w->disabled_widgets &= ~(1 << WIDX_NEWS_SUBJECT);
w->disabled_widgets &= ~(1 << WIDX_NEWS_LOCATE);
w->disabled_widgets &= ~(1ULL << WIDX_NEWS_SUBJECT);
w->disabled_widgets &= ~(1ULL << WIDX_NEWS_LOCATE);
// Find out if the news item is no longer valid
auto subjectLoc = News::GetSubjectLocation(newsItem->Type, newsItem->Assoc);
if (subjectLoc == std::nullopt)
w->disabled_widgets |= (1 << WIDX_NEWS_LOCATE);
w->disabled_widgets |= (1ULL << WIDX_NEWS_LOCATE);
if (!(newsItem->TypeHasSubject()))
{
w->disabled_widgets |= (1 << WIDX_NEWS_SUBJECT);
w->disabled_widgets |= (1ULL << WIDX_NEWS_SUBJECT);
window_game_bottom_toolbar_widgets[WIDX_NEWS_SUBJECT].type = WindowWidgetType::Empty;
}
if (newsItem->HasButton())
{
w->disabled_widgets |= (1 << WIDX_NEWS_SUBJECT);
w->disabled_widgets |= (1 << WIDX_NEWS_LOCATE);
w->disabled_widgets |= (1ULL << WIDX_NEWS_SUBJECT);
w->disabled_widgets |= (1ULL << WIDX_NEWS_LOCATE);
}
}
}

View File

@ -270,73 +270,73 @@ void window_guest_set_colours();
// 0x981D3C
static constexpr const uint32_t window_guest_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7) |
(1 << WIDX_RENAME)|
(1 << WIDX_PICKUP)|
(1 << WIDX_LOCATE)|
(1 << WIDX_TRACK),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7) |
(1ULL << WIDX_RENAME)|
(1ULL << WIDX_PICKUP)|
(1ULL << WIDX_LOCATE)|
(1ULL << WIDX_TRACK),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7) |
(1 << WIDX_RIDE_SCROLL),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7) |
(1ULL << WIDX_RIDE_SCROLL),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7)
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7)
};
static constexpr const rct_size16 window_guest_page_sizes[][2] = {
@ -489,22 +489,22 @@ void window_guest_disable_widgets(rct_window* w)
if (peep->CanBePickedUp())
{
if (w->disabled_widgets & (1 << WIDX_PICKUP))
if (w->disabled_widgets & (1ULL << WIDX_PICKUP))
w->Invalidate();
}
else
{
disabled_widgets = (1 << WIDX_PICKUP);
if (!(w->disabled_widgets & (1 << WIDX_PICKUP)))
disabled_widgets = (1ULL << WIDX_PICKUP);
if (!(w->disabled_widgets & (1ULL << WIDX_PICKUP)))
w->Invalidate();
}
if (gParkFlags & PARK_FLAGS_NO_MONEY)
{
disabled_widgets |= (1 << WIDX_TAB_4); // Disable finance tab if no money
disabled_widgets |= (1ULL << WIDX_TAB_4); // Disable finance tab if no money
}
if (!gConfigGeneral.debugging_tools)
{
disabled_widgets |= (1 << WIDX_TAB_7); // Disable debug tab when debug tools not turned on
disabled_widgets |= (1ULL << WIDX_TAB_7); // Disable debug tab when debug tools not turned on
}
w->disabled_widgets = disabled_widgets;
}
@ -731,7 +731,7 @@ void window_guest_viewport_init(rct_window* w)
*/
static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_1))
if (w->disabled_widgets & (1ULL << WIDX_TAB_1))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_1];
@ -803,7 +803,7 @@ static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dp
*/
static void window_guest_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_2))
if (w->disabled_widgets & (1ULL << WIDX_TAB_2))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_2];
@ -841,7 +841,7 @@ static void window_guest_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
*/
static void window_guest_rides_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_3))
if (w->disabled_widgets & (1ULL << WIDX_TAB_3))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_3];
@ -863,7 +863,7 @@ static void window_guest_rides_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
*/
static void window_guest_finance_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_4))
if (w->disabled_widgets & (1ULL << WIDX_TAB_4))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_4];
@ -885,7 +885,7 @@ static void window_guest_finance_tab_paint(rct_window* w, rct_drawpixelinfo* dpi
*/
static void window_guest_thoughts_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_5))
if (w->disabled_widgets & (1ULL << WIDX_TAB_5))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_5];
@ -907,7 +907,7 @@ static void window_guest_thoughts_tab_paint(rct_window* w, rct_drawpixelinfo* dp
*/
static void window_guest_inventory_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_6))
if (w->disabled_widgets & (1ULL << WIDX_TAB_6))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_6];
@ -918,7 +918,7 @@ static void window_guest_inventory_tab_paint(rct_window* w, rct_drawpixelinfo* d
static void window_guest_debug_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_7))
if (w->disabled_widgets & (1ULL << WIDX_TAB_7))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_7];
@ -1028,10 +1028,10 @@ void window_guest_overview_invalidate(rct_window* w)
{
return;
}
w->pressed_widgets &= ~(1 << WIDX_TRACK);
w->pressed_widgets &= ~(1ULL << WIDX_TRACK);
if (peep->PeepFlags & PEEP_FLAGS_TRACKING)
{
w->pressed_widgets |= (1 << WIDX_TRACK);
w->pressed_widgets |= (1ULL << WIDX_TRACK);
}
window_guest_overview_widgets[WIDX_VIEWPORT].right = w->width - 26;

View File

@ -151,9 +151,9 @@ public:
void OnOpen() override
{
widgets = window_guest_list_widgets;
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_PAGE_DROPDOWN) | (1 << WIDX_PAGE_DROPDOWN_BUTTON)
| (1 << WIDX_INFO_TYPE_DROPDOWN) | (1 << WIDX_INFO_TYPE_DROPDOWN_BUTTON) | (1 << WIDX_MAP) | (1 << WIDX_TRACKING)
| (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | (1 << WIDX_FILTER_BY_NAME);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_PAGE_DROPDOWN) | (1ULL << WIDX_PAGE_DROPDOWN_BUTTON)
| (1ULL << WIDX_INFO_TYPE_DROPDOWN) | (1ULL << WIDX_INFO_TYPE_DROPDOWN_BUTTON) | (1ULL << WIDX_MAP)
| (1ULL << WIDX_TRACKING) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_FILTER_BY_NAME);
WindowInitScrollWidgets(this);
_selectedTab = TabId::Individual;

View File

@ -113,8 +113,8 @@ rct_window* window_install_track_open(const utf8* path)
rct_window* w = WindowCreate(ScreenCoordsXY(x, y), WW, WH, &window_install_track_events, WC_INSTALL_TRACK, 0);
w->widgets = window_install_track_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_ROTATE) | (1 << WIDX_TOGGLE_SCENERY) | (1 << WIDX_INSTALL)
| (1 << WIDX_CANCEL);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_ROTATE) | (1ULL << WIDX_TOGGLE_SCENERY) | (1ULL << WIDX_INSTALL)
| (1ULL << WIDX_CANCEL);
WindowInitScrollWidgets(w);
w->track_list.track_list_being_updated = false;
window_push_others_right(w);
@ -176,14 +176,14 @@ static void window_install_track_mouseup(rct_window* w, rct_widgetindex widgetIn
*/
static void window_install_track_invalidate(rct_window* w)
{
w->pressed_widgets |= 1 << WIDX_TRACK_PREVIEW;
w->pressed_widgets |= 1ULL << WIDX_TRACK_PREVIEW;
if (!gTrackDesignSceneryToggle)
{
w->pressed_widgets |= (1 << WIDX_TOGGLE_SCENERY);
w->pressed_widgets |= (1ULL << WIDX_TOGGLE_SCENERY);
}
else
{
w->pressed_widgets &= ~(1 << WIDX_TOGGLE_SCENERY);
w->pressed_widgets &= ~(1ULL << WIDX_TOGGLE_SCENERY);
}
}

View File

@ -68,9 +68,9 @@ public:
void OnOpen() override
{
widgets = window_land_widgets;
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_DECREMENT) | (1 << WIDX_INCREMENT) | (1 << WIDX_FLOOR)
| (1 << WIDX_WALL) | (1 << WIDX_MOUNTAINMODE) | (1 << WIDX_PAINTMODE) | (1 << WIDX_PREVIEW);
hold_down_widgets = (1 << WIDX_DECREMENT) | (1 << WIDX_INCREMENT);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_DECREMENT) | (1ULL << WIDX_INCREMENT) | (1ULL << WIDX_FLOOR)
| (1ULL << WIDX_WALL) | (1ULL << WIDX_MOUNTAINMODE) | (1ULL << WIDX_PAINTMODE) | (1ULL << WIDX_PREVIEW);
hold_down_widgets = (1ULL << WIDX_DECREMENT) | (1ULL << WIDX_INCREMENT);
WindowInitScrollWidgets(this);
window_push_others_below(this);

View File

@ -94,14 +94,14 @@ rct_window* window_land_rights_open()
window = WindowCreate(ScreenCoordsXY(context_get_width() - 98, 29), 98, 94, &window_land_rights_events, WC_LAND_RIGHTS, 0);
window->widgets = window_land_rights_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_DECREMENT) | (1 << WIDX_INCREMENT) | (1 << WIDX_PREVIEW)
| (1 << WIDX_BUY_LAND_RIGHTS) | (1 << WIDX_BUY_CONSTRUCTION_RIGHTS);
window->hold_down_widgets = (1 << WIDX_INCREMENT) | (1 << WIDX_DECREMENT);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_DECREMENT) | (1ULL << WIDX_INCREMENT)
| (1ULL << WIDX_PREVIEW) | (1ULL << WIDX_BUY_LAND_RIGHTS) | (1ULL << WIDX_BUY_CONSTRUCTION_RIGHTS);
window->hold_down_widgets = (1ULL << WIDX_INCREMENT) | (1ULL << WIDX_DECREMENT);
WindowInitScrollWidgets(window);
window_push_others_below(window);
_landRightsMode = LAND_RIGHTS_MODE_BUY_LAND;
window->pressed_widgets = (1 << WIDX_BUY_LAND_RIGHTS);
window->pressed_widgets = (1ULL << WIDX_BUY_LAND_RIGHTS);
gLandToolSize = 1;
@ -219,10 +219,10 @@ static void window_land_rights_update(rct_window* w)
static void window_land_rights_invalidate(rct_window* w)
{
// Set the preview image button to be pressed down
w->pressed_widgets |= (1 << WIDX_PREVIEW)
| (1 << ((_landRightsMode == LAND_RIGHTS_MODE_BUY_LAND) ? WIDX_BUY_LAND_RIGHTS : WIDX_BUY_CONSTRUCTION_RIGHTS));
w->pressed_widgets |= (1ULL << WIDX_PREVIEW)
| (1ULL << ((_landRightsMode == LAND_RIGHTS_MODE_BUY_LAND) ? WIDX_BUY_LAND_RIGHTS : WIDX_BUY_CONSTRUCTION_RIGHTS));
w->pressed_widgets &= ~(
1
1ULL
<< ((_landRightsMode == LAND_RIGHTS_MODE_BUY_CONSTRUCTION_RIGHTS) ? WIDX_BUY_LAND_RIGHTS
: WIDX_BUY_CONSTRUCTION_RIGHTS));
@ -232,23 +232,23 @@ static void window_land_rights_invalidate(rct_window* w)
// Disable ownership and/or construction buying functions if there are no tiles left for sale
if (gLandRemainingOwnershipSales == 0)
{
w->disabled_widgets |= (1 << WIDX_BUY_LAND_RIGHTS);
w->disabled_widgets |= (1ULL << WIDX_BUY_LAND_RIGHTS);
window_land_rights_widgets[WIDX_BUY_LAND_RIGHTS].tooltip = STR_NO_LAND_RIGHTS_FOR_SALE_TIP;
}
else
{
w->disabled_widgets &= ~(1 << WIDX_BUY_LAND_RIGHTS);
w->disabled_widgets &= ~(1ULL << WIDX_BUY_LAND_RIGHTS);
window_land_rights_widgets[WIDX_BUY_LAND_RIGHTS].tooltip = STR_BUY_LAND_RIGHTS_TIP;
}
if (gLandRemainingConstructionSales == 0)
{
w->disabled_widgets |= (1 << WIDX_BUY_CONSTRUCTION_RIGHTS);
w->disabled_widgets |= (1ULL << WIDX_BUY_CONSTRUCTION_RIGHTS);
window_land_rights_widgets[WIDX_BUY_CONSTRUCTION_RIGHTS].tooltip = STR_NO_CONSTRUCTION_RIGHTS_FOR_SALE_TIP;
}
else
{
w->disabled_widgets &= ~(1 << WIDX_BUY_CONSTRUCTION_RIGHTS);
w->disabled_widgets &= ~(1ULL << WIDX_BUY_CONSTRUCTION_RIGHTS);
window_land_rights_widgets[WIDX_BUY_CONSTRUCTION_RIGHTS].tooltip = STR_BUY_CONSTRUCTION_RIGHTS_TIP;
}
}

View File

@ -265,8 +265,8 @@ rct_window* window_loadsave_open(
{
w = WindowCreateCentred(WW, WH, &window_loadsave_events, WC_LOADSAVE, WF_STICK_TO_FRONT | WF_RESIZABLE);
w->widgets = window_loadsave_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_UP) | (1 << WIDX_NEW_FOLDER) | (1 << WIDX_NEW_FILE)
| (1 << WIDX_SORT_NAME) | (1 << WIDX_SORT_DATE) | (1 << WIDX_BROWSE) | (1 << WIDX_DEFAULT);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_UP) | (1ULL << WIDX_NEW_FOLDER) | (1ULL << WIDX_NEW_FILE)
| (1ULL << WIDX_SORT_NAME) | (1ULL << WIDX_SORT_DATE) | (1ULL << WIDX_BROWSE) | (1ULL << WIDX_DEFAULT);
w->min_width = WW;
w->min_height = WH / 2;
@ -275,8 +275,8 @@ rct_window* window_loadsave_open(
if (!hasFilePicker)
{
w->enabled_widgets &= ~(1 << WIDX_BROWSE);
w->disabled_widgets |= (1 << WIDX_BROWSE);
w->enabled_widgets &= ~(1ULL << WIDX_BROWSE);
w->disabled_widgets |= (1ULL << WIDX_BROWSE);
window_loadsave_widgets[WIDX_BROWSE].type = WindowWidgetType::Empty;
}
}
@ -834,7 +834,7 @@ static void window_loadsave_populate_list(rct_window* w, int32_t includeNewItem,
if (str_is_null_or_empty(directory) && drives)
{
// List Windows drives
w->disabled_widgets |= (1 << WIDX_NEW_FILE) | (1 << WIDX_NEW_FOLDER) | (1 << WIDX_UP);
w->disabled_widgets |= (1ULL << WIDX_NEW_FILE) | (1ULL << WIDX_NEW_FOLDER) | (1ULL << WIDX_UP);
for (int32_t x = 0; x < 26; x++)
{
if (drives & (1 << x))
@ -878,13 +878,13 @@ static void window_loadsave_populate_list(rct_window* w, int32_t includeNewItem,
// Disable the Up button if the current directory is the root directory
if (str_is_null_or_empty(_parentDirectory) && !drives)
w->disabled_widgets |= (1 << WIDX_UP);
w->disabled_widgets |= (1ULL << WIDX_UP);
else
w->disabled_widgets &= ~(1 << WIDX_UP);
w->disabled_widgets &= ~(1ULL << WIDX_UP);
// Re-enable the "new" buttons if these were disabled
w->disabled_widgets &= ~(1 << WIDX_NEW_FILE);
w->disabled_widgets &= ~(1 << WIDX_NEW_FOLDER);
w->disabled_widgets &= ~(1ULL << WIDX_NEW_FILE);
w->disabled_widgets &= ~(1ULL << WIDX_NEW_FOLDER);
// List all directories
auto subDirectories = Path::GetDirectories(absoluteDirectory);
@ -1161,7 +1161,7 @@ static rct_window* window_overwrite_prompt_open(const char* name, const char* pa
w = WindowCreateCentred(
OVERWRITE_WW, OVERWRITE_WH, &window_overwrite_prompt_events, WC_LOADSAVE_OVERWRITE_PROMPT, WF_STICK_TO_FRONT);
w->widgets = window_overwrite_prompt_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_OVERWRITE_CANCEL) | (1 << WIDX_OVERWRITE_OVERWRITE);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_OVERWRITE_CANCEL) | (1ULL << WIDX_OVERWRITE_OVERWRITE);
WindowInitScrollWidgets(w);

View File

@ -238,15 +238,16 @@ rct_window* window_map_open()
w = WindowCreateAutoPos(245, 259, &window_map_events, WC_MAP, WF_10);
w->widgets = window_map_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_PEOPLE_TAB) | (1 << WIDX_RIDES_TAB) | (1 << WIDX_MAP_SIZE_SPINNER)
| (1 << WIDX_MAP_SIZE_SPINNER_UP) | (1 << WIDX_MAP_SIZE_SPINNER_DOWN) | (1 << WIDX_LAND_TOOL)
| (1 << WIDX_LAND_TOOL_SMALLER) | (1 << WIDX_LAND_TOOL_LARGER) | (1 << WIDX_SET_LAND_RIGHTS)
| (1 << WIDX_LAND_OWNED_CHECKBOX) | (1 << WIDX_CONSTRUCTION_RIGHTS_OWNED_CHECKBOX) | (1 << WIDX_LAND_SALE_CHECKBOX)
| (1 << WIDX_CONSTRUCTION_RIGHTS_SALE_CHECKBOX) | (1 << WIDX_BUILD_PARK_ENTRANCE) | (1 << WIDX_ROTATE_90)
| (1 << WIDX_PEOPLE_STARTING_POSITION) | (1 << WIDX_MAP_GENERATOR);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_PEOPLE_TAB) | (1ULL << WIDX_RIDES_TAB)
| (1ULL << WIDX_MAP_SIZE_SPINNER) | (1ULL << WIDX_MAP_SIZE_SPINNER_UP) | (1ULL << WIDX_MAP_SIZE_SPINNER_DOWN)
| (1ULL << WIDX_LAND_TOOL) | (1ULL << WIDX_LAND_TOOL_SMALLER) | (1ULL << WIDX_LAND_TOOL_LARGER)
| (1ULL << WIDX_SET_LAND_RIGHTS) | (1ULL << WIDX_LAND_OWNED_CHECKBOX)
| (1ULL << WIDX_CONSTRUCTION_RIGHTS_OWNED_CHECKBOX) | (1ULL << WIDX_LAND_SALE_CHECKBOX)
| (1ULL << WIDX_CONSTRUCTION_RIGHTS_SALE_CHECKBOX) | (1ULL << WIDX_BUILD_PARK_ENTRANCE) | (1ULL << WIDX_ROTATE_90)
| (1ULL << WIDX_PEOPLE_STARTING_POSITION) | (1ULL << WIDX_MAP_GENERATOR);
w->hold_down_widgets = (1 << WIDX_MAP_SIZE_SPINNER_UP) | (1 << WIDX_MAP_SIZE_SPINNER_DOWN) | (1 << WIDX_LAND_TOOL_LARGER)
| (1 << WIDX_LAND_TOOL_SMALLER);
w->hold_down_widgets = (1ULL << WIDX_MAP_SIZE_SPINNER_UP) | (1ULL << WIDX_MAP_SIZE_SPINNER_DOWN)
| (1ULL << WIDX_LAND_TOOL_LARGER) | (1ULL << WIDX_LAND_TOOL_SMALLER);
WindowInitScrollWidgets(w);
@ -694,16 +695,16 @@ static void window_map_invalidate(rct_window* w)
pressedWidgets |= (1ULL << WIDX_LAND_TOOL);
if (_activeTool & (1 << 3))
pressedWidgets |= (1 << WIDX_LAND_SALE_CHECKBOX);
pressedWidgets |= (1ULL << WIDX_LAND_SALE_CHECKBOX);
if (_activeTool & (1 << 2))
pressedWidgets |= (1 << WIDX_CONSTRUCTION_RIGHTS_SALE_CHECKBOX);
pressedWidgets |= (1ULL << WIDX_CONSTRUCTION_RIGHTS_SALE_CHECKBOX);
if (_activeTool & (1 << 1))
pressedWidgets |= (1 << WIDX_LAND_OWNED_CHECKBOX);
pressedWidgets |= (1ULL << WIDX_LAND_OWNED_CHECKBOX);
if (_activeTool & (1 << 0))
pressedWidgets |= (1 << WIDX_CONSTRUCTION_RIGHTS_OWNED_CHECKBOX);
pressedWidgets |= (1ULL << WIDX_CONSTRUCTION_RIGHTS_OWNED_CHECKBOX);
w->pressed_widgets = pressedWidgets;
@ -1570,7 +1571,7 @@ static void map_window_set_pixels(rct_window* w)
for (int32_t i = 0; i < MAXIMUM_MAP_SIZE_TECHNICAL; i++)
{
if (x > 0 && y > 0 && x < GetMapSizeUnits() && y < GetMapSizeUnits())
if (!map_is_edge({ x, y }))
{
switch (w->selected_tab)
{

View File

@ -779,9 +779,9 @@ static void window_mapgen_random_invalidate(rct_window* w)
w->pressed_widgets = 0;
if (_randomTerrain)
w->pressed_widgets |= 1 << WIDX_RANDOM_TERRAIN;
w->pressed_widgets |= 1ULL << WIDX_RANDOM_TERRAIN;
if (_placeTrees)
w->pressed_widgets |= 1 << WIDX_RANDOM_PLACE_TREES;
w->pressed_widgets |= 1ULL << WIDX_RANDOM_PLACE_TREES;
window_mapgen_set_pressed_tab(w);
}

View File

@ -111,10 +111,10 @@ static rct_widget *window_multiplayer_page_widgets[] = {
};
static constexpr const uint64_t window_multiplayer_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3) | (1 << WIDX_TAB4),
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3) | (1 << WIDX_TAB4),
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3) | (1 << WIDX_TAB4) | (1 << WIDX_DEFAULT_GROUP) | (1 << WIDX_DEFAULT_GROUP_DROPDOWN) | (1 << WIDX_ADD_GROUP) | (1 << WIDX_REMOVE_GROUP) | (1 << WIDX_RENAME_GROUP) | (1 << WIDX_SELECTED_GROUP) | (1 << WIDX_SELECTED_GROUP_DROPDOWN),
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3) | (1 << WIDX_TAB4) | (1 << WIDX_LOG_CHAT_CHECKBOX) | (1 << WIDX_LOG_SERVER_ACTIONS_CHECKBOX) | (1 << WIDX_KNOWN_KEYS_ONLY_CHECKBOX),
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB1) | (1ULL << WIDX_TAB2) | (1ULL << WIDX_TAB3) | (1ULL << WIDX_TAB4),
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB1) | (1ULL << WIDX_TAB2) | (1ULL << WIDX_TAB3) | (1ULL << WIDX_TAB4),
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB1) | (1ULL << WIDX_TAB2) | (1ULL << WIDX_TAB3) | (1ULL << WIDX_TAB4) | (1ULL << WIDX_DEFAULT_GROUP) | (1ULL << WIDX_DEFAULT_GROUP_DROPDOWN) | (1ULL << WIDX_ADD_GROUP) | (1ULL << WIDX_REMOVE_GROUP) | (1ULL << WIDX_RENAME_GROUP) | (1ULL << WIDX_SELECTED_GROUP) | (1ULL << WIDX_SELECTED_GROUP_DROPDOWN),
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB1) | (1ULL << WIDX_TAB2) | (1ULL << WIDX_TAB3) | (1ULL << WIDX_TAB4) | (1ULL << WIDX_LOG_CHAT_CHECKBOX) | (1ULL << WIDX_LOG_SERVER_ACTIONS_CHECKBOX) | (1ULL << WIDX_KNOWN_KEYS_ONLY_CHECKBOX),
};
static constexpr rct_string_id WindowMultiplayerPageTitles[] = {

View File

@ -66,7 +66,7 @@ rct_window* window_network_status_open(const char* text, close_callback onClose)
window = WindowCreateCentred(420, 90, &window_network_status_events, WC_NETWORK_STATUS, WF_10 | WF_TRANSPARENT);
window->widgets = window_network_status_widgets;
window->enabled_widgets = 1 << WIDX_CLOSE;
window->enabled_widgets = 1ULL << WIDX_CLOSE;
WindowInitScrollWidgets(window);
window->no_list_items = 0;
window->selected_list_item = -1;

View File

@ -150,9 +150,9 @@ public:
void OnOpen() override
{
widgets = window_new_campaign_widgets;
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RIDE_DROPDOWN) | (1 << WIDX_RIDE_DROPDOWN_BUTTON)
| (1 << WIDX_WEEKS_INCREASE_BUTTON) | (1 << WIDX_WEEKS_DECREASE_BUTTON) | (1 << WIDX_START_BUTTON);
hold_down_widgets = (1 << WIDX_WEEKS_INCREASE_BUTTON) | (1 << WIDX_WEEKS_DECREASE_BUTTON);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_RIDE_DROPDOWN) | (1ULL << WIDX_RIDE_DROPDOWN_BUTTON)
| (1ULL << WIDX_WEEKS_INCREASE_BUTTON) | (1ULL << WIDX_WEEKS_DECREASE_BUTTON) | (1ULL << WIDX_START_BUTTON);
hold_down_widgets = (1ULL << WIDX_WEEKS_INCREASE_BUTTON) | (1ULL << WIDX_WEEKS_DECREASE_BUTTON);
WindowInitScrollWidgets(this);
}

View File

@ -429,9 +429,9 @@ rct_window* window_new_ride_open()
w = WindowCreateAutoPos(WW, WH, &window_new_ride_events, WC_CONSTRUCT_RIDE, WF_10);
w->widgets = window_new_ride_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | (1 << WIDX_TAB_3) | (1 << WIDX_TAB_4)
| (1 << WIDX_TAB_5) | (1 << WIDX_TAB_6) | (1 << WIDX_TAB_7) | (1 << WIDX_LAST_DEVELOPMENT_BUTTON)
| (1 << WIDX_RESEARCH_FUNDING_BUTTON);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3)
| (1ULL << WIDX_TAB_4) | (1ULL << WIDX_TAB_5) | (1ULL << WIDX_TAB_6) | (1ULL << WIDX_TAB_7)
| (1ULL << WIDX_LAST_DEVELOPMENT_BUTTON) | (1ULL << WIDX_RESEARCH_FUNDING_BUTTON);
window_new_ride_populate_list();
WindowInitScrollWidgets(w);

View File

@ -44,7 +44,7 @@ static rct_widget window_news_widgets[] = {
class NewsWindow final : public Window
{
private:
int32_t _pressedNewsItemIndex, _pressedButtonIndex, _suspendUpdateTicks;
int32_t _pressedNewsItemIndex{}, _pressedButtonIndex{}, _suspendUpdateTicks{};
static int32_t CalculateItemHeight()
{
return 4 * font_get_line_height(FontSpriteBase::SMALL) + 2;
@ -54,7 +54,7 @@ public:
void OnOpen() override
{
widgets = window_news_widgets;
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_SETTINGS);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_SETTINGS);
WindowInitScrollWidgets(this);
_pressedNewsItemIndex = -1;

View File

@ -111,7 +111,8 @@ rct_window* window_news_options_open()
{
window = WindowCreateCentred(400, 300, &window_news_options_events, WC_NOTIFICATION_OPTIONS, 0);
window->widgets = window_news_options_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_TAB_PARK) | (1 << WIDX_TAB_RIDE) | (1 << WIDX_TAB_GUEST);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_PARK) | (1ULL << WIDX_TAB_RIDE)
| (1ULL << WIDX_TAB_GUEST);
WindowInitScrollWidgets(window);
window->colours[0] = COLOUR_GREY;
window->colours[1] = COLOUR_LIGHT_BLUE;

View File

@ -395,8 +395,8 @@ rct_window* window_object_load_error_open(utf8* path, size_t numMissingObjects,
window = WindowCreateCentred(WW, WH, &window_object_load_error_events, WC_OBJECT_LOAD_ERROR, 0);
window->widgets = window_object_load_error_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_COPY_CURRENT) | (1 << WIDX_COPY_ALL)
| (1 << WIDX_DOWNLOAD_ALL);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_COPY_CURRENT) | (1ULL << WIDX_COPY_ALL)
| (1ULL << WIDX_DOWNLOAD_ALL);
WindowInitScrollWidgets(window);
window->colours[0] = COLOUR_LIGHT_BLUE;

View File

@ -432,120 +432,120 @@ static void window_options_update_height_markers();
#pragma region Enabled Widgets
#define MAIN_OPTIONS_ENABLED_WIDGETS \
(1 << WIDX_CLOSE) | \
(1 << WIDX_TAB_1) | \
(1 << WIDX_TAB_2) | \
(1 << WIDX_TAB_3) | \
(1 << WIDX_TAB_4) | \
(1 << WIDX_TAB_5) | \
(1 << WIDX_TAB_6) | \
(1 << WIDX_TAB_7)
(1ULL << WIDX_CLOSE) | \
(1ULL << WIDX_TAB_1) | \
(1ULL << WIDX_TAB_2) | \
(1ULL << WIDX_TAB_3) | \
(1ULL << WIDX_TAB_4) | \
(1ULL << WIDX_TAB_5) | \
(1ULL << WIDX_TAB_6) | \
(1ULL << WIDX_TAB_7)
static uint64_t window_options_page_enabled_widgets[] = {
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_RESOLUTION) |
(1 << WIDX_RESOLUTION_DROPDOWN) |
(1 << WIDX_FULLSCREEN) |
(1 << WIDX_FULLSCREEN_DROPDOWN) |
(1 << WIDX_DRAWING_ENGINE) |
(1 << WIDX_DRAWING_ENGINE_DROPDOWN) |
(1 << WIDX_UNCAP_FPS_CHECKBOX) |
(1 << WIDX_USE_VSYNC_CHECKBOX) |
(1 << WIDX_SHOW_FPS_CHECKBOX) |
(1 << WIDX_MULTITHREADING_CHECKBOX) |
(1 << WIDX_MINIMIZE_FOCUS_LOSS) |
(1 << WIDX_STEAM_OVERLAY_PAUSE) |
(1 << WIDX_DISABLE_SCREENSAVER_LOCK) |
(1 << WIDX_SCALE) |
(1 << WIDX_SCALE_UP) |
(1 << WIDX_SCALE_DOWN) |
(1 << WIDX_SCALE_QUALITY) |
(1 << WIDX_SCALE_QUALITY_DROPDOWN),
(1ULL << WIDX_RESOLUTION) |
(1ULL << WIDX_RESOLUTION_DROPDOWN) |
(1ULL << WIDX_FULLSCREEN) |
(1ULL << WIDX_FULLSCREEN_DROPDOWN) |
(1ULL << WIDX_DRAWING_ENGINE) |
(1ULL << WIDX_DRAWING_ENGINE_DROPDOWN) |
(1ULL << WIDX_UNCAP_FPS_CHECKBOX) |
(1ULL << WIDX_USE_VSYNC_CHECKBOX) |
(1ULL << WIDX_SHOW_FPS_CHECKBOX) |
(1ULL << WIDX_MULTITHREADING_CHECKBOX) |
(1ULL << WIDX_MINIMIZE_FOCUS_LOSS) |
(1ULL << WIDX_STEAM_OVERLAY_PAUSE) |
(1ULL << WIDX_DISABLE_SCREENSAVER_LOCK) |
(1ULL << WIDX_SCALE) |
(1ULL << WIDX_SCALE_UP) |
(1ULL << WIDX_SCALE_DOWN) |
(1ULL << WIDX_SCALE_QUALITY) |
(1ULL << WIDX_SCALE_QUALITY_DROPDOWN),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_TILE_SMOOTHING_CHECKBOX) |
(1 << WIDX_GRIDLINES_CHECKBOX) |
(1 << WIDX_UPPER_CASE_BANNERS_CHECKBOX) |
(1 << WIDX_SHOW_GUEST_PURCHASES_CHECKBOX) |
(1 << WIDX_TRANSPARENT_SCREENSHOTS_CHECKBOX) |
(1 << WIDX_VIRTUAL_FLOOR) |
(1 << WIDX_VIRTUAL_FLOOR_DROPDOWN) |
(1 << WIDX_DAY_NIGHT_CHECKBOX) |
(1 << WIDX_ENABLE_LIGHT_FX_CHECKBOX) |
(1 << WIDX_ENABLE_LIGHT_FX_FOR_VEHICLES_CHECKBOX) |
(1 << WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX) |
(1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX),
(1ULL << WIDX_TILE_SMOOTHING_CHECKBOX) |
(1ULL << WIDX_GRIDLINES_CHECKBOX) |
(1ULL << WIDX_UPPER_CASE_BANNERS_CHECKBOX) |
(1ULL << WIDX_SHOW_GUEST_PURCHASES_CHECKBOX) |
(1ULL << WIDX_TRANSPARENT_SCREENSHOTS_CHECKBOX) |
(1ULL << WIDX_VIRTUAL_FLOOR) |
(1ULL << WIDX_VIRTUAL_FLOOR_DROPDOWN) |
(1ULL << WIDX_DAY_NIGHT_CHECKBOX) |
(1ULL << WIDX_ENABLE_LIGHT_FX_CHECKBOX) |
(1ULL << WIDX_ENABLE_LIGHT_FX_FOR_VEHICLES_CHECKBOX) |
(1ULL << WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX) |
(1ULL << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_LANGUAGE) |
(1 << WIDX_LANGUAGE_DROPDOWN) |
(1 << WIDX_CURRENCY) |
(1 << WIDX_CURRENCY_DROPDOWN) |
(1 << WIDX_DISTANCE) |
(1 << WIDX_DISTANCE_DROPDOWN) |
(1 << WIDX_TEMPERATURE) |
(1 << WIDX_TEMPERATURE_DROPDOWN) |
(1 << WIDX_HEIGHT_LABELS) |
(1 << WIDX_HEIGHT_LABELS_DROPDOWN) |
(1 << WIDX_DATE_FORMAT) |
(1 << WIDX_DATE_FORMAT_DROPDOWN),
(1ULL << WIDX_LANGUAGE) |
(1ULL << WIDX_LANGUAGE_DROPDOWN) |
(1ULL << WIDX_CURRENCY) |
(1ULL << WIDX_CURRENCY_DROPDOWN) |
(1ULL << WIDX_DISTANCE) |
(1ULL << WIDX_DISTANCE_DROPDOWN) |
(1ULL << WIDX_TEMPERATURE) |
(1ULL << WIDX_TEMPERATURE_DROPDOWN) |
(1ULL << WIDX_HEIGHT_LABELS) |
(1ULL << WIDX_HEIGHT_LABELS_DROPDOWN) |
(1ULL << WIDX_DATE_FORMAT) |
(1ULL << WIDX_DATE_FORMAT_DROPDOWN),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_SOUND) |
(1 << WIDX_SOUND_DROPDOWN) |
(1 << WIDX_MASTER_SOUND_CHECKBOX) |
(1 << WIDX_SOUND_CHECKBOX) |
(1 << WIDX_MUSIC_CHECKBOX) |
(1 << WIDX_AUDIO_FOCUS_CHECKBOX) |
(1 << WIDX_TITLE_MUSIC) |
(1 << WIDX_TITLE_MUSIC_DROPDOWN),
(1ULL << WIDX_SOUND) |
(1ULL << WIDX_SOUND_DROPDOWN) |
(1ULL << WIDX_MASTER_SOUND_CHECKBOX) |
(1ULL << WIDX_SOUND_CHECKBOX) |
(1ULL << WIDX_MUSIC_CHECKBOX) |
(1ULL << WIDX_AUDIO_FOCUS_CHECKBOX) |
(1ULL << WIDX_TITLE_MUSIC) |
(1ULL << WIDX_TITLE_MUSIC_DROPDOWN),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_SCREEN_EDGE_SCROLLING) |
(1 << WIDX_TRAP_CURSOR) |
(1 << WIDX_INVERT_DRAG) |
(1 << WIDX_ZOOM_TO_CURSOR) |
(1 << WIDX_HOTKEY_DROPDOWN) |
(1 << WIDX_TOOLBAR_SHOW_FINANCES) |
(1 << WIDX_TOOLBAR_SHOW_RESEARCH) |
(1 << WIDX_TOOLBAR_SHOW_CHEATS) |
(1 << WIDX_TOOLBAR_SHOW_NEWS) |
(1 << WIDX_THEMES) |
(1 << WIDX_THEMES_DROPDOWN) |
(1 << WIDX_THEMES_BUTTON) |
(1 << WIDX_TOOLBAR_SHOW_MUTE) |
(1 << WIDX_TOOLBAR_SHOW_CHAT) |
(1 << WIDX_TOOLBAR_SHOW_ZOOM),
(1ULL << WIDX_SCREEN_EDGE_SCROLLING) |
(1ULL << WIDX_TRAP_CURSOR) |
(1ULL << WIDX_INVERT_DRAG) |
(1ULL << WIDX_ZOOM_TO_CURSOR) |
(1ULL << WIDX_HOTKEY_DROPDOWN) |
(1ULL << WIDX_TOOLBAR_SHOW_FINANCES) |
(1ULL << WIDX_TOOLBAR_SHOW_RESEARCH) |
(1ULL << WIDX_TOOLBAR_SHOW_CHEATS) |
(1ULL << WIDX_TOOLBAR_SHOW_NEWS) |
(1ULL << WIDX_THEMES) |
(1ULL << WIDX_THEMES_DROPDOWN) |
(1ULL << WIDX_THEMES_BUTTON) |
(1ULL << WIDX_TOOLBAR_SHOW_MUTE) |
(1ULL << WIDX_TOOLBAR_SHOW_CHAT) |
(1ULL << WIDX_TOOLBAR_SHOW_ZOOM),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_REAL_NAME_CHECKBOX) |
(1 << WIDX_AUTO_STAFF_PLACEMENT) |
(1 << WIDX_TITLE_SEQUENCE) |
(1 << WIDX_TITLE_SEQUENCE_DROPDOWN) |
(1 << WIDX_TITLE_SEQUENCE_BUTTON) |
(1 << WIDX_TITLE_SEQUENCE_RANDOM) |
(1 << WIDX_SCENARIO_GROUPING) |
(1 << WIDX_SCENARIO_GROUPING_DROPDOWN) |
(1 << WIDX_SCENARIO_UNLOCKING) |
(1 << WIDX_ALLOW_EARLY_COMPLETION) |
(1 << WIDX_AUTO_OPEN_SHOPS) |
(1 << WIDX_DEFAULT_INSPECTION_INTERVAL) |
(1 << WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN),
(1ULL << WIDX_REAL_NAME_CHECKBOX) |
(1ULL << WIDX_AUTO_STAFF_PLACEMENT) |
(1ULL << WIDX_TITLE_SEQUENCE) |
(1ULL << WIDX_TITLE_SEQUENCE_DROPDOWN) |
(1ULL << WIDX_TITLE_SEQUENCE_BUTTON) |
(1ULL << WIDX_TITLE_SEQUENCE_RANDOM) |
(1ULL << WIDX_SCENARIO_GROUPING) |
(1ULL << WIDX_SCENARIO_GROUPING_DROPDOWN) |
(1ULL << WIDX_SCENARIO_UNLOCKING) |
(1ULL << WIDX_ALLOW_EARLY_COMPLETION) |
(1ULL << WIDX_AUTO_OPEN_SHOPS) |
(1ULL << WIDX_DEFAULT_INSPECTION_INTERVAL) |
(1ULL << WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_DEBUGGING_TOOLS) |
(1 << WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM) |
(1 << WIDX_SAVE_PLUGIN_DATA_CHECKBOX) |
(1 << WIDX_STAY_CONNECTED_AFTER_DESYNC) |
(1 << WIDX_ALWAYS_NATIVE_LOADSAVE) |
(1 << WIDX_AUTOSAVE) |
(1 << WIDX_AUTOSAVE_DROPDOWN) |
(1 << WIDX_AUTOSAVE_AMOUNT) |
(1 << WIDX_AUTOSAVE_AMOUNT_UP) |
(1 << WIDX_AUTOSAVE_AMOUNT_DOWN) |
(1 << WIDX_PATH_TO_RCT1_TEXT) |
(1 << WIDX_PATH_TO_RCT1_BUTTON) |
(1 << WIDX_PATH_TO_RCT1_CLEAR),
(1ULL << WIDX_DEBUGGING_TOOLS) |
(1ULL << WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM) |
(1ULL << WIDX_SAVE_PLUGIN_DATA_CHECKBOX) |
(1ULL << WIDX_STAY_CONNECTED_AFTER_DESYNC) |
(1ULL << WIDX_ALWAYS_NATIVE_LOADSAVE) |
(1ULL << WIDX_AUTOSAVE) |
(1ULL << WIDX_AUTOSAVE_DROPDOWN) |
(1ULL << WIDX_AUTOSAVE_AMOUNT) |
(1ULL << WIDX_AUTOSAVE_AMOUNT_UP) |
(1ULL << WIDX_AUTOSAVE_AMOUNT_DOWN) |
(1ULL << WIDX_PATH_TO_RCT1_TEXT) |
(1ULL << WIDX_PATH_TO_RCT1_BUTTON) |
(1ULL << WIDX_PATH_TO_RCT1_CLEAR),
};
// clang-format on
@ -829,23 +829,23 @@ static void window_options_display_invalidate(rct_window* w)
// Disable resolution dropdown on "Windowed" and "Fullscreen (desktop)"
if (gConfigGeneral.fullscreen_mode != static_cast<int32_t>(OpenRCT2::Ui::FULLSCREEN_MODE::FULLSCREEN))
{
w->disabled_widgets |= (1 << WIDX_RESOLUTION_DROPDOWN);
w->disabled_widgets |= (1 << WIDX_RESOLUTION);
w->disabled_widgets |= (1ULL << WIDX_RESOLUTION_DROPDOWN);
w->disabled_widgets |= (1ULL << WIDX_RESOLUTION);
}
else
{
w->disabled_widgets &= ~(1 << WIDX_RESOLUTION_DROPDOWN);
w->disabled_widgets &= ~(1 << WIDX_RESOLUTION);
w->disabled_widgets &= ~(1ULL << WIDX_RESOLUTION_DROPDOWN);
w->disabled_widgets &= ~(1ULL << WIDX_RESOLUTION);
}
// Disable Steam Overlay checkbox when using software rendering.
if (gConfigGeneral.drawing_engine == DrawingEngine::Software)
{
w->disabled_widgets |= (1 << WIDX_STEAM_OVERLAY_PAUSE);
w->disabled_widgets |= (1ULL << WIDX_STEAM_OVERLAY_PAUSE);
}
else
{
w->disabled_widgets &= ~(1 << WIDX_STEAM_OVERLAY_PAUSE);
w->disabled_widgets &= ~(1ULL << WIDX_STEAM_OVERLAY_PAUSE);
}
// Disable scaling quality dropdown when using software rendering or when using an integer scalar.
@ -853,23 +853,23 @@ static void window_options_display_invalidate(rct_window* w)
if (gConfigGeneral.drawing_engine == DrawingEngine::Software
|| gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale))
{
w->disabled_widgets |= (1 << WIDX_SCALE_QUALITY);
w->disabled_widgets |= (1 << WIDX_SCALE_QUALITY_DROPDOWN);
w->disabled_widgets |= (1ULL << WIDX_SCALE_QUALITY);
w->disabled_widgets |= (1ULL << WIDX_SCALE_QUALITY_DROPDOWN);
}
else
{
w->disabled_widgets &= ~(1 << WIDX_SCALE_QUALITY);
w->disabled_widgets &= ~(1 << WIDX_SCALE_QUALITY_DROPDOWN);
w->disabled_widgets &= ~(1ULL << WIDX_SCALE_QUALITY);
w->disabled_widgets &= ~(1ULL << WIDX_SCALE_QUALITY_DROPDOWN);
}
// Disable changing VSync for Software engine, as we can't control its use of VSync
if (gConfigGeneral.drawing_engine == DrawingEngine::Software)
{
w->disabled_widgets |= (1 << WIDX_USE_VSYNC_CHECKBOX);
w->disabled_widgets |= (1ULL << WIDX_USE_VSYNC_CHECKBOX);
}
else
{
w->disabled_widgets &= ~(1 << WIDX_USE_VSYNC_CHECKBOX);
w->disabled_widgets &= ~(1ULL << WIDX_USE_VSYNC_CHECKBOX);
}
WidgetSetCheckboxValue(w, WIDX_UNCAP_FPS_CHECKBOX, gConfigGeneral.uncap_fps);
@ -1058,11 +1058,11 @@ static void window_options_rendering_invalidate(rct_window* w)
WidgetSetCheckboxValue(w, WIDX_ENABLE_LIGHT_FX_CHECKBOX, gConfigGeneral.enable_light_fx);
if (gConfigGeneral.day_night_cycle && gConfigGeneral.drawing_engine == DrawingEngine::SoftwareWithHardwareDisplay)
{
w->disabled_widgets &= ~(1 << WIDX_ENABLE_LIGHT_FX_CHECKBOX);
w->disabled_widgets &= ~(1ULL << WIDX_ENABLE_LIGHT_FX_CHECKBOX);
}
else
{
w->disabled_widgets |= (1 << WIDX_ENABLE_LIGHT_FX_CHECKBOX);
w->disabled_widgets |= (1ULL << WIDX_ENABLE_LIGHT_FX_CHECKBOX);
gConfigGeneral.enable_light_fx = false;
}
@ -1070,11 +1070,11 @@ static void window_options_rendering_invalidate(rct_window* w)
if (gConfigGeneral.day_night_cycle && gConfigGeneral.drawing_engine == DrawingEngine::SoftwareWithHardwareDisplay
&& gConfigGeneral.enable_light_fx)
{
w->disabled_widgets &= ~(1 << WIDX_ENABLE_LIGHT_FX_FOR_VEHICLES_CHECKBOX);
w->disabled_widgets &= ~(1ULL << WIDX_ENABLE_LIGHT_FX_FOR_VEHICLES_CHECKBOX);
}
else
{
w->disabled_widgets |= (1 << WIDX_ENABLE_LIGHT_FX_FOR_VEHICLES_CHECKBOX);
w->disabled_widgets |= (1ULL << WIDX_ENABLE_LIGHT_FX_FOR_VEHICLES_CHECKBOX);
gConfigGeneral.enable_light_fx_for_vehicles = false;
}
@ -1084,13 +1084,13 @@ static void window_options_rendering_invalidate(rct_window* w)
if (!gConfigGeneral.render_weather_effects && !gConfigGeneral.render_weather_gloom)
{
WidgetSetCheckboxValue(w, WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX, true);
w->enabled_widgets &= ~(1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
w->disabled_widgets |= (1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
w->enabled_widgets &= ~(1ULL << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
w->disabled_widgets |= (1ULL << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
}
else
{
w->enabled_widgets |= (1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
w->disabled_widgets &= ~(1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
w->enabled_widgets |= (1ULL << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
w->disabled_widgets &= ~(1ULL << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
}
window_options_common_invalidate_after(w);
@ -1128,7 +1128,7 @@ static void window_options_culture_mousedown(rct_window* w, rct_widgetindex widg
break;
case WIDX_CURRENCY_DROPDOWN:
{
uint32_t num_items = EnumValue(CurrencyType::Count) + 1; // All the currencies plus the separator
constexpr auto num_items = EnumValue(CurrencyType::Count) + 1; // All the currencies plus the separator
size_t num_ordinary_currencies = EnumValue(CurrencyType::Count) - 1; // All the currencies except custom currency
for (size_t i = 0; i < num_ordinary_currencies; i++)
@ -1926,13 +1926,13 @@ static void window_options_misc_invalidate(rct_window* w)
// Disable title sequence dropdown if set to random
if (gConfigInterface.random_title_sequence)
{
w->disabled_widgets |= (1 << WIDX_TITLE_SEQUENCE_DROPDOWN);
w->disabled_widgets |= (1 << WIDX_TITLE_SEQUENCE);
w->disabled_widgets |= (1ULL << WIDX_TITLE_SEQUENCE_DROPDOWN);
w->disabled_widgets |= (1ULL << WIDX_TITLE_SEQUENCE);
}
else
{
w->disabled_widgets &= ~(1 << WIDX_TITLE_SEQUENCE_DROPDOWN);
w->disabled_widgets &= ~(1 << WIDX_TITLE_SEQUENCE);
w->disabled_widgets &= ~(1ULL << WIDX_TITLE_SEQUENCE_DROPDOWN);
w->disabled_widgets &= ~(1ULL << WIDX_TITLE_SEQUENCE);
}
if (gConfigGeneral.scenario_select_mode == SCENARIO_SELECT_MODE_DIFFICULTY)

View File

@ -281,77 +281,77 @@ static rct_window_event_list *window_park_page_events[] = {
#pragma region Enabled widgets
static uint32_t window_park_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7) |
(1 << WIDX_OPEN_OR_CLOSE) |
(1 << WIDX_BUY_LAND_RIGHTS) |
(1 << WIDX_LOCATE) |
(1 << WIDX_RENAME) |
(1 << WIDX_CLOSE_LIGHT) |
(1 << WIDX_OPEN_LIGHT),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7) |
(1ULL << WIDX_OPEN_OR_CLOSE) |
(1ULL << WIDX_BUY_LAND_RIGHTS) |
(1ULL << WIDX_LOCATE) |
(1ULL << WIDX_RENAME) |
(1ULL << WIDX_CLOSE_LIGHT) |
(1ULL << WIDX_OPEN_LIGHT),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7) |
(1 << WIDX_INCREASE_PRICE) |
(1 << WIDX_DECREASE_PRICE),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7) |
(1ULL << WIDX_INCREASE_PRICE) |
(1ULL << WIDX_DECREASE_PRICE),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7) |
(1 << WIDX_ENTER_NAME),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7) |
(1ULL << WIDX_ENTER_NAME),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7)
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_TAB_5) |
(1ULL << WIDX_TAB_6) |
(1ULL << WIDX_TAB_7)
};
static uint32_t window_park_page_hold_down_widgets[] = {
@ -359,8 +359,8 @@ static uint32_t window_park_page_hold_down_widgets[] = {
0,
0,
(1 << WIDX_INCREASE_PRICE) |
(1 << WIDX_DECREASE_PRICE),
(1ULL << WIDX_INCREASE_PRICE) |
(1ULL << WIDX_DECREASE_PRICE),
0,
0,
@ -432,7 +432,7 @@ static rct_window* window_park_open()
static void window_park_set_disabled_tabs(rct_window* w)
{
// Disable price tab if money is disabled
w->disabled_widgets = (gParkFlags & PARK_FLAGS_NO_MONEY) ? (1 << WIDX_TAB_4) : 0;
w->disabled_widgets = (gParkFlags & PARK_FLAGS_NO_MONEY) ? (1ULL << WIDX_TAB_4) : 0;
}
static void window_park_prepare_window_title_text()
@ -642,9 +642,9 @@ static void window_park_entrance_invalidate(rct_window* w)
// Only allow closing of park for guest / rating objective
if (gScenarioObjective.Type == OBJECTIVE_GUESTS_AND_RATING)
w->disabled_widgets |= (1 << WIDX_OPEN_OR_CLOSE) | (1 << WIDX_CLOSE_LIGHT) | (1 << WIDX_OPEN_LIGHT);
w->disabled_widgets |= (1ULL << WIDX_OPEN_OR_CLOSE) | (1ULL << WIDX_CLOSE_LIGHT) | (1ULL << WIDX_OPEN_LIGHT);
else
w->disabled_widgets &= ~((1 << WIDX_OPEN_OR_CLOSE) | (1 << WIDX_CLOSE_LIGHT) | (1 << WIDX_OPEN_LIGHT));
w->disabled_widgets &= ~((1ULL << WIDX_OPEN_OR_CLOSE) | (1ULL << WIDX_CLOSE_LIGHT) | (1ULL << WIDX_OPEN_LIGHT));
// Only allow purchase of land when there is money
if (gParkFlags & PARK_FLAGS_NO_MONEY)
@ -1711,13 +1711,13 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w)
int32_t sprite_idx;
// Entrance tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_1)))
if (!(w->disabled_widgets & (1ULL << WIDX_TAB_1)))
gfx_draw_sprite(
dpi, ImageId(SPR_TAB_PARK_ENTRANCE),
w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_1].left, w->widgets[WIDX_TAB_1].top });
// Rating tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_2)))
if (!(w->disabled_widgets & (1ULL << WIDX_TAB_2)))
{
sprite_idx = SPR_TAB_GRAPH_0;
if (w->page == WINDOW_PARK_PAGE_RATING)
@ -1733,7 +1733,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w)
}
// Guests tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_3)))
if (!(w->disabled_widgets & (1ULL << WIDX_TAB_3)))
{
sprite_idx = SPR_TAB_GRAPH_0;
if (w->page == WINDOW_PARK_PAGE_GUESTS)
@ -1752,7 +1752,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w)
}
// Price tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_4)))
if (!(w->disabled_widgets & (1ULL << WIDX_TAB_4)))
{
sprite_idx = SPR_TAB_ADMISSION_0;
if (w->page == WINDOW_PARK_PAGE_PRICE)
@ -1762,7 +1762,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w)
}
// Statistics tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_5)))
if (!(w->disabled_widgets & (1ULL << WIDX_TAB_5)))
{
sprite_idx = SPR_TAB_STATS_0;
if (w->page == WINDOW_PARK_PAGE_STATS)
@ -1772,7 +1772,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w)
}
// Objective tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_6)))
if (!(w->disabled_widgets & (1ULL << WIDX_TAB_6)))
{
sprite_idx = SPR_TAB_OBJECTIVE_0;
if (w->page == WINDOW_PARK_PAGE_OBJECTIVE)
@ -1782,7 +1782,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w)
}
// Awards tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_7)))
if (!(w->disabled_widgets & (1ULL << WIDX_TAB_7)))
gfx_draw_sprite(
dpi, ImageId(SPR_TAB_AWARDS),
w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_7].left, w->widgets[WIDX_TAB_7].top });

View File

@ -130,17 +130,17 @@ static void window_player_update_viewport(rct_window *w, bool scroll);
static void window_player_update_title(rct_window* w);
static uint32_t window_player_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_GROUP) |
(1 << WIDX_GROUP_DROPDOWN) |
(1 << WIDX_LOCATE) |
(1 << WIDX_KICK),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_GROUP) |
(1ULL << WIDX_GROUP_DROPDOWN) |
(1ULL << WIDX_LOCATE) |
(1ULL << WIDX_KICK),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2)
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2)
};
// clang-format on

View File

@ -141,23 +141,23 @@ static rct_window_event_list *window_research_page_events[] = {
#pragma region Enabled widgets
static uint32_t window_research_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_LAST_DEVELOPMENT_BUTTON),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_LAST_DEVELOPMENT_BUTTON),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_RESEARCH_FUNDING) |
(1 << WIDX_RESEARCH_FUNDING_DROPDOWN_BUTTON) |
(1 << WIDX_TRANSPORT_RIDES) |
(1 << WIDX_GENTLE_RIDES) |
(1 << WIDX_ROLLER_COASTERS) |
(1 << WIDX_THRILL_RIDES) |
(1 << WIDX_WATER_RIDES) |
(1 << WIDX_SHOPS_AND_STALLS) |
(1 << WIDX_SCENERY_AND_THEMING)
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_RESEARCH_FUNDING) |
(1ULL << WIDX_RESEARCH_FUNDING_DROPDOWN_BUTTON) |
(1ULL << WIDX_TRANSPORT_RIDES) |
(1ULL << WIDX_GENTLE_RIDES) |
(1ULL << WIDX_ROLLER_COASTERS) |
(1ULL << WIDX_THRILL_RIDES) |
(1ULL << WIDX_WATER_RIDES) |
(1ULL << WIDX_SHOPS_AND_STALLS) |
(1ULL << WIDX_SCENERY_AND_THEMING)
};
#pragma endregion

View File

@ -1113,45 +1113,45 @@ static void window_ride_disable_tabs(rct_window* w)
const auto& rtd = ride->GetRideTypeDescriptor();
if (!rtd.HasFlag(RIDE_TYPE_FLAG_HAS_DATA_LOGGING))
disabled_tabs |= (1 << WIDX_TAB_8); // 0x800
disabled_tabs |= (1ULL << WIDX_TAB_8); // 0x800
if (ride->type == RIDE_TYPE_MINI_GOLF)
disabled_tabs |= (1 << WIDX_TAB_2 | 1 << WIDX_TAB_3 | 1 << WIDX_TAB_4); // 0xE0
disabled_tabs |= (1ULL << WIDX_TAB_2 | 1ULL << WIDX_TAB_3 | 1ULL << WIDX_TAB_4); // 0xE0
if (rtd.HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES))
disabled_tabs |= (1 << WIDX_TAB_2); // 0x20
disabled_tabs |= (1ULL << WIDX_TAB_2); // 0x20
if (!rtd.HasFlag(RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN) && !rtd.HasFlag(RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_ADDITIONAL)
&& !rtd.HasFlag(RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS) && !rtd.HasFlag(RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS)
&& !rtd.HasFlag(RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT))
{
disabled_tabs |= (1 << WIDX_TAB_5); // 0x100
disabled_tabs |= (1ULL << WIDX_TAB_5); // 0x100
}
if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_SHOP))
disabled_tabs |= (1 << WIDX_TAB_3 | 1 << WIDX_TAB_4 | 1 << WIDX_TAB_7); // 0x4C0
disabled_tabs |= (1ULL << WIDX_TAB_3 | 1ULL << WIDX_TAB_4 | 1ULL << WIDX_TAB_7); // 0x4C0
if (!rtd.HasFlag(RIDE_TYPE_FLAG_ALLOW_MUSIC))
{
disabled_tabs |= (1 << WIDX_TAB_6); // 0x200
disabled_tabs |= (1ULL << WIDX_TAB_6); // 0x200
}
if (ride->type == RIDE_TYPE_CASH_MACHINE || ride->type == RIDE_TYPE_FIRST_AID || (gParkFlags & PARK_FLAGS_NO_MONEY) != 0)
disabled_tabs |= (1 << WIDX_TAB_9); // 0x1000
disabled_tabs |= (1ULL << WIDX_TAB_9); // 0x1000
if ((gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) != 0)
disabled_tabs |= (1 << WIDX_TAB_4 | 1 << WIDX_TAB_6 | 1 << WIDX_TAB_9 | 1 << WIDX_TAB_10); // 0x3280
disabled_tabs |= (1ULL << WIDX_TAB_4 | 1ULL << WIDX_TAB_6 | 1ULL << WIDX_TAB_9 | 1ULL << WIDX_TAB_10); // 0x3280
rct_ride_entry* rideEntry = get_ride_entry(ride->subtype);
if (rideEntry == nullptr)
{
disabled_tabs |= 1 << WIDX_TAB_2 | 1 << WIDX_TAB_3 | 1 << WIDX_TAB_4 | 1 << WIDX_TAB_5 | 1 << WIDX_TAB_6
| 1 << WIDX_TAB_7 | 1 << WIDX_TAB_8 | 1 << WIDX_TAB_9 | 1 << WIDX_TAB_10;
disabled_tabs |= 1ULL << WIDX_TAB_2 | 1ULL << WIDX_TAB_3 | 1ULL << WIDX_TAB_4 | 1ULL << WIDX_TAB_5 | 1ULL << WIDX_TAB_6
| 1ULL << WIDX_TAB_7 | 1ULL << WIDX_TAB_8 | 1ULL << WIDX_TAB_9 | 1ULL << WIDX_TAB_10;
}
else if ((rideEntry->flags & RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB) != 0)
{
disabled_tabs |= (1 << WIDX_TAB_5);
disabled_tabs |= (1ULL << WIDX_TAB_5);
}
w->disabled_widgets = disabled_tabs;
@ -2329,9 +2329,9 @@ static void window_ride_main_invalidate(rct_window* w)
if (ride == nullptr)
return;
w->disabled_widgets &= ~((1 << WIDX_DEMOLISH) | (1 << WIDX_CONSTRUCTION));
w->disabled_widgets &= ~((1ULL << WIDX_DEMOLISH) | (1ULL << WIDX_CONSTRUCTION));
if (ride->lifecycle_flags & (RIDE_LIFECYCLE_INDESTRUCTIBLE | RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK))
w->disabled_widgets |= (1 << WIDX_DEMOLISH);
w->disabled_widgets |= (1ULL << WIDX_DEMOLISH);
auto ft = Formatter::Common();
ride->FormatNameTo(ft);
@ -3509,7 +3509,7 @@ static void window_ride_operating_invalidate(rct_window* w)
ft.Add<uint16_t>(ride->max_waiting_time);
if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD)
w->pressed_widgets |= (1 << WIDX_LOAD_CHECKBOX);
w->pressed_widgets |= (1ULL << WIDX_LOAD_CHECKBOX);
}
else
{
@ -3529,13 +3529,13 @@ static void window_ride_operating_invalidate(rct_window* w)
}
if (ride->depart_flags & RIDE_DEPART_LEAVE_WHEN_ANOTHER_ARRIVES)
w->pressed_widgets |= (1 << WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX);
w->pressed_widgets |= (1ULL << WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX);
if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS)
w->pressed_widgets |= (1 << WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX);
w->pressed_widgets |= (1ULL << WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX);
if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH)
w->pressed_widgets |= (1 << WIDX_MINIMUM_LENGTH_CHECKBOX);
w->pressed_widgets |= (1ULL << WIDX_MINIMUM_LENGTH_CHECKBOX);
if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH)
w->pressed_widgets |= (1 << WIDX_MAXIMUM_LENGTH_CHECKBOX);
w->pressed_widgets |= (1ULL << WIDX_MAXIMUM_LENGTH_CHECKBOX);
// Mode specific functionality
ft.Rewind();
@ -3612,7 +3612,7 @@ static void window_ride_operating_invalidate(rct_window* w)
window_ride_operating_widgets[WIDX_MODE_TWEAK].text = format;
window_ride_operating_widgets[WIDX_MODE_TWEAK_INCREASE].type = WindowWidgetType::Button;
window_ride_operating_widgets[WIDX_MODE_TWEAK_DECREASE].type = WindowWidgetType::Button;
w->pressed_widgets &= ~(1 << WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX);
w->pressed_widgets &= ~(1ULL << WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX);
}
else
{
@ -4012,12 +4012,12 @@ static void window_ride_maintenance_invalidate(rct_window* w)
if (ride->GetRideTypeDescriptor().AvailableBreakdowns == 0 || !(ride->lifecycle_flags & RIDE_LIFECYCLE_EVER_BEEN_OPENED))
{
w->disabled_widgets |= (1 << WIDX_REFURBISH_RIDE);
w->disabled_widgets |= (1ULL << WIDX_REFURBISH_RIDE);
window_ride_maintenance_widgets[WIDX_REFURBISH_RIDE].tooltip = STR_CANT_REFURBISH_NOT_NEEDED;
}
else
{
w->disabled_widgets &= ~(1 << WIDX_REFURBISH_RIDE);
w->disabled_widgets &= ~(1ULL << WIDX_REFURBISH_RIDE);
window_ride_maintenance_widgets[WIDX_REFURBISH_RIDE].tooltip = STR_REFURBISH_RIDE_TIP;
}
}
@ -5129,15 +5129,15 @@ static void window_ride_music_invalidate(rct_window* w)
auto isMusicActivated = (ride->lifecycle_flags & RIDE_LIFECYCLE_MUSIC) != 0;
if (isMusicActivated)
{
w->pressed_widgets |= (1 << WIDX_PLAY_MUSIC);
w->disabled_widgets &= ~(1 << WIDX_MUSIC);
w->disabled_widgets &= ~(1 << WIDX_MUSIC_DROPDOWN);
w->pressed_widgets |= (1ULL << WIDX_PLAY_MUSIC);
w->disabled_widgets &= ~(1ULL << WIDX_MUSIC);
w->disabled_widgets &= ~(1ULL << WIDX_MUSIC_DROPDOWN);
}
else
{
w->pressed_widgets &= ~(1 << WIDX_PLAY_MUSIC);
w->disabled_widgets |= (1 << WIDX_MUSIC);
w->disabled_widgets |= (1 << WIDX_MUSIC_DROPDOWN);
w->pressed_widgets &= ~(1ULL << WIDX_PLAY_MUSIC);
w->disabled_widgets |= (1ULL << WIDX_MUSIC);
w->disabled_widgets |= (1ULL << WIDX_MUSIC_DROPDOWN);
}
window_ride_anchor_border_widgets(w);
@ -5414,7 +5414,7 @@ static void window_ride_measurements_tooldown(rct_window* w, rct_widgetindex wid
_lastSceneryY = screenCoords.y;
_collectTrackDesignScenery = true; // Default to true in case user does not select anything valid
auto flags = EnumsToFlags(
constexpr auto flags = EnumsToFlags(
ViewportInteractionItem::Scenery, ViewportInteractionItem::Footpath, ViewportInteractionItem::Wall,
ViewportInteractionItem::LargeScenery);
auto info = get_map_coordinates_from_pos(screenCoords, flags);
@ -5504,12 +5504,12 @@ static void window_ride_measurements_invalidate(rct_window* w)
window_ride_measurements_widgets[WIDX_CANCEL_DESIGN].type = WindowWidgetType::Empty;
window_ride_measurements_widgets[WIDX_SAVE_TRACK_DESIGN].type = WindowWidgetType::FlatBtn;
w->disabled_widgets |= (1 << WIDX_SAVE_TRACK_DESIGN);
w->disabled_widgets |= (1ULL << WIDX_SAVE_TRACK_DESIGN);
if (ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)
{
if (ride->excitement != RIDE_RATING_UNDEFINED)
{
w->disabled_widgets &= ~(1 << WIDX_SAVE_TRACK_DESIGN);
w->disabled_widgets &= ~(1ULL << WIDX_SAVE_TRACK_DESIGN);
window_ride_measurements_widgets[WIDX_SAVE_TRACK_DESIGN].tooltip = STR_SAVE_TRACK_DESIGN;
}
}
@ -5959,10 +5959,10 @@ static void window_ride_graphs_invalidate(rct_window* w)
ride->FormatNameTo(ft);
// Set pressed graph button type
w->pressed_widgets &= ~(1 << WIDX_GRAPH_VELOCITY);
w->pressed_widgets &= ~(1 << WIDX_GRAPH_ALTITUDE);
w->pressed_widgets &= ~(1 << WIDX_GRAPH_VERTICAL);
w->pressed_widgets &= ~(1 << WIDX_GRAPH_LATERAL);
w->pressed_widgets &= ~(1ULL << WIDX_GRAPH_VELOCITY);
w->pressed_widgets &= ~(1ULL << WIDX_GRAPH_ALTITUDE);
w->pressed_widgets &= ~(1ULL << WIDX_GRAPH_VERTICAL);
w->pressed_widgets &= ~(1ULL << WIDX_GRAPH_LATERAL);
w->pressed_widgets |= (1LL << (WIDX_GRAPH_VELOCITY + (w->list_information_type & 0xFF)));
// Hide graph buttons that are not applicable
@ -6519,8 +6519,8 @@ static void window_ride_income_invalidate(rct_window* w)
return;
// Primary item
w->pressed_widgets &= ~(1 << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
w->disabled_widgets &= ~(1 << WIDX_PRIMARY_PRICE);
w->pressed_widgets &= ~(1ULL << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
w->disabled_widgets &= ~(1ULL << WIDX_PRIMARY_PRICE);
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].tooltip = STR_NONE;
window_ride_income_widgets[WIDX_PRIMARY_PRICE].tooltip = STR_NONE;
@ -6528,7 +6528,7 @@ static void window_ride_income_invalidate(rct_window* w)
// If ride prices are locked, do not allow setting the price, unless we're dealing with a shop or toilet.
if (!park_ride_prices_unlocked() && rideEntry->shop_item[0] == ShopItem::None && ride->type != RIDE_TYPE_TOILETS)
{
w->disabled_widgets |= (1 << WIDX_PRIMARY_PRICE);
w->disabled_widgets |= (1ULL << WIDX_PRIMARY_PRICE);
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].tooltip = STR_RIDE_INCOME_ADMISSION_PAY_FOR_ENTRY_TIP;
window_ride_income_widgets[WIDX_PRIMARY_PRICE].tooltip = STR_RIDE_INCOME_ADMISSION_PAY_FOR_ENTRY_TIP;
}
@ -6550,7 +6550,7 @@ static void window_ride_income_invalidate(rct_window* w)
window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WindowWidgetType::Checkbox;
if (shop_item_has_common_price(primaryItem))
w->pressed_widgets |= (1 << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
w->pressed_widgets |= (1ULL << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].text = GetShopItemDescriptor(primaryItem).Naming.PriceLabel;
}
@ -6578,9 +6578,9 @@ static void window_ride_income_invalidate(rct_window* w)
else
{
// Set same price throughout park checkbox
w->pressed_widgets &= ~(1 << WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK);
w->pressed_widgets &= ~(1ULL << WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK);
if (shop_item_has_common_price(secondaryItem))
w->pressed_widgets |= (1 << WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK);
w->pressed_widgets |= (1ULL << WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK);
// Show widgets
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].type = WindowWidgetType::Label;

View File

@ -25,6 +25,7 @@
#include <openrct2/config/Config.h>
#include <openrct2/localisation/Localisation.h>
#include <openrct2/network/network.h>
#include <openrct2/paint/tile_element/Paint.TileElement.h>
#include <openrct2/platform/platform.h>
#include <openrct2/ride/Ride.h>
#include <openrct2/ride/RideData.h>
@ -684,10 +685,10 @@ static void window_ride_construction_mouseup(rct_window* w, rct_widgetindex widg
static void window_ride_construction_resize(rct_window* w)
{
window_ride_construction_update_enabled_track_pieces();
w->enabled_widgets &= ~(1 << WIDX_CONSTRUCT);
w->enabled_widgets &= ~(1ULL << WIDX_CONSTRUCT);
if (_rideConstructionState != RIDE_CONSTRUCTION_STATE_PLACE)
{
w->enabled_widgets |= (1 << WIDX_CONSTRUCT);
w->enabled_widgets |= (1ULL << WIDX_CONSTRUCT);
}
auto ride = get_ride(_currentRideIndex);
@ -2441,7 +2442,7 @@ static void sub_6CBCE2(
_tempTrackTileElement.AsTrack()->SetRideIndex(rideIndex);
// Draw this map tile
sub_68B2B7(session, coords);
tile_element_paint_setup(session, coords, true);
// Restore map elements
map_set_tile_element(centreTileCoords, _backupTileElementArrays[0]);
@ -3106,7 +3107,7 @@ static void window_ride_construction_update_widgets(rct_window* w)
window_ride_construction_widgets[WIDX_BANK_RIGHT].right = 83;
window_ride_construction_widgets[WIDX_BANK_RIGHT].top = 139;
window_ride_construction_widgets[WIDX_BANK_RIGHT].bottom = 148;
w->hold_down_widgets |= (1 << WIDX_BANK_STRAIGHT) | (1 << WIDX_BANK_RIGHT);
w->hold_down_widgets |= (1ULL << WIDX_BANK_STRAIGHT) | (1ULL << WIDX_BANK_RIGHT);
}
window_ride_construction_widgets[WIDX_BANKING_GROUPBOX].right = 162;
@ -3134,10 +3135,10 @@ static void window_ride_construction_update_widgets(rct_window* w)
}
uint64_t pressedWidgets = w->pressed_widgets
& ((1 << WIDX_BACKGROUND) | (1 << WIDX_TITLE) | (1 << WIDX_CLOSE) | (1 << WIDX_DIRECTION_GROUPBOX)
| (1 << WIDX_SLOPE_GROUPBOX) | (1 << WIDX_BANKING_GROUPBOX) | (1 << WIDX_CONSTRUCT) | (1 << WIDX_DEMOLISH)
| (1 << WIDX_PREVIOUS_SECTION) | (1 << WIDX_NEXT_SECTION) | (1 << WIDX_ENTRANCE_EXIT_GROUPBOX) | (1 << WIDX_ENTRANCE)
| (1 << WIDX_EXIT));
& ((1ULL << WIDX_BACKGROUND) | (1ULL << WIDX_TITLE) | (1ULL << WIDX_CLOSE) | (1ULL << WIDX_DIRECTION_GROUPBOX)
| (1ULL << WIDX_SLOPE_GROUPBOX) | (1ULL << WIDX_BANKING_GROUPBOX) | (1ULL << WIDX_CONSTRUCT)
| (1ULL << WIDX_DEMOLISH) | (1ULL << WIDX_PREVIOUS_SECTION) | (1ULL << WIDX_NEXT_SECTION)
| (1ULL << WIDX_ENTRANCE_EXIT_GROUPBOX) | (1ULL << WIDX_ENTRANCE) | (1ULL << WIDX_EXIT));
window_ride_construction_widgets[WIDX_CONSTRUCT].type = WindowWidgetType::Empty;
window_ride_construction_widgets[WIDX_DEMOLISH].type = WindowWidgetType::FlatBtn;
@ -3268,7 +3269,7 @@ static void window_ride_construction_update_widgets(rct_window* w)
}
if (_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED)
pressedWidgets |= (1 << WIDX_CHAIN_LIFT);
pressedWidgets |= (1ULL << WIDX_CHAIN_LIFT);
w->pressed_widgets = pressedWidgets;
w->Invalidate();

View File

@ -190,12 +190,12 @@ rct_window* window_ride_list_open()
{
window = WindowCreateAutoPos(340, 240, &window_ride_list_events, WC_RIDE_LIST, WF_10 | WF_RESIZABLE);
window->widgets = window_ride_list_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_OPEN_CLOSE_ALL) | (1 << WIDX_CURRENT_INFORMATION_TYPE)
| (1 << WIDX_INFORMATION_TYPE_DROPDOWN) | (1 << WIDX_SORT) | (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2)
| (1 << WIDX_TAB_3) | (1 << WIDX_CLOSE_LIGHT) | (1 << WIDX_OPEN_LIGHT);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_OPEN_CLOSE_ALL) | (1ULL << WIDX_CURRENT_INFORMATION_TYPE)
| (1ULL << WIDX_INFORMATION_TYPE_DROPDOWN) | (1ULL << WIDX_SORT) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2)
| (1ULL << WIDX_TAB_3) | (1ULL << WIDX_CLOSE_LIGHT) | (1ULL << WIDX_OPEN_LIGHT);
if (network_get_mode() != NETWORK_MODE_CLIENT)
{
window->enabled_widgets |= (1 << WIDX_QUICK_DEMOLISH);
window->enabled_widgets |= (1ULL << WIDX_QUICK_DEMOLISH);
}
WindowInitScrollWidgets(window);
window->page = PAGE_RIDES;

View File

@ -136,7 +136,7 @@ rct_window* window_save_prompt_open()
else
{
widgets = window_save_prompt_widgets;
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_SAVE) | (1 << WIDX_DONT_SAVE) | (1 << WIDX_CANCEL);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_SAVE) | (1ULL << WIDX_DONT_SAVE) | (1ULL << WIDX_CANCEL);
width = WW_SAVE;
height = WH_SAVE;
}

View File

@ -27,8 +27,10 @@
static constexpr const rct_string_id WINDOW_TITLE = STR_SELECT_SCENARIO;
static constexpr const int32_t WW = 734;
static constexpr const int32_t WH = 334;
static constexpr const int32_t WH = 384;
static constexpr const int32_t SidebarWidth = 180;
#define INITIAL_NUM_UNLOCKED_SCENARIOS 5
constexpr const uint8_t NumTabs = 8;
// clang-format off
enum class LIST_ITEM_TYPE : uint8_t
@ -74,7 +76,7 @@ enum {
static rct_widget window_scenarioselect_widgets[] = {
WINDOW_SHIM(WINDOW_TITLE, WW, WH),
MakeWidget ({ 0, 50}, {734, 284}, WindowWidgetType::ImgBtn, WindowColour::Secondary), // tab content panel
MakeWidget ({ 0, 50}, { WW, 284}, WindowWidgetType::ImgBtn, WindowColour::Secondary), // tab content panel
MakeRemapWidget({ 3, 17}, { 91, 34}, WindowWidgetType::Tab, WindowColour::Secondary, SPR_TAB_LARGE), // tab 1
MakeRemapWidget({ 94, 17}, { 91, 34}, WindowWidgetType::Tab, WindowColour::Secondary, SPR_TAB_LARGE), // tab 2
MakeRemapWidget({185, 17}, { 91, 34}, WindowWidgetType::Tab, WindowColour::Secondary, SPR_TAB_LARGE), // tab 3
@ -83,7 +85,7 @@ static rct_widget window_scenarioselect_widgets[] = {
MakeRemapWidget({458, 17}, {136, 34}, WindowWidgetType::Tab, WindowColour::Secondary, SPR_TAB_LARGE), // tab 6
MakeRemapWidget({594, 17}, { 91, 34}, WindowWidgetType::Tab, WindowColour::Secondary, SPR_TAB_LARGE), // tab 7
MakeRemapWidget({685, 17}, { 91, 34}, WindowWidgetType::Tab, WindowColour::Secondary, SPR_TAB_LARGE), // tab 8
MakeWidget ({ 3, 54}, {553, 276}, WindowWidgetType::Scroll, WindowColour::Secondary, SCROLL_VERTICAL), // level list
MakeWidget ({ 3, 54}, { WW - SidebarWidth, 276 }, WindowWidgetType::Scroll, WindowColour::Secondary, SCROLL_VERTICAL), // level list
{ WIDGETS_END },
};
@ -140,6 +142,15 @@ static bool _showLockedInformation = false;
static bool _titleEditor = false;
static bool _disableLocking{};
static int32_t ScenarioSelectGetWindowWidth()
{
// Shrink the window if we're showing scenarios by difficulty level.
if (gConfigGeneral.scenario_select_mode == SCENARIO_SELECT_MODE_DIFFICULTY && !_titleEditor)
return 610;
else
return WW;
}
rct_window* window_scenarioselect_open(scenarioselect_callback callback, bool titleEditor)
{
if (_titleEditor != titleEditor)
@ -164,7 +175,7 @@ rct_window* window_scenarioselect_open(std::function<void(std::string_view)> cal
{
rct_window* window;
int32_t windowWidth;
int32_t windowHeight = 334;
int32_t windowHeight = WH;
_callback = callback;
_disableLocking = disableLocking;
@ -172,18 +183,14 @@ rct_window* window_scenarioselect_open(std::function<void(std::string_view)> cal
// Load scenario list
scenario_repository_scan();
// Shrink the window if we're showing scenarios by difficulty level.
if (gConfigGeneral.scenario_select_mode == SCENARIO_SELECT_MODE_DIFFICULTY && !_titleEditor)
windowWidth = 610;
else
windowWidth = 733;
windowWidth = ScenarioSelectGetWindowWidth();
window = WindowCreateCentred(
windowWidth, windowHeight, &window_scenarioselect_events, WC_SCENARIO_SELECT,
WF_10 | (titleEditor ? WF_STICK_TO_FRONT : 0));
window->widgets = window_scenarioselect_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3) | (1 << WIDX_TAB4)
| (1 << WIDX_TAB5) | (1 << WIDX_TAB6) | (1 << WIDX_TAB7) | (1 << WIDX_TAB8);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB1) | (1ULL << WIDX_TAB2) | (1ULL << WIDX_TAB3)
| (1ULL << WIDX_TAB4) | (1ULL << WIDX_TAB5) | (1ULL << WIDX_TAB6) | (1ULL << WIDX_TAB7) | (1ULL << WIDX_TAB8);
window_scenarioselect_init_tabs(window);
initialise_list_items(window);
@ -237,7 +244,7 @@ static void window_scenarioselect_init_tabs(rct_window* w)
}
int32_t x = 3;
for (int32_t i = 0; i < 8; i++)
for (int32_t i = 0; i < NumTabs; i++)
{
rct_widget* widget = &w->widgets[i + WIDX_TAB1];
if (!(showPages & (1 << i)))
@ -409,8 +416,8 @@ static void window_scenarioselect_scrollmouseover(rct_window* w, int32_t scrollI
static void window_scenarioselect_invalidate(rct_window* w)
{
w->pressed_widgets &= ~(
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3) | (1 << WIDX_TAB4) | (1 << WIDX_TAB5)
| (1 << WIDX_TAB6) | (1 << WIDX_TAB7) | (1 << WIDX_TAB8));
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB1) | (1ULL << WIDX_TAB2) | (1ULL << WIDX_TAB3) | (1ULL << WIDX_TAB4)
| (1ULL << WIDX_TAB5) | (1ULL << WIDX_TAB6) | (1ULL << WIDX_TAB7) | (1ULL << WIDX_TAB8));
w->pressed_widgets |= 1LL << (w->selected_tab + WIDX_TAB1);
@ -557,8 +564,6 @@ static void window_scenarioselect_scrollpaint(rct_window* w, rct_drawpixelinfo*
rct_string_id highlighted_format = ScenarioSelectUseSmallFont() ? STR_WHITE_STRING : STR_WINDOW_COLOUR_2_STRINGID;
rct_string_id unhighlighted_format = ScenarioSelectUseSmallFont() ? STR_WHITE_STRING : STR_BLACK_STRING;
bool wide = gConfigGeneral.scenario_select_mode == SCENARIO_SELECT_MODE_ORIGIN || _titleEditor;
rct_widget* listWidget = &w->widgets[WIDX_SCENARIOLIST];
int32_t listWidth = listWidget->width() - 12;
@ -608,13 +613,17 @@ static void window_scenarioselect_scrollpaint(rct_window* w, rct_drawpixelinfo*
ft.Add<char*>(buffer);
colour_t colour = isDisabled ? w->colours[1] | COLOUR_FLAG_INSET : COLOUR_BLACK;
FontSpriteBase fontSpriteBase = isDisabled ? FontSpriteBase::MEDIUM_DARK : FontSpriteBase::MEDIUM;
DrawTextBasic(dpi, { wide ? 270 : 210, y + 1 }, format, ft, { colour, fontSpriteBase, TextAlignment::CENTRE });
const auto scrollCentre = window_scenarioselect_widgets[WIDX_SCENARIOLIST].width() / 2;
DrawTextBasic(dpi, { scrollCentre, y + 1 }, format, ft, { colour, fontSpriteBase, TextAlignment::CENTRE });
// Check if scenario is completed
if (isCompleted)
{
// Draw completion tick
gfx_draw_sprite(dpi, ImageId(SPR_MENU_CHECKMARK), { wide ? 500 : 395, y + 1 });
gfx_draw_sprite(
dpi, ImageId(SPR_MENU_CHECKMARK),
{ window_scenarioselect_widgets[WIDX_SCENARIOLIST].width() - 45, y + 1 });
// Draw completion score
const utf8* completedByName = "???";
@ -628,7 +637,7 @@ static void window_scenarioselect_scrollpaint(rct_window* w, rct_drawpixelinfo*
ft.Add<rct_string_id>(STR_STRING);
ft.Add<char*>(buffer);
DrawTextBasic(
dpi, { wide ? 270 : 210, y + scenarioTitleHeight + 1 }, format, ft,
dpi, { scrollCentre, y + scenarioTitleHeight + 1 }, format, ft,
{ FontSpriteBase::SMALL, TextAlignment::CENTRE });
}

View File

@ -954,9 +954,9 @@ void window_scenery_invalidate(rct_window* w)
w->pressed_widgets = 0;
w->pressed_widgets |= 1ULL << (tabIndex + WIDX_SCENERY_TAB_1);
if (gWindowSceneryPaintEnabled == 1)
w->pressed_widgets |= (1 << WIDX_SCENERY_REPAINT_SCENERY_BUTTON);
w->pressed_widgets |= (1ULL << WIDX_SCENERY_REPAINT_SCENERY_BUTTON);
if (gWindowSceneryEyedropperEnabled)
w->pressed_widgets |= (1 << WIDX_SCENERY_EYEDROPPER_BUTTON);
w->pressed_widgets |= (1ULL << WIDX_SCENERY_EYEDROPPER_BUTTON);
if (gWindowSceneryScatterEnabled)
w->pressed_widgets |= (1ULL << WIDX_SCENERY_BUILD_CLUSTER_BUTTON);

View File

@ -83,9 +83,9 @@ rct_window* window_scenery_scatter_open()
window = WindowCreateAutoPos(86, 100, &window_clear_scenery_events, WC_SCENERY_SCATTER, 0);
window->widgets = window_scenery_scatter_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_INCREMENT) | (1 << WIDX_DECREMENT) | (1 << WIDX_PREVIEW)
| (1 << WIDX_DENSITY_LOW) | (1 << WIDX_DENSITY_MEDIUM) | (1 << WIDX_DENSITY_HIGH);
window->hold_down_widgets = (1 << WIDX_INCREMENT) | (1 << WIDX_DECREMENT);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_INCREMENT) | (1ULL << WIDX_DECREMENT)
| (1ULL << WIDX_PREVIEW) | (1ULL << WIDX_DENSITY_LOW) | (1ULL << WIDX_DENSITY_MEDIUM) | (1ULL << WIDX_DENSITY_HIGH);
window->hold_down_widgets = (1ULL << WIDX_INCREMENT) | (1ULL << WIDX_DECREMENT);
WindowInitScrollWidgets(window);
window_push_others_below(window);
@ -185,21 +185,21 @@ static void window_scenery_scatter_inputsize(rct_window* w, rct_widgetindex widg
static void window_scenery_scatter_invalidate(rct_window* w)
{
// Set the preview image button to be pressed down
w->pressed_widgets = (1 << WIDX_PREVIEW);
w->pressed_widgets = (1ULL << WIDX_PREVIEW);
// Set density buttons' pressed state.
switch (gWindowSceneryScatterDensity)
{
case ScatterToolDensity::LowDensity:
w->pressed_widgets |= (1 << WIDX_DENSITY_LOW);
w->pressed_widgets |= (1ULL << WIDX_DENSITY_LOW);
break;
case ScatterToolDensity::MediumDensity:
w->pressed_widgets |= (1 << WIDX_DENSITY_MEDIUM);
w->pressed_widgets |= (1ULL << WIDX_DENSITY_MEDIUM);
break;
case ScatterToolDensity::HighDensity:
w->pressed_widgets |= (1 << WIDX_DENSITY_HIGH);
w->pressed_widgets |= (1ULL << WIDX_DENSITY_HIGH);
break;
}

View File

@ -129,8 +129,8 @@ rct_window* window_server_list_open()
window_server_list_widgets[WIDX_PLAYER_NAME_INPUT].string = _playerName;
window->widgets = window_server_list_widgets;
window->enabled_widgets
= ((1 << WIDX_CLOSE) | (1 << WIDX_PLAYER_NAME_INPUT) | (1 << WIDX_FETCH_SERVERS) | (1 << WIDX_ADD_SERVER)
| (1 << WIDX_START_SERVER));
= ((1ULL << WIDX_CLOSE) | (1ULL << WIDX_PLAYER_NAME_INPUT) | (1ULL << WIDX_FETCH_SERVERS) | (1ULL << WIDX_ADD_SERVER)
| (1ULL << WIDX_START_SERVER));
WindowInitScrollWidgets(window);
window->no_list_items = 0;
window->selected_list_item = -1;

View File

@ -101,10 +101,10 @@ rct_window* window_server_start_open()
window_server_start_widgets[WIDX_PASSWORD_INPUT].string = _password;
window->widgets = window_server_start_widgets;
window->enabled_widgets
= ((1 << WIDX_CLOSE) | (1 << WIDX_PORT_INPUT) | (1 << WIDX_NAME_INPUT) | (1 << WIDX_DESCRIPTION_INPUT)
| (1 << WIDX_GREETING_INPUT) | (1 << WIDX_PASSWORD_INPUT) | (1 << WIDX_MAXPLAYERS) | (1 << WIDX_MAXPLAYERS_INCREASE)
| (1 << WIDX_MAXPLAYERS_DECREASE) | (1 << WIDX_ADVERTISE_CHECKBOX) | (1 << WIDX_START_SERVER)
| (1 << WIDX_LOAD_SERVER));
= ((1ULL << WIDX_CLOSE) | (1ULL << WIDX_PORT_INPUT) | (1ULL << WIDX_NAME_INPUT) | (1ULL << WIDX_DESCRIPTION_INPUT)
| (1ULL << WIDX_GREETING_INPUT) | (1ULL << WIDX_PASSWORD_INPUT) | (1ULL << WIDX_MAXPLAYERS)
| (1ULL << WIDX_MAXPLAYERS_INCREASE) | (1ULL << WIDX_MAXPLAYERS_DECREASE) | (1ULL << WIDX_ADVERTISE_CHECKBOX)
| (1ULL << WIDX_START_SERVER) | (1ULL << WIDX_LOAD_SERVER));
WindowInitScrollWidgets(window);
window->no_list_items = 0;
window->selected_list_item = -1;

View File

@ -422,7 +422,7 @@ private:
void InitialiseWidgets()
{
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RESET);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_RESET);
_widgets.clear();
_widgets.insert(_widgets.begin(), std::begin(window_shortcut_widgets), std::end(window_shortcut_widgets) - 1);

View File

@ -73,8 +73,8 @@ public:
void OnOpen() override
{
widgets = window_sign_widgets;
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_SIGN_TEXT) | (1 << WIDX_SIGN_DEMOLISH) | (1 << WIDX_MAIN_COLOUR)
| (1 << WIDX_TEXT_COLOUR);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_SIGN_TEXT) | (1ULL << WIDX_SIGN_DEMOLISH)
| (1ULL << WIDX_MAIN_COLOUR) | (1ULL << WIDX_TEXT_COLOUR);
WindowInitScrollWidgets(this);
}

View File

@ -203,30 +203,30 @@ static rct_window_event_list *window_staff_page_events[] = {
};
static constexpr const uint32_t window_staff_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_PICKUP) |
(1 << WIDX_PATROL) |
(1 << WIDX_RENAME) |
(1 << WIDX_LOCATE) |
(1 << WIDX_FIRE),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_PICKUP) |
(1ULL << WIDX_PATROL) |
(1ULL << WIDX_RENAME) |
(1ULL << WIDX_LOCATE) |
(1ULL << WIDX_FIRE),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_CHECKBOX_1) |
(1 << WIDX_CHECKBOX_2) |
(1 << WIDX_CHECKBOX_3) |
(1 << WIDX_CHECKBOX_4) |
(1 << WIDX_COSTUME_BTN),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_CHECKBOX_1) |
(1ULL << WIDX_CHECKBOX_2) |
(1ULL << WIDX_CHECKBOX_3) |
(1ULL << WIDX_CHECKBOX_4) |
(1ULL << WIDX_COSTUME_BTN),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3)
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3)
};
// clang-format on
@ -309,20 +309,20 @@ void window_staff_disable_widgets(rct_window* w)
if (peep != nullptr && peep->AssignedStaffType == StaffType::Security)
{
disabled_widgets |= (1 << WIDX_TAB_2);
disabled_widgets |= (1ULL << WIDX_TAB_2);
}
if (w->page == WINDOW_STAFF_OVERVIEW)
{
if (peep->CanBePickedUp())
{
if (w->disabled_widgets & (1 << WIDX_PICKUP))
if (w->disabled_widgets & (1ULL << WIDX_PICKUP))
w->Invalidate();
}
else
{
disabled_widgets |= (1 << WIDX_PICKUP);
if (!(w->disabled_widgets & (1 << WIDX_PICKUP)))
disabled_widgets |= (1ULL << WIDX_PICKUP);
if (!(w->disabled_widgets & (1ULL << WIDX_PICKUP)))
w->Invalidate();
}
}
@ -808,7 +808,7 @@ void window_staff_options_invalidate(rct_window* w)
window_staff_options_widgets[WIDX_COSTUME_BOX].type = WindowWidgetType::Empty;
window_staff_options_widgets[WIDX_COSTUME_BTN].type = WindowWidgetType::Empty;
w->pressed_widgets &= ~(
(1 << WIDX_CHECKBOX_1) | (1 << WIDX_CHECKBOX_2) | (1 << WIDX_CHECKBOX_3) | (1 << WIDX_CHECKBOX_4));
(1ULL << WIDX_CHECKBOX_1) | (1ULL << WIDX_CHECKBOX_2) | (1ULL << WIDX_CHECKBOX_3) | (1ULL << WIDX_CHECKBOX_4));
w->pressed_widgets |= peep->StaffOrders << WIDX_CHECKBOX_1;
break;
case StaffType::Mechanic:
@ -820,7 +820,7 @@ void window_staff_options_invalidate(rct_window* w)
window_staff_options_widgets[WIDX_CHECKBOX_4].type = WindowWidgetType::Empty;
window_staff_options_widgets[WIDX_COSTUME_BOX].type = WindowWidgetType::Empty;
window_staff_options_widgets[WIDX_COSTUME_BTN].type = WindowWidgetType::Empty;
w->pressed_widgets &= ~((1 << WIDX_CHECKBOX_1) | (1 << WIDX_CHECKBOX_2));
w->pressed_widgets &= ~((1ULL << WIDX_CHECKBOX_1) | (1ULL << WIDX_CHECKBOX_2));
w->pressed_widgets |= peep->StaffOrders << WIDX_CHECKBOX_1;
break;
case StaffType::Security:
@ -945,7 +945,7 @@ void window_staff_overview_paint(rct_window* w, rct_drawpixelinfo* dpi)
*/
void window_staff_options_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_2))
if (w->disabled_widgets & (1ULL << WIDX_TAB_2))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_2];
@ -967,7 +967,7 @@ void window_staff_options_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
*/
void window_staff_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_3))
if (w->disabled_widgets & (1ULL << WIDX_TAB_3))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_3];
@ -988,7 +988,7 @@ void window_staff_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
*/
void window_staff_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->disabled_widgets & (1 << WIDX_TAB_1))
if (w->disabled_widgets & (1ULL << WIDX_TAB_1))
return;
rct_widget* widget = &w->widgets[WIDX_TAB_1];

View File

@ -62,7 +62,7 @@ rct_window* window_staff_fire_prompt_open(Peep* peep)
w = WindowCreateCentred(WW, WH, &window_staff_fire_events, WC_FIRE_PROMPT, WF_TRANSPARENT);
w->widgets = window_staff_fire_widgets;
w->enabled_widgets |= (1 << WIDX_CLOSE) | (1 << WIDX_YES) | (1 << WIDX_CANCEL);
w->enabled_widgets |= (1ULL << WIDX_CLOSE) | (1ULL << WIDX_YES) | (1ULL << WIDX_CANCEL);
WindowInitScrollWidgets(w);

View File

@ -101,11 +101,11 @@ public:
void OnOpen() override
{
widgets = window_staff_list_widgets;
enabled_widgets = (1 << WIDX_STAFF_LIST_CLOSE) | (1 << WIDX_STAFF_LIST_HANDYMEN_TAB)
| (1 << WIDX_STAFF_LIST_MECHANICS_TAB) | (1 << WIDX_STAFF_LIST_SECURITY_TAB)
| (1 << WIDX_STAFF_LIST_ENTERTAINERS_TAB) | (1 << WIDX_STAFF_LIST_HIRE_BUTTON)
| (1 << WIDX_STAFF_LIST_UNIFORM_COLOUR_PICKER) | (1 << WIDX_STAFF_LIST_SHOW_PATROL_AREA_BUTTON)
| (1 << WIDX_STAFF_LIST_MAP) | (1 << WIDX_STAFF_LIST_QUICK_FIRE);
enabled_widgets = (1ULL << WIDX_STAFF_LIST_CLOSE) | (1ULL << WIDX_STAFF_LIST_HANDYMEN_TAB)
| (1ULL << WIDX_STAFF_LIST_MECHANICS_TAB) | (1ULL << WIDX_STAFF_LIST_SECURITY_TAB)
| (1ULL << WIDX_STAFF_LIST_ENTERTAINERS_TAB) | (1ULL << WIDX_STAFF_LIST_HIRE_BUTTON)
| (1ULL << WIDX_STAFF_LIST_UNIFORM_COLOUR_PICKER) | (1ULL << WIDX_STAFF_LIST_SHOW_PATROL_AREA_BUTTON)
| (1ULL << WIDX_STAFF_LIST_MAP) | (1ULL << WIDX_STAFF_LIST_QUICK_FIRE);
WindowInitScrollWidgets(this);
widgets[WIDX_STAFF_LIST_UNIFORM_COLOUR_PICKER].type = WindowWidgetType::Empty;

View File

@ -322,13 +322,14 @@ rct_window* window_themes_open()
window = WindowCreateAutoPos(320, 107, &window_themes_events, WC_THEMES, WF_10 | WF_RESIZABLE);
window->widgets = window_themes_widgets;
window->enabled_widgets = (1 << WIDX_THEMES_CLOSE) | (1 << WIDX_THEMES_SETTINGS_TAB) | (1 << WIDX_THEMES_MAIN_UI_TAB)
| (1 << WIDX_THEMES_PARK_TAB) | (1 << WIDX_THEMES_TOOLS_TAB) | (1 << WIDX_THEMES_RIDE_PEEPS_TAB)
| (1 << WIDX_THEMES_EDITORS_TAB) | (1 << WIDX_THEMES_MISC_TAB) | (1 << WIDX_THEMES_PROMPTS_TAB)
| (1 << WIDX_THEMES_FEATURES_TAB) | (1 << WIDX_THEMES_COLOURBTN_MASK) | (1 << WIDX_THEMES_PRESETS)
| (1 << WIDX_THEMES_PRESETS_DROPDOWN) | (1 << WIDX_THEMES_DUPLICATE_BUTTON) | (1 << WIDX_THEMES_DELETE_BUTTON)
| (1 << WIDX_THEMES_RENAME_BUTTON) | (1 << WIDX_THEMES_RCT1_RIDE_LIGHTS) | (1 << WIDX_THEMES_RCT1_PARK_LIGHTS)
| (1 << WIDX_THEMES_RCT1_SCENARIO_FONT) | (1 << WIDX_THEMES_RCT1_BOTTOM_TOOLBAR);
window->enabled_widgets = (1ULL << WIDX_THEMES_CLOSE) | (1ULL << WIDX_THEMES_SETTINGS_TAB)
| (1ULL << WIDX_THEMES_MAIN_UI_TAB) | (1ULL << WIDX_THEMES_PARK_TAB) | (1ULL << WIDX_THEMES_TOOLS_TAB)
| (1ULL << WIDX_THEMES_RIDE_PEEPS_TAB) | (1ULL << WIDX_THEMES_EDITORS_TAB) | (1ULL << WIDX_THEMES_MISC_TAB)
| (1ULL << WIDX_THEMES_PROMPTS_TAB) | (1ULL << WIDX_THEMES_FEATURES_TAB) | (1ULL << WIDX_THEMES_COLOURBTN_MASK)
| (1ULL << WIDX_THEMES_PRESETS) | (1ULL << WIDX_THEMES_PRESETS_DROPDOWN) | (1ULL << WIDX_THEMES_DUPLICATE_BUTTON)
| (1ULL << WIDX_THEMES_DELETE_BUTTON) | (1ULL << WIDX_THEMES_RENAME_BUTTON) | (1ULL << WIDX_THEMES_RCT1_RIDE_LIGHTS)
| (1ULL << WIDX_THEMES_RCT1_PARK_LIGHTS) | (1ULL << WIDX_THEMES_RCT1_SCENARIO_FONT)
| (1ULL << WIDX_THEMES_RCT1_BOTTOM_TOOLBAR);
window_themes_init_vars();

View File

@ -220,9 +220,10 @@ void window_title_command_editor_open(TitleSequence* sequence, int32_t index, bo
window_title_command_editor_widgets[WIDX_TEXTBOX_X].string = textbox1Buffer;
window_title_command_editor_widgets[WIDX_TEXTBOX_Y].string = textbox2Buffer;
window->widgets = window_title_command_editor_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_COMMAND) | (1 << WIDX_COMMAND_DROPDOWN) | (1 << WIDX_TEXTBOX_FULL)
| (1 << WIDX_TEXTBOX_X) | (1 << WIDX_TEXTBOX_Y) | (1 << WIDX_INPUT) | (1 << WIDX_INPUT_DROPDOWN) | (1 << WIDX_GET)
| (1 << WIDX_SELECT_SCENARIO) | (1 << WIDX_SELECT_SPRITE) | (1 << WIDX_OKAY) | (1 << WIDX_CANCEL);
window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_COMMAND) | (1ULL << WIDX_COMMAND_DROPDOWN)
| (1ULL << WIDX_TEXTBOX_FULL) | (1ULL << WIDX_TEXTBOX_X) | (1ULL << WIDX_TEXTBOX_Y) | (1ULL << WIDX_INPUT)
| (1ULL << WIDX_INPUT_DROPDOWN) | (1ULL << WIDX_GET) | (1ULL << WIDX_SELECT_SCENARIO) | (1ULL << WIDX_SELECT_SPRITE)
| (1ULL << WIDX_OKAY) | (1ULL << WIDX_CANCEL);
WindowInitScrollWidgets(window);
rct_widget* const viewportWidget = &window_title_command_editor_widgets[WIDX_VIEWPORT];
@ -741,21 +742,21 @@ static void window_title_command_editor_invalidate(rct_window* w)
// Draw button pressed while the tool is active
if (sprite_selector_tool_is_active())
w->pressed_widgets |= (1 << WIDX_SELECT_SPRITE);
w->pressed_widgets |= (1ULL << WIDX_SELECT_SPRITE);
else
w->pressed_widgets &= ~(1 << WIDX_SELECT_SPRITE);
w->pressed_widgets &= ~(1ULL << WIDX_SELECT_SPRITE);
break;
}
if ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO)
{
w->disabled_widgets |= (1 << WIDX_GET) | (1 << WIDX_SELECT_SPRITE);
w->disabled_widgets |= (1ULL << WIDX_GET) | (1ULL << WIDX_SELECT_SPRITE);
window_title_command_editor_widgets[WIDX_SELECT_SPRITE].tooltip = STR_TITLE_COMMAND_EDITOR_SELECT_SPRITE_TOOLTIP;
}
else
{
w->disabled_widgets &= ~((1 << WIDX_GET) | (1 << WIDX_SELECT_SPRITE));
w->disabled_widgets &= ~((1ULL << WIDX_GET) | (1ULL << WIDX_SELECT_SPRITE));
window_title_command_editor_widgets[WIDX_SELECT_SPRITE].tooltip = STR_NONE;
}
}

View File

@ -214,22 +214,22 @@ void window_title_editor_open(int32_t tab)
window = WindowCreateAutoPos(WW, WH2, &window_title_editor_events, WC_TITLE_EDITOR, WF_10 | WF_RESIZABLE);
window->widgets = window_title_editor_widgets;
window->enabled_widgets = (1 << WIDX_TITLE_EDITOR_CLOSE) | (1 << WIDX_TITLE_EDITOR_PRESETS_TAB)
| (1 << WIDX_TITLE_EDITOR_SAVES_TAB) | (1 << WIDX_TITLE_EDITOR_SCRIPT_TAB) |
window->enabled_widgets = (1ULL << WIDX_TITLE_EDITOR_CLOSE) | (1ULL << WIDX_TITLE_EDITOR_PRESETS_TAB)
| (1ULL << WIDX_TITLE_EDITOR_SAVES_TAB) | (1ULL << WIDX_TITLE_EDITOR_SCRIPT_TAB) |
(1 << WIDX_TITLE_EDITOR_PRESETS) | (1 << WIDX_TITLE_EDITOR_PRESETS_DROPDOWN) | (1 << WIDX_TITLE_EDITOR_NEW_BUTTON)
| (1 << WIDX_TITLE_EDITOR_DUPLICATE_BUTTON) | (1 << WIDX_TITLE_EDITOR_DELETE_BUTTON)
| (1 << WIDX_TITLE_EDITOR_RENAME_BUTTON) |
(1ULL << WIDX_TITLE_EDITOR_PRESETS) | (1ULL << WIDX_TITLE_EDITOR_PRESETS_DROPDOWN)
| (1ULL << WIDX_TITLE_EDITOR_NEW_BUTTON) | (1ULL << WIDX_TITLE_EDITOR_DUPLICATE_BUTTON)
| (1ULL << WIDX_TITLE_EDITOR_DELETE_BUTTON) | (1ULL << WIDX_TITLE_EDITOR_RENAME_BUTTON) |
(1 << WIDX_TITLE_EDITOR_ADD_SAVE) | (1 << WIDX_TITLE_EDITOR_REMOVE_SAVE) | (1 << WIDX_TITLE_EDITOR_RENAME_SAVE)
| (1 << WIDX_TITLE_EDITOR_LOAD_SAVE) |
(1ULL << WIDX_TITLE_EDITOR_ADD_SAVE) | (1ULL << WIDX_TITLE_EDITOR_REMOVE_SAVE) | (1ULL << WIDX_TITLE_EDITOR_RENAME_SAVE)
| (1ULL << WIDX_TITLE_EDITOR_LOAD_SAVE) |
(1 << WIDX_TITLE_EDITOR_INSERT) | (1 << WIDX_TITLE_EDITOR_EDIT) | (1 << WIDX_TITLE_EDITOR_DELETE) |
//(1 << WIDX_TITLE_EDITOR_RELOAD) |
(1 << WIDX_TITLE_EDITOR_SKIP_TO) | (1 << WIDX_TITLE_EDITOR_MOVE_DOWN) | (1 << WIDX_TITLE_EDITOR_MOVE_UP) |
(1ULL << WIDX_TITLE_EDITOR_INSERT) | (1ULL << WIDX_TITLE_EDITOR_EDIT) | (1ULL << WIDX_TITLE_EDITOR_DELETE) |
//(1ULL << WIDX_TITLE_EDITOR_RELOAD) |
(1ULL << WIDX_TITLE_EDITOR_SKIP_TO) | (1ULL << WIDX_TITLE_EDITOR_MOVE_DOWN) | (1ULL << WIDX_TITLE_EDITOR_MOVE_UP) |
(1 << WIDX_TITLE_EDITOR_PLAY) | (1 << WIDX_TITLE_EDITOR_STOP) | (1 << WIDX_TITLE_EDITOR_REPLAY)
| (1 << WIDX_TITLE_EDITOR_SKIP);
(1ULL << WIDX_TITLE_EDITOR_PLAY) | (1ULL << WIDX_TITLE_EDITOR_STOP) | (1ULL << WIDX_TITLE_EDITOR_REPLAY)
| (1ULL << WIDX_TITLE_EDITOR_SKIP);
WindowInitScrollWidgets(window);
window->list_information_type = 0;
@ -784,16 +784,16 @@ static void window_title_editor_invalidate(rct_window* w)
window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP].bottom = w->height - 16;
if (!(gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) && gScreenFlags != SCREEN_FLAGS_PLAYING)
w->disabled_widgets |= (1 << WIDX_TITLE_EDITOR_PLAY);
w->disabled_widgets |= (1ULL << WIDX_TITLE_EDITOR_PLAY);
else
w->disabled_widgets &= ~(1 << WIDX_TITLE_EDITOR_PLAY);
w->disabled_widgets &= ~(1ULL << WIDX_TITLE_EDITOR_PLAY);
if (!title_is_previewing_sequence())
w->disabled_widgets |= (1 << WIDX_TITLE_EDITOR_REPLAY) | (1 << WIDX_TITLE_EDITOR_STOP) | (1 << WIDX_TITLE_EDITOR_SKIP)
| (1 << WIDX_TITLE_EDITOR_SKIP_TO);
w->disabled_widgets |= (1ULL << WIDX_TITLE_EDITOR_REPLAY) | (1ULL << WIDX_TITLE_EDITOR_STOP)
| (1ULL << WIDX_TITLE_EDITOR_SKIP) | (1ULL << WIDX_TITLE_EDITOR_SKIP_TO);
else
w->disabled_widgets &= ~(
(1 << WIDX_TITLE_EDITOR_REPLAY) | (1 << WIDX_TITLE_EDITOR_STOP) | (1 << WIDX_TITLE_EDITOR_SKIP)
| (1 << WIDX_TITLE_EDITOR_SKIP_TO));
(1ULL << WIDX_TITLE_EDITOR_REPLAY) | (1ULL << WIDX_TITLE_EDITOR_STOP) | (1ULL << WIDX_TITLE_EDITOR_SKIP)
| (1ULL << WIDX_TITLE_EDITOR_SKIP_TO));
}
static void window_title_editor_paint(rct_window* w, rct_drawpixelinfo* dpi)

View File

@ -51,7 +51,7 @@ rct_window* window_title_logo_open()
window->colours[0] = TRANSLUCENT(COLOUR_GREY);
window->colours[1] = TRANSLUCENT(COLOUR_GREY);
window->colours[2] = TRANSLUCENT(COLOUR_GREY);
window->enabled_widgets = (1 << WIDX_LOGO);
window->enabled_widgets = (1ULL << WIDX_LOGO);
return window;
}

View File

@ -77,11 +77,11 @@ rct_window* window_title_menu_open()
window->widgets = window_title_menu_widgets;
window->enabled_widgets
= ((1 << WIDX_START_NEW_GAME) | (1 << WIDX_CONTINUE_SAVED_GAME) |
= ((1ULL << WIDX_START_NEW_GAME) | (1ULL << WIDX_CONTINUE_SAVED_GAME) |
#ifndef DISABLE_NETWORK
(1 << WIDX_MULTIPLAYER) |
(1ULL << WIDX_MULTIPLAYER) |
#endif
(1 << WIDX_GAME_TOOLS));
(1ULL << WIDX_GAME_TOOLS));
rct_widgetindex i = 0;
int32_t x = 0;

View File

@ -797,14 +797,14 @@ static void window_top_toolbar_invalidate(rct_window* w)
// Footpath button pressed down
if (window_find_by_class(WC_FOOTPATH) == nullptr)
w->pressed_widgets &= ~(1 << WIDX_PATH);
w->pressed_widgets &= ~(1ULL << WIDX_PATH);
else
w->pressed_widgets |= (1 << WIDX_PATH);
w->pressed_widgets |= (1ULL << WIDX_PATH);
if (gGamePaused & GAME_PAUSED_NORMAL)
w->pressed_widgets |= (1 << WIDX_PAUSE);
w->pressed_widgets |= (1ULL << WIDX_PAUSE);
else
w->pressed_widgets &= ~(1 << WIDX_PAUSE);
w->pressed_widgets &= ~(1ULL << WIDX_PAUSE);
if (!OpenRCT2::Audio::gGameSoundsOff)
window_top_toolbar_widgets[WIDX_MUTE].image = IMAGE_TYPE_REMAP | SPR_G2_TOOLBAR_MUTE;
@ -835,15 +835,15 @@ static void window_top_toolbar_invalidate(rct_window* w)
if (mainWindow->viewport->zoom == ZoomLevel::min())
{
w->disabled_widgets |= (1 << WIDX_ZOOM_IN);
w->disabled_widgets |= (1ULL << WIDX_ZOOM_IN);
}
else if (mainWindow->viewport->zoom >= ZoomLevel::max())
{
w->disabled_widgets |= (1 << WIDX_ZOOM_OUT);
w->disabled_widgets |= (1ULL << WIDX_ZOOM_OUT);
}
else
{
w->disabled_widgets &= ~((1 << WIDX_ZOOM_IN) | (1 << WIDX_ZOOM_OUT));
w->disabled_widgets &= ~((1ULL << WIDX_ZOOM_IN) | (1ULL << WIDX_ZOOM_OUT));
}
}
@ -1167,7 +1167,7 @@ static void sub_6E1F34_update_screen_coords_and_buttons_pressed(bool canRaiseIte
if (InputTestPlaceObjectModifier(PLACE_OBJECT_MODIFIER_COPY_Z))
{
// CTRL pressed
auto flags = EnumsToFlags(
constexpr auto flags = EnumsToFlags(
ViewportInteractionItem::Terrain, ViewportInteractionItem::Ride, ViewportInteractionItem::Scenery,
ViewportInteractionItem::Footpath, ViewportInteractionItem::Wall, ViewportInteractionItem::LargeScenery);
auto info = get_map_coordinates_from_pos(screenPos, flags);
@ -1337,7 +1337,7 @@ static void sub_6E1F34_small_scenery(
// If CTRL not pressed
if (!gSceneryCtrlPressed)
{
auto flags = EnumsToFlags(ViewportInteractionItem::Terrain, ViewportInteractionItem::Water);
constexpr auto flags = EnumsToFlags(ViewportInteractionItem::Terrain, ViewportInteractionItem::Water);
auto info = get_map_coordinates_from_pos(screenPos, flags);
gridPos = info.Loc;
@ -1431,7 +1431,7 @@ static void sub_6E1F34_path_item(
sub_6E1F34_update_screen_coords_and_buttons_pressed(false, screenPos);
// Path bits
auto flags = EnumsToFlags(ViewportInteractionItem::Footpath, ViewportInteractionItem::FootpathItem);
constexpr auto flags = EnumsToFlags(ViewportInteractionItem::Footpath, ViewportInteractionItem::FootpathItem);
auto info = get_map_coordinates_from_pos(screenPos, flags);
gridPos = info.Loc;
@ -1653,7 +1653,7 @@ static void sub_6E1F34_banner(
sub_6E1F34_update_screen_coords_and_buttons_pressed(false, screenPos);
// Banner
auto flags = EnumsToFlags(ViewportInteractionItem::Footpath, ViewportInteractionItem::FootpathItem);
constexpr auto flags = EnumsToFlags(ViewportInteractionItem::Footpath, ViewportInteractionItem::FootpathItem);
auto info = get_map_coordinates_from_pos(screenPos, flags);
gridPos = info.Loc;

View File

@ -95,7 +95,7 @@ rct_window* window_track_manage_open(track_design_file_ref* tdFileRef)
rct_window* w = WindowCreateCentred(
250, 44, &window_track_manage_events, WC_MANAGE_TRACK_DESIGN, WF_STICK_TO_FRONT | WF_TRANSPARENT);
w->widgets = window_track_manage_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RENAME) | (1 << WIDX_DELETE);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_RENAME) | (1ULL << WIDX_DELETE);
WindowInitScrollWidgets(w);
rct_window* trackDesignListWindow = window_find_by_class(WC_TRACK_DESIGN_LIST);
@ -203,7 +203,7 @@ static void window_track_delete_prompt_open()
ScreenCoordsXY(std::max(TOP_TOOLBAR_HEIGHT + 1, (screenWidth - 250) / 2), (screenHeight - 44) / 2), 250, 74,
&window_track_delete_prompt_events, WC_TRACK_DELETE_PROMPT, WF_STICK_TO_FRONT);
w->widgets = window_track_delete_prompt_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RENAME) | (1 << WIDX_DELETE);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_RENAME) | (1ULL << WIDX_DELETE);
WindowInitScrollWidgets(w);
w->flags |= WF_TRANSPARENT;
}

View File

@ -144,7 +144,7 @@ rct_window* window_track_place_open(const track_design_file_ref* tdFileRef)
rct_window* w = WindowCreate(ScreenCoordsXY(0, 29), 200, 124, &window_track_place_events, WC_TRACK_DESIGN_PLACE, 0);
w->widgets = window_track_place_widgets;
w->enabled_widgets = 1 << WIDX_CLOSE | 1 << WIDX_ROTATE | 1 << WIDX_MIRROR | 1 << WIDX_SELECT_DIFFERENT_DESIGN;
w->enabled_widgets = 1ULL << WIDX_CLOSE | 1ULL << WIDX_ROTATE | 1ULL << WIDX_MIRROR | 1ULL << WIDX_SELECT_DIFFERENT_DESIGN;
WindowInitScrollWidgets(w);
tool_set(w, WIDX_PRICE, Tool::Crosshair);
input_set_flag(INPUT_FLAG_6, true);

View File

@ -241,7 +241,7 @@ static void window_track_list_select(rct_window* w, int32_t listIndex)
// Displays a message if the ride can't load, fix #4080
if (_loadedTrackDesign == nullptr)
{
context_show_error(STR_CANT_BUILD_PARK_ENTRANCE_HERE, STR_TRACK_LOAD_FAILED_ERROR, {});
context_show_error(STR_CANT_BUILD_THIS_HERE, STR_TRACK_LOAD_FAILED_ERROR, {});
return;
}
@ -454,23 +454,23 @@ static void window_track_list_invalidate(rct_window* w)
if ((gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER) || w->selected_list_item != 0)
{
w->pressed_widgets |= 1 << WIDX_TRACK_PREVIEW;
w->disabled_widgets &= ~(1 << WIDX_TRACK_PREVIEW);
w->pressed_widgets |= 1ULL << WIDX_TRACK_PREVIEW;
w->disabled_widgets &= ~(1ULL << WIDX_TRACK_PREVIEW);
window_track_list_widgets[WIDX_ROTATE].type = WindowWidgetType::FlatBtn;
window_track_list_widgets[WIDX_TOGGLE_SCENERY].type = WindowWidgetType::FlatBtn;
if (gTrackDesignSceneryToggle)
{
w->pressed_widgets &= ~(1 << WIDX_TOGGLE_SCENERY);
w->pressed_widgets &= ~(1ULL << WIDX_TOGGLE_SCENERY);
}
else
{
w->pressed_widgets |= (1 << WIDX_TOGGLE_SCENERY);
w->pressed_widgets |= (1ULL << WIDX_TOGGLE_SCENERY);
}
}
else
{
w->pressed_widgets &= ~(1 << WIDX_TRACK_PREVIEW);
w->disabled_widgets |= (1 << WIDX_TRACK_PREVIEW);
w->pressed_widgets &= ~(1ULL << WIDX_TRACK_PREVIEW);
w->disabled_widgets |= (1ULL << WIDX_TRACK_PREVIEW);
window_track_list_widgets[WIDX_ROTATE].type = WindowWidgetType::Empty;
window_track_list_widgets[WIDX_TOGGLE_SCENERY].type = WindowWidgetType::Empty;
}

View File

@ -66,7 +66,7 @@ rct_window* window_viewport_open()
{
rct_window* w = WindowCreateAutoPos(WW, WH, &window_viewport_events, WC_VIEWPORT, WF_RESIZABLE);
w->widgets = window_viewport_widgets;
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_ZOOM_IN) | (1 << WIDX_ZOOM_OUT) | (1 << WIDX_LOCATE);
w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_ZOOM_IN) | (1ULL << WIDX_ZOOM_OUT) | (1ULL << WIDX_LOCATE);
w->number = _viewportNumber++;
// Create viewport
@ -180,9 +180,9 @@ static void window_viewport_invalidate(rct_window* w)
// Set disabled widgets
w->disabled_widgets = 0;
if (viewport->zoom == ZoomLevel::min())
w->disabled_widgets |= 1 << WIDX_ZOOM_IN;
w->disabled_widgets |= 1ULL << WIDX_ZOOM_IN;
if (viewport->zoom >= ZoomLevel::max())
w->disabled_widgets |= 1 << WIDX_ZOOM_OUT;
w->disabled_widgets |= 1ULL << WIDX_ZOOM_OUT;
viewport->pos = w->windowPos + ScreenCoordsXY{ viewportWidget->left, viewportWidget->top };
viewport->width = viewportWidget->width();

View File

@ -45,8 +45,8 @@ public:
void OnOpen() override
{
widgets = window_water_widgets;
enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_DECREMENT) | (1 << WIDX_INCREMENT) | (1 << WIDX_PREVIEW);
hold_down_widgets = (1 << WIDX_INCREMENT) | (1 << WIDX_DECREMENT);
enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_DECREMENT) | (1ULL << WIDX_INCREMENT) | (1ULL << WIDX_PREVIEW);
hold_down_widgets = (1ULL << WIDX_INCREMENT) | (1ULL << WIDX_DECREMENT);
WindowInitScrollWidgets(this);
window_push_others_below(this);

View File

@ -155,14 +155,24 @@ void GameState::Update()
}
else
{
// NOTE: Here are a few special cases that would be normally handled in UpdateLogic.
// If the game is paused it will not call UpdateLogic at all.
numUpdates = 0;
if (network_get_mode() == NETWORK_MODE_SERVER)
{
// Make sure the client always knows about what tick the host is on.
network_send_tick();
}
// Update the animation list. Note this does not
// increment the map animation.
map_animation_invalidate_all();
// Special case because we set numUpdates to 0, otherwise in game_logic_update.
// Post-tick network update
network_process_pending();
// Post-tick game actions.
GameActions::ProcessQueue();
}
}

View File

@ -400,7 +400,7 @@ namespace OpenRCT2
cs.ReadWrite(gGrassSceneryTileLoopPosition);
cs.ReadWrite(gWidePathTileLoopPosition);
ReadWriteRideRatingCalculationData(cs, gRideRatingsCalcData);
ReadWriteRideRatingCalculationData(cs, gRideRatingUpdateState);
});
if (!found)
{
@ -408,7 +408,7 @@ namespace OpenRCT2
}
}
void ReadWriteRideRatingCalculationData(OrcaStream::ChunkStream& cs, RideRatingCalculationData& calcData)
void ReadWriteRideRatingCalculationData(OrcaStream::ChunkStream& cs, RideRatingUpdateState& calcData)
{
cs.ReadWrite(calcData.AmountOfBrakes);
cs.ReadWrite(calcData.Proximity);

View File

@ -14,7 +14,7 @@
#include <string>
#define OPENRCT2_NAME "OpenRCT2"
#define OPENRCT2_VERSION "0.3.3"
#define OPENRCT2_VERSION "0.3.4"
#if defined(__amd64__) || defined(_M_AMD64)
# define OPENRCT2_ARCHITECTURE "x86-64"

View File

@ -73,17 +73,17 @@ GameActions::Result::Ptr BannerPlaceAction::Query() const
res->Expenditure = ExpenditureType::Landscaping;
res->ErrorTitle = STR_CANT_POSITION_THIS_HERE;
if (!LocationValid(_loc))
{
return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE);
}
if (!MapCheckCapacityAndReorganise(_loc))
{
log_error("No free map elements.");
return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE);
}
if (!LocationValid(_loc))
{
return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE);
}
auto pathElement = GetValidPathElement();
if (pathElement == nullptr)

View File

@ -286,20 +286,21 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertQuery(GameActions::Re
res->Cost -= MONEY(6, 00);
}
// Do not attempt to build a crossing with a queue or a sloped.
// Do not attempt to build a crossing with a queue or a sloped path.
auto isQueue = _constructFlags & PathConstructFlag::IsQueue;
uint8_t crossingMode = isQueue || (_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, GetFlags(), &res->Cost, crossingMode))
auto canBuild = MapCanConstructWithClearAt(
{ _loc, zLow, zHigh }, &map_place_non_scenery_clear_func, quarterTile, GetFlags(), crossingMode);
if (!entrancePath && canBuild->Error != GameActions::Status::Ok)
{
return MakeResult(
GameActions::Status::NoClearance, STR_CANT_BUILD_FOOTPATH_HERE, gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = STR_CANT_BUILD_FOOTPATH_HERE;
return canBuild;
}
res->Cost += canBuild->Cost;
gFootpathGroundFlags = gMapGroundFlags;
if (!gCheatsDisableClearanceChecks && (gMapGroundFlags & ELEMENT_IS_UNDERWATER))
gFootpathGroundFlags = canBuild->GroundFlags;
if (!gCheatsDisableClearanceChecks && (canBuild->GroundFlags & ELEMENT_IS_UNDERWATER))
{
return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_CANT_BUILD_THIS_UNDERWATER);
}
@ -360,11 +361,12 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertExecute(GameActions::
crossingMode);
if (!entrancePath && canBuild->Error != GameActions::Status::Ok)
{
canBuild->ErrorTitle = STR_CANT_BUILD_FOOTPATH_HERE;
return canBuild;
}
res->Cost += canBuild->Cost;
gFootpathGroundFlags = gMapGroundFlags;
gFootpathGroundFlags = canBuild->GroundFlags;
auto surfaceElement = map_get_surface_element_at(_loc);
if (surfaceElement == nullptr)

View File

@ -132,21 +132,21 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertQuery(GameAc
res->Cost -= MONEY(6, 00);
}
// Do not attempt to build a crossing with a queue or a sloped.
// Do not attempt to build a crossing with a queue or a sloped path.
auto isQueue = _constructFlags & PathConstructFlag::IsQueue;
uint8_t crossingMode = isQueue || (_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, GetFlags(), &res->Cost, crossingMode))
auto canBuild = MapCanConstructWithClearAt(
{ _loc, zLow, zHigh }, &map_place_non_scenery_clear_func, quarterTile, GetFlags(), crossingMode);
if (!entrancePath && canBuild->Error != GameActions::Status::Ok)
{
return MakeResult(
GameActions::Status::NoClearance, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, gGameCommandErrorText,
gCommonFormatArgs);
canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
return canBuild;
}
res->Cost += canBuild->Cost;
gFootpathGroundFlags = canBuild->GroundFlags;
gFootpathGroundFlags = gMapGroundFlags;
if (!gCheatsDisableClearanceChecks && (gMapGroundFlags & ELEMENT_IS_UNDERWATER))
if (!gCheatsDisableClearanceChecks && (canBuild->GroundFlags & ELEMENT_IS_UNDERWATER))
{
return MakeResult(
GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CANT_BUILD_THIS_UNDERWATER);
@ -199,21 +199,20 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertExecute(Game
res->Cost -= MONEY(6, 00);
}
// Do not attempt to build a crossing with a queue or a sloped.
// Do not attempt to build a crossing with a queue or a sloped path.
auto isQueue = _constructFlags & PathConstructFlag::IsQueue;
uint8_t crossingMode = isQueue || (_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_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, gGameCommandErrorText,
gCommonFormatArgs);
canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
return canBuild;
}
gFootpathGroundFlags = gMapGroundFlags;
res->Cost += canBuild->Cost;
gFootpathGroundFlags = canBuild->GroundFlags;
auto surfaceElement = map_get_surface_element_at(_loc);
if (surfaceElement == nullptr)

View File

@ -119,12 +119,6 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const
}
}
if (!CheckMapCapacity(sceneryEntry->tiles, totalNumTiles))
{
log_error("No free map elements available");
return std::make_unique<LargeSceneryPlaceActionResult>(GameActions::Status::NoFreeElements);
}
uint8_t tileNum = 0;
for (rct_large_scenery_tile* tile = sceneryEntry->tiles; tile->x_offset != -1; tile++, tileNum++)
{
@ -137,18 +131,22 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const
int32_t zHigh = tile->z_clearance + zLow;
QuarterTile quarterTile = QuarterTile{ static_cast<uint8_t>(tile->flags >> 12), 0 }.Rotate(_loc.direction);
if (!map_can_construct_with_clear_at(
{ curTile, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), &supportsCost,
CREATE_CROSSING_MODE_NONE, (sceneryEntry->flags & LARGE_SCENERY_FLAG_IS_TREE) != 0))
const auto isTree = (sceneryEntry->flags & LARGE_SCENERY_FLAG_IS_TREE) != 0;
auto canBuild = MapCanConstructWithClearAt(
{ curTile, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), CREATE_CROSSING_MODE_NONE,
isTree);
if (canBuild->Error != GameActions::Status::Ok)
{
return std::make_unique<LargeSceneryPlaceActionResult>(
GameActions::Status::NoClearance, gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = STR_CANT_POSITION_THIS_HERE;
return canBuild;
}
int32_t tempSceneryGroundFlags = gMapGroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
supportsCost += canBuild->Cost;
int32_t tempSceneryGroundFlags = canBuild->GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
if (!gCheatsDisableClearanceChecks)
{
if ((gMapGroundFlags & ELEMENT_IS_UNDERWATER) || (gMapGroundFlags & ELEMENT_IS_UNDERGROUND))
if ((canBuild->GroundFlags & ELEMENT_IS_UNDERWATER) || (canBuild->GroundFlags & ELEMENT_IS_UNDERGROUND))
{
return std::make_unique<LargeSceneryPlaceActionResult>(
GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_UNDERWATER);
@ -162,7 +160,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const
res->GroundFlags = tempSceneryGroundFlags;
if (!LocationValid(curTile) || curTile.x >= GetMapSizeUnits() || curTile.y >= GetMapSizeUnits())
if (!LocationValid(curTile) || map_is_edge(curTile))
{
return std::make_unique<LargeSceneryPlaceActionResult>(GameActions::Status::Disallowed, STR_OFF_EDGE_OF_MAP);
}
@ -173,6 +171,12 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const
}
}
if (!CheckMapCapacity(sceneryEntry->tiles, totalNumTiles))
{
log_error("No free map elements available");
return std::make_unique<LargeSceneryPlaceActionResult>(GameActions::Status::NoFreeElements);
}
// Force ride construction to recheck area
_currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_RECHECK;
@ -263,15 +267,18 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const
int32_t zHigh = tile->z_clearance + zLow;
QuarterTile quarterTile = QuarterTile{ static_cast<uint8_t>(tile->flags >> 12), 0 }.Rotate(_loc.direction);
if (!map_can_construct_with_clear_at(
{ curTile, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), &supportsCost,
CREATE_CROSSING_MODE_NONE, (sceneryEntry->flags & LARGE_SCENERY_FLAG_IS_TREE) != 0))
const auto isTree = (sceneryEntry->flags & LARGE_SCENERY_FLAG_IS_TREE) != 0;
auto canBuild = MapCanConstructWithClearAt(
{ curTile, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), CREATE_CROSSING_MODE_NONE,
isTree);
if (canBuild->Error != GameActions::Status::Ok)
{
DeleteBanner(banner->id);
return MakeResult(GameActions::Status::NoClearance, gGameCommandErrorText, gCommonFormatArgs);
}
res->GroundFlags = gMapGroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
supportsCost += canBuild->Cost;
res->GroundFlags = canBuild->GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST))
{

View File

@ -39,12 +39,6 @@ GameActions::Result::Ptr MazePlaceTrackAction::Query() const
res->Position = _loc + CoordsXYZ{ 8, 8, 0 };
res->Expenditure = ExpenditureType::RideConstruction;
res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
if (!MapCheckCapacityAndReorganise(_loc))
{
res->Error = GameActions::Status::NoFreeElements;
res->ErrorMessage = STR_TILE_ELEMENT_LIMIT_REACHED;
return res;
}
if ((_loc.z & 0xF) != 0)
{
res->Error = GameActions::Status::Unknown;
@ -59,6 +53,12 @@ GameActions::Result::Ptr MazePlaceTrackAction::Query() const
return res;
}
if (!MapCheckCapacityAndReorganise(_loc))
{
res->Error = GameActions::Status::NoFreeElements;
res->ErrorMessage = STR_TILE_ELEMENT_LIMIT_REACHED;
return res;
}
auto surfaceElement = map_get_surface_element_at(_loc);
if (surfaceElement == nullptr)
{
@ -83,24 +83,22 @@ GameActions::Result::Ptr MazePlaceTrackAction::Query() const
}
}
money32 clearCost = 0;
if (!map_can_construct_with_clear_at(
{ _loc.ToTileStart(), baseHeight, clearanceHeight }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags(),
&clearCost, CREATE_CROSSING_MODE_NONE))
auto canBuild = MapCanConstructWithClearAt(
{ _loc.ToTileStart(), baseHeight, clearanceHeight }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags());
if (canBuild->Error != GameActions::Status::Ok)
{
return MakeResult(
GameActions::Status::NoClearance, res->ErrorTitle.GetStringId(), gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
return canBuild;
}
if (gMapGroundFlags & ELEMENT_IS_UNDERWATER)
if (canBuild->GroundFlags & ELEMENT_IS_UNDERWATER)
{
res->Error = GameActions::Status::NoClearance;
res->ErrorMessage = STR_RIDE_CANT_BUILD_THIS_UNDERWATER;
return res;
}
if (gMapGroundFlags & ELEMENT_IS_UNDERGROUND)
if (canBuild->GroundFlags & ELEMENT_IS_UNDERGROUND)
{
res->Error = GameActions::Status::NoClearance;
res->ErrorMessage = STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND;
@ -116,7 +114,7 @@ GameActions::Result::Ptr MazePlaceTrackAction::Query() const
}
money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16));
res->Cost = clearCost + price / 2 * 10;
res->Cost = canBuild->Cost + price / 2 * 10;
return res;
}
@ -137,13 +135,6 @@ GameActions::Result::Ptr MazePlaceTrackAction::Execute() const
return res;
}
if (!MapCheckCapacityAndReorganise(_loc))
{
res->Error = GameActions::Status::NoFreeElements;
res->ErrorMessage = STR_NONE;
return res;
}
uint32_t flags = GetFlags();
if (!(flags & GAME_COMMAND_FLAG_GHOST))
{
@ -154,17 +145,17 @@ GameActions::Result::Ptr MazePlaceTrackAction::Execute() const
auto baseHeight = _loc.z;
auto clearanceHeight = _loc.z + MAZE_CLEARANCE_HEIGHT;
money32 clearCost = 0;
if (!map_can_construct_with_clear_at(
{ _loc.ToTileStart(), baseHeight, clearanceHeight }, &map_place_non_scenery_clear_func, { 0b1111, 0 },
GetFlags() | GAME_COMMAND_FLAG_APPLY, &clearCost, CREATE_CROSSING_MODE_NONE))
auto canBuild = MapCanConstructWithClearAt(
{ _loc.ToTileStart(), baseHeight, clearanceHeight }, &map_place_non_scenery_clear_func, { 0b1111, 0 },
GetFlags() | GAME_COMMAND_FLAG_APPLY);
if (canBuild->Error != GameActions::Status::Ok)
{
return MakeResult(
GameActions::Status::NoClearance, res->ErrorTitle.GetStringId(), gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
return canBuild;
}
money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16));
res->Cost = clearCost + price / 2 * 10;
res->Cost = canBuild->Cost + price / 2 * 10;
auto startLoc = _loc.ToTileStart();

View File

@ -51,12 +51,6 @@ GameActions::Result::Ptr MazeSetTrackAction::Query() const
res->Position = _loc + CoordsXYZ{ 8, 8, 0 };
res->Expenditure = ExpenditureType::RideConstruction;
res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
if (!MapCheckCapacityAndReorganise(_loc))
{
res->Error = GameActions::Status::NoFreeElements;
res->ErrorMessage = STR_TILE_ELEMENT_LIMIT_REACHED;
return res;
}
if ((_loc.z & 0xF) != 0 && _mode == GC_SET_MAZE_TRACK_BUILD)
{
res->Error = GameActions::Status::Unknown;
@ -71,6 +65,12 @@ GameActions::Result::Ptr MazeSetTrackAction::Query() const
return res;
}
if (!MapCheckCapacityAndReorganise(_loc))
{
res->Error = GameActions::Status::NoFreeElements;
res->ErrorMessage = STR_TILE_ELEMENT_LIMIT_REACHED;
return res;
}
auto surfaceElement = map_get_surface_element_at(_loc);
if (surfaceElement == nullptr)
{
@ -159,13 +159,6 @@ GameActions::Result::Ptr MazeSetTrackAction::Execute() const
return res;
}
if (!MapCheckCapacityAndReorganise(_loc))
{
res->Error = GameActions::Status::NoFreeElements;
res->ErrorMessage = STR_NONE;
return res;
}
uint32_t flags = GetFlags();
if (!(flags & GAME_COMMAND_FLAG_GHOST))
{

View File

@ -43,31 +43,29 @@ GameActions::Result::Ptr PlaceParkEntranceAction::Query() const
{
if (!(gScreenFlags & SCREEN_FLAGS_EDITOR) && !gCheatsSandboxMode)
{
return std::make_unique<GameActions::Result>(
GameActions::Status::NotInEditorMode, STR_CANT_BUILD_PARK_ENTRANCE_HERE, STR_NONE);
return std::make_unique<GameActions::Result>(GameActions::Status::NotInEditorMode, STR_CANT_BUILD_THIS_HERE, STR_NONE);
}
auto res = std::make_unique<GameActions::Result>();
res->Expenditure = ExpenditureType::LandPurchase;
res->Position = { _loc.x, _loc.y, _loc.z };
if (!CheckMapCapacity(3))
{
return std::make_unique<GameActions::Result>(
GameActions::Status::NoFreeElements, STR_CANT_BUILD_PARK_ENTRANCE_HERE, STR_NONE);
}
if (!LocationValid(_loc) || _loc.x <= 32 || _loc.y <= 32 || _loc.x >= (GetMapSizeUnits() - 32)
|| _loc.y >= (GetMapSizeUnits() - 32))
{
return std::make_unique<GameActions::Result>(
GameActions::Status::InvalidParameters, STR_CANT_BUILD_PARK_ENTRANCE_HERE, STR_TOO_CLOSE_TO_EDGE_OF_MAP);
GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_TOO_CLOSE_TO_EDGE_OF_MAP);
}
if (!CheckMapCapacity(3))
{
return std::make_unique<GameActions::Result>(GameActions::Status::NoFreeElements, STR_CANT_BUILD_THIS_HERE, STR_NONE);
}
if (gParkEntrances.size() >= MAX_PARK_ENTRANCES)
{
return std::make_unique<GameActions::Result>(
GameActions::Status::InvalidParameters, STR_CANT_BUILD_PARK_ENTRANCE_HERE, STR_ERR_TOO_MANY_PARK_ENTRANCES);
GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_ERR_TOO_MANY_PARK_ENTRANCES);
}
auto zLow = _loc.z;
@ -88,7 +86,7 @@ GameActions::Result::Ptr PlaceParkEntranceAction::Query() const
if (auto res2 = MapCanConstructAt({ entranceLoc, zLow, zHigh }, { 0b1111, 0 }); res2->Error != GameActions::Status::Ok)
{
return std::make_unique<GameActions::Result>(
GameActions::Status::NoClearance, STR_CANT_BUILD_PARK_ENTRANCE_HERE, res2->ErrorMessage.GetStringId(),
GameActions::Status::NoClearance, STR_CANT_BUILD_THIS_HERE, res2->ErrorMessage.GetStringId(),
res2->ErrorMessageArgs.data());
}
@ -97,7 +95,7 @@ GameActions::Result::Ptr PlaceParkEntranceAction::Query() const
if (entranceElement != nullptr)
{
return std::make_unique<GameActions::Result>(
GameActions::Status::ItemAlreadyPlaced, STR_CANT_BUILD_PARK_ENTRANCE_HERE, STR_NONE);
GameActions::Status::ItemAlreadyPlaced, STR_CANT_BUILD_THIS_HERE, STR_NONE);
}
}

View File

@ -50,10 +50,6 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Query() const
{
auto errorTitle = _isExit ? STR_CANT_BUILD_MOVE_EXIT_FOR_THIS_RIDE_ATTRACTION
: STR_CANT_BUILD_MOVE_ENTRANCE_FOR_THIS_RIDE_ATTRACTION;
if (!MapCheckCapacityAndReorganise(_loc))
{
return MakeResult(GameActions::Status::NoFreeElements, errorTitle);
}
auto ride = get_ride(_rideIndex);
if (ride == nullptr)
@ -98,16 +94,20 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Query() const
return MakeResult(GameActions::Status::NotOwned, errorTitle);
}
auto clear_z = z + (_isExit ? RideExitHeight : RideEntranceHeight);
auto cost = MONEY32_UNDEFINED;
if (!map_can_construct_with_clear_at(
{ _loc, z, clear_z }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags(), &cost,
CREATE_CROSSING_MODE_NONE))
if (!MapCheckCapacityAndReorganise(_loc))
{
return MakeResult(GameActions::Status::NoClearance, errorTitle, gGameCommandErrorText, gCommonFormatArgs);
return MakeResult(GameActions::Status::NoFreeElements, errorTitle);
}
auto clear_z = z + (_isExit ? RideExitHeight : RideEntranceHeight);
auto canBuild = MapCanConstructWithClearAt(
{ _loc, z, clear_z }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags());
if (canBuild->Error != GameActions::Status::Ok)
{
canBuild->ErrorTitle = errorTitle;
return canBuild;
}
if (gMapGroundFlags & ELEMENT_IS_UNDERWATER)
if (canBuild->GroundFlags & ELEMENT_IS_UNDERWATER)
{
return MakeResult(GameActions::Status::Disallowed, errorTitle, STR_RIDE_CANT_BUILD_THIS_UNDERWATER);
}
@ -163,12 +163,12 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Execute() const
}
auto clear_z = z + (_isExit ? RideExitHeight : RideEntranceHeight);
auto cost = MONEY32_UNDEFINED;
if (!map_can_construct_with_clear_at(
{ _loc, z, clear_z }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags() | GAME_COMMAND_FLAG_APPLY, &cost,
CREATE_CROSSING_MODE_NONE))
auto canBuild = MapCanConstructWithClearAt(
{ _loc, z, clear_z }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags() | GAME_COMMAND_FLAG_APPLY);
if (canBuild->Error != GameActions::Status::Ok)
{
return MakeResult(GameActions::Status::NoClearance, errorTitle, gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = errorTitle;
return canBuild;
}
auto res = MakeResult();
@ -217,26 +217,26 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::TrackPlaceQuery(const Coor
{
auto errorTitle = isExit ? STR_CANT_BUILD_MOVE_EXIT_FOR_THIS_RIDE_ATTRACTION
: STR_CANT_BUILD_MOVE_ENTRANCE_FOR_THIS_RIDE_ATTRACTION;
if (!MapCheckCapacityAndReorganise(loc))
{
return MakeResult(GameActions::Status::NoFreeElements, errorTitle);
}
if (!gCheatsSandboxMode && !map_is_location_owned(loc))
{
return MakeResult(GameActions::Status::NotOwned, errorTitle);
}
if (!MapCheckCapacityAndReorganise(loc))
{
return MakeResult(GameActions::Status::NoFreeElements, errorTitle);
}
int16_t baseZ = loc.z;
int16_t clearZ = baseZ + (isExit ? RideExitHeight : RideEntranceHeight);
auto cost = MONEY32_UNDEFINED;
if (!map_can_construct_with_clear_at(
{ loc, baseZ, clearZ }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, 0, &cost, CREATE_CROSSING_MODE_NONE))
auto canBuild = MapCanConstructWithClearAt({ loc, baseZ, clearZ }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, 0);
if (canBuild->Error != GameActions::Status::Ok)
{
return MakeResult(GameActions::Status::NoClearance, errorTitle, gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = errorTitle;
return canBuild;
}
if (gMapGroundFlags & ELEMENT_IS_UNDERWATER)
if (canBuild->GroundFlags & ELEMENT_IS_UNDERWATER)
{
return MakeResult(GameActions::Status::Disallowed, errorTitle, STR_RIDE_CANT_BUILD_THIS_UNDERWATER);
}

View File

@ -111,16 +111,16 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const
res->Position.z = surfaceHeight;
}
if (!MapCheckCapacityAndReorganise(_loc))
{
return std::make_unique<SmallSceneryPlaceActionResult>(GameActions::Status::NoFreeElements);
}
if (!LocationValid(_loc))
{
return MakeResult(GameActions::Status::InvalidParameters);
}
if (!MapCheckCapacityAndReorganise(_loc))
{
return std::make_unique<SmallSceneryPlaceActionResult>(GameActions::Status::NoFreeElements);
}
if (!byte_9D8150 && (_loc.x > GetMapSizeMaxXY() || _loc.y > GetMapSizeMaxXY()))
{
return std::make_unique<SmallSceneryPlaceActionResult>(GameActions::Status::InvalidParameters);
@ -276,20 +276,19 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const
}
QuarterTile quarterTile = QuarterTile{ collisionQuadrants, supports }.Rotate(quadRotation);
money32 clearCost = 0;
if (!map_can_construct_with_clear_at(
{ _loc, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), &clearCost,
CREATE_CROSSING_MODE_NONE, scenery_small_entry_has_flag(sceneryEntry, SMALL_SCENERY_FLAG_IS_TREE)))
const auto isTree = scenery_small_entry_has_flag(sceneryEntry, SMALL_SCENERY_FLAG_IS_TREE);
auto canBuild = MapCanConstructWithClearAt(
{ _loc, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), CREATE_CROSSING_MODE_NONE, isTree);
if (canBuild->Error != GameActions::Status::Ok)
{
return std::make_unique<SmallSceneryPlaceActionResult>(
GameActions::Status::Disallowed, gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = STR_CANT_POSITION_THIS_HERE;
return canBuild;
}
res->GroundFlags = gMapGroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
res->GroundFlags = canBuild->GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
res->Expenditure = ExpenditureType::Landscaping;
res->Cost = (sceneryEntry->price * 10) + clearCost;
res->Cost = (sceneryEntry->price * 10) + canBuild->Cost;
return res;
}
@ -414,20 +413,20 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Execute() const
}
QuarterTile quarterTile = QuarterTile{ collisionQuadrants, supports }.Rotate(quadRotation);
money32 clearCost = 0;
if (!map_can_construct_with_clear_at(
{ _loc, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags() | GAME_COMMAND_FLAG_APPLY, &clearCost,
CREATE_CROSSING_MODE_NONE, scenery_small_entry_has_flag(sceneryEntry, SMALL_SCENERY_FLAG_IS_TREE)))
const auto isTree = scenery_small_entry_has_flag(sceneryEntry, SMALL_SCENERY_FLAG_IS_TREE);
auto canBuild = MapCanConstructWithClearAt(
{ _loc, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags() | GAME_COMMAND_FLAG_APPLY,
CREATE_CROSSING_MODE_NONE, isTree);
if (canBuild->Error != GameActions::Status::Ok)
{
return std::make_unique<SmallSceneryPlaceActionResult>(
GameActions::Status::Disallowed, gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = STR_CANT_POSITION_THIS_HERE;
return canBuild;
}
res->GroundFlags = gMapGroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
res->GroundFlags = canBuild->GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
res->Expenditure = ExpenditureType::Landscaping;
res->Cost = (sceneryEntry->price * 10) + clearCost;
res->Cost = (sceneryEntry->price * 10) + canBuild->Cost;
auto* sceneryElement = TileElementInsert<SmallSceneryElement>(
CoordsXYZ{ _loc, zLow }, quarterTile.GetBaseQuarterOccupied());

View File

@ -232,12 +232,14 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const
&& _trackType == TrackElemType::Flat)
? CREATE_CROSSING_MODE_TRACK_OVER_PATH
: CREATE_CROSSING_MODE_NONE;
if (!map_can_construct_with_clear_at(
{ mapLoc, baseZ, clearanceZ }, &map_place_non_scenery_clear_func, quarterTile, GetFlags(), &cost, crossingMode))
auto canBuild = MapCanConstructWithClearAt(
{ mapLoc, baseZ, clearanceZ }, &map_place_non_scenery_clear_func, quarterTile, GetFlags(), crossingMode);
if (canBuild->Error != GameActions::Status::Ok)
{
return std::make_unique<TrackPlaceActionResult>(
GameActions::Status::NoClearance, gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
return canBuild;
}
cost += canBuild->Cost;
// When building a level crossing, remove any pre-existing path furniture.
if (crossingMode == CREATE_CROSSING_MODE_TRACK_OVER_PATH)
@ -249,7 +251,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const
}
}
uint8_t mapGroundFlags = gMapGroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
uint8_t mapGroundFlags = canBuild->GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
if (res->GroundFlags != 0 && (res->GroundFlags & mapGroundFlags) == 0)
{
return std::make_unique<TrackPlaceActionResult>(
@ -269,14 +271,14 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const
if (TrackFlags[_trackType] & TRACK_ELEM_FLAG_ONLY_UNDERWATER)
{ // No element has this flag
if (gMapGroundFlags & ELEMENT_IS_UNDERWATER)
if (canBuild->GroundFlags & ELEMENT_IS_UNDERWATER)
{
return std::make_unique<TrackPlaceActionResult>(
GameActions::Status::Disallowed, STR_CAN_ONLY_BUILD_THIS_UNDERWATER);
}
}
if (gMapGroundFlags & ELEMENT_IS_UNDERWATER && !gCheatsDisableClearanceChecks)
if (canBuild->GroundFlags & ELEMENT_IS_UNDERWATER && !gCheatsDisableClearanceChecks)
{
return std::make_unique<TrackPlaceActionResult>(
GameActions::Status::Disallowed, STR_RIDE_CANT_BUILD_THIS_UNDERWATER);
@ -428,13 +430,15 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const
&& _trackType == TrackElemType::Flat)
? CREATE_CROSSING_MODE_TRACK_OVER_PATH
: CREATE_CROSSING_MODE_NONE;
if (!map_can_construct_with_clear_at(
mapLocWithClearance, &map_place_non_scenery_clear_func, quarterTile, GetFlags() | GAME_COMMAND_FLAG_APPLY,
&cost, crossingMode))
auto canBuild = MapCanConstructWithClearAt(
mapLocWithClearance, &map_place_non_scenery_clear_func, quarterTile, GetFlags() | GAME_COMMAND_FLAG_APPLY,
crossingMode);
if (canBuild->Error != GameActions::Status::Ok)
{
return std::make_unique<TrackPlaceActionResult>(
GameActions::Status::NoClearance, gGameCommandErrorText, gCommonFormatArgs);
canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
return canBuild;
}
cost += canBuild->Cost;
if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST) && !gCheatsDisableClearanceChecks)
{
@ -459,7 +463,7 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const
}
}
uint8_t mapGroundFlags = gMapGroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
uint8_t mapGroundFlags = canBuild->GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND);
if (res->GroundFlags != 0 && (res->GroundFlags & mapGroundFlags) == 0)
{
return std::make_unique<TrackPlaceActionResult>(
@ -543,7 +547,11 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const
}
auto* trackElement = TileElementInsert<TrackElement>(mapLoc, quarterTile.GetBaseQuarterOccupied());
Guard::Assert(trackElement != nullptr);
if (trackElement == nullptr)
{
log_warning("Cannot create track element for ride = %d", static_cast<int32_t>(_rideIndex));
return std::make_unique<TrackPlaceActionResult>(GameActions::Status::NoFreeElements);
}
trackElement->SetClearanceZ(clearanceZ);
trackElement->SetDirection(_origin.direction);

View File

@ -21,22 +21,22 @@
#include "../world/Wall.h"
WallPlaceActionResult::WallPlaceActionResult()
: GameActions::Result(GameActions::Status::Ok, STR_CANT_BUILD_PARK_ENTRANCE_HERE)
: GameActions::Result(GameActions::Status::Ok, STR_CANT_BUILD_THIS_HERE)
{
}
WallPlaceActionResult::WallPlaceActionResult(GameActions::Status err)
: GameActions::Result(err, STR_CANT_BUILD_PARK_ENTRANCE_HERE)
: GameActions::Result(err, STR_CANT_BUILD_THIS_HERE)
{
}
WallPlaceActionResult::WallPlaceActionResult(GameActions::Status err, rct_string_id msg)
: GameActions::Result(err, STR_CANT_BUILD_PARK_ENTRANCE_HERE, msg)
: GameActions::Result(err, STR_CANT_BUILD_THIS_HERE, msg)
{
}
WallPlaceActionResult::WallPlaceActionResult(GameActions::Status error, rct_string_id msg, uint8_t* args)
: GameActions::Result(error, STR_CANT_BUILD_PARK_ENTRANCE_HERE, msg, args)
: GameActions::Result(error, STR_CANT_BUILD_THIS_HERE, msg, args)
{
}
@ -78,7 +78,7 @@ void WallPlaceAction::Serialise(DataSerialiser& stream)
GameActions::Result::Ptr WallPlaceAction::Query() const
{
auto res = std::make_unique<WallPlaceActionResult>();
res->ErrorTitle = STR_CANT_BUILD_PARK_ENTRANCE_HERE;
res->ErrorTitle = STR_CANT_BUILD_THIS_HERE;
res->Position = _loc;
res->Expenditure = ExpenditureType::Landscaping;
@ -278,7 +278,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const
GameActions::Result::Ptr WallPlaceAction::Execute() const
{
auto res = std::make_unique<WallPlaceActionResult>();
res->ErrorTitle = STR_CANT_BUILD_PARK_ENTRANCE_HERE;
res->ErrorTitle = STR_CANT_BUILD_THIS_HERE;
res->Position = _loc;
res->Expenditure = ExpenditureType::Landscaping;
@ -337,11 +337,6 @@ GameActions::Result::Ptr WallPlaceAction::Execute() const
}
}
if (!MapCheckCapacityAndReorganise(_loc))
{
return MakeResult(GameActions::Status::NoFreeElements, STR_TILE_ELEMENT_LIMIT_REACHED);
}
Banner* banner = nullptr;
if (wallEntry->scrolling_mode != SCROLLING_MODE_NONE)
{
@ -506,7 +501,6 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction(
rct_large_scenery_tile* tile;
*wallAcrossTrack = false;
gMapGroundFlags = ELEMENT_IS_ABOVE_GROUND;
if (map_is_location_at_edge(_loc))
{
return MakeResult(GameActions::Status::InvalidParameters, STR_OFF_EDGE_OF_MAP);

View File

@ -803,6 +803,53 @@ void lightfx_add_lights_magic_vehicle(const Vehicle* vehicle)
};
}
void LightFxAddKioskLights(const CoordsXY& mapPosition, const int32_t height, const uint8_t zOffset)
{
uint8_t relativeRotation = (4 - get_current_rotation()) % 4;
CoordsXY lanternOffset1 = CoordsXY(0, 16).Rotate(relativeRotation);
CoordsXY lanternOffset2 = CoordsXY(16, 0).Rotate(relativeRotation);
lightfx_add_3d_light_magic_from_drawing_tile(
mapPosition, lanternOffset1.x, lanternOffset1.y, height + zOffset, LightType::Lantern3);
lightfx_add_3d_light_magic_from_drawing_tile(
mapPosition, lanternOffset2.x, lanternOffset2.y, height + zOffset, LightType::Lantern3);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, 8, 32, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, 32, 8, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, -32, 8, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, 8, -32, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, -8, 32, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, 32, -8, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, -32, -8, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, -8, -32, height, LightType::Spot1);
}
void LightFxAddShopLights(const CoordsXY& mapPosition, const uint8_t direction, const int32_t height, const uint8_t zOffset)
{
if (direction == (4 - get_current_rotation()) % 4) // Back Right Facing Stall
{
CoordsXY spotOffset1 = CoordsXY(-32, 8).Rotate(direction);
CoordsXY spotOffset2 = CoordsXY(-32, 4).Rotate(direction);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, spotOffset1.x, spotOffset1.y, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, spotOffset2.x, spotOffset2.y, height, LightType::Spot2);
}
else if (direction == (7 - get_current_rotation()) % 4) // Back left Facing Stall
{
CoordsXY spotOffset1 = CoordsXY(-32, -8).Rotate(direction);
CoordsXY spotOffset2 = CoordsXY(-32, -4).Rotate(direction);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, spotOffset1.x, spotOffset1.y, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, spotOffset2.x, spotOffset2.y, height, LightType::Spot2);
}
else // Forward Facing Stall
{
CoordsXY spotOffset1 = CoordsXY(-32, 8).Rotate(direction);
CoordsXY spotOffset2 = CoordsXY(-32, -8).Rotate(direction);
CoordsXY lanternOffset = CoordsXY(-16, 0).Rotate(direction);
lightfx_add_3d_light_magic_from_drawing_tile(
mapPosition, lanternOffset.x, lanternOffset.y, height + zOffset, LightType::Lantern3);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, spotOffset1.x, spotOffset1.y, height, LightType::Spot1);
lightfx_add_3d_light_magic_from_drawing_tile(mapPosition, spotOffset2.x, spotOffset2.y, height, LightType::Spot1);
}
}
void lightfx_apply_palette_filter(uint8_t i, uint8_t* r, uint8_t* g, uint8_t* b)
{
float night = static_cast<float>(pow(gDayNightCycle, 1.5));

View File

@ -68,6 +68,9 @@ void lightfx_add_3d_light_magic_from_drawing_tile(
void lightfx_add_lights_magic_vehicle(const Vehicle* vehicle);
void LightFxAddKioskLights(const CoordsXY& mapPosition, const int32_t height, const uint8_t zOffset);
void LightFxAddShopLights(const CoordsXY& mapPosition, const uint8_t direction, const int32_t height, const uint8_t zOffset);
uint32_t lightfx_get_light_polution();
void lightfx_apply_palette_filter(uint8_t i, uint8_t* r, uint8_t* g, uint8_t* b);

View File

@ -34,6 +34,7 @@ TTFontFamily const TTFFamilyJapanese = {
TTFontFamily const TTFFamilyKorean = {
&TTFFontGulim,
&TTFFontNanum,
&TTFFontMalgun,
};
TTFontFamily const TTFFamilySansSerif = {

View File

@ -72,10 +72,16 @@ TTFFontSetDescriptor TTFFontGulim = { {
{ "gulim.ttc", "Gulim", 12, 1, 0, 15, HINTING_THRESHOLD_MEDIUM, nullptr },
} };
TTFFontSetDescriptor TTFFontMalgun = { {
{ "malgun.ttf", "Malgun Gothic", 10, 1, -3, 10, HINTING_THRESHOLD_LOW, nullptr },
{ "malgun.ttf", "Malgun Gothic", 12, 1, -3, 15, HINTING_THRESHOLD_LOW, nullptr },
{ "malgun.ttf", "Malgun Gothic", 12, 1, -3, 15, HINTING_THRESHOLD_LOW, nullptr },
} };
TTFFontSetDescriptor TTFFontNanum = { {
{ "NanumGothic.ttc", "Nanum Gothic", 10, 1, 0, 10, HINTING_DISABLED, nullptr },
{ "NanumGothic.ttc", "Nanum Gothic", 12, 1, 0, 15, HINTING_THRESHOLD_LOW, nullptr },
{ "NanumGothic.ttc", "Nanum Gothic", 12, 1, 0, 15, HINTING_THRESHOLD_LOW, nullptr },
{ "NanumGothic.ttf", "Nanum Gothic", 10, 1, -2, 10, HINTING_DISABLED, nullptr },
{ "NanumGothic.ttf", "Nanum Gothic", 12, 1, -2, 15, HINTING_THRESHOLD_LOW, nullptr },
{ "NanumGothic.ttf", "Nanum Gothic", 12, 1, -2, 15, HINTING_THRESHOLD_LOW, nullptr },
} };
TTFFontSetDescriptor TTFFontArial = { {

View File

@ -26,6 +26,7 @@ extern TTFFontSetDescriptor TTFFontHeiti;
extern TTFFontSetDescriptor TTFFontSimSun;
extern TTFFontSetDescriptor TTFFontLiHeiPro;
extern TTFFontSetDescriptor TTFFontGulim;
extern TTFFontSetDescriptor TTFFontMalgun;
extern TTFFontSetDescriptor TTFFontNanum;
extern TTFFontSetDescriptor TTFFontArial;
extern TTFFontSetDescriptor TTFFontArialUnicode;

Some files were not shown because too many files have changed in this diff Show More