aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp')
-rw-r--r--Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp153
1 files changed, 153 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp b/Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp
new file mode 100644
index 00000000..832d6b4c
--- /dev/null
+++ b/Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp
@@ -0,0 +1,153 @@
+#include "stdafx.h"
+
+#include "..\..\..\Minecraft.World\FurnaceMenu.h"
+#include "..\..\MultiplayerLocalPlayer.h"
+#include "..\..\Common\Tutorial\Tutorial.h"
+#include "..\..\Common\Tutorial\TutorialMode.h"
+#include "..\..\Common\Tutorial\TutorialEnum.h"
+#include "..\..\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);
+}
+