the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 234 lines 7.3 kB view raw
1#include "stdafx.h" 2 3#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" 4#include "..\..\..\Minecraft.World\net.minecraft.stats.h" 5#include "..\..\..\Minecraft.World\net.minecraft.world.effect.h" 6#include "..\..\MultiplayerLocalPlayer.h" 7#include "..\..\Common\Tutorial\Tutorial.h" 8#include "..\..\Common\Tutorial\TutorialMode.h" 9#include "..\..\Common\Tutorial\TutorialEnum.h" 10#include "..\..\Minecraft.h" 11#include "XUI_Controls.h" 12#include "XUI_Scene_Inventory.h" 13 14 15//-------------------------------------------------------------------------------------- 16// Name: CXuiSceneInventory::OnInit 17// Desc: Message handler for XM_INIT 18//-------------------------------------------------------------------------------------- 19HRESULT CXuiSceneInventory::OnInit( XUIMessageInit *pInitData, BOOL &bHandled ) 20{ 21 D3DXVECTOR3 vec; 22 MapChildControls(); 23 24 Minecraft *pMinecraft = Minecraft::GetInstance(); 25 26 InventoryScreenInput *initData = (InventoryScreenInput *)pInitData->pvInitData; 27 m_iPad=initData->iPad; 28 m_bSplitscreen=initData->bSplitscreen; 29 30 // if we are in splitscreen, then we need to figure out if we want to move this scene 31 32 if(m_bSplitscreen) 33 { 34 if(m_bSplitscreen) 35 { 36 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad); 37 } 38 } 39 40#ifdef _XBOX 41 if( pMinecraft->localgameModes[initData->iPad] != NULL ) 42 { 43 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[initData->iPad]; 44 m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); 45 gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Inventory_Menu, this); 46 } 47#endif 48 49 InventoryMenu *menu = dynamic_cast<InventoryMenu *>( initData->player->inventoryMenu ); 50 51#if 0 52 // TODO Inventory dimensions need defined as constants 53 m_armorGroup->SetData( initData->iPad, menu, 4, 1, InventoryMenu::ARMOR_SLOT_START ); 54#endif 55 InitDataAssociations(initData->iPad, menu); 56 57 initData->player->awardStat(GenericStats::openInventory(), GenericStats::param_noArgs()); 58 59 CXuiSceneAbstractContainer::Initialize( initData->iPad, menu, false, InventoryMenu::INV_SLOT_START, eSectionInventoryUsing, eSectionInventoryMax, initData->bNavigateBack ); 60 61 delete initData; 62 63 float fWidth; 64 m_effectsGroup.GetBounds(&fWidth, &m_effectAreaHeight); // Get total height available for effects display 65 m_hEffectDisplayA[0]->GetBounds(&fWidth, &m_effectDisplayHeight); // Get height of one effect 66 67 D3DXVECTOR3 firstEffectPos, secondEffectPos; 68 m_hEffectDisplayA[0]->GetPosition(&firstEffectPos); 69 m_hEffectDisplayA[1]->GetPosition(&secondEffectPos); 70 m_effectDisplaySpacing = firstEffectPos.y - secondEffectPos.y; // Stack from the bottom 71 72 updateEffectsDisplay(); 73 XuiSetTimer(m_hObj,INVENTORY_UPDATE_EFFECTS_TIMER_ID,INVENTORY_UPDATE_EFFECTS_TIMER_TIME); 74 75 return S_OK; 76} 77 78HRESULT CXuiSceneInventory::OnDestroy() 79{ 80 Minecraft *pMinecraft = Minecraft::GetInstance(); 81 82 if( pMinecraft->localgameModes[m_iPad] != NULL ) 83 { 84 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad]; 85 if(gameMode != NULL) gameMode->getTutorial()->changeTutorialState(m_previousTutorialState); 86 } 87 88 // 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. 89 // 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) 90 if(Minecraft::GetInstance()->localplayers[m_iPad] != NULL) Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer(); 91 return S_OK; 92} 93 94HRESULT CXuiSceneInventory::handleCustomTimer( XUIMessageTimer *pTimer, BOOL& bHandled ) 95{ 96 if(pTimer->nId == INVENTORY_UPDATE_EFFECTS_TIMER_ID) 97 { 98 updateEffectsDisplay(); 99 bHandled = TRUE; 100 } 101 return S_OK; 102} 103 104CXuiControl* CXuiSceneInventory::GetSectionControl( ESceneSection eSection ) 105{ 106 switch( eSection ) 107 { 108 case eSectionInventoryArmor: 109 return (CXuiControl *)m_armorGroup; 110 break; 111 case eSectionInventoryInventory: 112 return (CXuiControl *)m_inventoryControl; 113 break; 114 case eSectionInventoryUsing: 115 return (CXuiControl *)m_useRowControl; 116 break; 117 default: 118 assert( false ); 119 break; 120 } 121 return NULL; 122} 123 124CXuiCtrlSlotList* CXuiSceneInventory::GetSectionSlotList( ESceneSection eSection ) 125{ 126 switch( eSection ) 127 { 128 case eSectionInventoryArmor: 129 return m_armorGroup; 130 break; 131 case eSectionInventoryInventory: 132 return m_inventoryControl; 133 break; 134 case eSectionInventoryUsing: 135 return m_useRowControl; 136 break; 137 default: 138 assert( false ); 139 break; 140 } 141 return NULL; 142} 143 144// 4J Stu - Added to support auto-save. Need to re-associate on a navigate back 145void CXuiSceneInventory::InitDataAssociations(int iPad, AbstractContainerMenu *menu, int startIndex /*= 0*/) 146{ 147 // TODO Inventory dimensions need defined as constants 148 m_armorGroup->SetData( iPad, menu, 4, 1, InventoryMenu::ARMOR_SLOT_START ); 149 150 CXuiSceneAbstractContainer::InitDataAssociations(iPad, menu, InventoryMenu::INV_SLOT_START); 151} 152 153void CXuiSceneInventory::updateEffectsDisplay() 154{ 155 // Update with the current effects 156 Minecraft *pMinecraft = Minecraft::GetInstance(); 157 shared_ptr<LocalPlayer> player = pMinecraft->localplayers[m_iPad]; 158 159 if(player == NULL) return; 160 161 vector<MobEffectInstance *> *activeEffects = player->getActiveEffects(); 162 163 // Work out how to arrange the effects 164 int effectCount = (int)activeEffects->size(); 165 166 // Total size of all effects + spacing, minus spacing for the last effect 167 float fHeight = (effectCount * m_effectDisplaySpacing) - (m_effectDisplaySpacing - m_effectDisplayHeight); 168 float fNextEffectYOffset = m_effectDisplaySpacing; 169 170 if(fHeight > m_effectAreaHeight) 171 { 172 fNextEffectYOffset = (m_effectAreaHeight + 1) / effectCount; 173 fNextEffectYOffset = floor(fNextEffectYOffset); 174 } 175 176 // Fill out details for display 177 D3DXVECTOR3 position; 178 m_hEffectDisplayA[0]->GetPosition(&position); 179 AUTO_VAR(it, activeEffects->begin()); 180 for(unsigned int i = 0; i < MAX_EFFECTS; ++i) 181 { 182 if(it != activeEffects->end()) 183 { 184 m_hEffectDisplayA[i]->SetShow(TRUE); 185 186 if(i > 0) position.y -= fNextEffectYOffset; // Stack from the bottom 187 m_hEffectDisplayA[i]->SetPosition(&position); 188 189 MobEffectInstance *effect = *it; 190 191 MobEffect *mobEffect = MobEffect::effects[effect->getId()]; 192 if (mobEffect->hasIcon()) 193 { 194 m_hEffectDisplayA[i]->setIcon(mobEffect->getIcon()); 195 } 196 197 wstring effectString = app.GetString( effect->getDescriptionId() );//I18n.get(effect.getDescriptionId()).trim(); 198 if (effect->getAmplifier() > 0) 199 { 200 wstring potencyString = L""; 201 switch(effect->getAmplifier()) 202 { 203 case 1: 204 potencyString = L" "; 205 potencyString += app.GetString( IDS_POTION_POTENCY_1 ); 206 break; 207 case 2: 208 potencyString = L" "; 209 potencyString += app.GetString( IDS_POTION_POTENCY_2 ); 210 break; 211 case 3: 212 potencyString = L" "; 213 potencyString += app.GetString( IDS_POTION_POTENCY_3 ); 214 break; 215 default: 216 potencyString = app.GetString( IDS_POTION_POTENCY_0 ); 217 break; 218 } 219 effectString += potencyString; 220 } 221 m_hEffectDisplayA[i]->setName(effectString); 222 223 wstring durationString = MobEffect::formatDuration(effect); 224 m_hEffectDisplayA[i]->setDuration(durationString); 225 226 ++it; 227 } 228 else 229 { 230 m_hEffectDisplayA[i]->SetShow(FALSE); 231 } 232 } 233 delete activeEffects; 234}