the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 242 lines 7.0 kB view raw
1#include "stdafx.h" 2 3#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" 4#include "..\..\..\Minecraft.World\StringHelpers.h" 5#include "..\..\MultiPlayerLocalPlayer.h" 6#include "..\..\Common\Tutorial\Tutorial.h" 7#include "..\..\Common\Tutorial\TutorialMode.h" 8#include "..\..\Common\Tutorial\TutorialEnum.h" 9#include "..\..\Minecraft.h" 10#include "XUI_Ctrl_SlotList.h" 11#include "XUI_Scene_Anvil.h" 12 13 14//-------------------------------------------------------------------------------------- 15// Name: CXuiSceneAnvil::OnInit 16// Desc: Message handler for XM_INIT 17//-------------------------------------------------------------------------------------- 18HRESULT CXuiSceneAnvil::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) 19{ 20 MapChildControls(); 21 22 XuiControlSetText(m_anvilText,app.GetString(IDS_REPAIR_AND_NAME)); 23 24 m_cross.SetShow(FALSE); 25 m_editName.SetText(L""); 26 m_editName.SetTextLimit(30); 27 m_editName.SetTitleAndText(IDS_TITLE_RENAME,IDS_TITLE_RENAME); 28 29 Minecraft *pMinecraft = Minecraft::GetInstance(); 30 31 AnvilScreenInput* initData = (AnvilScreenInput*)pInitData->pvInitData; 32 m_iPad=initData->iPad; 33 m_bSplitscreen=initData->bSplitscreen; 34 m_inventory = initData->inventory; 35 36 // if we are in splitscreen, then we need to figure out if we want to move this scene 37 38 if(m_bSplitscreen) 39 { 40 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad); 41 } 42 43 if( pMinecraft->localgameModes[m_iPad] != NULL ) 44 { 45 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad]; 46 m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); 47 gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Anvil_Menu, this); 48 } 49 50 m_repairMenu = new RepairMenu( initData->inventory, initData->level, initData->x, initData->y, initData->z, pMinecraft->localplayers[m_iPad] ); 51 m_repairMenu->addSlotListener(this); 52 53 InitDataAssociations(m_iPad, m_repairMenu); 54 55 delete initData; 56 57 CXuiSceneAbstractContainer::Initialize( m_iPad, m_repairMenu, true, RepairMenu::INV_SLOT_START, eSectionAnvilUsing, eSectionAnvilMax ); 58 59 //ProfileManager.SetRichPresenceContextValue(m_iPad,CONTEXT_GAME_STATE,CONTEXT_GAME_STATE_FORGING); 60 61 XuiSetTimer(m_hObj,ANVIL_UPDATE_TIMER_ID,ANVIL_UPDATE_TIMER_TIME); 62 63 return S_OK; 64} 65 66HRESULT CXuiSceneAnvil::OnDestroy() 67{ 68 Minecraft *pMinecraft = Minecraft::GetInstance(); 69 70 if( pMinecraft->localgameModes[m_iPad] != NULL ) 71 { 72 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad]; 73 if(gameMode != NULL) gameMode->getTutorial()->changeTutorialState(m_previousTutorialState); 74 } 75 76 // 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. 77 // 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) 78 if(Minecraft::GetInstance()->localplayers[m_iPad] != NULL) Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer(); 79 return S_OK; 80} 81 82HRESULT CXuiSceneAnvil::OnNotifyValueChanged (HXUIOBJ hObjSource, XUINotifyValueChanged* pValueChangedData, BOOL& rfHandled) 83{ 84 if(hObjSource == m_editName) 85 { 86 wstring newValue = m_editName.GetText(); 87 LPCWSTR szText=newValue.c_str(); 88 stripWhitespaceForHtml(newValue); 89 90 // strip leading spaces 91 wstring b; 92 int start = (int)newValue.find_first_not_of(L" "); 93 int end = (int)newValue.find_last_not_of(L" "); 94 95 if( start == wstring::npos ) 96 { 97 // the string is all space 98 newValue=L""; 99 } 100 else 101 { 102 if( end == wstring::npos ) end = (int)newValue.size()-1; 103 b = newValue.substr(start,(end-start)+1); 104 newValue=b; 105 } 106 107 // 4J-PB - This was stopping the player deleting the last character in the name using the chatpad 108 //if(!newValue.empty() && !(newValue.size() == 1 && newValue.at(0) == L' ')) 109 { 110 newValue = escapeXML(newValue); 111 m_itemName = newValue; 112 updateItemName(); 113 } 114// else 115// { 116// LPCWSTR szText=m_itemName.c_str(); 117// m_editName.SetText(szText); 118// m_editName.SetCaretPosition(m_itemName.length()); 119// } 120 } 121 122 return S_OK; 123} 124 125HRESULT CXuiSceneAnvil::handleCustomTimer( XUIMessageTimer *pTimer, BOOL& bHandled ) 126{ 127 if(pTimer->nId == ANVIL_UPDATE_TIMER_ID) 128 { 129 handleTick(); 130 bHandled = TRUE; 131 } 132 return S_OK; 133} 134 135CXuiControl* CXuiSceneAnvil::GetSectionControl( ESceneSection eSection ) 136{ 137 switch( eSection ) 138 { 139 case eSectionAnvilItem1: 140 return (CXuiControl *)m_ingredient1Control; 141 break; 142 case eSectionAnvilItem2: 143 return (CXuiControl *)m_ingredient2Control; 144 break; 145 case eSectionAnvilResult: 146 return (CXuiControl *)m_resultControl; 147 break; 148 case eSectionAnvilName: 149 return (CXuiControl *)&m_editName; 150 break; 151 case eSectionAnvilInventory: 152 return (CXuiControl *)m_inventoryControl; 153 break; 154 case eSectionAnvilUsing: 155 return (CXuiControl *)m_useRowControl; 156 break; 157 default: 158 assert( false ); 159 break; 160 } 161 return NULL; 162} 163 164CXuiCtrlSlotList* CXuiSceneAnvil::GetSectionSlotList( ESceneSection eSection ) 165{ 166 switch( eSection ) 167 { 168 case eSectionAnvilItem1: 169 return m_ingredient1Control; 170 break; 171 case eSectionAnvilItem2: 172 return m_ingredient2Control; 173 break; 174 case eSectionAnvilResult: 175 return m_resultControl; 176 break; 177 case eSectionAnvilInventory: 178 return m_inventoryControl; 179 break; 180 case eSectionAnvilUsing: 181 return m_useRowControl; 182 break; 183 default: 184 assert( false ); 185 break; 186 } 187 return NULL; 188} 189 190// 4J Stu - Added to support auto-save. Need to re-associate on a navigate back 191void CXuiSceneAnvil::InitDataAssociations(int iPad, AbstractContainerMenu *menu, int startIndex /*= 0*/) 192{ 193 // TODO Inventory dimensions need defined as constants 194 m_resultControl->SetData( iPad, menu, 1, 1, RepairMenu::RESULT_SLOT ); 195 196 m_ingredient1Control->SetData( iPad, menu, 1, 1, RepairMenu::INPUT_SLOT ); 197 m_ingredient2Control->SetData( iPad, menu, 1, 1, RepairMenu::ADDITIONAL_SLOT); 198 199 //m_litProgressControl->SetUserData( initData->furnace.get() ); 200 201 //m_burnProgress->SetUserData( initData->furnace.get() ); 202 203 CXuiSceneAbstractContainer::InitDataAssociations(iPad, menu, RepairMenu::INV_SLOT_START); 204} 205 206void CXuiSceneAnvil::handleEditNamePressed() 207{ 208 // 4J Stu - The edit control already handles A/Start presses, so ignore anything else 209 //m_editName.RequestKeyboard(m_iPad); 210} 211 212void CXuiSceneAnvil::setEditNameValue(const wstring &name) 213{ 214 wstring parsedName = parseXMLSpecials(name); 215 m_editName.SetText(parsedName.c_str()); 216 m_editName.SetCaretPosition(parsedName.length()); 217} 218 219void CXuiSceneAnvil::setEditNameEditable(bool enabled) 220{ 221} 222 223void CXuiSceneAnvil::setCostLabel(const wstring &label, bool canAfford) 224{ 225 if(canAfford) 226 { 227 m_affordableText.SetText(label.c_str()); 228 m_affordableText.SetShow(TRUE); 229 m_expensiveText.SetShow(FALSE); 230 } 231 else 232 { 233 m_expensiveText.SetText(label.c_str()); 234 m_affordableText.SetShow(FALSE); 235 m_expensiveText.SetShow(TRUE); 236 } 237} 238 239void CXuiSceneAnvil::showCross(bool show) 240{ 241 m_cross.SetShow(show?TRUE:FALSE); 242}