Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
18 kB · 636 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636// Minecraft.cpp : Defines the entry point for the application.//
#include "stdafx.h"
#include <assert.h>#include "..\..\MultiplayerLocalPlayer.h"#include "..\..\..\Minecraft.World\net.minecraft.world.item.h"#include "..\..\..\Minecraft.World\net.minecraft.world.item.crafting.h"#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h"#include "..\..\..\Minecraft.World\Tile.h"#include "..\..\..\Minecraft.World\net.minecraft.stats.h"#include "..\..\Common\Tutorial\Tutorial.h"#include "..\..\Common\Tutorial\TutorialMode.h"#include "..\..\Common\Tutorial\TutorialEnum.h"#include "..\..\Minecraft.h"#include "XUI_Ctrl_CraftIngredientSlot.h"#include "XUI_Ctrl_SlotList.h"
#define IGNORE_KEYPRESS_TIMERID 0#define IGNORE_KEYPRESS_TIME 100
////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////CXuiSceneCraftingPanel::CXuiSceneCraftingPanel(){}
////////////////////////////////////////////////////////////////////////////// OnInit////////////////////////////////////////////////////////////////////////////HRESULT CXuiSceneCraftingPanel::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ){ m_bIgnoreKeyPresses=true;
D3DXVECTOR3 vec; VOID *pObj; CraftingPanelScreenInput* pCraftingPanelData = (CraftingPanelScreenInput*)pInitData->pvInitData; m_iContainerType=pCraftingPanelData->iContainerType; m_pPlayer=pCraftingPanelData->player; m_iPad=pCraftingPanelData->iPad; m_bSplitscreen=pCraftingPanelData->bSplitscreen;
HRESULT hr = S_OK;
MapChildControls(); if(m_iContainerType==RECIPE_TYPE_2x2) { // TODO Inventory dimensions need defined as constants m_inventoryControl->SetData( m_iPad, m_pPlayer->inventoryMenu, 3, 9, InventoryMenu::INV_SLOT_START, InventoryMenu::INV_SLOT_END );
// TODO Inventory dimensions need defined as constants m_useRowControl->SetData( m_iPad, m_pPlayer->inventoryMenu, 1, 9, InventoryMenu::USE_ROW_SLOT_START, InventoryMenu::USE_ROW_SLOT_END ); } else { CraftingMenu *menu = new CraftingMenu(m_pPlayer->inventory, m_pPlayer->level, pCraftingPanelData->x, pCraftingPanelData->y, pCraftingPanelData->z); Minecraft::GetInstance()->localplayers[m_iPad]->containerMenu = menu; // TODO Inventory dimensions need defined as constants m_inventoryControl->SetData( m_iPad, menu, 3, 9, CraftingMenu::INV_SLOT_START, CraftingMenu::INV_SLOT_END );
// TODO Inventory dimensions need defined as constants m_useRowControl->SetData( m_iPad, menu, 1, 9, CraftingMenu::USE_ROW_SLOT_START, CraftingMenu::USE_ROW_SLOT_END ); }
delete pCraftingPanelData;
// 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); }
XuiElementSetShow(m_hGrid,TRUE); XuiElementSetShow(m_hPanel,TRUE);
// Set up the CXuiCtrlCraftIngredientSlots if(m_iContainerType==RECIPE_TYPE_3x3) { m_pCursors=m_pHSlotsCraftingTableCursors; m_iIngredientsMaxSlotC = m_iIngredients3x3SlotC; for(int i=0;i<m_iIngredients3x3SlotC;i++) { XuiObjectFromHandle( m_hCraftIngredientA[i], &pObj ); m_pCraftingIngredientA[i] = (CXuiCtrlCraftIngredientSlot *)pObj; } XuiObjectFromHandle( m_hCraftOutput, &pObj ); m_pCraftingOutput = (CXuiCtrlCraftIngredientSlot *)pObj; m_pGroupA=(Recipy::_eGroupType *)&m_GroupTypeMapping9GridA; m_pGroupTabA=(CXuiSceneCraftingPanel::_eGroupTab *)&m_GroupTabBkgMapping3x3A;
m_iCraftablesMaxHSlotC=m_iMaxHSlot3x3C;
// set up the ingredients descriptions for(int i=0;i<4;i++) { XuiObjectFromHandle( m_hCraftIngredientDescA[i], &pObj ); m_pCraftIngredientDescA[i] = (CXuiCtrlCraftIngredientSlot *)pObj; } } else { m_pCursors=m_pHSlotsCraftingCursors; m_iIngredientsMaxSlotC = m_iIngredients2x2SlotC; for(int i=0;i<m_iIngredients2x2SlotC;i++) { XuiObjectFromHandle( m_hCraftIngredientA[i], &pObj ); m_pCraftingIngredientA[i] = (CXuiCtrlCraftIngredientSlot *)pObj; }
XuiObjectFromHandle( m_hCraftOutput, &pObj ); m_pCraftingOutput = (CXuiCtrlCraftIngredientSlot *)pObj; m_pGroupA=(Recipy::_eGroupType *)&m_GroupTypeMapping4GridA; m_pGroupTabA=(CXuiSceneCraftingPanel::_eGroupTab *)&m_GroupTabBkgMapping2x2A;
m_iCraftablesMaxHSlotC=m_iMaxHSlot2x2C;
// set up the ingredients descriptions for(int i=0;i<4;i++) { XuiObjectFromHandle( m_hCraftIngredientDescA[i], &pObj ); m_pCraftIngredientDescA[i] = (CXuiCtrlCraftIngredientSlot *)pObj; } }
// display the first group tab m_hTabGroupA[m_iGroupIndex].SetShow(TRUE);
// store the slot 0 position m_pHSlotsBrushImageControl[0]->GetPosition(&m_vSlot0Pos); m_pHSlotsBrushImageControl[1]->GetPosition(&vec); m_fSlotSize=vec.x-m_vSlot0Pos.x;
// store the slot 0 highlight position m_hHighlight.GetPosition(&m_vSlot0HighlightPos); // Store the V slot position m_hScrollBar2.GetPosition(&m_vSlot0V2ScrollPos); m_hScrollBar3.GetPosition(&m_vSlot0V3ScrollPos);
// get the position of the slot from the xui, and apply any offset needed for(int i=0;i<m_iCraftablesMaxHSlotC;i++) { m_pHSlotsBrushImageControl[i]->SetShow(FALSE); }
XuiElementSetShow(m_hGridInventory,FALSE);
m_hScrollBar2.SetShow(FALSE); m_hScrollBar3.SetShow(FALSE);
app.SetRichPresenceContext(m_iPad,CONTEXT_GAME_STATE_CRAFTING); m_GroupName.SetText(GetGroupNameText(m_pGroupA[m_iGroupIndex]));
UpdateTooltips();
// Update the tutorial state Minecraft *pMinecraft = Minecraft::GetInstance();
#ifdef _XBOX if( pMinecraft->localgameModes[m_iPad] != NULL ) { TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad]; m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); if(m_iContainerType==RECIPE_TYPE_2x2) { gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_2x2Crafting_Menu, this); } else { gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_3x3Crafting_Menu, this); } }#endif
XuiSetTimer(m_hObj,IGNORE_KEYPRESS_TIMERID,IGNORE_KEYPRESS_TIME);
return S_OK;}
////////////////////////////////////////////////////////////////////////////// OnTransitionEnd////////////////////////////////////////////////////////////////////////////HRESULT CXuiSceneCraftingPanel::OnTransitionEnd( XUIMessageTransition *pTransData, BOOL& bHandled ){ // are we being destroyed? If so, don't do anything if(pTransData->dwTransAction==XUI_TRANSITION_ACTION_DESTROY ) { return S_OK; }
// Fix for issue caused by autosave while crafting is up if(pTransData->dwTransType == XUI_TRANSITION_TO || pTransData->dwTransType == XUI_TRANSITION_BACKTO) { // Update the tab icons if(m_iContainerType==RECIPE_TYPE_3x3) { for(int i=0;i<m_iMaxGroup3x3;i++) { m_hGroupIconA[i].PlayVisualRange(m_GroupIconNameA[m_pGroupA[i]],NULL,m_GroupIconNameA[m_pGroupA[i]]); XuiElementSetShow(m_hGroupIconA[i].m_hObj,TRUE); } } else { for(int i=0;i<m_iMaxGroup2x2;i++) { m_hGroupIconA[i].PlayVisualRange(m_GroupIconNameA[m_pGroupA[i]],NULL,m_GroupIconNameA[m_pGroupA[i]]); XuiElementSetShow(m_hGroupIconA[i].m_hObj,TRUE); } }
// Display the tooltips ui.SetTooltips(m_iPad, IDS_TOOLTIPS_CREATE,IDS_TOOLTIPS_EXIT, IDS_TOOLTIPS_SHOW_INVENTORY,-1,-1,-1,-2, IDS_TOOLTIPS_CHANGE_GROUP); CXuiSceneBase::EnableTooltip(m_iPad, BUTTON_TOOLTIP_A, FALSE );
// Check which recipes are available with the resources we have CheckRecipesAvailable(); // reset the vertical slots iVSlotIndexA[0]=CanBeMadeA[m_iCurrentSlotHIndex].iCount-1; iVSlotIndexA[1]=0; iVSlotIndexA[2]=1; UpdateVerticalSlots(); UpdateHighlight(); }
return S_OK;}
HRESULT CXuiSceneCraftingPanel::OnCustomMessage_InventoryUpdated(){ // Display the tooltips ui.SetTooltips(m_iPad, IDS_TOOLTIPS_CREATE,IDS_TOOLTIPS_EXIT, IDS_TOOLTIPS_SHOW_INVENTORY,-1,-1,-1,-2, IDS_TOOLTIPS_CHANGE_GROUP); CXuiSceneBase::EnableTooltip(m_iPad, BUTTON_TOOLTIP_A, FALSE );
// Check which recipes are available with the resources we have CheckRecipesAvailable(); UpdateVerticalSlots(); UpdateHighlight();
return S_OK;}
////////////////////////////////////////////////////////////////////////////// OnKeyDown////////////////////////////////////////////////////////////////////////////HRESULT CXuiSceneCraftingPanel::OnKeyDown(XUIMessageInput* pInputData, BOOL& bHandled){ bHandled = handleKeyDown(pInputData->UserIndex, mapVKToAction(pInputData->dwKeyCode), (pInputData->dwFlags & XUI_INPUT_FLAG_REPEAT) != 0);
return S_OK;}
int CXuiSceneCraftingPanel::mapVKToAction(int vk){ int action = MINECRAFT_ACTION_MAX; switch(vk) { case VK_PAD_A: action = ACTION_MENU_A; break; case VK_PAD_B: case VK_PAD_START: action = ACTION_MENU_B; break; case VK_PAD_X: action = ACTION_MENU_X; break; case VK_PAD_Y: action = ACTION_MENU_Y; break; case VK_PAD_DPAD_LEFT: case VK_PAD_LTHUMB_LEFT: action = ACTION_MENU_LEFT; break; case VK_PAD_DPAD_RIGHT: case VK_PAD_LTHUMB_RIGHT: action = ACTION_MENU_RIGHT; break; case VK_PAD_LTHUMB_UP: case VK_PAD_DPAD_UP: action = ACTION_MENU_UP; break; case VK_PAD_LTHUMB_DOWN: case VK_PAD_DPAD_DOWN: action = ACTION_MENU_DOWN; break; case VK_PAD_LTRIGGER: action = ACTION_MENU_PAGEUP; break; case VK_PAD_RTRIGGER: action = ACTION_MENU_PAGEDOWN; break; case VK_PAD_LSHOULDER: action = ACTION_MENU_LEFT_SCROLL; break; case VK_PAD_RSHOULDER: action = ACTION_MENU_RIGHT_SCROLL; break; case VK_PAD_RTHUMB_UP: action = ACTION_MENU_OTHER_STICK_UP; break; case VK_PAD_RTHUMB_DOWN: action = ACTION_MENU_OTHER_STICK_DOWN; break; case VK_PAD_RTHUMB_RIGHT: action = ACTION_MENU_OTHER_STICK_RIGHT; break; case VK_PAD_RTHUMB_LEFT: action = ACTION_MENU_OTHER_STICK_LEFT; break; };
return action;}
////////////////////////////////////////////////////////////////////////////// OnGetSourceImage////////////////////////////////////////////////////////////////////////////HRESULT CXuiSceneCraftingPanel::OnGetSourceImage(XUIMessageGetSourceImage* pData, BOOL& rfHandled){ HRESULT hr = S_OK; //int iId=pData->iItem; int iId=(pData->iData>>22)&0x1FF; pData->szPath = NULL; pData->bDirty=true; rfHandled = TRUE; return hr;}
////////////////////////////////////////////////////////////////////////////// OnDestroy////////////////////////////////////////////////////////////////////////////HRESULT CXuiSceneCraftingPanel::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
// 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;}
HRESULT CXuiSceneCraftingPanel::OnCustomMessage_Splitscreenplayer(bool bJoining, BOOL& bHandled){ bHandled=true; return app.AdjustSplitscreenScene_PlayerChanged(m_hObj,&m_OriginalPosition,m_iPad,bJoining);}
HRESULT CXuiSceneCraftingPanel::OnTimer(XUIMessageTimer *pData,BOOL& rfHandled){ if(pData->nId==IGNORE_KEYPRESS_TIMERID) { XuiKillTimer(m_hObj,IGNORE_KEYPRESS_TIMERID); m_bIgnoreKeyPresses=false; }
return S_OK;}
HRESULT CXuiSceneCraftingPanel::OnKillFocus(HXUIOBJ hObjGettingFocus, BOOL& bHandled){ return S_OK;}
int CXuiSceneCraftingPanel::getPad(){ return m_iPad;}
void CXuiSceneCraftingPanel::hideAllHSlots(){ for(int i=0;i<m_iMaxHSlotC;i++) { m_pHSlotsBrushImageControl[i]->SetShow(FALSE); }}
void CXuiSceneCraftingPanel::hideAllVSlots(){ for(int i=0;i<m_iMaxDisplayedVSlotC;i++) { m_pVSlotsBrushImageControl[i]->SetShow(FALSE); }}
void CXuiSceneCraftingPanel::hideAllIngredientsSlots(){ for(int i=0;i<m_iIngredientsC;i++) { m_pCraftIngredientDescA[i]->SetShow(FALSE); }}
void CXuiSceneCraftingPanel::setCraftHSlotItem(int iPad, int iIndex, shared_ptr<ItemInstance> item, unsigned int uiAlpha){ m_pHSlotsBrushImageControl[iIndex]->SetIcon(iPad, item, 9, uiAlpha, false); //m_pHSlotsBrushImageControl[iIndex]->SetPassThroughDataAssociation(MAKE_SLOTDISPLAY_ITEM_BITMASK(item->id,item->getAuxValue(),item->isFoil()),MAKE_SLOTDISPLAY_DATA_BITMASK (iPad, uiAlpha, false, item->GetCount(), 9,0) ); //m_pHSlotsBrushImageControl[iIndex]->SetShow(TRUE);}
void CXuiSceneCraftingPanel::setCraftVSlotItem(int iPad, int iIndex, shared_ptr<ItemInstance> item, unsigned int uiAlpha){ m_pVSlotsBrushImageControl[iIndex]->SetIcon(iPad, item, 9, uiAlpha, false); //m_pVSlotsBrushImageControl[iIndex]->SetPassThroughDataAssociation(MAKE_SLOTDISPLAY_ITEM_BITMASK(item->id,item->getAuxValue(),item->isFoil()),MAKE_SLOTDISPLAY_DATA_BITMASK (iPad, uiAlpha, false, item->GetCount(), 9,0) ); //m_pVSlotsBrushImageControl[iIndex]->SetShow(TRUE);}
void CXuiSceneCraftingPanel::setCraftingOutputSlotItem(int iPad, shared_ptr<ItemInstance> item){ if(item == NULL) { m_pCraftingOutput->SetIcon(iPad, 0,0,0,0,0,false); } else { m_pCraftingOutput->SetIcon(iPad, item->id,item->getAuxValue(),item->GetCount(),12,31,true,item->isFoil()); }}
void CXuiSceneCraftingPanel::setCraftingOutputSlotRedBox(bool show){ m_pCraftingOutput->SetRedBox(show?TRUE:FALSE);}
void CXuiSceneCraftingPanel::setIngredientSlotItem(int iPad, int index, shared_ptr<ItemInstance> item){ if(item == NULL) { m_pCraftingIngredientA[index]->SetIcon(iPad, 0,0,0,0,0,false); } else { m_pCraftingIngredientA[index]->SetIcon(m_iPad, item->id,item->getAuxValue(),0,8,31,false); }}
void CXuiSceneCraftingPanel::setIngredientSlotRedBox(int index, bool show){ m_pCraftingIngredientA[index]->SetRedBox(show?TRUE:FALSE);}
void CXuiSceneCraftingPanel::setIngredientDescriptionItem(int iPad, int index, shared_ptr<ItemInstance> item){ m_pCraftIngredientDescA[index]->SetIcon(iPad, item->id,item->getAuxValue(),item->GetCount(),8,31,TRUE,item->isFoil(),FALSE);}
void CXuiSceneCraftingPanel::setIngredientDescriptionRedBox(int index, bool show){ m_pCraftIngredientDescA[index]->SetRedBox(show?TRUE:FALSE);}
void CXuiSceneCraftingPanel::setIngredientDescriptionText(int index, LPCWSTR text){ m_pCraftIngredientDescA[index]->SetDescription(text);}
void CXuiSceneCraftingPanel::setShowCraftHSlot(int iIndex, bool show){ m_pHSlotsBrushImageControl[iIndex]->SetShow(show?TRUE:FALSE);}
void CXuiSceneCraftingPanel::showTabHighlight(int iIndex, bool show){ m_hTabGroupA[iIndex].SetShow(show?TRUE:FALSE);}
void CXuiSceneCraftingPanel::setGroupText(LPCWSTR text){ m_GroupName.SetText(text);}
void CXuiSceneCraftingPanel::setDescriptionText(LPCWSTR text){ m_DescriptionText.SetText(text);}
void CXuiSceneCraftingPanel::setItemText(LPCWSTR text){ m_ItemName.SetText(text);}
void CXuiSceneCraftingPanel::UpdateMultiPanel(){ switch(m_iDisplayDescription) { case DISPLAY_INVENTORY: // turn off all the ingredients display for(int i=0;i<4;i++) { m_pCraftIngredientDescA[i]->SetShow(FALSE); }
XuiElementSetShow(m_hGridInventory,TRUE); XuiControlSetText(m_InventoryText,app.GetString(IDS_INVENTORY)); XuiElementSetShow(m_InventoryText,TRUE); break; case DISPLAY_DESCRIPTION: // turn off the inventory XuiElementSetShow(m_hGridInventory,FALSE); XuiElementSetShow(m_DescriptionText,TRUE); XuiElementSetShow(m_InventoryText,FALSE); break; case DISPLAY_INGREDIENTS: // turn off all the descriptions XuiElementSetShow(m_DescriptionText,FALSE);
// display the ingredients for(int i=0;i<m_iIngredientsC;i++) { m_pCraftIngredientDescA[i]->SetShow(TRUE); }
if(m_iIngredientsC==0) { XuiElementSetShow(m_InventoryText,FALSE); } else { XuiControlSetText(m_InventoryText,app.GetString(IDS_INGREDIENTS)); XuiElementSetShow(m_InventoryText,TRUE); } break; }}
void CXuiSceneCraftingPanel::scrollDescriptionUp(){ XUIHtmlScrollInfo ScrollInfo;
XuiHtmlControlGetVScrollInfo(m_DescriptionText.m_hObj,&ScrollInfo); if(!ScrollInfo.bScrolling) { XuiHtmlControlVScrollBy(m_DescriptionText.m_hObj,-1); }}
void CXuiSceneCraftingPanel::scrollDescriptionDown(){ XUIHtmlScrollInfo ScrollInfo;
XuiHtmlControlGetVScrollInfo(m_DescriptionText.m_hObj,&ScrollInfo); if(!ScrollInfo.bScrolling) { XuiHtmlControlVScrollBy(m_DescriptionText.m_hObj,1); }}
void CXuiSceneCraftingPanel::updateHighlightAndScrollPositions(){ D3DXVECTOR3 vec;
vec.z=0.0f; vec.x=m_vSlot0HighlightPos.x + (m_iCurrentSlotHIndex*m_fSlotSize); vec.y=m_vSlot0HighlightPos.y + ((m_iCurrentSlotVIndex-1)*m_fSlotSize); // vslot 1 is the centred one m_hHighlight.SetPosition(&vec);
// Update the scroll icons for all h boxes for(int i=0;i<m_iCraftablesMaxHSlotC;i++) { if((i!=m_iCurrentSlotHIndex) &&(CanBeMadeA[i].iCount>1)) { m_pCursors[i].SetShow(TRUE); } else { m_pCursors[i].SetShow(FALSE); } }
if(CanBeMadeA[m_iCurrentSlotHIndex].iCount<2) { m_hScrollBar2.SetShow(FALSE); m_hScrollBar3.SetShow(FALSE); } else if(CanBeMadeA[m_iCurrentSlotHIndex].iCount<3) { // 2 slot vec.x=m_vSlot0V2ScrollPos.x + (m_iCurrentSlotHIndex*m_fSlotSize); vec.y=m_vSlot0V2ScrollPos.y; m_hScrollBar2.SetPosition(&vec); m_hScrollBar2.SetShow(TRUE); m_hScrollBar3.SetShow(FALSE); } else { // 3 slot vec.x=m_vSlot0V3ScrollPos.x + (m_iCurrentSlotHIndex*m_fSlotSize); vec.y=m_vSlot0V3ScrollPos.y;//+m_fSlotSize;
m_hScrollBar3.SetPosition(&vec); m_hScrollBar2.SetShow(FALSE); m_hScrollBar3.SetShow(TRUE); }}
void CXuiSceneCraftingPanel::updateVSlotPositions(int iSlots, int i){ D3DXVECTOR3 vec; if(iSlots==2) { vec.y=m_vSlot0Pos.y + (1-i)*m_fSlotSize; } else { vec.y=m_vSlot0Pos.y + (i-1)*m_fSlotSize; } vec.x=m_vSlot0Pos.x + m_iCurrentSlotHIndex*m_fSlotSize; vec.z=0.0f; m_pVSlotsBrushImageControl[i]->SetPosition(&vec);}