the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1// Minecraft.cpp : Defines the entry point for the application.
2//
3
4#include "stdafx.h"
5
6#include <assert.h>
7#include "..\..\MultiplayerLocalPlayer.h"
8#include "..\..\..\Minecraft.World\net.minecraft.world.item.h"
9#include "..\..\..\Minecraft.World\net.minecraft.world.item.crafting.h"
10#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h"
11#include "..\..\..\Minecraft.World\Tile.h"
12#include "..\..\..\Minecraft.World\net.minecraft.stats.h"
13#include "..\..\Common\Tutorial\Tutorial.h"
14#include "..\..\Common\Tutorial\TutorialMode.h"
15#include "..\..\Common\Tutorial\TutorialEnum.h"
16#include "..\..\Minecraft.h"
17#include "XUI_Ctrl_CraftIngredientSlot.h"
18#include "XUI_Ctrl_SlotList.h"
19
20#define IGNORE_KEYPRESS_TIMERID 0
21#define IGNORE_KEYPRESS_TIME 100
22
23//////////////////////////////////////////////////////////////////////////
24//
25//
26//
27//////////////////////////////////////////////////////////////////////////
28CXuiSceneCraftingPanel::CXuiSceneCraftingPanel()
29{
30}
31
32//////////////////////////////////////////////////////////////////////////
33//
34// OnInit
35//
36//////////////////////////////////////////////////////////////////////////
37HRESULT CXuiSceneCraftingPanel::OnInit( XUIMessageInit* pInitData, BOOL& bHandled )
38{
39 m_bIgnoreKeyPresses=true;
40
41 D3DXVECTOR3 vec;
42 VOID *pObj;
43 CraftingPanelScreenInput* pCraftingPanelData = (CraftingPanelScreenInput*)pInitData->pvInitData;
44 m_iContainerType=pCraftingPanelData->iContainerType;
45 m_pPlayer=pCraftingPanelData->player;
46 m_iPad=pCraftingPanelData->iPad;
47 m_bSplitscreen=pCraftingPanelData->bSplitscreen;
48
49 HRESULT hr = S_OK;
50
51 MapChildControls();
52
53 if(m_iContainerType==RECIPE_TYPE_2x2)
54 {
55 // TODO Inventory dimensions need defined as constants
56 m_inventoryControl->SetData( m_iPad, m_pPlayer->inventoryMenu, 3, 9, InventoryMenu::INV_SLOT_START, InventoryMenu::INV_SLOT_END );
57
58 // TODO Inventory dimensions need defined as constants
59 m_useRowControl->SetData( m_iPad, m_pPlayer->inventoryMenu, 1, 9, InventoryMenu::USE_ROW_SLOT_START, InventoryMenu::USE_ROW_SLOT_END );
60 }
61 else
62 {
63 CraftingMenu *menu = new CraftingMenu(m_pPlayer->inventory, m_pPlayer->level, pCraftingPanelData->x, pCraftingPanelData->y, pCraftingPanelData->z);
64 Minecraft::GetInstance()->localplayers[m_iPad]->containerMenu = menu;
65 // TODO Inventory dimensions need defined as constants
66 m_inventoryControl->SetData( m_iPad, menu, 3, 9, CraftingMenu::INV_SLOT_START, CraftingMenu::INV_SLOT_END );
67
68 // TODO Inventory dimensions need defined as constants
69 m_useRowControl->SetData( m_iPad, menu, 1, 9, CraftingMenu::USE_ROW_SLOT_START, CraftingMenu::USE_ROW_SLOT_END );
70 }
71
72 delete pCraftingPanelData;
73
74 // if we are in splitscreen, then we need to figure out if we want to move this scene
75 if(m_bSplitscreen)
76 {
77 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad);
78 }
79
80 XuiElementSetShow(m_hGrid,TRUE);
81 XuiElementSetShow(m_hPanel,TRUE);
82
83 // Set up the CXuiCtrlCraftIngredientSlots
84 if(m_iContainerType==RECIPE_TYPE_3x3)
85 {
86 m_pCursors=m_pHSlotsCraftingTableCursors;
87
88 m_iIngredientsMaxSlotC = m_iIngredients3x3SlotC;
89 for(int i=0;i<m_iIngredients3x3SlotC;i++)
90 {
91 XuiObjectFromHandle( m_hCraftIngredientA[i], &pObj );
92 m_pCraftingIngredientA[i] = (CXuiCtrlCraftIngredientSlot *)pObj;
93 }
94 XuiObjectFromHandle( m_hCraftOutput, &pObj );
95 m_pCraftingOutput = (CXuiCtrlCraftIngredientSlot *)pObj;
96 m_pGroupA=(Recipy::_eGroupType *)&m_GroupTypeMapping9GridA;
97 m_pGroupTabA=(CXuiSceneCraftingPanel::_eGroupTab *)&m_GroupTabBkgMapping3x3A;
98
99 m_iCraftablesMaxHSlotC=m_iMaxHSlot3x3C;
100
101 // set up the ingredients descriptions
102 for(int i=0;i<4;i++)
103 {
104 XuiObjectFromHandle( m_hCraftIngredientDescA[i], &pObj );
105 m_pCraftIngredientDescA[i] = (CXuiCtrlCraftIngredientSlot *)pObj;
106 }
107 }
108 else
109 {
110 m_pCursors=m_pHSlotsCraftingCursors;
111
112 m_iIngredientsMaxSlotC = m_iIngredients2x2SlotC;
113 for(int i=0;i<m_iIngredients2x2SlotC;i++)
114 {
115 XuiObjectFromHandle( m_hCraftIngredientA[i], &pObj );
116 m_pCraftingIngredientA[i] = (CXuiCtrlCraftIngredientSlot *)pObj;
117 }
118
119 XuiObjectFromHandle( m_hCraftOutput, &pObj );
120 m_pCraftingOutput = (CXuiCtrlCraftIngredientSlot *)pObj;
121 m_pGroupA=(Recipy::_eGroupType *)&m_GroupTypeMapping4GridA;
122 m_pGroupTabA=(CXuiSceneCraftingPanel::_eGroupTab *)&m_GroupTabBkgMapping2x2A;
123
124 m_iCraftablesMaxHSlotC=m_iMaxHSlot2x2C;
125
126 // set up the ingredients descriptions
127 for(int i=0;i<4;i++)
128 {
129 XuiObjectFromHandle( m_hCraftIngredientDescA[i], &pObj );
130 m_pCraftIngredientDescA[i] = (CXuiCtrlCraftIngredientSlot *)pObj;
131 }
132 }
133
134 // display the first group tab
135 m_hTabGroupA[m_iGroupIndex].SetShow(TRUE);
136
137 // store the slot 0 position
138 m_pHSlotsBrushImageControl[0]->GetPosition(&m_vSlot0Pos);
139 m_pHSlotsBrushImageControl[1]->GetPosition(&vec);
140 m_fSlotSize=vec.x-m_vSlot0Pos.x;
141
142 // store the slot 0 highlight position
143 m_hHighlight.GetPosition(&m_vSlot0HighlightPos);
144 // Store the V slot position
145 m_hScrollBar2.GetPosition(&m_vSlot0V2ScrollPos);
146 m_hScrollBar3.GetPosition(&m_vSlot0V3ScrollPos);
147
148 // get the position of the slot from the xui, and apply any offset needed
149 for(int i=0;i<m_iCraftablesMaxHSlotC;i++)
150 {
151 m_pHSlotsBrushImageControl[i]->SetShow(FALSE);
152 }
153
154 XuiElementSetShow(m_hGridInventory,FALSE);
155
156 m_hScrollBar2.SetShow(FALSE);
157 m_hScrollBar3.SetShow(FALSE);
158
159 app.SetRichPresenceContext(m_iPad,CONTEXT_GAME_STATE_CRAFTING);
160 m_GroupName.SetText(GetGroupNameText(m_pGroupA[m_iGroupIndex]));
161
162 UpdateTooltips();
163
164 // Update the tutorial state
165 Minecraft *pMinecraft = Minecraft::GetInstance();
166
167#ifdef _XBOX
168 if( pMinecraft->localgameModes[m_iPad] != NULL )
169 {
170 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad];
171 m_previousTutorialState = gameMode->getTutorial()->getCurrentState();
172 if(m_iContainerType==RECIPE_TYPE_2x2)
173 {
174 gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_2x2Crafting_Menu, this);
175 }
176 else
177 {
178 gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_3x3Crafting_Menu, this);
179 }
180 }
181#endif
182
183 XuiSetTimer(m_hObj,IGNORE_KEYPRESS_TIMERID,IGNORE_KEYPRESS_TIME);
184
185 return S_OK;
186}
187
188//////////////////////////////////////////////////////////////////////////
189//
190// OnTransitionEnd
191//
192//////////////////////////////////////////////////////////////////////////
193HRESULT CXuiSceneCraftingPanel::OnTransitionEnd( XUIMessageTransition *pTransData, BOOL& bHandled )
194{
195 // are we being destroyed? If so, don't do anything
196 if(pTransData->dwTransAction==XUI_TRANSITION_ACTION_DESTROY )
197 {
198 return S_OK;
199 }
200
201 // Fix for issue caused by autosave while crafting is up
202 if(pTransData->dwTransType == XUI_TRANSITION_TO || pTransData->dwTransType == XUI_TRANSITION_BACKTO)
203 {
204 // Update the tab icons
205 if(m_iContainerType==RECIPE_TYPE_3x3)
206 {
207 for(int i=0;i<m_iMaxGroup3x3;i++)
208 {
209 m_hGroupIconA[i].PlayVisualRange(m_GroupIconNameA[m_pGroupA[i]],NULL,m_GroupIconNameA[m_pGroupA[i]]);
210 XuiElementSetShow(m_hGroupIconA[i].m_hObj,TRUE);
211 }
212 }
213 else
214 {
215 for(int i=0;i<m_iMaxGroup2x2;i++)
216 {
217 m_hGroupIconA[i].PlayVisualRange(m_GroupIconNameA[m_pGroupA[i]],NULL,m_GroupIconNameA[m_pGroupA[i]]);
218 XuiElementSetShow(m_hGroupIconA[i].m_hObj,TRUE);
219 }
220 }
221
222
223 // Display the tooltips
224 ui.SetTooltips(m_iPad, IDS_TOOLTIPS_CREATE,IDS_TOOLTIPS_EXIT, IDS_TOOLTIPS_SHOW_INVENTORY,-1,-1,-1,-2, IDS_TOOLTIPS_CHANGE_GROUP);
225 CXuiSceneBase::EnableTooltip(m_iPad, BUTTON_TOOLTIP_A, FALSE );
226
227 // Check which recipes are available with the resources we have
228 CheckRecipesAvailable();
229 // reset the vertical slots
230 iVSlotIndexA[0]=CanBeMadeA[m_iCurrentSlotHIndex].iCount-1;
231 iVSlotIndexA[1]=0;
232 iVSlotIndexA[2]=1;
233 UpdateVerticalSlots();
234 UpdateHighlight();
235 }
236
237 return S_OK;
238}
239
240HRESULT CXuiSceneCraftingPanel::OnCustomMessage_InventoryUpdated()
241{
242 // Display the tooltips
243 ui.SetTooltips(m_iPad, IDS_TOOLTIPS_CREATE,IDS_TOOLTIPS_EXIT, IDS_TOOLTIPS_SHOW_INVENTORY,-1,-1,-1,-2, IDS_TOOLTIPS_CHANGE_GROUP);
244 CXuiSceneBase::EnableTooltip(m_iPad, BUTTON_TOOLTIP_A, FALSE );
245
246 // Check which recipes are available with the resources we have
247 CheckRecipesAvailable();
248 UpdateVerticalSlots();
249 UpdateHighlight();
250
251 return S_OK;
252}
253
254//////////////////////////////////////////////////////////////////////////
255//
256// OnKeyDown
257//
258//////////////////////////////////////////////////////////////////////////
259HRESULT CXuiSceneCraftingPanel::OnKeyDown(XUIMessageInput* pInputData, BOOL& bHandled)
260{
261 bHandled = handleKeyDown(pInputData->UserIndex, mapVKToAction(pInputData->dwKeyCode), (pInputData->dwFlags & XUI_INPUT_FLAG_REPEAT) != 0);
262
263 return S_OK;
264}
265
266int CXuiSceneCraftingPanel::mapVKToAction(int vk)
267{
268 int action = MINECRAFT_ACTION_MAX;
269 switch(vk)
270 {
271 case VK_PAD_A:
272 action = ACTION_MENU_A;
273 break;
274 case VK_PAD_B:
275 case VK_PAD_START:
276 action = ACTION_MENU_B;
277 break;
278 case VK_PAD_X:
279 action = ACTION_MENU_X;
280 break;
281 case VK_PAD_Y:
282 action = ACTION_MENU_Y;
283 break;
284 case VK_PAD_DPAD_LEFT:
285 case VK_PAD_LTHUMB_LEFT:
286 action = ACTION_MENU_LEFT;
287 break;
288 case VK_PAD_DPAD_RIGHT:
289 case VK_PAD_LTHUMB_RIGHT:
290 action = ACTION_MENU_RIGHT;
291 break;
292 case VK_PAD_LTHUMB_UP:
293 case VK_PAD_DPAD_UP:
294 action = ACTION_MENU_UP;
295 break;
296 case VK_PAD_LTHUMB_DOWN:
297 case VK_PAD_DPAD_DOWN:
298 action = ACTION_MENU_DOWN;
299 break;
300 case VK_PAD_LTRIGGER:
301 action = ACTION_MENU_PAGEUP;
302 break;
303 case VK_PAD_RTRIGGER:
304 action = ACTION_MENU_PAGEDOWN;
305 break;
306 case VK_PAD_LSHOULDER:
307 action = ACTION_MENU_LEFT_SCROLL;
308 break;
309 case VK_PAD_RSHOULDER:
310 action = ACTION_MENU_RIGHT_SCROLL;
311 break;
312 case VK_PAD_RTHUMB_UP:
313 action = ACTION_MENU_OTHER_STICK_UP;
314 break;
315 case VK_PAD_RTHUMB_DOWN:
316 action = ACTION_MENU_OTHER_STICK_DOWN;
317 break;
318 case VK_PAD_RTHUMB_RIGHT:
319 action = ACTION_MENU_OTHER_STICK_RIGHT;
320 break;
321 case VK_PAD_RTHUMB_LEFT:
322 action = ACTION_MENU_OTHER_STICK_LEFT;
323 break;
324 };
325
326 return action;
327}
328
329//////////////////////////////////////////////////////////////////////////
330//
331// OnGetSourceImage
332//
333//////////////////////////////////////////////////////////////////////////
334HRESULT CXuiSceneCraftingPanel::OnGetSourceImage(XUIMessageGetSourceImage* pData, BOOL& rfHandled)
335{
336 HRESULT hr = S_OK;
337 //int iId=pData->iItem;
338 int iId=(pData->iData>>22)&0x1FF;
339 pData->szPath = NULL;
340 pData->bDirty=true;
341 rfHandled = TRUE;
342 return hr;
343}
344
345//////////////////////////////////////////////////////////////////////////
346//
347// OnDestroy
348//
349//////////////////////////////////////////////////////////////////////////
350HRESULT CXuiSceneCraftingPanel::OnDestroy()
351{
352 Minecraft *pMinecraft = Minecraft::GetInstance();
353
354#ifdef _XBOX
355 if( pMinecraft->localgameModes[m_iPad] != NULL )
356 {
357 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad];
358 if(gameMode != NULL) gameMode->getTutorial()->changeTutorialState(m_previousTutorialState);
359 }
360#endif
361
362 // 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)
363 if(Minecraft::GetInstance()->localplayers[m_iPad] != NULL) Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer();
364
365 return S_OK;
366}
367
368HRESULT CXuiSceneCraftingPanel::OnCustomMessage_Splitscreenplayer(bool bJoining, BOOL& bHandled)
369{
370 bHandled=true;
371 return app.AdjustSplitscreenScene_PlayerChanged(m_hObj,&m_OriginalPosition,m_iPad,bJoining);
372}
373
374HRESULT CXuiSceneCraftingPanel::OnTimer(XUIMessageTimer *pData,BOOL& rfHandled)
375{
376 if(pData->nId==IGNORE_KEYPRESS_TIMERID)
377 {
378 XuiKillTimer(m_hObj,IGNORE_KEYPRESS_TIMERID);
379 m_bIgnoreKeyPresses=false;
380 }
381
382 return S_OK;
383}
384
385HRESULT CXuiSceneCraftingPanel::OnKillFocus(HXUIOBJ hObjGettingFocus, BOOL& bHandled)
386{
387 return S_OK;
388}
389
390int CXuiSceneCraftingPanel::getPad()
391{
392 return m_iPad;
393}
394
395void CXuiSceneCraftingPanel::hideAllHSlots()
396{
397 for(int i=0;i<m_iMaxHSlotC;i++)
398 {
399 m_pHSlotsBrushImageControl[i]->SetShow(FALSE);
400 }
401}
402
403void CXuiSceneCraftingPanel::hideAllVSlots()
404{
405 for(int i=0;i<m_iMaxDisplayedVSlotC;i++)
406 {
407 m_pVSlotsBrushImageControl[i]->SetShow(FALSE);
408 }
409}
410
411
412void CXuiSceneCraftingPanel::hideAllIngredientsSlots()
413{
414 for(int i=0;i<m_iIngredientsC;i++)
415 {
416 m_pCraftIngredientDescA[i]->SetShow(FALSE);
417 }
418}
419
420void CXuiSceneCraftingPanel::setCraftHSlotItem(int iPad, int iIndex, shared_ptr<ItemInstance> item, unsigned int uiAlpha)
421{
422 m_pHSlotsBrushImageControl[iIndex]->SetIcon(iPad, item, 9, uiAlpha, false);
423 //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) );
424 //m_pHSlotsBrushImageControl[iIndex]->SetShow(TRUE);
425}
426
427void CXuiSceneCraftingPanel::setCraftVSlotItem(int iPad, int iIndex, shared_ptr<ItemInstance> item, unsigned int uiAlpha)
428{
429 m_pVSlotsBrushImageControl[iIndex]->SetIcon(iPad, item, 9, uiAlpha, false);
430 //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) );
431 //m_pVSlotsBrushImageControl[iIndex]->SetShow(TRUE);
432}
433
434void CXuiSceneCraftingPanel::setCraftingOutputSlotItem(int iPad, shared_ptr<ItemInstance> item)
435{
436 if(item == NULL)
437 {
438 m_pCraftingOutput->SetIcon(iPad, 0,0,0,0,0,false);
439 }
440 else
441 {
442 m_pCraftingOutput->SetIcon(iPad, item->id,item->getAuxValue(),item->GetCount(),12,31,true,item->isFoil());
443 }
444}
445
446void CXuiSceneCraftingPanel::setCraftingOutputSlotRedBox(bool show)
447{
448 m_pCraftingOutput->SetRedBox(show?TRUE:FALSE);
449}
450
451void CXuiSceneCraftingPanel::setIngredientSlotItem(int iPad, int index, shared_ptr<ItemInstance> item)
452{
453 if(item == NULL)
454 {
455 m_pCraftingIngredientA[index]->SetIcon(iPad, 0,0,0,0,0,false);
456 }
457 else
458 {
459 m_pCraftingIngredientA[index]->SetIcon(m_iPad, item->id,item->getAuxValue(),0,8,31,false);
460 }
461}
462
463void CXuiSceneCraftingPanel::setIngredientSlotRedBox(int index, bool show)
464{
465 m_pCraftingIngredientA[index]->SetRedBox(show?TRUE:FALSE);
466}
467
468void CXuiSceneCraftingPanel::setIngredientDescriptionItem(int iPad, int index, shared_ptr<ItemInstance> item)
469{
470 m_pCraftIngredientDescA[index]->SetIcon(iPad, item->id,item->getAuxValue(),item->GetCount(),8,31,TRUE,item->isFoil(),FALSE);
471}
472
473void CXuiSceneCraftingPanel::setIngredientDescriptionRedBox(int index, bool show)
474{
475 m_pCraftIngredientDescA[index]->SetRedBox(show?TRUE:FALSE);
476}
477
478void CXuiSceneCraftingPanel::setIngredientDescriptionText(int index, LPCWSTR text)
479{
480 m_pCraftIngredientDescA[index]->SetDescription(text);
481}
482
483void CXuiSceneCraftingPanel::setShowCraftHSlot(int iIndex, bool show)
484{
485 m_pHSlotsBrushImageControl[iIndex]->SetShow(show?TRUE:FALSE);
486}
487
488void CXuiSceneCraftingPanel::showTabHighlight(int iIndex, bool show)
489{
490 m_hTabGroupA[iIndex].SetShow(show?TRUE:FALSE);
491}
492
493void CXuiSceneCraftingPanel::setGroupText(LPCWSTR text)
494{
495 m_GroupName.SetText(text);
496}
497
498void CXuiSceneCraftingPanel::setDescriptionText(LPCWSTR text)
499{
500 m_DescriptionText.SetText(text);
501}
502
503void CXuiSceneCraftingPanel::setItemText(LPCWSTR text)
504{
505 m_ItemName.SetText(text);
506}
507
508void CXuiSceneCraftingPanel::UpdateMultiPanel()
509{
510 switch(m_iDisplayDescription)
511 {
512 case DISPLAY_INVENTORY:
513 // turn off all the ingredients display
514 for(int i=0;i<4;i++)
515 {
516 m_pCraftIngredientDescA[i]->SetShow(FALSE);
517 }
518
519 XuiElementSetShow(m_hGridInventory,TRUE);
520 XuiControlSetText(m_InventoryText,app.GetString(IDS_INVENTORY));
521 XuiElementSetShow(m_InventoryText,TRUE);
522 break;
523 case DISPLAY_DESCRIPTION:
524 // turn off the inventory
525 XuiElementSetShow(m_hGridInventory,FALSE);
526 XuiElementSetShow(m_DescriptionText,TRUE);
527 XuiElementSetShow(m_InventoryText,FALSE);
528 break;
529 case DISPLAY_INGREDIENTS:
530 // turn off all the descriptions
531 XuiElementSetShow(m_DescriptionText,FALSE);
532
533 // display the ingredients
534 for(int i=0;i<m_iIngredientsC;i++)
535 {
536 m_pCraftIngredientDescA[i]->SetShow(TRUE);
537 }
538
539 if(m_iIngredientsC==0)
540 {
541 XuiElementSetShow(m_InventoryText,FALSE);
542 }
543 else
544 {
545 XuiControlSetText(m_InventoryText,app.GetString(IDS_INGREDIENTS));
546 XuiElementSetShow(m_InventoryText,TRUE);
547 }
548 break;
549 }
550}
551
552void CXuiSceneCraftingPanel::scrollDescriptionUp()
553{
554 XUIHtmlScrollInfo ScrollInfo;
555
556 XuiHtmlControlGetVScrollInfo(m_DescriptionText.m_hObj,&ScrollInfo);
557 if(!ScrollInfo.bScrolling)
558 {
559 XuiHtmlControlVScrollBy(m_DescriptionText.m_hObj,-1);
560 }
561}
562
563void CXuiSceneCraftingPanel::scrollDescriptionDown()
564{
565 XUIHtmlScrollInfo ScrollInfo;
566
567 XuiHtmlControlGetVScrollInfo(m_DescriptionText.m_hObj,&ScrollInfo);
568 if(!ScrollInfo.bScrolling)
569 {
570 XuiHtmlControlVScrollBy(m_DescriptionText.m_hObj,1);
571 }
572}
573
574void CXuiSceneCraftingPanel::updateHighlightAndScrollPositions()
575{
576 D3DXVECTOR3 vec;
577
578 vec.z=0.0f;
579 vec.x=m_vSlot0HighlightPos.x + (m_iCurrentSlotHIndex*m_fSlotSize);
580 vec.y=m_vSlot0HighlightPos.y + ((m_iCurrentSlotVIndex-1)*m_fSlotSize); // vslot 1 is the centred one
581 m_hHighlight.SetPosition(&vec);
582
583 // Update the scroll icons for all h boxes
584 for(int i=0;i<m_iCraftablesMaxHSlotC;i++)
585 {
586 if((i!=m_iCurrentSlotHIndex) &&(CanBeMadeA[i].iCount>1))
587 {
588 m_pCursors[i].SetShow(TRUE);
589 }
590 else
591 {
592 m_pCursors[i].SetShow(FALSE);
593 }
594 }
595
596 if(CanBeMadeA[m_iCurrentSlotHIndex].iCount<2)
597 {
598 m_hScrollBar2.SetShow(FALSE);
599 m_hScrollBar3.SetShow(FALSE);
600 }
601 else if(CanBeMadeA[m_iCurrentSlotHIndex].iCount<3)
602 {
603 // 2 slot
604 vec.x=m_vSlot0V2ScrollPos.x + (m_iCurrentSlotHIndex*m_fSlotSize);
605 vec.y=m_vSlot0V2ScrollPos.y;
606 m_hScrollBar2.SetPosition(&vec);
607 m_hScrollBar2.SetShow(TRUE);
608 m_hScrollBar3.SetShow(FALSE);
609 }
610 else
611 {
612 // 3 slot
613 vec.x=m_vSlot0V3ScrollPos.x + (m_iCurrentSlotHIndex*m_fSlotSize);
614 vec.y=m_vSlot0V3ScrollPos.y;//+m_fSlotSize;
615
616 m_hScrollBar3.SetPosition(&vec);
617 m_hScrollBar2.SetShow(FALSE);
618 m_hScrollBar3.SetShow(TRUE);
619 }
620}
621
622void CXuiSceneCraftingPanel::updateVSlotPositions(int iSlots, int i)
623{
624 D3DXVECTOR3 vec;
625 if(iSlots==2)
626 {
627 vec.y=m_vSlot0Pos.y + (1-i)*m_fSlotSize;
628 }
629 else
630 {
631 vec.y=m_vSlot0Pos.y + (i-1)*m_fSlotSize;
632 }
633 vec.x=m_vSlot0Pos.x + m_iCurrentSlotHIndex*m_fSlotSize;
634 vec.z=0.0f;
635 m_pVSlotsBrushImageControl[i]->SetPosition(&vec);
636}