the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 636 lines 18 kB view raw
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}