townforge/src/game/ui-urho3d.h
2020-09-02 23:07:03 +00:00

469 lines
27 KiB
C++

#ifndef UI_URHO3D_H
#define UI_URHO3D_H
#include <Urho3D/Core/Context.h>
#include <Urho3D/Core/Variant.h>
#include <Urho3D/Container/Str.h>
#include <Urho3D/Core/StringUtils.h>
#include <Urho3D/UI/UI.h>
#include <Urho3D/UI/ListView.h>
#include <Urho3D/UI/Button.h>
#include <tb/tb_window.h>
#include <tb/tb_layout.h>
#include <tb/tb_select_item.h>
#include "math_helper.h"
#include "controls.h"
#include "shade-button.h"
#include "shadable-window.h"
#include "ui-notifier.h"
#include "game-state.h"
#include "ui-tb-window.h"
#include "map.h"
class GameWallet;
class UIBuildingSettingsDialog;
class UILastUpdateEventsDialog;
class UIRenameDialog;
class UIRepairDialog;
class UITradeDialog;
class UILeaderboardsDialog;
class UIResearchDialog;
class UIOptionsDialog;
class UIPlayerInfoDialog;
class UIFileSelector;
class UISelectAmountDialog;
class UINodeConfigDialog;
class UIFoundCityDialog;
class UITravelToCityDialog;
class UINewItemDialog;
class UIDividendDialog;
class UIIgnoreDialog;
class UIEventBadgeDialog;
class UICreditsDialog;
class UIDefineAttributeDialog;
class UIDiceRollDialog;
class UIHuntDialog;
class UIQueuedCommandsDialog;
class UICityLevelDialog;
class UIPaletteDialog;
class UISelectMaterial;
class UIFightFireDialog;
class UIServiceDialog;
class UIAcceptInvitationDialog;
class UIAddCitySpecializationDialog;
class UINoWalletIntroDialog;
class UISowDialog;
class UIHarvestDialog;
class UIMintDialog;
class UISmeltDialog;
namespace Urho3D
{
class Sprite;
class Vector3;
}
namespace tb
{
class TBID;
class TBWidget;
class TBSelectList;
class TBCheckBox;
class TBTextField;
class TBToggleContainer;
}
enum EditMode
{
EM_SELECT_RECTANGLE,
EM_SELECT_ELLIPSE,
};
URHO3D_EVENT(E_CRYPTOCITY_LOAD_WALLET, LoadWallet) {}
URHO3D_EVENT(E_CRYPTOCITY_DEPOSIT, Deposit) { URHO3D_PARAM(P_AMOUNT, Amount); /*, uint64_t */ }
URHO3D_EVENT(E_CRYPTOCITY_WITHDRAW, Withdraw) { URHO3D_PARAM(P_AMOUNT, Amount); /* uint64_t */ }
URHO3D_EVENT(E_CRYPTOCITY_BUY_LAND, BuyLand) {}
URHO3D_EVENT(E_CRYPTOCITY_BUILDING_SETTINGS, BuildingSettings) { URHO3D_PARAM(P_ROLE, Role); /* uint8_t */ URHO3D_PARAM(P_ECONOMIC_POWER, EconomicPower); /* uint32_t */ URHO3D_PARAM(P_NAME, Name); }
URHO3D_EVENT(E_CRYPTOCITY_REPAIR, Repair) { URHO3D_PARAM(P_FLAGS, Flags); /* vector */ }
URHO3D_EVENT(E_CRYPTOCITY_BUY_ITEMS, BuyItems) { URHO3D_PARAM(P_QUANTITIES, Quantities); /* vector */ }
URHO3D_EVENT(E_CRYPTOCITY_BUY, Buy) { URHO3D_PARAM(P_TYPE, Type); URHO3D_PARAM(P_ID, ID); URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_PRICE, Price); URHO3D_PARAM(P_ACCRUAL_START_HEIGHT, AccrualStartHeight); URHO3D_PARAM(P_ACCRUAL, Accrual); URHO3D_PARAM(P_ACCRUAL_PRICE_LIMIT, AccrualPriceLimit); URHO3D_PARAM(P_MATCHES, Matches); URHO3D_PARAM(P_COST, Cost); URHO3D_PARAM(P_EXPIRATION, Expiration); }
URHO3D_EVENT(E_CRYPTOCITY_SELL, Sell) { URHO3D_PARAM(P_TYPE, Type); URHO3D_PARAM(P_ID, ID); URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_PRICE, Price); URHO3D_PARAM(P_ACCRUAL_START_HEIGHT, AccrualStartHeight); URHO3D_PARAM(P_ACCRUAL, Accrual); URHO3D_PARAM(P_ACCRUAL_PRICE_LIMIT, AccrualPriceLimit); URHO3D_PARAM(P_MATCHES, Matches); URHO3D_PARAM(P_COST, Cost); URHO3D_PARAM(P_EXPIRATION, Expiration); }
URHO3D_EVENT(E_CRYPTOCITY_ASSIGN_ITEMS, AssignItems) { URHO3D_PARAM(P_QUANTITIES, Quantities); /* vector */ }
URHO3D_EVENT(E_CRYPTOCITY_DESTROY_ITEMS, DestroyItems) { URHO3D_PARAM(P_QUANTITIES, Quantities); /* vector */ }
URHO3D_EVENT(E_CRYPTOCITY_ADD_BLOCK, AddBlock) {}
URHO3D_EVENT(E_CRYPTOCITY_REMOVE_BLOCK, RemoveBlock) { URHO3D_PARAM(P_TOP_LEVEL, TopLevel); }
URHO3D_EVENT(E_CRYPTOCITY_REMOVE_HIDDEN_BLOCKS, RemoveHiddenBlocks) {}
URHO3D_EVENT(E_CRYPTOCITY_APPROVE_BUILD, ApproveBuild) {}
URHO3D_EVENT(E_CRYPTOCITY_ABANDON_BUILD, AbandonBuild) {}
URHO3D_EVENT(E_CRYPTOCITY_MATERIAL_SELECTED, MaterialSelected) { URHO3D_PARAM(P_MATERIAL, Material); /* int */ }
URHO3D_EVENT(E_CRYPTOCITY_VARIANT_SELECTED, VariantSelected) { URHO3D_PARAM(P_VARIANT, Variant); /* int */ }
URHO3D_EVENT(E_CRYPTOCITY_UNDO, Undo) { }
URHO3D_EVENT(E_CRYPTOCITY_REDO, Redo) { }
URHO3D_EVENT(E_CRYPTOCITY_LOAD_MODEL, LoadModel) { URHO3D_PARAM(P_FILENAME, Filename); }
URHO3D_EVENT(E_CRYPTOCITY_SAVE_MODEL, SaveModel) { URHO3D_PARAM(P_FILENAME, Filename); URHO3D_PARAM(P_SELECTION, Selection); }
URHO3D_EVENT(E_CRYPTOCITY_EDIT_MODE_CHANGED, EditModeChanged) { URHO3D_PARAM(P_EDIT_MODE, Mode); }
URHO3D_EVENT(E_CRYPTOCITY_GROW_SELECTION, GrowSelection) { }
URHO3D_EVENT(E_CRYPTOCITY_SHRINK_SELECTION, ShrinkSelection) { }
URHO3D_EVENT(E_CRYPTOCITY_SELECT_EDGE, SelectEdge) { }
URHO3D_EVENT(E_CRYPTOCITY_SELECT_WHOLE_FLAG, SelectWholeFlag) { }
URHO3D_EVENT(E_CRYPTOCITY_GO_TO_FLAG, GoToFlag) { URHO3D_PARAM(P_FLAG, Flag); }
URHO3D_EVENT(E_CRYPTOCITY_GO_TO_VISTA, GoToVista) { URHO3D_PARAM(P_CITY, City); URHO3D_PARAM(P_POSITION, Position); URHO3D_PARAM(P_ORIENTATION, Orientation); }
URHO3D_EVENT(E_CRYPTOCITY_GET_VISTA, GetVista) { URHO3D_PARAM(P_CITY, City); URHO3D_PARAM(P_POSITION, Position); URHO3D_PARAM(P_ORIENTATION, Orientation); }
URHO3D_EVENT(E_CRYPTOCITY_GET_GAME_UPDATE_EVENTS, GetGameUpdateEvents) { URHO3D_PARAM(P_HEIGHT, Height); URHO3D_PARAM(P_EVENTS, Events); URHO3D_PARAM(P_TIMESTAMP, Timestamp); }
URHO3D_EVENT(E_CRYPTOCITY_RENAME_FLAG, RenameFlag) { URHO3D_PARAM(P_NAME, Name); }
URHO3D_EVENT(E_CRYPTOCITY_DEMOLISH_FLAG, DemolishFlag) { }
URHO3D_EVENT(E_CRYPTOCITY_DESTROY_FLAG, DestroyFlag) { }
URHO3D_EVENT(E_CRYPTOCITY_CHAT, Chat) { }
URHO3D_EVENT(E_CRYPTOCITY_RESEARCH, Research) { URHO3D_PARAM(P_DISCOVERY, Discovery); URHO3D_PARAM(P_AMOUNT, Amount); }
URHO3D_EVENT(E_CRYPTOCITY_ENABLE_SHADOWS, EnableShadows) { URHO3D_PARAM(P_ENABLE, Enable); }
URHO3D_EVENT(E_CRYPTOCITY_ENABLE_CLOUDS, EnableClouds) { URHO3D_PARAM(P_ENABLE, Enable); }
URHO3D_EVENT(E_CRYPTOCITY_ENABLE_HORIZON, EnableHorizon) { URHO3D_PARAM(P_ENABLE, Enable); }
URHO3D_EVENT(E_CRYPTOCITY_ENABLE_DYNAMIC_SKY, EnableDynamicSky) { URHO3D_PARAM(P_ENABLE, Enable); }
URHO3D_EVENT(E_CRYPTOCITY_TIME_OF_DAY, TimeOfDay) { URHO3D_PARAM(P_TIME_OF_DAY, TimeOfDay); }
URHO3D_EVENT(E_CRYPTOCITY_SHOW_FLAGS, ShowFlags) { URHO3D_PARAM(P_SHOW, Show); /* bool */ }
URHO3D_EVENT(E_CRYPTOCITY_SET_NODE_CONFIG, SetNodeConfig) { URHO3D_PARAM(P_ADDRESS, Address); URHO3D_PARAM(P_PORT, Port); URHO3D_PARAM(P_SUCCESS, Success); }
URHO3D_EVENT(E_CRYPTOCITY_FOUND_CITY, FoundCity) { URHO3D_PARAM(P_ID, ID); URHO3D_PARAM(P_SEED, Seed); URHO3D_PARAM(P_NAME, Name); URHO3D_PARAM(P_COST, Cost); }
URHO3D_EVENT(E_CRYPTOCITY_TRAVEL_TO_CITY, TravelToCity) { URHO3D_PARAM(P_CITY, City); }
URHO3D_EVENT(E_CRYPTOCITY_GIVE_ITEMS, GiveItems) { URHO3D_PARAM(P_RECIPIENT, Recipient); URHO3D_PARAM(P_QUANTITIES, Quantities); /* vector */ }
URHO3D_EVENT(E_CRYPTOCITY_GIVE_MONEY, GiveMoney) { URHO3D_PARAM(P_RECIPIENT, Recipient); URHO3D_PARAM(P_AMOUNT, Amount); /* uint64_t */ }
URHO3D_EVENT(E_CRYPTOCITY_EXIT, Exit) { }
URHO3D_EVENT(E_CRYPTOCITY_CAMERA_TYPE, CameraType) { URHO3D_PARAM(P_TYPE, Type); }
URHO3D_EVENT(E_CRYPTOCITY_GROUND_TYPE, GroundType) { URHO3D_PARAM(P_TYPE, Type); }
URHO3D_EVENT(E_CRYPTOCITY_GRAPHICS_MODE, GraphicsMode) { URHO3D_PARAM(P_MONITOR, Monitor); URHO3D_PARAM(P_WIDTH, Width); URHO3D_PARAM(P_HEIGHT, Height); URHO3D_PARAM(P_REFRESH_RATE, RefreshRate); URHO3D_PARAM(P_SUCCESS, Success); }
URHO3D_EVENT(E_CRYPTOCITY_NEW_ITEM, NewItem) { URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_NAME, Name); URHO3D_PARAM(P_IS_GROUP, IsGroup); URHO3D_PARAM(P_IS_PUBLIC, IsPublic); URHO3D_PARAM(P_GROUP, Group); URHO3D_PARAM(P_PRIMARY_DESCRIPTION, PrimaryDescription); URHO3D_PARAM(P_SECONDARY_DESCRIPTION, SecondaryDescription); }
URHO3D_EVENT(E_CRYPTOCITY_DIVIDEND, Dividend) { URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_OWNED_ITEM, OwnedItem); URHO3D_PARAM(P_DISTRIBUTED_ITEM, DistributedItem); URHO3D_PARAM(P_NOTE, Note); }
URHO3D_EVENT(E_CRYPTOCITY_GET_IGNORE_SETTINGS, GetIgnoreSettings) { URHO3D_PARAM(P_IGNORE, Ignore); URHO3D_PARAM(P_MASTER, Master); }
URHO3D_EVENT(E_CRYPTOCITY_SET_IGNORE_SETTINGS, SetIgnoreSettings) { URHO3D_PARAM(P_IGNORE, Ignore); URHO3D_PARAM(P_MASTER, Master); URHO3D_PARAM(P_NOTE, Note); }
URHO3D_EVENT(E_CRYPTOCITY_EVENT_BADGE, EventBadge) { URHO3D_PARAM(P_BADGE_ID, BadgeId); URHO3D_PARAM(P_NAME, Name); URHO3D_PARAM(P_DESCRIPTION, Description); URHO3D_PARAM(P_INSTANCES, Instances); }
URHO3D_EVENT(E_CRYPTOCITY_RESIZE_FLAG, ResizeFlag) {}
URHO3D_EVENT(E_CRYPTOCITY_CONTROLS_CHANGED, ControlsChanged) {}
URHO3D_EVENT(E_CRYPTOCITY_SELECT_EXTEND, SelectExtend) { URHO3D_PARAM(P_DX0, DX0); URHO3D_PARAM(P_DY0, DY0); URHO3D_PARAM(P_DX1, DX1); URHO3D_PARAM(P_DY1, DY1); }
URHO3D_EVENT(E_CRYPTOCITY_DEFINE_ATTRIBUTE, DefineAttribute) { URHO3D_PARAM(P_NAME, Name); URHO3D_PARAM(P_DESCRIPTION, Description); }
URHO3D_EVENT(E_CRYPTOCITY_INCREASE_ATTRIBUTE, IncreaseAttribute) { URHO3D_PARAM(P_ATTRIBUTES, Attributes); /* vector */ }
URHO3D_EVENT(E_CRYPTOCITY_SAVE_PLAYER_PROFILE, SavePlayerProfile) { URHO3D_PARAM(P_PROFILE, Profile); }
URHO3D_EVENT(E_CRYPTOCITY_DICE_ROLL, DiceRoll) { URHO3D_PARAM(P_TEXT, Text); URHO3D_PARAM(P_MIN_VALUE, MinValue); URHO3D_PARAM(P_MAX_VALUE, MaxValue); URHO3D_PARAM(P_ACCOUNT, Account); URHO3D_PARAM(P_ATTRIBUTE, Attribute); }
URHO3D_EVENT(E_CRYPTOCITY_HUNT, Hunt) { URHO3D_PARAM(P_TARGET, Target); }
URHO3D_EVENT(E_CRYPTOCITY_PALETTE, Palette) { URHO3D_PARAM(P_FLAG, Flag); URHO3D_PARAM(P_PALETTE, Palette); }
URHO3D_EVENT(E_CRYPTOCITY_GET_TEXTURES, GetTextures) { URHO3D_PARAM(P_TEXTURES, Textures); }
URHO3D_EVENT(E_CRYPTOCITY_FIGHT_FIRE, FightFire) { URHO3D_PARAM(P_BURNING_FLAG, BurningFlag); URHO3D_PARAM(P_FIRE_STATE, FireState); URHO3D_PARAM(P_FIREFIGHTING_FLAG, FirefightingFlag); URHO3D_PARAM(P_LAST_FIREFIGHTING_HEIGHT, LastFirefightingHeight); }
URHO3D_EVENT(E_CRYPTOCITY_SERVICE_PRICE, ServicePrice) { URHO3D_PARAM(P_FLAG, Flag); URHO3D_PARAM(P_PRICE, Price); }
URHO3D_EVENT(E_CRYPTOCITY_GENERATE_INVITATION, GenerateInvitation) { URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_EXPIRATION, Expiration); URHO3D_PARAM(P_INVITATION, Invitation); }
URHO3D_EVENT(E_CRYPTOCITY_ACCEPT_INVITATION, AcceptInvitation) { URHO3D_PARAM(P_INVITATION, Invitation); URHO3D_PARAM(P_FILENAME, Filename); URHO3D_PARAM(P_NAME, Name); }
URHO3D_EVENT(E_CRYPTOCITY_REQUEST_INVITATION_STATUS, RequestInvitationStatus) { URHO3D_PARAM(P_PUBLIC_KEY, PublicKey); URHO3D_PARAM(P_USED, Used); URHO3D_PARAM(P_BALANCE_OK, BalanceOK); }
URHO3D_EVENT(E_CRYPTOCITY_CREATE_NEW_WALLET, CreateNewWallet) { URHO3D_PARAM(P_FILENAME, Filename); }
URHO3D_EVENT(E_CRYPTOCITY_START_MINING, StartMining) { }
URHO3D_EVENT(E_CRYPTOCITY_STOP_MINING, StopMining) { }
URHO3D_EVENT(E_CRYPTOCITY_MUSIC_TRACK, MusicTrack) { URHO3D_PARAM(P_TRACK, Track); }
URHO3D_EVENT(E_CRYPTOCITY_MUSIC_VOLUME, MusicVolume) { URHO3D_PARAM(P_VOLUME, Volume); }
URHO3D_EVENT(E_CRYPTOCITY_MUSIC_SKIP_TRACK, MusicSkipTrack) { }
URHO3D_EVENT(E_CRYPTOCITY_SFX_VOLUME, SFXVolume) { URHO3D_PARAM(P_VOLUME, Volume); }
URHO3D_EVENT(E_CRYPTOCITY_PLAY_SFX_ON_NEW_BLOCK, PlaySFXOnNewBlock) { URHO3D_PARAM(P_PLAY, Play); }
URHO3D_EVENT(E_CRYPTOCITY_ADD_CITY_SPECIALIZATION, AddCitySpecialization) { URHO3D_PARAM(P_SPECIALIZATION, Specialization); }
URHO3D_EVENT(E_CRYPTOCITY_INCLUDE_UNMATCHED_TRADES_IN_QUEUED_COMMANDS, IncludeUnmatchedTradesInQueuedCommands) { URHO3D_PARAM(P_INCLUDE, Include); }
URHO3D_EVENT(E_CRYPTOCITY_COMPASS, Compass) { URHO3D_PARAM(P_COMPASS, Compass); }
URHO3D_EVENT(E_CRYPTOCITY_CALENDAR, Calendar) { URHO3D_PARAM(P_CALENDAR, Calendar); }
URHO3D_EVENT(E_CRYPTOCITY_SOW, Sow) { URHO3D_PARAM(P_FLAG, Flag); URHO3D_PARAM(P_CROP, Crop); }
URHO3D_EVENT(E_CRYPTOCITY_HARVEST, Harvest) { URHO3D_PARAM(P_FLAG, Flag); }
URHO3D_EVENT(E_CRYPTOCITY_RESTORE_MODEL_BACKUP, RestoreModelBackup) { URHO3D_PARAM(P_RESTORE, Restore); }
URHO3D_EVENT(E_CRYPTOCITY_MAIN_PANEL_GEOMETRY, MainPanelGeometry) { URHO3D_PARAM(P_X, X); URHO3D_PARAM(P_Y, Y); URHO3D_PARAM(P_WIDTH, Width); URHO3D_PARAM(P_HEIGHT, Height); URHO3D_PARAM(P_SHADED, Shaded); }
URHO3D_EVENT(E_CRYPTOCITY_BUILDING_STATS, BuildingStats) { }
URHO3D_EVENT(E_CRYPTOCITY_MINT, Mint) { URHO3D_PARAM(P_COIN, Coin); URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_NAME, Name); }
URHO3D_EVENT(E_CRYPTOCITY_SMELT, Smelt) { URHO3D_PARAM(P_COIN, Coin); URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_NAME, Name); }
URHO3D_EVENT(E_CRYPTOCITY_CANCEL_NONCE, CancelNonce) { URHO3D_PARAM(P_NONCE, Nonce); }
class UIUrho3D: public Urho3D::UIElement
{
public:
UIUrho3D(Urho3D::Context *ctx, const GameState *gameState = nullptr);
virtual ~UIUrho3D();
void AddNotification(const Urho3D::String &s, float relative_size = 1.0f);
void RefreshNotifications();
void Update(float timeStep, uint32_t mouse_x, uint32_t mouse_y, uint32_t sx0, uint32_t sy0, uint32_t sx1, uint32_t sy1, bool showingFlags, bool building, unsigned num_unread_chat_lines, bool highlight_chat, const std::shared_ptr<GameWallet> &w, const Urho3D::Vector3 &view_direction, const boost::optional<std::tuple<uint32_t, std::vector<uint16_t>, std::vector<std::vector<uint8_t>>>> &flagUnderConstruction);
void NewTradeCommand();
void ShowOptions();
void ShowPlayerInfo(uint32_t player_id);
void AddQueuedCommand(const std::string &txid, const cryptonote::cc_command_t &cmd);
void RemoveQueuedCommand(const std::string &txid);
void OnNewBlock();
void Configure();
void OnModelBackupAvailable();
void OnExitRequest();
void OpenSelectMaterial(uint16_t variant);
void CloseSelectMaterial(bool send_result);
bool IsSelectMaterialOpen() const;
void SetCameraType(tb::TBID type);
void SetCompassType(tb::TBID type);
void SetCalendarType(tb::TBID type);
bool IsClickPassthroughWidget(tb::TBWidget *w) const;
private:
void CreatePlayerWindow();
void CreateCityWindow();
void CreateSpectatorModeWidget();
void CreateNodeNotificationWidget();
void CreateLoadingWalletNotificationWidget();
void CreateQueuedCommandsNotificationWidget();
void CreateCompass();
void CreateCalendar();
void CreateBuildOverviewWidget();
void CreateNewBlockNotification();
void UpdateSelection(uint32_t mouse_x, uint32_t mouse_y, uint32_t sx0, uint32_t sy0, uint32_t sx1, uint32_t sy1);
void UpdateFlag(uint32_t mouse_x, uint32_t mouse_y, uint32_t sx0, uint32_t sy0, uint32_t sx1, uint32_t sy1);
void UpdatePlayer();
void UpdateCity();
void UpdateSpectatorMode(const std::shared_ptr<GameWallet> &w);
void UpdateNodeNotification(const std::shared_ptr<GameWallet> &w);
void UpdateLoadingWalletNotification(const std::shared_ptr<GameWallet> &w);
void UpdateQueuedCommandsNotification(const std::shared_ptr<GameWallet> &w);
void UpdateCompass(float timeStep, const Urho3D::Vector3 &view_direction);
void UpdateCalendar();
void UpdateBuildOverview(const boost::optional<std::tuple<uint32_t, std::vector<uint16_t>, std::vector<std::vector<uint8_t>>>> &flagUnderConstruction);
void UpdateNewBlockNotification(float timeStep);
void HandleLoadWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleNoWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleAcceptInvitation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleCreateNewWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDepositInfo(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleWithdrawInfo(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDeposit(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleWithdraw(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleBuyLand(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleBuyItems(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleBuy(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleBuildingSettings(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleRepair(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleAddBlock(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleRemoveBlock(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleRemoveHiddenBlocks(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleRemoveTopLevel(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleApproveBuild(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleAbandonBuild(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleTrade(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleAssignItems(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDestroyItems(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleMaterialSelected(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData, bool player);
void HandlePlayerMaterialSelected(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleFlagMaterialSelected(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleUndo(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleRedo(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleLoad(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleModelFileSelected(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData, bool save, bool selection);
void HandleFlagInfo(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleRename(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDemolish(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDestroyFlag(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleChat(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleResearch(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleOptions(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleCredits(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleExit(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleExitConfirmation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleTBMessage(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleResized(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleCloseCommandWindow(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleConfigureNetwork(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleCityLevelHelp(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleCityLevelUp(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleFoundCity(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleTravelToCity(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleLeaderboards(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleCameraType(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleGroundType(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleGraphicsMode(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleSpecialEventHelp(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleNewItem(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDividend(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleIgnore(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleNewEventBadge(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleAwardEventBadge(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleIgnoreRecommendation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleResizeFlag(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDefineAttribute(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDiceRoll(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleHunt(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleShowQueuedCommands(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandlePalette(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleFightFire(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleService(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleSow(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleHarvest(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleStartMining(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleStopMining(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDemolishConfirmation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDestroyFlagConfirmation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleBookmarkVista(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleGoToVista(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleRestoreModelBackup(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleBuildingStats(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleMint(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleSmelt(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void NotifyEditMode(EditMode mode);
void NotifyExtend(int32_t dx0, int32_t dy0, int32_t dx1, int32_t dy1);
void EnableWidget(tb::TBWidget *widget, bool enable);
void EnableWidget(const tb::TBID &id, bool enable);
void ShowWidget(tb::TBWidget *widget, bool show);
void ShowWidget(const tb::TBID &id, bool enable);
void ToggleWidget(tb::TBToggleContainer *widget, bool show);
void ToggleWidget(const tb::TBID &id, bool show);
void ExportModel(bool selection);
private:
const GameState *gameState;
tb::TBTextField *timeText;
tb::TBTextField *temperatureText;
tb::TBTextField *positionText;
tb::TBTextField *positionHeightText;
tb::TBTextField *positionStabilityText;
tb::TBTextField *positionAgriculturalPotentialText;
tb::TBTextField *positionGeothermalHeatingPotentialText;
tb::TBTextField *positionGemstonePotentialText;
tb::TBTextField *positionWoodTypePotentialText;
tb::TBTextField *positionWoodQuantityPotentialText;
tb::TBTextField *positionStoneTypePotentialText;
tb::TBTextField *positionStoneQuantityPotentialText;
tb::TBTextField *positionKilnPotentialText;
tb::TBTextField *positionMetalPotentialText;
tb::TBTextField *selectionText;
tb::TBTextField *selectionCostText;
tb::TBTextField *selectionLandTaxText;
tb::TBTextField *flagNameText;
tb::TBTextField *flagRoleText;
tb::TBTextField *flagActiveText;
tb::TBTextField *flagOwnerText;
tb::TBButton *flagOwnerInfoButton;
tb::TBTextField *flagSizeText;
tb::TBTextField *flagRepairText;
tb::TBTextField *flagEconomicPowerText;
tb::TBTextField *flagInfluence;
tb::TBTextField *flagLandTaxText;
tb::TBTextField *flagEstimatedPayout;
tb::TBTextField *flagSpecialEventText;
tb::TBToggleContainer *flagSpecialEventToggle;
#if BUILD_RATIO_ACTIVE_THRESHOLD_PERCENT > 0
tb::TBTextField *flagBudgetUsage;
#endif
tb::TBSelectList *flagItemTypeList;
tb::TBGenericStringItemSource flagItemTypeListSource;
tb::TBTextField *flagStabilityText;
tb::TBTextField *flagGeothermalText;
tb::TBTextField *flagGemstoneText;
tb::TBTextField *flagPrimaryPotentialText;
tb::TBTextField *flagSecondaryPotentialText;
tb::TBTextField *playerNameText;
tb::TBButton *playerInfoButton;
tb::TBTextField *playerBalanceText;
tb::TBTextField *playerWalletBalanceText;
tb::TBSelectList *playerMaterialList;
tb::TBGenericStringItemSource playerMaterialListSource;
tb::TBToggleContainer *playerAcceptInvitationContainer;
tb::TBToggleContainer *playerCreateNewWalletContainer;
tb::TBButton *loadWalletButton;
tb::TBButton *depositButton;
tb::TBButton *withdrawButton;
tb::TBToggleContainer *playerWalletLoaded;
tb::TBTextField *cityNameText;
tb::TBTextField *cityLevelText;
tb::TBToggleContainer *citySpecialEventToggle;
tb::TBTextField *citySpecialEventText;
tb::TBTextField *cityTreasuryText;
UINotifier notifier;
bool showingFlags;
std::shared_ptr<Flag> selectedFlag;
std::map<uint32_t, uint32_t> currentFlagBudget;
std::map<uint32_t, uint32_t> currentPlayerBudget;
UITBWindow *spectatorModeWidget;
UITBWindow *nodeNotificationWidget;
UITBWindow *loadingWalletNotificationWidget;
tb::TBTextField *loadingWalletNotificationStateWidget;
UITBWindow *queuedCommandsNotificationWidget;
tb::TBTextField *queuedCommandsNotificationCountWidget;
UITBWindow *shadingFix;
uint32_t flag_owner;
tb::TBTextField *nodeStatusWidget;
tb::TBToggleContainer *startMiningContainer;
tb::TBToggleContainer *stopMiningContainer;
// no ref, cleared when destroyed
UIBuildingSettingsDialog *buildingSettingsDialog;
UILastUpdateEventsDialog *lastUpdateEventsDialog;
UIRenameDialog *renameDialog;
UIRepairDialog *repairDialog;
UITradeDialog *tradeDialog;
UILeaderboardsDialog *leaderboardsDialog;
UIResearchDialog *researchDialog;
UIOptionsDialog *optionsDialog;
UIPlayerInfoDialog *playerInfoDialog;
UISelectAmountDialog *selectAmountDialog;
UINodeConfigDialog *nodeConfigDialog;
UIQueuedCommandsDialog *queuedCommandsDialog;
UIFoundCityDialog *foundCityDialog;
UITravelToCityDialog *travelToCityDialog;
UINewItemDialog *newItemDialog;
UIDividendDialog *dividendDialog;
UIIgnoreDialog *ignoreDialog;
UIEventBadgeDialog *eventBadgeDialog;
UICreditsDialog *creditsDialog;
UIDefineAttributeDialog *defineAttributeDialog;
UIDiceRollDialog *diceRollDialog;
UIHuntDialog *huntDialog;
UICityLevelDialog *cityLevelDialog;
UIPaletteDialog *paletteDialog;
UIFightFireDialog *fightFireDialog;
UIServiceDialog *serviceDialog;
UISowDialog *sowDialog;
UIHarvestDialog *harvestDialog;
UIAcceptInvitationDialog *acceptInvitationDialog;
UIAddCitySpecializationDialog *addCitySpecializationDialog;
UINoWalletIntroDialog *noWalletIntroDialog;
UIMintDialog *mintDialog;
UISmeltDialog *smeltDialog;
UITBWindow *command_window;
Urho3D::IntVector2 prev_size;
std::unordered_map<std::string, cryptonote::cc_command_t> queued_commands, queued_commands_except_unmatched_trades;
bool include_unmatched_trades_in_queued_commands;
Urho3D::SharedPtr<Urho3D::Sprite> compass_frame;
Urho3D::SharedPtr<Urho3D::Sprite> compass_needle;
float compass_rotation_speed;
UITBWindow *buildOverviewWidget;
tb::TBTextField *buildOverviewFlagName;
UISelectMaterial *selectMaterial;
epee::math_helper::once_a_time_seconds<2> m_mining_checker;
tb::TBID compass_type;
bool compass_changed;
Urho3D::SharedPtr<Urho3D::Sprite> calendar_frame;
Urho3D::SharedPtr<Urho3D::Sprite> calendar_needle;
tb::TBID calendar_type;
bool calendar_changed;
UITBWindow *new_block_notification;
Urho3D::Timer new_block_timer;
};
#endif