mirror of
https://github.com/LCEMP/LCEMP.git
synced 2026-06-09 17:32:53 +00:00
1095 lines
30 KiB
C++
1095 lines
30 KiB
C++
#include "stdafx.h"
|
|
#include "UI.h"
|
|
#include "../../Minecraft.h"
|
|
#include "../../MultiPlayerLocalPlayer.h"
|
|
#include "../../../Minecraft.World/net.minecraft.world.inventory.h"
|
|
#include "UIScene_CraftingMenu.h"
|
|
|
|
#ifdef _WINDOWS64
|
|
#include "../../KeyboardMouseInput.h"
|
|
extern HWND g_hWnd;
|
|
|
|
static S32 RoundWindowsCraftingMetric(F32 value)
|
|
{
|
|
return (S32)(value + 0.5f);
|
|
}
|
|
#endif
|
|
|
|
#ifdef __PSVITA__
|
|
#define GAME_CRAFTING_TOUCHUPDATE_TIMER_ID 0
|
|
#define GAME_CRAFTING_TOUCHUPDATE_TIMER_TIME 100
|
|
#endif
|
|
|
|
UIScene_CraftingMenu::UIScene_CraftingMenu(int iPad, void *_initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
|
|
{
|
|
m_bIgnoreKeyPresses = false;
|
|
|
|
CraftingPanelScreenInput* initData = (CraftingPanelScreenInput*)_initData;
|
|
m_iContainerType=initData->iContainerType;
|
|
m_pPlayer=initData->player;
|
|
m_bSplitscreen=initData->bSplitscreen;
|
|
|
|
// Setup all the Iggy references we need for this scene
|
|
initialiseMovie();
|
|
|
|
for(unsigned int i = 0; i < 4; ++i) m_labelIngredientsDesc[i].init(L"");
|
|
m_labelDescription.init(L"");
|
|
m_labelGroupName.init(L"");
|
|
m_labelItemName.init(L"");
|
|
m_labelInventory.init( app.GetString(IDS_INVENTORY) );
|
|
m_labelIngredients.init( app.GetString(IDS_INGREDIENTS) );
|
|
|
|
if(m_iContainerType==RECIPE_TYPE_2x2)
|
|
{
|
|
m_menu = m_pPlayer->inventoryMenu;
|
|
m_iMenuInventoryStart = InventoryMenu::INV_SLOT_START;
|
|
m_iMenuHotBarStart = InventoryMenu::USE_ROW_SLOT_START;
|
|
}
|
|
else
|
|
{
|
|
CraftingMenu *menu = new CraftingMenu(m_pPlayer->inventory, m_pPlayer->level, initData->x, initData->y, initData->z);
|
|
Minecraft::GetInstance()->localplayers[m_iPad]->containerMenu = menu;
|
|
|
|
m_menu = menu;
|
|
m_iMenuInventoryStart = CraftingMenu::INV_SLOT_START;
|
|
m_iMenuHotBarStart = CraftingMenu::USE_ROW_SLOT_START;
|
|
}
|
|
m_slotListInventory.addSlots(CRAFTING_INVENTORY_SLOT_START,CRAFTING_INVENTORY_SLOT_END - CRAFTING_INVENTORY_SLOT_START);
|
|
m_slotListHotBar.addSlots(CRAFTING_HOTBAR_SLOT_START, CRAFTING_HOTBAR_SLOT_END - CRAFTING_HOTBAR_SLOT_START);
|
|
|
|
#if TO_BE_IMPLEMENTED
|
|
// 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);
|
|
#endif
|
|
|
|
if(m_iContainerType==RECIPE_TYPE_3x3)
|
|
{
|
|
m_iIngredientsMaxSlotC = m_iIngredients3x3SlotC;
|
|
m_pGroupA=(Recipy::_eGroupType *)&m_GroupTypeMapping9GridA;
|
|
m_pGroupTabA=(_eGroupTab *)&m_GroupTabBkgMapping3x3A;
|
|
m_iCraftablesMaxHSlotC=m_iMaxHSlot3x3C;
|
|
}
|
|
else
|
|
{
|
|
m_iIngredientsMaxSlotC = m_iIngredients2x2SlotC;
|
|
m_pGroupA=(Recipy::_eGroupType *)&m_GroupTypeMapping4GridA;
|
|
m_pGroupTabA=(_eGroupTab *)&m_GroupTabBkgMapping2x2A;
|
|
m_iCraftablesMaxHSlotC=m_iMaxHSlot2x2C;
|
|
}
|
|
|
|
#if TO_BE_IMPLEMENTED
|
|
|
|
|
|
// 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);
|
|
|
|
#endif
|
|
|
|
app.SetRichPresenceContext(m_iPad,CONTEXT_GAME_STATE_CRAFTING);
|
|
setGroupText(GetGroupNameText(m_pGroupA[m_iGroupIndex]));
|
|
|
|
// Update the tutorial state
|
|
Minecraft *pMinecraft = Minecraft::GetInstance();
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
#ifdef _TO_BE_IMPLEMENTED
|
|
XuiSetTimer(m_hObj,IGNORE_KEYPRESS_TIMERID,IGNORE_KEYPRESS_TIME);
|
|
#endif
|
|
|
|
for(unsigned int i = 0; i < 4; ++i)
|
|
{
|
|
m_slotListIngredients[i].addSlot(CRAFTING_INGREDIENTS_DESCRIPTION_START + i);
|
|
}
|
|
m_slotListCraftingOutput.addSlot(CRAFTING_OUTPUT_SLOT_START);
|
|
m_slotListIngredientsLayout.addSlots(CRAFTING_INGREDIENTS_LAYOUT_START, m_iIngredientsMaxSlotC);
|
|
|
|
// 3 Slot vertical scroll
|
|
m_slotListCrafting3VSlots[0].addSlot(CRAFTING_V_SLOT_START + 0);
|
|
m_slotListCrafting3VSlots[1].addSlot(CRAFTING_V_SLOT_START + 1);
|
|
m_slotListCrafting3VSlots[2].addSlot(CRAFTING_V_SLOT_START + 2);
|
|
|
|
// 2 Slot vertical scroll
|
|
// 2 slot scroll has swapped order
|
|
m_slotListCrafting2VSlots[0].addSlot(CRAFTING_V_SLOT_START + 1);
|
|
m_slotListCrafting2VSlots[1].addSlot(CRAFTING_V_SLOT_START + 0);
|
|
|
|
// 1 Slot scroll (for 480 mainly)
|
|
m_slotListCrafting1VSlots.addSlot(CRAFTING_V_SLOT_START);
|
|
|
|
m_slotListCraftingHSlots.addSlots(CRAFTING_H_SLOT_START,m_iCraftablesMaxHSlotC);
|
|
|
|
// 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();
|
|
|
|
if(initData) delete initData;
|
|
|
|
// in this scene, we override the press sound with our own for crafting success or fail
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_A,true);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_OK,true);
|
|
#ifdef __ORBIS__
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_TOUCHPAD_PRESS,true);
|
|
#endif
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_LEFT_SCROLL,true);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_RIGHT_SCROLL,true);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_LEFT,true);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_RIGHT,true);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_UP,true);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_DOWN,true);
|
|
|
|
// 4J-PB - Must be after the CanBeMade list has been set up with CheckRecipesAvailable
|
|
UpdateTooltips();
|
|
|
|
#ifdef __PSVITA__
|
|
// initialise vita touch controls with ids
|
|
for(unsigned int i = 0; i < ETouchInput_Count; ++i)
|
|
{
|
|
m_TouchInput[i].init(i);
|
|
}
|
|
ui.TouchBoxRebuild(this);
|
|
#endif
|
|
}
|
|
|
|
void UIScene_CraftingMenu::handleDestroy()
|
|
{
|
|
Minecraft *pMinecraft = Minecraft::GetInstance();
|
|
|
|
if( pMinecraft->localgameModes[m_iPad] != NULL )
|
|
{
|
|
TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad];
|
|
if(gameMode != NULL) gameMode->getTutorial()->changeTutorialState(m_previousTutorialState);
|
|
}
|
|
|
|
// 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();
|
|
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_A,false);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_OK,false);
|
|
#ifdef __ORBIS__
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_TOUCHPAD_PRESS,false);
|
|
#endif
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_LEFT_SCROLL,false);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_RIGHT_SCROLL,false);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_LEFT,false);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_RIGHT,false);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_UP,false);
|
|
ui.OverrideSFX(m_iPad,ACTION_MENU_DOWN,false);
|
|
}
|
|
|
|
EUIScene UIScene_CraftingMenu::getSceneType()
|
|
{
|
|
if(m_iContainerType==RECIPE_TYPE_3x3)
|
|
{
|
|
return eUIScene_Crafting3x3Menu;
|
|
}
|
|
else
|
|
{
|
|
return eUIScene_Crafting2x2Menu;
|
|
}
|
|
}
|
|
|
|
wstring UIScene_CraftingMenu::getMoviePath()
|
|
{
|
|
if(app.GetLocalPlayerCount() > 1)
|
|
{
|
|
m_bSplitscreen = true;
|
|
if(m_iContainerType==RECIPE_TYPE_3x3)
|
|
{
|
|
return L"Crafting3x3MenuSplit";
|
|
}
|
|
else
|
|
{
|
|
return L"Crafting2x2MenuSplit";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(m_iContainerType==RECIPE_TYPE_3x3)
|
|
{
|
|
return L"Crafting3x3Menu";
|
|
}
|
|
else
|
|
{
|
|
return L"Crafting2x2Menu";
|
|
}
|
|
}
|
|
}
|
|
|
|
#ifdef __PSVITA__
|
|
UIControl* UIScene_CraftingMenu::GetMainPanel()
|
|
{
|
|
return &m_controlMainPanel;
|
|
}
|
|
|
|
void UIScene_CraftingMenu::handleTouchInput(unsigned int iPad, S32 x, S32 y, int iId, bool bPressed, bool bRepeat, bool bReleased)
|
|
{
|
|
// perform action on release
|
|
if(bPressed)
|
|
{
|
|
if(iId == ETouchInput_CraftingHSlots)
|
|
{
|
|
m_iCraftingSlotTouchStartY = y;
|
|
}
|
|
}
|
|
else if(bRepeat)
|
|
{
|
|
if(iId == ETouchInput_CraftingHSlots)
|
|
{
|
|
if(y >= m_iCraftingSlotTouchStartY + m_TouchInput[ETouchInput_CraftingHSlots].getHeight()) // scroll list down
|
|
{
|
|
if(iVSlotIndexA[1]==(CanBeMadeA[m_iCurrentSlotHIndex].iCount-1))
|
|
{
|
|
iVSlotIndexA[1]=0;
|
|
}
|
|
else
|
|
{
|
|
iVSlotIndexA[1]++;
|
|
}
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
|
|
UpdateVerticalSlots();
|
|
UpdateHighlight();
|
|
|
|
m_iCraftingSlotTouchStartY = y;
|
|
}
|
|
else if(y <= m_iCraftingSlotTouchStartY - m_TouchInput[ETouchInput_CraftingHSlots].getHeight()) // scroll list up
|
|
{
|
|
if(iVSlotIndexA[1]==0)
|
|
{
|
|
iVSlotIndexA[1]=CanBeMadeA[m_iCurrentSlotHIndex].iCount-1;
|
|
}
|
|
else
|
|
{
|
|
iVSlotIndexA[1]--;
|
|
}
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
|
|
UpdateVerticalSlots();
|
|
UpdateHighlight();
|
|
|
|
m_iCraftingSlotTouchStartY = y;
|
|
}
|
|
}
|
|
}
|
|
else if(bReleased)
|
|
{
|
|
if(iId >= ETouchInput_TouchPanel_0 && iId <= ETouchInput_TouchPanel_6) // Touch Change Group
|
|
{
|
|
m_iGroupIndex = iId;
|
|
// turn on the new group
|
|
showTabHighlight(m_iGroupIndex,true);
|
|
|
|
m_iCurrentSlotHIndex=0;
|
|
m_iCurrentSlotVIndex=1;
|
|
CheckRecipesAvailable();
|
|
// reset the vertical slots
|
|
iVSlotIndexA[0]=CanBeMadeA[m_iCurrentSlotHIndex].iCount-1;
|
|
iVSlotIndexA[1]=0;
|
|
iVSlotIndexA[2]=1;
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
UpdateVerticalSlots();
|
|
UpdateHighlight();
|
|
setGroupText(GetGroupNameText(m_pGroupA[m_iGroupIndex]));
|
|
}
|
|
else if(iId == ETouchInput_CraftingHSlots) // Touch Change Slot
|
|
{
|
|
int iMaxHSlots = 0;
|
|
if(m_iContainerType==RECIPE_TYPE_3x3)
|
|
{
|
|
iMaxHSlots = m_iMaxHSlot3x3C;
|
|
}
|
|
else
|
|
{
|
|
iMaxHSlots = m_iMaxHSlot2x2C;
|
|
}
|
|
|
|
int iNewSlot = (x - m_TouchInput[ETouchInput_CraftingHSlots].getXPos() - m_controlMainPanel.getXPos()) / m_TouchInput[ETouchInput_CraftingHSlots].getHeight();
|
|
|
|
int iOldHSlot=m_iCurrentSlotHIndex;
|
|
|
|
m_iCurrentSlotHIndex = iNewSlot;
|
|
if(m_iCurrentSlotHIndex>=m_iCraftablesMaxHSlotC) m_iCurrentSlotHIndex=0;
|
|
m_iCurrentSlotVIndex=1;
|
|
// clear the indices
|
|
iVSlotIndexA[0]=CanBeMadeA[m_iCurrentSlotHIndex].iCount-1;
|
|
iVSlotIndexA[1]=0;
|
|
iVSlotIndexA[2]=1;
|
|
|
|
UpdateVerticalSlots();
|
|
UpdateHighlight();
|
|
// re-enable the old hslot
|
|
if(CanBeMadeA[iOldHSlot].iCount>0)
|
|
{
|
|
setShowCraftHSlot(iOldHSlot,true);
|
|
}
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
}
|
|
}
|
|
}
|
|
|
|
void UIScene_CraftingMenu::handleTouchBoxRebuild()
|
|
{
|
|
addTimer(GAME_CRAFTING_TOUCHUPDATE_TIMER_ID,GAME_CRAFTING_TOUCHUPDATE_TIMER_TIME);
|
|
}
|
|
|
|
void UIScene_CraftingMenu::handleTimerComplete(int id)
|
|
{
|
|
if(id == GAME_CRAFTING_TOUCHUPDATE_TIMER_ID)
|
|
{
|
|
// we cannot rebuild touch boxes in an iggy callback because it requires further iggy calls
|
|
GetMainPanel()->UpdateControl();
|
|
ui.TouchBoxRebuild(this);
|
|
killTimer(GAME_CRAFTING_TOUCHUPDATE_TIMER_ID);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
void UIScene_CraftingMenu::handleReload()
|
|
{
|
|
m_slotListInventory.addSlots(CRAFTING_INVENTORY_SLOT_START,CRAFTING_INVENTORY_SLOT_END - CRAFTING_INVENTORY_SLOT_START);
|
|
m_slotListHotBar.addSlots(CRAFTING_HOTBAR_SLOT_START, CRAFTING_HOTBAR_SLOT_END - CRAFTING_HOTBAR_SLOT_START);
|
|
|
|
for(unsigned int i = 0; i < 4; ++i)
|
|
{
|
|
m_slotListIngredients[i].addSlot(CRAFTING_INGREDIENTS_DESCRIPTION_START + i);
|
|
}
|
|
m_slotListCraftingOutput.addSlot(CRAFTING_OUTPUT_SLOT_START);
|
|
m_slotListIngredientsLayout.addSlots(CRAFTING_INGREDIENTS_LAYOUT_START, m_iIngredientsMaxSlotC);
|
|
|
|
// 3 Slot vertical scroll
|
|
m_slotListCrafting3VSlots[0].addSlot(CRAFTING_V_SLOT_START + 0);
|
|
m_slotListCrafting3VSlots[1].addSlot(CRAFTING_V_SLOT_START + 1);
|
|
m_slotListCrafting3VSlots[2].addSlot(CRAFTING_V_SLOT_START + 2);
|
|
|
|
// 2 Slot vertical scroll
|
|
// 2 slot scroll has swapped order
|
|
m_slotListCrafting2VSlots[0].addSlot(CRAFTING_V_SLOT_START + 1);
|
|
m_slotListCrafting2VSlots[1].addSlot(CRAFTING_V_SLOT_START + 0);
|
|
|
|
// 1 Slot scroll (for 480 mainly)
|
|
m_slotListCrafting1VSlots.addSlot(CRAFTING_V_SLOT_START);
|
|
|
|
m_slotListCraftingHSlots.addSlots(CRAFTING_H_SLOT_START,m_iCraftablesMaxHSlotC);
|
|
|
|
app.DebugPrintf(app.USER_SR,"Reloading MultiPanel\n");
|
|
int temp = m_iDisplayDescription;
|
|
m_iDisplayDescription = m_iDisplayDescription==0?1:0;
|
|
UpdateMultiPanel();
|
|
m_iDisplayDescription = temp;
|
|
UpdateMultiPanel();
|
|
|
|
app.DebugPrintf(app.USER_SR,"Reloading Highlight and scroll\n");
|
|
|
|
// reset the vertical slots
|
|
m_iCurrentSlotHIndex = 0;
|
|
m_iCurrentSlotVIndex = 1;
|
|
iVSlotIndexA[0]=CanBeMadeA[m_iCurrentSlotHIndex].iCount-1;
|
|
iVSlotIndexA[1]=0;
|
|
iVSlotIndexA[2]=1;
|
|
UpdateVerticalSlots();
|
|
UpdateHighlight();
|
|
|
|
app.DebugPrintf(app.USER_SR,"Reloading tabs\n");
|
|
showTabHighlight(0,false);
|
|
showTabHighlight(m_iGroupIndex,true);
|
|
}
|
|
|
|
void UIScene_CraftingMenu::customDraw(IggyCustomDrawCallbackRegion *region)
|
|
{
|
|
Minecraft *pMinecraft = Minecraft::GetInstance();
|
|
if(pMinecraft->localplayers[m_iPad] == NULL || pMinecraft->localgameModes[m_iPad] == NULL) return;
|
|
|
|
shared_ptr<ItemInstance> item = nullptr;
|
|
int slotId = -1;
|
|
float alpha = 1.0f;
|
|
bool decorations = true;
|
|
bool inventoryItem = false;
|
|
swscanf((wchar_t*)region->name,L"slot_%d",&slotId);
|
|
if (slotId == -1)
|
|
{
|
|
app.DebugPrintf("This is not the control we are looking for\n");
|
|
}
|
|
else if(slotId >= CRAFTING_INVENTORY_SLOT_START && slotId < CRAFTING_INVENTORY_SLOT_END)
|
|
{
|
|
int iIndex = slotId - CRAFTING_INVENTORY_SLOT_START;
|
|
iIndex += m_iMenuInventoryStart;
|
|
Slot *slot = m_menu->getSlot(iIndex);
|
|
item = slot->getItem();
|
|
inventoryItem = true;
|
|
}
|
|
else if(slotId >= CRAFTING_HOTBAR_SLOT_START && slotId < CRAFTING_HOTBAR_SLOT_END)
|
|
{
|
|
int iIndex = slotId - CRAFTING_HOTBAR_SLOT_START;
|
|
iIndex += m_iMenuHotBarStart;
|
|
Slot *slot = m_menu->getSlot(iIndex);
|
|
item = slot->getItem();
|
|
inventoryItem = true;
|
|
}
|
|
else if(slotId >= CRAFTING_V_SLOT_START && slotId < CRAFTING_V_SLOT_END )
|
|
{
|
|
decorations = false;
|
|
int iIndex = slotId - CRAFTING_V_SLOT_START;
|
|
if(m_vSlotsInfo[iIndex].show)
|
|
{
|
|
item = m_vSlotsInfo[iIndex].item;
|
|
alpha = ((float)m_vSlotsInfo[iIndex].alpha)/31.0f;
|
|
}
|
|
}
|
|
else if(slotId >= CRAFTING_H_SLOT_START && slotId < (CRAFTING_H_SLOT_START + m_iCraftablesMaxHSlotC) )
|
|
{
|
|
decorations = false;
|
|
int iIndex = slotId - CRAFTING_H_SLOT_START;
|
|
if(m_hSlotsInfo[iIndex].show)
|
|
{
|
|
item = m_hSlotsInfo[iIndex].item;
|
|
alpha = ((float)m_hSlotsInfo[iIndex].alpha)/31.0f;
|
|
}
|
|
}
|
|
else if(slotId >= CRAFTING_INGREDIENTS_LAYOUT_START && slotId < (CRAFTING_INGREDIENTS_LAYOUT_START + m_iIngredientsMaxSlotC) )
|
|
{
|
|
int iIndex = slotId - CRAFTING_INGREDIENTS_LAYOUT_START;
|
|
if(m_ingredientsSlotsInfo[iIndex].show)
|
|
{
|
|
item = m_ingredientsSlotsInfo[iIndex].item;
|
|
alpha = ((float)m_ingredientsSlotsInfo[iIndex].alpha)/31.0f;
|
|
}
|
|
}
|
|
else if(slotId >= CRAFTING_INGREDIENTS_DESCRIPTION_START && slotId < (CRAFTING_INGREDIENTS_DESCRIPTION_START + 4) )
|
|
{
|
|
int iIndex = slotId - CRAFTING_INGREDIENTS_DESCRIPTION_START;
|
|
if(m_ingredientsInfo[iIndex].show)
|
|
{
|
|
item = m_ingredientsInfo[iIndex].item;
|
|
alpha = ((float)m_ingredientsInfo[iIndex].alpha)/31.0f;
|
|
}
|
|
}
|
|
else if(slotId == CRAFTING_OUTPUT_SLOT_START )
|
|
{
|
|
if(m_craftingOutputSlotInfo.show)
|
|
{
|
|
item = m_craftingOutputSlotInfo.item;
|
|
alpha = ((float)m_craftingOutputSlotInfo.alpha)/31.0f;
|
|
}
|
|
}
|
|
|
|
if(item != NULL)
|
|
{
|
|
if(!inventoryItem)
|
|
{
|
|
if( item->id == Item::clock_Id || item->id == Item::compass_Id )
|
|
{
|
|
// 4J Stu - For clocks and compasses we set the aux value to a special one that signals we should use a default texture
|
|
// rather than the dynamic one for the player
|
|
item->setAuxValue(0xFF);
|
|
}
|
|
else if( (item->getAuxValue() & 0xFF) == 0xFF)
|
|
{
|
|
// 4J Stu - If the aux value is set to match any
|
|
item->setAuxValue(0);
|
|
}
|
|
}
|
|
customDrawSlotControl(region,m_iPad,item,alpha,item->isFoil(),decorations);
|
|
}
|
|
}
|
|
|
|
int UIScene_CraftingMenu::getPad()
|
|
{
|
|
return m_iPad;
|
|
}
|
|
|
|
bool UIScene_CraftingMenu::allowRepeat(int key)
|
|
{
|
|
switch(key)
|
|
{
|
|
// X is used to open this menu, so don't let it repeat
|
|
case ACTION_MENU_X:
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
#ifdef _WINDOWS64
|
|
bool UIScene_CraftingMenu::getWindowsMouseScenePos(S32 &x, S32 &y)
|
|
{
|
|
if(!g_hWnd)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
RECT rc;
|
|
GetClientRect(g_hWnd, &rc);
|
|
int winW = rc.right - rc.left;
|
|
int winH = rc.bottom - rc.top;
|
|
if(winW <= 0 || winH <= 0)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
x = (S32)((F32)g_KBMInput.GetMouseX() * (ui.getScreenWidth() / (F32)winW));
|
|
y = (S32)((F32)g_KBMInput.GetMouseY() * (ui.getScreenHeight() / (F32)winH));
|
|
return true;
|
|
}
|
|
|
|
bool UIScene_CraftingMenu::isPointInControl(S32 x, S32 y, UIControl &control, S32 offsetX, S32 offsetY)
|
|
{
|
|
S32 cx = offsetX + control.getXPos();
|
|
S32 cy = offsetY + control.getYPos();
|
|
return x >= cx && x <= cx + control.getWidth() && y >= cy && y <= cy + control.getHeight();
|
|
}
|
|
|
|
bool UIScene_CraftingMenu::isPointInWindowsGroupTab(S32 mouseX, S32 mouseY, int group)
|
|
{
|
|
const S32 smallTabOffsets[7] = { 0, 70, 139, 209, 279, 348, 418 };
|
|
F32 scale = 1.0f;
|
|
S32 tabX = m_controlMainPanel.getXPos();
|
|
S32 tabY = m_controlMainPanel.getYPos();
|
|
S32 tabWidth = 72;
|
|
S32 tabHeight = 56;
|
|
|
|
if(m_loadedResolution == eSceneResolution_720 || m_loadedResolution == eSceneResolution_1080)
|
|
{
|
|
scale = ui.getScreenHeight() / 720.0f;
|
|
if(scale <= 0.0f)
|
|
{
|
|
scale = 1.0f;
|
|
}
|
|
|
|
tabWidth = RoundWindowsCraftingMetric(107.0f * scale);
|
|
tabHeight = RoundWindowsCraftingMetric(85.0f * scale);
|
|
tabX = m_controlMainPanel.getXPos() - RoundWindowsCraftingMetric(3.0f * scale) + RoundWindowsCraftingMetric((98.0f * scale) * group);
|
|
tabY = m_controlMainPanel.getYPos() - RoundWindowsCraftingMetric(5.0f * scale);
|
|
}
|
|
else
|
|
{
|
|
scale = ui.getScreenHeight() == 480.0f ? 1.0f : ui.getScreenHeight() / 360.0f;
|
|
if(scale <= 0.0f)
|
|
{
|
|
scale = 1.0f;
|
|
}
|
|
|
|
tabWidth = RoundWindowsCraftingMetric(72.0f * scale);
|
|
tabHeight = RoundWindowsCraftingMetric(56.0f * scale);
|
|
tabX = m_controlMainPanel.getXPos() + RoundWindowsCraftingMetric(smallTabOffsets[group] * scale);
|
|
tabY = m_controlMainPanel.getYPos() - RoundWindowsCraftingMetric(2.0f * scale);
|
|
}
|
|
|
|
return mouseX >= tabX && mouseX <= tabX + tabWidth && mouseY >= tabY && mouseY <= tabY + tabHeight;
|
|
}
|
|
|
|
bool UIScene_CraftingMenu::setGroupFromWindowsMouse(S32 mouseX, S32 mouseY, bool &handled)
|
|
{
|
|
int maxGroup = m_iContainerType == RECIPE_TYPE_3x3 ? m_iMaxGroup3x3 : m_iMaxGroup2x2;
|
|
S32 panelX = m_controlMainPanel.getXPos();
|
|
S32 panelY = m_controlMainPanel.getYPos();
|
|
|
|
for(int group = 0; group < maxGroup; ++group)
|
|
{
|
|
if(isPointInWindowsGroupTab(mouseX, mouseY, group))
|
|
{
|
|
if(group != m_iGroupIndex)
|
|
{
|
|
showTabHighlight(m_iGroupIndex, false);
|
|
m_iGroupIndex = group;
|
|
showTabHighlight(m_iGroupIndex, true);
|
|
}
|
|
|
|
m_iCurrentSlotHIndex = 0;
|
|
m_iCurrentSlotVIndex = 1;
|
|
CheckRecipesAvailable();
|
|
iVSlotIndexA[0] = CanBeMadeA[m_iCurrentSlotHIndex].iCount - 1;
|
|
iVSlotIndexA[1] = 0;
|
|
iVSlotIndexA[2] = 1;
|
|
UpdateVerticalSlots();
|
|
UpdateHighlight();
|
|
setGroupText(GetGroupNameText(m_pGroupA[m_iGroupIndex]));
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
handled = true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool UIScene_CraftingMenu::handleWindowsMouseRecipeSelect(bool &handled)
|
|
{
|
|
if(!g_KBMInput.IsMouseButtonPressed(KeyboardMouseInput::MOUSE_LEFT))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
S32 mouseX = 0;
|
|
S32 mouseY = 0;
|
|
if(!getWindowsMouseScenePos(mouseX, mouseY))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
S32 panelX = m_controlMainPanel.getXPos();
|
|
S32 panelY = m_controlMainPanel.getYPos();
|
|
|
|
if(setGroupFromWindowsMouse(mouseX, mouseY, handled))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if(isPointInControl(mouseX, mouseY, m_slotListCraftingHSlots, panelX, panelY))
|
|
{
|
|
S32 slotSize = m_slotListCraftingHSlots.getHeight();
|
|
S32 slotX = m_slotListCraftingHSlots.getXPos();
|
|
|
|
if(slotSize <= 0)
|
|
{
|
|
slotSize = m_slotListCraftingHSlots.getWidth() / m_iCraftablesMaxHSlotC;
|
|
}
|
|
|
|
if(slotSize > 0)
|
|
{
|
|
int newSlot = (mouseX - panelX - slotX) / slotSize;
|
|
if(newSlot >= 0 && newSlot < m_iCraftablesMaxHSlotC && CanBeMadeA[newSlot].iCount > 0)
|
|
{
|
|
int oldSlot = m_iCurrentSlotHIndex;
|
|
m_iCurrentSlotHIndex = newSlot;
|
|
m_iCurrentSlotVIndex = 1;
|
|
iVSlotIndexA[0] = CanBeMadeA[m_iCurrentSlotHIndex].iCount - 1;
|
|
iVSlotIndexA[1] = 0;
|
|
iVSlotIndexA[2] = 1;
|
|
|
|
UpdateVerticalSlots();
|
|
UpdateHighlight();
|
|
if(CanBeMadeA[oldSlot].iCount > 0)
|
|
{
|
|
setShowCraftHSlot(oldSlot, true);
|
|
}
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
handled = true;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
UIControl *activeSelector = NULL;
|
|
int activeSlotCount = 0;
|
|
int activeSlotIndices[3] = { 0, 1, 2 };
|
|
|
|
if(m_bSplitscreen ||(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()))
|
|
{
|
|
activeSelector = &m_control1Selector;
|
|
activeSlotCount = 1;
|
|
activeSlotIndices[0] = 1;
|
|
}
|
|
else if(CanBeMadeA[m_iCurrentSlotHIndex].iCount <= 2)
|
|
{
|
|
activeSelector = &m_control2Selector;
|
|
activeSlotCount = 2;
|
|
activeSlotIndices[0] = 1;
|
|
activeSlotIndices[1] = 0;
|
|
}
|
|
else
|
|
{
|
|
activeSelector = &m_control3Selector;
|
|
activeSlotCount = 3;
|
|
}
|
|
|
|
if(CanBeMadeA[m_iCurrentSlotHIndex].iCount > 1)
|
|
{
|
|
S32 slotSize = m_slotListCraftingHSlots.getHeight();
|
|
if(slotSize <= 0 && m_iCraftablesMaxHSlotC > 0)
|
|
{
|
|
slotSize = m_slotListCraftingHSlots.getWidth() / m_iCraftablesMaxHSlotC;
|
|
}
|
|
|
|
if(slotSize > 0 && activeSlotCount > 0)
|
|
{
|
|
S32 hSlotX = panelX + m_slotListCraftingHSlots.getXPos() + (m_iCurrentSlotHIndex * slotSize);
|
|
S32 hSlotY = panelY + m_slotListCraftingHSlots.getYPos();
|
|
S32 hitLeft = hSlotX - (slotSize / 3);
|
|
S32 hitRight = hSlotX + slotSize + (slotSize / 3);
|
|
S32 hitTop = hSlotY;
|
|
|
|
if(activeSlotCount > 1)
|
|
{
|
|
hitTop -= slotSize;
|
|
}
|
|
|
|
if(mouseX >= hitLeft && mouseX <= hitRight && mouseY >= hitTop && mouseY <= hitTop + (slotSize * activeSlotCount))
|
|
{
|
|
int row = (mouseY - hitTop) / slotSize;
|
|
if(row < 0)
|
|
{
|
|
row = 0;
|
|
}
|
|
else if(row >= activeSlotCount)
|
|
{
|
|
row = activeSlotCount - 1;
|
|
}
|
|
|
|
m_iCurrentSlotVIndex = activeSlotIndices[row];
|
|
UpdateHighlight();
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
handled = true;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
UIControl *selectors[3] = { &m_control3Selector, &m_control2Selector, &m_control1Selector };
|
|
UIControl_SlotList *slots[3] = { &m_slotListCrafting3VSlots[0], &m_slotListCrafting3VSlots[1], &m_slotListCrafting3VSlots[2] };
|
|
int slotIndices[3] = { 0, 1, 2 };
|
|
|
|
if(m_bSplitscreen ||(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()))
|
|
{
|
|
selectors[0] = &m_control1Selector;
|
|
slots[0] = &m_slotListCrafting1VSlots;
|
|
slotIndices[0] = 1;
|
|
selectors[1] = NULL;
|
|
selectors[2] = NULL;
|
|
}
|
|
else if(CanBeMadeA[m_iCurrentSlotHIndex].iCount <= 2)
|
|
{
|
|
selectors[0] = &m_control2Selector;
|
|
slots[0] = &m_slotListCrafting2VSlots[0];
|
|
slotIndices[0] = 1;
|
|
selectors[1] = &m_control2Selector;
|
|
slots[1] = &m_slotListCrafting2VSlots[1];
|
|
slotIndices[1] = 0;
|
|
selectors[2] = NULL;
|
|
}
|
|
|
|
for(int i = 0; i < 3; ++i)
|
|
{
|
|
if(selectors[i] == NULL || slots[i] == NULL)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
S32 selectorX = panelX + selectors[i]->getXPos();
|
|
S32 selectorY = panelY + selectors[i]->getYPos();
|
|
if(isPointInControl(mouseX, mouseY, *slots[i], selectorX, selectorY))
|
|
{
|
|
m_iCurrentSlotVIndex = slotIndices[i];
|
|
UpdateHighlight();
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
handled = true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if(activeSelector != NULL && activeSlotCount > 0 && isPointInControl(mouseX, mouseY, *activeSelector, panelX, panelY))
|
|
{
|
|
S32 selectorTop = panelY + activeSelector->getYPos();
|
|
S32 selectorHeight = activeSelector->getHeight();
|
|
int row = 0;
|
|
if(selectorHeight > 0)
|
|
{
|
|
row = ((mouseY - selectorTop) * activeSlotCount) / selectorHeight;
|
|
}
|
|
if(row < 0)
|
|
{
|
|
row = 0;
|
|
}
|
|
else if(row >= activeSlotCount)
|
|
{
|
|
row = activeSlotCount - 1;
|
|
}
|
|
|
|
m_iCurrentSlotVIndex = activeSlotIndices[row];
|
|
UpdateHighlight();
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
handled = true;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
void UIScene_CraftingMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled)
|
|
{
|
|
//app.DebugPrintf("UIScene_InventoryMenu handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE");
|
|
ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
|
|
|
|
switch(key)
|
|
{
|
|
case ACTION_MENU_OTHER_STICK_UP:
|
|
case ACTION_MENU_OTHER_STICK_DOWN:
|
|
#ifdef _WINDOWS64
|
|
if(iPad == 0 && g_KBMInput.IsKBMActive() && !g_KBMInput.IsMouseGrabbed() && pressed)
|
|
{
|
|
handled = handleKeyDown(m_iPad, key == ACTION_MENU_OTHER_STICK_UP ? ACTION_MENU_UP : ACTION_MENU_DOWN, repeat);
|
|
break;
|
|
}
|
|
#endif
|
|
sendInputToMovie(key,repeat,pressed,released);
|
|
break;
|
|
default:
|
|
if(pressed)
|
|
{
|
|
#ifdef _WINDOWS64
|
|
if(iPad == 0 && key == ACTION_MENU_RIGHT_SCROLL && !repeat && g_KBMInput.IsKeyPressed(KeyboardMouseInput::KEY_CRAFTING_ALT))
|
|
{
|
|
handled = handleKeyDown(m_iPad, ACTION_MENU_B, false);
|
|
break;
|
|
}
|
|
|
|
if(iPad == 0 && key == ACTION_MENU_A && handleWindowsMouseRecipeSelect(handled))
|
|
{
|
|
break;
|
|
}
|
|
#endif
|
|
handled = handleKeyDown(m_iPad, key, repeat);
|
|
}
|
|
break;
|
|
};
|
|
}
|
|
|
|
void UIScene_CraftingMenu::hideAllHSlots()
|
|
{
|
|
for(unsigned int iIndex = 0; iIndex < m_iMaxHSlotC; ++iIndex)
|
|
{
|
|
m_hSlotsInfo[iIndex].item = nullptr;
|
|
m_hSlotsInfo[iIndex].alpha = 31;
|
|
m_hSlotsInfo[iIndex].show = false;
|
|
}
|
|
}
|
|
|
|
void UIScene_CraftingMenu::hideAllVSlots()
|
|
{
|
|
for(unsigned int iIndex = 0; iIndex < m_iMaxDisplayedVSlotC; ++iIndex)
|
|
{
|
|
m_vSlotsInfo[iIndex].item = nullptr;
|
|
m_vSlotsInfo[iIndex].alpha = 31;
|
|
m_vSlotsInfo[iIndex].show = false;
|
|
}
|
|
}
|
|
|
|
void UIScene_CraftingMenu::hideAllIngredientsSlots()
|
|
{
|
|
for(int i=0;i<m_iIngredientsC;i++)
|
|
{
|
|
m_ingredientsInfo[i].item = nullptr;
|
|
m_ingredientsInfo[i].alpha = 31;
|
|
m_ingredientsInfo[i].show = false;
|
|
|
|
m_labelIngredientsDesc[i].setLabel(L"");
|
|
|
|
IggyDataValue result;
|
|
IggyDataValue value[2];
|
|
|
|
value[0].type = IGGY_DATATYPE_number;
|
|
value[0].number = i;
|
|
|
|
value[1].type = IGGY_DATATYPE_boolean;
|
|
value[1].boolval = false;
|
|
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ) , m_funcShowIngredientSlot , 2 , value );
|
|
}
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setCraftHSlotItem(int iPad, int iIndex, shared_ptr<ItemInstance> item, unsigned int uiAlpha)
|
|
{
|
|
m_hSlotsInfo[iIndex].item = item;
|
|
m_hSlotsInfo[iIndex].alpha = uiAlpha;
|
|
m_hSlotsInfo[iIndex].show = true;
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setCraftVSlotItem(int iPad, int iIndex, shared_ptr<ItemInstance> item, unsigned int uiAlpha)
|
|
{
|
|
m_vSlotsInfo[iIndex].item = item;
|
|
m_vSlotsInfo[iIndex].alpha = uiAlpha;
|
|
m_vSlotsInfo[iIndex].show = true;
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setCraftingOutputSlotItem(int iPad, shared_ptr<ItemInstance> item)
|
|
{
|
|
m_craftingOutputSlotInfo.item = item;
|
|
m_craftingOutputSlotInfo.alpha = 31;
|
|
m_craftingOutputSlotInfo.show = item != NULL;
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setCraftingOutputSlotRedBox(bool show)
|
|
{
|
|
m_slotListCraftingOutput.showSlotRedBox(0,show);
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setIngredientSlotItem(int iPad, int index, shared_ptr<ItemInstance> item)
|
|
{
|
|
m_ingredientsSlotsInfo[index].item = item;
|
|
m_ingredientsSlotsInfo[index].alpha = 31;
|
|
m_ingredientsSlotsInfo[index].show = item != NULL;
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setIngredientSlotRedBox(int index, bool show)
|
|
{
|
|
m_slotListIngredientsLayout.showSlotRedBox(index,show);
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setIngredientDescriptionItem(int iPad, int index, shared_ptr<ItemInstance> item)
|
|
{
|
|
m_ingredientsInfo[index].item = item;
|
|
m_ingredientsInfo[index].alpha = 31;
|
|
m_ingredientsInfo[index].show = item != NULL;
|
|
|
|
IggyDataValue result;
|
|
IggyDataValue value[2];
|
|
|
|
value[0].type = IGGY_DATATYPE_number;
|
|
value[0].number = index;
|
|
|
|
value[1].type = IGGY_DATATYPE_boolean;
|
|
value[1].boolval = m_ingredientsInfo[index].show;
|
|
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ) , m_funcShowIngredientSlot , 2 , value );
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setIngredientDescriptionRedBox(int index, bool show)
|
|
{
|
|
m_slotListIngredients[index].showSlotRedBox(0,show);
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setIngredientDescriptionText(int index, LPCWSTR text)
|
|
{
|
|
m_labelIngredientsDesc[index].setLabel(text);
|
|
}
|
|
|
|
|
|
void UIScene_CraftingMenu::setShowCraftHSlot(int iIndex, bool show)
|
|
{
|
|
m_hSlotsInfo[iIndex].show = show;
|
|
}
|
|
|
|
void UIScene_CraftingMenu::showTabHighlight(int iIndex, bool show)
|
|
{
|
|
if(show)
|
|
{
|
|
IggyDataValue result;
|
|
IggyDataValue value[1];
|
|
|
|
value[0].type = IGGY_DATATYPE_number;
|
|
value[0].number = iIndex;
|
|
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ) , m_funcSetActiveTab , 1 , value );
|
|
}
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setGroupText(LPCWSTR text)
|
|
{
|
|
m_labelGroupName.setLabel(text);
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setDescriptionText(LPCWSTR text)
|
|
{
|
|
m_labelDescription.setLabel(text);
|
|
}
|
|
|
|
void UIScene_CraftingMenu::setItemText(LPCWSTR text)
|
|
{
|
|
m_labelItemName.setLabel(text);
|
|
}
|
|
|
|
void UIScene_CraftingMenu::UpdateMultiPanel()
|
|
{
|
|
// Call Iggy function to show the current panel
|
|
IggyDataValue result;
|
|
IggyDataValue value[1];
|
|
|
|
value[0].type = IGGY_DATATYPE_number;
|
|
value[0].number = m_iDisplayDescription;
|
|
|
|
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ) , m_funcShowPanelDisplay , 1 , value );
|
|
}
|
|
|
|
void UIScene_CraftingMenu::scrollDescriptionUp()
|
|
{
|
|
// handled differently
|
|
}
|
|
|
|
void UIScene_CraftingMenu::scrollDescriptionDown()
|
|
{
|
|
// handled differently
|
|
}
|
|
|
|
void UIScene_CraftingMenu::updateHighlightAndScrollPositions()
|
|
{
|
|
{
|
|
IggyDataValue result;
|
|
IggyDataValue value[2];
|
|
|
|
value[0].type = IGGY_DATATYPE_number;
|
|
value[0].number = m_iCurrentSlotHIndex;
|
|
|
|
int selectorType = 0;
|
|
if(CanBeMadeA[m_iCurrentSlotHIndex].iCount == 2)
|
|
{
|
|
selectorType = 1;
|
|
}
|
|
else if( CanBeMadeA[m_iCurrentSlotHIndex].iCount > 2)
|
|
{
|
|
selectorType = 2;
|
|
}
|
|
|
|
value[1].type = IGGY_DATATYPE_number;
|
|
value[1].number = selectorType;
|
|
|
|
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ) , m_funcMoveSelector , 2 , value );
|
|
}
|
|
|
|
{
|
|
IggyDataValue result;
|
|
IggyDataValue value[1];
|
|
|
|
value[0].type = IGGY_DATATYPE_number;
|
|
value[0].number = m_iCurrentSlotVIndex;
|
|
|
|
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ) , m_funcSelectVerticalItem , 1 , value );
|
|
}
|
|
}
|
|
|
|
void UIScene_CraftingMenu::updateVSlotPositions(int iSlots, int i)
|
|
{
|
|
// Not needed
|
|
}
|