#pragma once #include #include #include #include "app/common/App_structs.h" #include "platform/storage/storage.h" #include "platform/XboxStubs.h" class Player; class Inventory; class Level; class FurnaceTileEntity; class Container; class DispenserTileEntity; class SignTileEntity; class BrewingStandTileEntity; class HopperTileEntity; class MinecartHopper; class EntityHorse; class BeaconTileEntity; class LocalPlayer; class Merchant; class CommandBlockEntity; class MenuController { public: MenuController(); // Load menu methods bool loadInventoryMenu(int iPad, std::shared_ptr player, bool bNavigateBack = false); bool loadCreativeMenu(int iPad, std::shared_ptr player, bool bNavigateBack = false); bool loadEnchantingMenu(int iPad, std::shared_ptr inventory, int x, int y, int z, Level* level, const std::string& name); bool loadFurnaceMenu(int iPad, std::shared_ptr inventory, std::shared_ptr furnace); bool loadBrewingStandMenu( int iPad, std::shared_ptr inventory, std::shared_ptr brewingStand); bool loadContainerMenu(int iPad, std::shared_ptr inventory, std::shared_ptr container); bool loadTrapMenu(int iPad, std::shared_ptr inventory, std::shared_ptr trap); bool loadCrafting2x2Menu(int iPad, std::shared_ptr player); bool loadCrafting3x3Menu(int iPad, std::shared_ptr player, int x, int y, int z); bool loadFireworksMenu(int iPad, std::shared_ptr player, int x, int y, int z); bool loadSignEntryMenu(int iPad, std::shared_ptr sign); bool loadRepairingMenu(int iPad, std::shared_ptr inventory, Level* level, int x, int y, int z); bool loadTradingMenu(int iPad, std::shared_ptr inventory, std::shared_ptr trader, Level* level, const std::string& name); bool loadHopperMenu(int iPad, std::shared_ptr inventory, std::shared_ptr hopper); bool loadHopperMenu(int iPad, std::shared_ptr inventory, std::shared_ptr hopper); bool loadHorseMenu(int iPad, std::shared_ptr inventory, std::shared_ptr container, std::shared_ptr horse); bool loadBeaconMenu(int iPad, std::shared_ptr inventory, std::shared_ptr beacon); // Action management void setAction(int iPad, eXuiAction action, void* param = nullptr); eXuiAction getXuiAction(int iPad) { return m_eXuiAction[iPad]; } void setXuiServerAction(int iPad, eXuiServerAction action, void* param = nullptr) { m_eXuiServerAction[iPad] = action; m_eXuiServerActionParam[iPad] = param; } eXuiServerAction getXuiServerAction(int iPad) { return m_eXuiServerAction[iPad]; } void* getXuiServerActionParam(int iPad) { return m_eXuiServerActionParam[iPad]; } eXuiAction getGlobalXuiAction() { return m_eGlobalXuiAction; } void setGlobalXuiAction(eXuiAction action) { m_eGlobalXuiAction = action; } eXuiServerAction getGlobalXuiServerAction() { return m_eGlobalXuiServerAction; } void setGlobalXuiServerAction(eXuiServerAction action) { m_eGlobalXuiServerAction = action; } // TMS action void setTMSAction(int iPad, eTMSAction action) { m_eTMSAction[iPad] = action; } eTMSAction getTMSAction(int iPad) { return m_eTMSAction[iPad]; } // Dialog callbacks static int texturePackDialogReturned(void* pParam, int iPad, IPlatformStorage::EMessageResult result); static int fatalErrorDialogReturned(void* pParam, int iPad, IPlatformStorage::EMessageResult result); static int trialOverReturned(void* pParam, int iPad, IPlatformStorage::EMessageResult result); static int unlockFullExitReturned(void* pParam, int iPad, IPlatformStorage::EMessageResult result); static int unlockFullSaveReturned(void* pParam, int iPad, IPlatformStorage::EMessageResult result); static int unlockFullInviteReturned(void* pParam, int iPad, IPlatformStorage::EMessageResult result); // Remote save static int remoteSaveThreadProc(void* lpParameter); static void exitGameFromRemoteSave(void* lpParameter); static int exitGameFromRemoteSaveDialogReturned( void* pParam, int iPad, IPlatformStorage::EMessageResult result); // Image text data void getImageTextData(std::uint8_t* imageData, unsigned int imageBytes, unsigned char* seedText, unsigned int& uiHostOptions, bool& bHostOptionsRead, std::uint32_t& uiTexturePack); unsigned int createImageTextData(std::uint8_t* textMetadata, int64_t seed, bool hasSeed, unsigned int uiHostOptions, unsigned int uiTexturePackId); // Opacity timer unsigned int getOpacityTimer(int iPad) { return m_uiOpacityCountDown[iPad]; } void setOpacityTimer(int iPad) { m_uiOpacityCountDown[iPad] = 120; } void tickOpacityTimer(int iPad) { if (m_uiOpacityCountDown[iPad] > 0) m_uiOpacityCountDown[iPad]--; } // Action param accessor (needed by HandleXuiActions) void* getXuiActionParam(int iPad) { return m_eXuiActionParam[iPad]; } private: eXuiAction m_eXuiAction[XUSER_MAX_COUNT]; eTMSAction m_eTMSAction[XUSER_MAX_COUNT]; void* m_eXuiActionParam[XUSER_MAX_COUNT]; eXuiAction m_eGlobalXuiAction; eXuiServerAction m_eXuiServerAction[XUSER_MAX_COUNT]; void* m_eXuiServerActionParam[XUSER_MAX_COUNT]; eXuiServerAction m_eGlobalXuiServerAction; unsigned int m_uiOpacityCountDown[XUSER_MAX_COUNT]; static unsigned char m_szPNG[8]; unsigned int fromBigEndian(unsigned int uiValue); };