#include "../../Minecraft.World/Platform/stdafx.h" #include "../../Minecraft.World/Containers/FurnaceMenu.h" #include "../../Minecraft.Client/Player/MultiPlayerLocalPlayer.h" #include "../Tutorial/Tutorial.h" #include "../Tutorial/TutorialMode.h" #include "../Tutorial/TutorialEnum.h" #include "../../Minecraft.Client/Minecraft.h" #include "XUI_Ctrl_SlotList.h" #include "XUI_Scene_Furnace.h" #include "XUI_Ctrl_BurnProgress.h" #include "XUI_Ctrl_FireProgress.h" //-------------------------------------------------------------------------------------- // Name: CXuiSceneFurnace::OnInit // Desc: Message handler for XM_INIT //-------------------------------------------------------------------------------------- HRESULT CXuiSceneFurnace::OnInit(XUIMessageInit* pInitData, BOOL& bHandled) { MapChildControls(); XuiControlSetText(m_FurnaceText, app.GetString(IDS_FURNACE)); XuiControlSetText(m_IngredientText, app.GetString(IDS_INGREDIENT)); XuiControlSetText(m_FuelText, app.GetString(IDS_FUEL)); Minecraft* pMinecraft = Minecraft::GetInstance(); FurnaceScreenInput* initData = (FurnaceScreenInput*)pInitData->pvInitData; m_iPad = initData->iPad; m_bSplitscreen = initData->bSplitscreen; // if we are in splitscreen, then we need to figure out if we want to move // this scene if (m_bSplitscreen) { app.AdjustSplitscreenScene(m_hObj, &m_OriginalPosition, m_iPad); } #ifdef _XBOX if (pMinecraft->localgameModes[m_iPad] != NULL) { TutorialMode* gameMode = (TutorialMode*)pMinecraft->localgameModes[m_iPad]; m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); gameMode->getTutorial()->changeTutorialState( e_Tutorial_State_Furnace_Menu, this); } #endif FurnaceMenu* menu = new FurnaceMenu(initData->inventory, initData->furnace); InitDataAssociations(m_iPad, menu); m_litProgressControl->SetUserData(initData->furnace.get()); m_burnProgress->SetUserData(initData->furnace.get()); CXuiSceneAbstractContainer::Initialize( m_iPad, menu, true, FurnaceMenu::INV_SLOT_START, eSectionFurnaceUsing, eSectionFurnaceMax); app.SetRichPresenceContext(m_iPad, CONTEXT_GAME_STATE_FORGING); delete initData; return S_OK; } HRESULT CXuiSceneFurnace::OnDestroy() { Minecraft* pMinecraft = Minecraft::GetInstance(); #ifdef _XBOX if (pMinecraft->localgameModes[m_iPad] != NULL) { TutorialMode* gameMode = (TutorialMode*)pMinecraft->localgameModes[m_iPad]; if (gameMode != NULL) gameMode->getTutorial()->changeTutorialState( m_previousTutorialState); } #endif // 4J Stu - Fix for #11302 - TCR 001: Network Connectivity: Host crashed // after being killed by the client while accessing a chest during burst // packet loss. We need to make sure that we call closeContainer() anytime // this menu is closed, even if it is forced to close by some other reason // (like the player dying) if (Minecraft::GetInstance()->localplayers[m_iPad] != NULL) Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer(); return S_OK; } CXuiControl* CXuiSceneFurnace::GetSectionControl(ESceneSection eSection) { switch (eSection) { case eSectionFurnaceResult: return (CXuiControl*)m_resultControl; break; case eSectionFurnaceFuel: return (CXuiControl*)m_fuelControl; break; case eSectionFurnaceIngredient: return (CXuiControl*)m_ingredientControl; break; case eSectionFurnaceInventory: return (CXuiControl*)m_inventoryControl; break; case eSectionFurnaceUsing: return (CXuiControl*)m_useRowControl; break; default: assert(false); break; } return NULL; } CXuiCtrlSlotList* CXuiSceneFurnace::GetSectionSlotList(ESceneSection eSection) { switch (eSection) { case eSectionFurnaceResult: return m_resultControl; break; case eSectionFurnaceFuel: return m_fuelControl; break; case eSectionFurnaceIngredient: return m_ingredientControl; break; case eSectionFurnaceInventory: return m_inventoryControl; break; case eSectionFurnaceUsing: return m_useRowControl; break; default: assert(false); break; } return NULL; } // 4J Stu - Added to support auto-save. Need to re-associate on a navigate back void CXuiSceneFurnace::InitDataAssociations(int iPad, AbstractContainerMenu* menu, int startIndex /*= 0*/) { // TODO Inventory dimensions need defined as constants m_ingredientControl->SetData(iPad, menu, 1, 1, FurnaceMenu::INGREDIENT_SLOT); m_fuelControl->SetData(iPad, menu, 1, 1, FurnaceMenu::FUEL_SLOT); m_resultControl->SetData(iPad, menu, 1, 1, FurnaceMenu::RESULT_SLOT); // m_litProgressControl->SetUserData( initData->furnace.get() ); // m_burnProgress->SetUserData( initData->furnace.get() ); CXuiSceneAbstractContainer::InitDataAssociations( iPad, menu, FurnaceMenu::INV_SLOT_START); }