Fixed issues with one input bleeding into multiple inputs. Removed old redundant system where we can specify a menu to navigate to. Implemented controller compatibility for UserID menu. Release Build 7326.

This commit is contained in:
sigonasr2 2024-02-18 18:46:45 -06:00
parent 7434079e0d
commit a39a841166
25 changed files with 91 additions and 77 deletions

View File

@ -110,6 +110,7 @@ InputGroup AiL::KEY_CONFIRM;
InputGroup AiL::KEY_MENU; InputGroup AiL::KEY_MENU;
InputGroup AiL::KEY_BACK; InputGroup AiL::KEY_BACK;
InputGroup AiL::KEY_START; InputGroup AiL::KEY_START;
InputGroup AiL::KEY_CONTROLLER_START;
InputGroup AiL::KEY_SELECT; InputGroup AiL::KEY_SELECT;
InputGroup AiL::KEY_UNEQUIP; InputGroup AiL::KEY_UNEQUIP;
@ -2522,6 +2523,7 @@ void AiL::InitializeDefaultKeybinds(){
KEY_START.AddKeybind({KEY,SPACE}); KEY_START.AddKeybind({KEY,SPACE});
KEY_START.AddKeybind({CONTROLLER,static_cast<int>(GPButtons::START)}); KEY_START.AddKeybind({CONTROLLER,static_cast<int>(GPButtons::START)});
KEY_CONTROLLER_START.AddKeybind({CONTROLLER,static_cast<int>(GPButtons::START)});
KEY_SELECT.AddKeybind({KEY,ESCAPE}); KEY_SELECT.AddKeybind({KEY,ESCAPE});
KEY_SELECT.AddKeybind({CONTROLLER,static_cast<int>(GPButtons::SELECT)}); KEY_SELECT.AddKeybind({CONTROLLER,static_cast<int>(GPButtons::SELECT)});

View File

@ -84,6 +84,7 @@ public:
static InputGroup KEY_UNEQUIP; static InputGroup KEY_UNEQUIP;
static InputGroup KEY_START; static InputGroup KEY_START;
static InputGroup KEY_CONTROLLER_START;
static InputGroup KEY_SELECT; static InputGroup KEY_SELECT;
static InputGroup KEY_FACEUP; static InputGroup KEY_FACEUP;

View File

@ -197,7 +197,7 @@ void Menu::InitializeBlacksmithCraftingWindow(){
#pragma region Inventory Description #pragma region Inventory Description
float inventoryDescriptionWidth=blacksmithWindow->pos.x+blacksmithWindow->size.x-26-224; float inventoryDescriptionWidth=blacksmithWindow->pos.x+blacksmithWindow->size.x-26-224;
blacksmithWindow->ADD("Item Description Outline",MenuLabel)(geom2d::rect<float>{{224,28},{inventoryDescriptionWidth,blacksmithWindow->size.y-44}},"",1,ComponentAttr::LEFT_ALIGN|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END; blacksmithWindow->ADD("Item Description Outline",MenuLabel)(geom2d::rect<float>{{224,28},{inventoryDescriptionWidth,blacksmithWindow->size.y-44}},"",1,ComponentAttr::LEFT_ALIGN|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END;
blacksmithWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect<float>{{226+inventoryDescriptionWidth/2-24,30},{48,48}},Item::BLANK,MenuType::ENUM_END,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END; blacksmithWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect<float>{{226+inventoryDescriptionWidth/2-24,30},{48,48}},Item::BLANK,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END;
blacksmithWindow->ADD("Item Name Label",MenuLabel)(geom2d::rect<float>{{226,84},{inventoryDescriptionWidth-6,12}},"",0.75f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END; blacksmithWindow->ADD("Item Name Label",MenuLabel)(geom2d::rect<float>{{226,84},{inventoryDescriptionWidth-6,12}},"",0.75f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END;
blacksmithWindow->ADD("Item Description Label",MenuLabel)(geom2d::rect<float>{{226,94},{inventoryDescriptionWidth-6,blacksmithWindow->size.y-44-66}},"",0.5f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END; blacksmithWindow->ADD("Item Description Label",MenuLabel)(geom2d::rect<float>{{226,94},{inventoryDescriptionWidth-6,blacksmithWindow->size.y-44-66}},"",0.5f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END;
#pragma endregion #pragma endregion
@ -212,7 +212,7 @@ void Menu::InitializeBlacksmithCraftingWindow(){
Player::AddMoneyListener(moneyDisplay); Player::AddMoneyListener(moneyDisplay);
#pragma endregion #pragma endregion
blacksmithWindow->ADD("Leave Button",MenuComponent)(geom2d::rect<float>{{blacksmithWindow->size.x/2-48,28+blacksmithWindow->size.y-44+6},{96,24}},"Leave",MenuType::ENUM_END, blacksmithWindow->ADD("Leave Button",MenuComponent)(geom2d::rect<float>{{blacksmithWindow->size.x/2-48,28+blacksmithWindow->size.y-44+6},{96,24}},"Leave",
[](MenuFuncData data){ [](MenuFuncData data){
Menu::CloseMenu(); Menu::CloseMenu();
return true; return true;

View File

@ -124,7 +124,7 @@ void Menu::InitializeCharacterMenuWindow(){
labelY-=8; labelY-=8;
} }
EquipSlot slot=EquipSlot(equipSlot); EquipSlot slot=EquipSlot(equipSlot);
auto equipmentSlot=characterMenuWindow->ADD("Equip Slot "+slotNames[i],EquipSlotButton)(geom2d::rect<float>{{x,y+28},{24,24}},slot,MenuType::ENUM_END, auto equipmentSlot=characterMenuWindow->ADD("Equip Slot "+slotNames[i],EquipSlotButton)(geom2d::rect<float>{{x,y+28},{24,24}},slot,
[&](MenuFuncData data){ [&](MenuFuncData data){
EquipSlot slot=EquipSlot(data.component.lock()->I(Attribute::EQUIP_TYPE)); EquipSlot slot=EquipSlot(data.component.lock()->I(Attribute::EQUIP_TYPE));
data.menu.I(A::EQUIP_TYPE)=int(slot); data.menu.I(A::EQUIP_TYPE)=int(slot);

View File

@ -135,11 +135,12 @@ void Menu::InitializeClassSelectionWindow(){
auto classLabel=classSelectionWindow->ADD(className+" Background",MenuLabel)(geom2d::rect<float>{backgroundOffsetPos,backgroundSize},"",1,ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END; auto classLabel=classSelectionWindow->ADD(className+" Background",MenuLabel)(geom2d::rect<float>{backgroundOffsetPos,backgroundSize},"",1,ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END;
auto classButton=classSelectionWindow->ADD(className+" Button",MenuComponent)(geom2d::rect<float>{offsetPos,buttonSize},"Info",CLASS_INFO, auto classButton=classSelectionWindow->ADD(className+" Button",MenuComponent)(geom2d::rect<float>{offsetPos,buttonSize},"Info",
[](MenuFuncData data){ [](MenuFuncData data){
data.menu.S(A::CLASS_SELECTION)=data.component.lock()->S(A::CLASS_SELECTION); data.menu.S(A::CLASS_SELECTION)=data.component.lock()->S(A::CLASS_SELECTION);
delete Menu::menus[CLASS_INFO]; delete Menu::menus[CLASS_INFO];
Menu::InitializeClassInfoWindow(); Menu::InitializeClassInfoWindow();
Menu::OpenMenu(CLASS_INFO);
return true; return true;
})END; })END;
classButton->S(A::CLASS_SELECTION)=className; classButton->S(A::CLASS_SELECTION)=className;
@ -189,7 +190,13 @@ void Menu::InitializeClassSelectionWindow(){
{game->KEY_BACK,{"Back",[](MenuType type){ {game->KEY_BACK,{"Back",[](MenuType type){
Component<MenuComponent>(type,"Back")->Click(); Component<MenuComponent>(type,"Back")->Click();
}}}, }}},
{game->KEY_START,{"Confirm",[](MenuType type){ {game->KEY_START,{[](MenuFuncData data){
if(Component<MenuComponent>(data.menu.GetType(),"Confirm")->IsEnabled()){
return "Confirm";
}else{
return "";
}
},[](MenuType type){
Component<MenuComponent>(type,"Confirm")->Click(); Component<MenuComponent>(type,"Confirm")->Click();
}}}, }}},
{game->KEY_FACEUP,{"Change Player Name",[](MenuType type){ {game->KEY_FACEUP,{"Change Player Name",[](MenuType type){

View File

@ -120,7 +120,7 @@ void Menu::InitializeConsumableCraftingWindow(){
#pragma region Inventory Description #pragma region Inventory Description
float inventoryDescriptionWidth=consumableCraftingWindow->pos.x+consumableCraftingWindow->size.x-26-224; float inventoryDescriptionWidth=consumableCraftingWindow->pos.x+consumableCraftingWindow->size.x-26-224;
consumableCraftingWindow->ADD("Item Description Outline",MenuLabel)(geom2d::rect<float>{{224,28},{inventoryDescriptionWidth,consumableCraftingWindow->size.y-44}},"",1,ComponentAttr::LEFT_ALIGN|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END; consumableCraftingWindow->ADD("Item Description Outline",MenuLabel)(geom2d::rect<float>{{224,28},{inventoryDescriptionWidth,consumableCraftingWindow->size.y-44}},"",1,ComponentAttr::LEFT_ALIGN|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END;
consumableCraftingWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect<float>{{226+inventoryDescriptionWidth/2-24,30},{48,48}},Item::BLANK,MenuType::ENUM_END,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END consumableCraftingWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect<float>{{226+inventoryDescriptionWidth/2-24,30},{48,48}},Item::BLANK,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END
->SetShowQuantity(false); ->SetShowQuantity(false);
consumableCraftingWindow->ADD("Item Name Label",MenuLabel)(geom2d::rect<float>{{226,84},{inventoryDescriptionWidth-6,12}},"",0.75f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END; consumableCraftingWindow->ADD("Item Name Label",MenuLabel)(geom2d::rect<float>{{226,84},{inventoryDescriptionWidth-6,12}},"",0.75f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END;
consumableCraftingWindow->ADD("Item Description Label",MenuLabel)(geom2d::rect<float>{{226,94},{inventoryDescriptionWidth-6,consumableCraftingWindow->size.y-44-66}},"",0.5f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END; consumableCraftingWindow->ADD("Item Description Label",MenuLabel)(geom2d::rect<float>{{226,94},{inventoryDescriptionWidth-6,consumableCraftingWindow->size.y-44-66}},"",0.5f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END;
@ -136,7 +136,7 @@ void Menu::InitializeConsumableCraftingWindow(){
Player::AddMoneyListener(moneyDisplay); Player::AddMoneyListener(moneyDisplay);
#pragma endregion #pragma endregion
consumableCraftingWindow->ADD("Back Button",MenuComponent)(geom2d::rect<float>{{consumableCraftingWindow->size.x/2-48,28+consumableCraftingWindow->size.y-44+6},{96,24}},"Back",MenuType::ENUM_END, consumableCraftingWindow->ADD("Back Button",MenuComponent)(geom2d::rect<float>{{consumableCraftingWindow->size.x/2-48,28+consumableCraftingWindow->size.y-44+6},{96,24}},"Back",
[](MenuFuncData data){ [](MenuFuncData data){
Menu::CloseMenu(); Menu::CloseMenu();
return true; return true;

View File

@ -47,8 +47,8 @@ class EquipSlotButton:public MenuItemItemButton{
private: private:
EquipSlot slot; EquipSlot slot;
public: public:
inline EquipSlotButton(geom2d::rect<float>rect,EquipSlot slot,MenuType menuDest,MenuFunc onClick,MenuFunc onHover,MenuFunc onMouseOut,std::string itemNameLabelName="",std::string itemDescriptionLabelName="") inline EquipSlotButton(geom2d::rect<float>rect,EquipSlot slot,MenuFunc onClick,MenuFunc onHover,MenuFunc onMouseOut,std::string itemNameLabelName="",std::string itemDescriptionLabelName="")
:MenuItemItemButton(rect,Item::BLANK,menuDest,onClick,onHover,onMouseOut,itemNameLabelName,itemDescriptionLabelName),slot(slot){} :MenuItemItemButton(rect,Item::BLANK,onClick,onHover,onMouseOut,itemNameLabelName,itemDescriptionLabelName),slot(slot){}
inline void OnEquipStatsUpdate()override{ inline void OnEquipStatsUpdate()override{
const std::weak_ptr<Item>equip=Inventory::GetEquip(slot); const std::weak_ptr<Item>equip=Inventory::GetEquip(slot);
if(!ISBLANK(equip)){ if(!ISBLANK(equip)){

View File

@ -81,7 +81,7 @@ void Menu::InitializeInventoryWindow(){
float buttonWidth=64; float buttonWidth=64;
float textScaling=std::min(1.f,buttonWidth/textWidth); float textScaling=std::min(1.f,buttonWidth/textWidth);
auto button=inventoryWindow->ADD(category+" Inventory Tab",MenuComponent)(geom2d::rect<float>{{2,30+yOffset},{68,16}},category,MenuType::ENUM_END, auto button=inventoryWindow->ADD(category+" Inventory Tab",MenuComponent)(geom2d::rect<float>{{2,30+yOffset},{68,16}},category,
[&](MenuFuncData data){ [&](MenuFuncData data){
//Close the old inventory window and show the proper one. //Close the old inventory window and show the proper one.
Component<RowInventoryScrollableWindowComponent>(data.menu.GetType(),"Inventory Display - "+data.menu.S(A::LAST_INVENTORY_TYPE_OPENED))->Disable(); Component<RowInventoryScrollableWindowComponent>(data.menu.GetType(),"Inventory Display - "+data.menu.S(A::LAST_INVENTORY_TYPE_OPENED))->Disable();
@ -135,7 +135,7 @@ void Menu::InitializeInventoryWindow(){
#pragma region Inventory Description #pragma region Inventory Description
float inventoryDescriptionWidth=inventoryWindow->pos.x+inventoryWindow->size.x-26-224; float inventoryDescriptionWidth=inventoryWindow->pos.x+inventoryWindow->size.x-26-224;
inventoryWindow->ADD("Item Description Outline",MenuLabel)(geom2d::rect<float>{{224,28},{inventoryDescriptionWidth,inventoryWindow->size.y-44}},"",1,LEFT_ALIGN|OUTLINE|BACKGROUND)END; inventoryWindow->ADD("Item Description Outline",MenuLabel)(geom2d::rect<float>{{224,28},{inventoryDescriptionWidth,inventoryWindow->size.y-44}},"",1,LEFT_ALIGN|OUTLINE|BACKGROUND)END;
inventoryWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect<float>{{226+inventoryDescriptionWidth/2-24,30},{48,48}},Item::BLANK,MenuType::ENUM_END,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END; inventoryWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect<float>{{226+inventoryDescriptionWidth/2-24,30},{48,48}},Item::BLANK,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END;
inventoryWindow->ADD("Item Name Label",MenuLabel)(geom2d::rect<float>{{226,84},{inventoryDescriptionWidth-6,12}},"",0.75f,LEFT_ALIGN|SHADOW)END; inventoryWindow->ADD("Item Name Label",MenuLabel)(geom2d::rect<float>{{226,84},{inventoryDescriptionWidth-6,12}},"",0.75f,LEFT_ALIGN|SHADOW)END;
inventoryWindow->ADD("Item Description Label",MenuLabel)(geom2d::rect<float>{{226,94},{inventoryDescriptionWidth-6,inventoryWindow->size.y-44-66}},"",0.5f,LEFT_ALIGN|SHADOW)END; inventoryWindow->ADD("Item Description Label",MenuLabel)(geom2d::rect<float>{{226,94},{inventoryDescriptionWidth-6,inventoryWindow->size.y-44-66}},"",0.5f,LEFT_ALIGN|SHADOW)END;
#pragma endregion #pragma endregion
@ -150,7 +150,7 @@ void Menu::InitializeInventoryWindow(){
Player::AddMoneyListener(moneyDisplay); Player::AddMoneyListener(moneyDisplay);
#pragma endregion #pragma endregion
inventoryWindow->ADD("Back Button",MenuComponent)(geom2d::rect<float>{{inventoryWindow->size.x/2-48,28+inventoryWindow->size.y-44+6},{96,24}},"Back",MenuType::ENUM_END, inventoryWindow->ADD("Back Button",MenuComponent)(geom2d::rect<float>{{inventoryWindow->size.x/2-48,28+inventoryWindow->size.y-44+6},{96,24}},"Back",
[](MenuFuncData data){ [](MenuFuncData data){
Menu::CloseMenu(); Menu::CloseMenu();
return true; return true;

View File

@ -54,17 +54,35 @@ void Menu::InitializeItemLoadoutWindow(){
float buttonBorderPadding=64; float buttonBorderPadding=64;
itemLoadoutWindow->ADD("Loadout Item 1",MenuItemItemButton)(geom2d::rect<float>{{64,84},{48,48}},game->GetLoadoutItem(0),INVENTORY_CONSUMABLES,[](MenuFuncData data){Menu::menus.at(INVENTORY_CONSUMABLES)->I(A::LOADOUT_SLOT)=0; return true;},[](MenuFuncData data){return true;},[](MenuFuncData data){ itemLoadoutWindow->ADD("Loadout Item 1",MenuItemItemButton)(geom2d::rect<float>{{64,84},{48,48}},game->GetLoadoutItem(0),[](MenuFuncData data){
Menu::menus.at(INVENTORY_CONSUMABLES)->I(A::LOADOUT_SLOT)=0;
Menu::OpenMenu(INVENTORY_CONSUMABLES);
return true;
},[](MenuFuncData data){
return true;
},[](MenuFuncData data){
Component<MenuLabel>(ITEM_LOADOUT,"Item Name Label")->SetLabel(""); Component<MenuLabel>(ITEM_LOADOUT,"Item Name Label")->SetLabel("");
Component<MenuLabel>(ITEM_LOADOUT,"Item Description")->SetLabel(""); Component<MenuLabel>(ITEM_LOADOUT,"Item Description")->SetLabel("");
return true; return true;
},"Item Name Label","Item Description")END; },"Item Name Label","Item Description")END;
itemLoadoutWindow->ADD("Loadout Item 2",MenuItemItemButton)(geom2d::rect<float>{{itemLoadoutWindowWidth/2-24,84},{48,48}},game->GetLoadoutItem(1),INVENTORY_CONSUMABLES,[](MenuFuncData data){Menu::menus.at(INVENTORY_CONSUMABLES)->I(A::LOADOUT_SLOT)=1;return true;},[](MenuFuncData data){return true;},[](MenuFuncData data){ itemLoadoutWindow->ADD("Loadout Item 2",MenuItemItemButton)(geom2d::rect<float>{{itemLoadoutWindowWidth/2-24,84},{48,48}},game->GetLoadoutItem(1),[](MenuFuncData data){
Menu::menus.at(INVENTORY_CONSUMABLES)->I(A::LOADOUT_SLOT)=1;
Menu::OpenMenu(INVENTORY_CONSUMABLES);
return true;
},[](MenuFuncData data){
return true;
},[](MenuFuncData data){
Component<MenuLabel>(ITEM_LOADOUT,"Item Name Label")->SetLabel(""); Component<MenuLabel>(ITEM_LOADOUT,"Item Name Label")->SetLabel("");
Component<MenuLabel>(ITEM_LOADOUT,"Item Description")->SetLabel(""); Component<MenuLabel>(ITEM_LOADOUT,"Item Description")->SetLabel("");
return true; return true;
},"Item Name Label","Item Description")END; },"Item Name Label","Item Description")END;
itemLoadoutWindow->ADD("Loadout Item 3",MenuItemItemButton)(geom2d::rect<float>{{itemLoadoutWindowWidth-48-64,84},{48,48}},game->GetLoadoutItem(2),INVENTORY_CONSUMABLES,[](MenuFuncData data){Menu::menus.at(INVENTORY_CONSUMABLES)->I(A::LOADOUT_SLOT)=2;return true;},[](MenuFuncData data){return true;},[](MenuFuncData data){ itemLoadoutWindow->ADD("Loadout Item 3",MenuItemItemButton)(geom2d::rect<float>{{itemLoadoutWindowWidth-48-64,84},{48,48}},game->GetLoadoutItem(2),[](MenuFuncData data){
Menu::menus.at(INVENTORY_CONSUMABLES)->I(A::LOADOUT_SLOT)=2;
Menu::OpenMenu(INVENTORY_CONSUMABLES);
return true;
},[](MenuFuncData data){
return true;
},[](MenuFuncData data){
Component<MenuLabel>(ITEM_LOADOUT,"Item Name Label")->SetLabel(""); Component<MenuLabel>(ITEM_LOADOUT,"Item Name Label")->SetLabel("");
Component<MenuLabel>(ITEM_LOADOUT,"Item Description")->SetLabel(""); Component<MenuLabel>(ITEM_LOADOUT,"Item Description")->SetLabel("");
return true; return true;

View File

@ -125,7 +125,7 @@ Menu*Menu::CreateMenu(MenuType type,vf2d pos,vf2d size){
} }
void Menu::CheckClickAndPerformMenuSelect(AiL*game){ void Menu::CheckClickAndPerformMenuSelect(AiL*game){
if(game->KEY_CONFIRM.Released()&&(MOUSE_NAVIGATION||(!MOUSE_NAVIGATION&&!game->GetMouse(Mouse::LEFT).bReleased&&!game->GetMouse(Mouse::RIGHT).bReleased&&!game->GetMouse(Mouse::MIDDLE).bReleased))){ if(game->KEY_CONFIRM.Released()&&!Menu::alreadyClicked&&(MOUSE_NAVIGATION||(!MOUSE_NAVIGATION&&!game->GetMouse(Mouse::LEFT).bReleased&&!game->GetMouse(Mouse::RIGHT).bReleased&&!game->GetMouse(Mouse::MIDDLE).bReleased))){
if(!GetSelection().expired()){ //If we are on controller/gamepad it's possible we haven't highlighted a button yet, so don't click this button right away. if(!GetSelection().expired()){ //If we are on controller/gamepad it's possible we haven't highlighted a button yet, so don't click this button right away.
MenuSelect(game); MenuSelect(game);
Menu::alreadyClicked=true; Menu::alreadyClicked=true;
@ -150,17 +150,7 @@ void Menu::HoverMenuSelect(AiL*game){
void Menu::MenuSelect(AiL*game){ void Menu::MenuSelect(AiL*game){
if(!game->IsFocused()||selection.expired()||selection.lock()->disable||selection.lock()->disableOutsideWindow||selection.lock()->grayedOut)return; if(!game->IsFocused()||selection.expired()||selection.lock()->disable||selection.lock()->disableOutsideWindow||selection.lock()->grayedOut)return;
bool buttonStillValid=selection.lock()->onClick(MenuFuncData{*this,game,selection,dynamic_pointer_cast<ScrollableWindowComponent>(selection.lock()->parentComponent.lock())}); selection.lock()->onClick(MenuFuncData{*this,game,selection,dynamic_pointer_cast<ScrollableWindowComponent>(selection.lock()->parentComponent.lock())});
if(buttonStillValid){
if(selection.lock()->menuDest!=MenuType::ENUM_END){
if(stack.size()<MAX_MENUS){
SoundEffect::PlaySFX("Menu Select",SoundEffect::CENTERED);
Menu::OpenMenu(selection.lock()->menuDest); //Navigate to the next menu.
}else{
ERR("WARNING! Exceeded menu stack size limit!")
}
}
}
} }
void Menu::Update(AiL*game){ void Menu::Update(AiL*game){
@ -327,6 +317,7 @@ void Menu::KeyboardButtonNavigation(AiL*game,vf2d menuPos){
} }
for(auto&[input,data]:inputGroups){ for(auto&[input,data]:inputGroups){
if(Menu::alreadyClicked)break;
bool activated=false; bool activated=false;
switch(input.GetEngageType()){ switch(input.GetEngageType()){
case Released:{ case Released:{
@ -621,6 +612,7 @@ vf2d Menu::center(){
} }
void Menu::CloseMenu(){ void Menu::CloseMenu(){
Menu::alreadyClicked=true;
game->TextEntryEnable(false); game->TextEntryEnable(false);
if(stack.size()>0){ if(stack.size()>0){
stack.pop_back(); stack.pop_back();

View File

@ -120,6 +120,7 @@ class Menu:public IAttributable{
static vi2d lastActiveMousePos; static vi2d lastActiveMousePos;
int componentCount=0; int componentCount=0;
float componentSelectionIndex=0.f; float componentSelectionIndex=0.f;
//This variable is an override available to all menus that allows us to say we've clicked something, so do not handle any automatic clicking anymore of menus for this frame!
static bool alreadyClicked; static bool alreadyClicked;
static bool scrolling; static bool scrolling;

View File

@ -47,17 +47,11 @@ INCLUDE_game
using A=Attribute; using A=Attribute;
MenuComponent::MenuComponent(geom2d::rect<float>rect,std::string label,MenuFunc onClick,ButtonAttr attributes) MenuComponent::MenuComponent(geom2d::rect<float>rect,std::string label,MenuFunc onClick,ButtonAttr attributes)
:rect(rect),originalPos(rect.pos),label(label),menuDest(MenuType::ENUM_END),onClick(onClick),hoverEffect(0),selectable(!(attributes&ButtonAttr::UNSELECTABLE)),selectableViaKeyboard(!(attributes&ButtonAttr::UNSELECTABLE_VIA_KEYBOARD)),memoryLeakInfo(Menu::GetMemoryLeakReportInfo()),fitToLabel(attributes&ButtonAttr::FIT_TO_LABEL){} :rect(rect),originalPos(rect.pos),label(label),onClick(onClick),hoverEffect(0),selectable(!(attributes&ButtonAttr::UNSELECTABLE)),selectableViaKeyboard(!(attributes&ButtonAttr::UNSELECTABLE_VIA_KEYBOARD)),memoryLeakInfo(Menu::GetMemoryLeakReportInfo()),fitToLabel(attributes&ButtonAttr::FIT_TO_LABEL){}
MenuComponent::MenuComponent(geom2d::rect<float>rect,std::string label,MenuType menuDest,MenuFunc onClick,ButtonAttr attributes) MenuComponent::MenuComponent(geom2d::rect<float>rect,std::string label,MenuFunc onClick,vf2d labelScaling,ButtonAttr attributes)
:MenuComponent(rect,label,onClick,attributes){ :MenuComponent(rect,label,onClick,attributes){
//NOTE: This constructor also calls the other constructor above! //NOTE: This constructor also calls the other constructor above!
this->menuDest=menuDest;
}
MenuComponent::MenuComponent(geom2d::rect<float>rect,std::string label,MenuType menuDest,MenuFunc onClick,vf2d labelScaling,ButtonAttr attributes)
:MenuComponent(rect,label,menuDest,onClick,attributes){
//NOTE: This constructor also calls the other constructor above!
this->labelScaling=labelScaling; this->labelScaling=labelScaling;
} }
@ -265,17 +259,7 @@ void MenuComponent::OnChapterUpdate(uint8_t newChapter){}
void MenuComponent::Click(){ void MenuComponent::Click(){
if(grayedOut||disable||disableOutsideWindow)return; if(grayedOut||disable||disableOutsideWindow)return;
bool buttonStillValid=onClick(MenuFuncData{*Menu::menus[parentMenu],game,Menu::menus[parentMenu]->components[name]}); onClick(MenuFuncData{*Menu::menus[parentMenu],game,Menu::menus[parentMenu]->components[name]});
if(buttonStillValid){
if(menuDest!=MenuType::ENUM_END){
if(Menu::stack.size()<MAX_MENUS){
Menu::OpenMenu(menuDest); //Navigate to the next menu.
}else{
ERR("WARNING! Exceeded menu stack size limit!")
}
}
}
} }
void MenuComponent::SetLabel(std::string newLabel){ void MenuComponent::SetLabel(std::string newLabel){
label=newLabel; label=newLabel;

View File

@ -79,7 +79,6 @@ class MenuComponent:public IAttributable{
friend class MenuItemItemButton; friend class MenuItemItemButton;
friend class RowItemDisplay; friend class RowItemDisplay;
friend class InventoryConsumableWindow; friend class InventoryConsumableWindow;
MenuType menuDest;
MenuFunc onHover=[](MenuFuncData dat){return true;}; MenuFunc onHover=[](MenuFuncData dat){return true;};
MenuFunc onMouseOut=[](MenuFuncData dat){return true;}; MenuFunc onMouseOut=[](MenuFuncData dat){return true;};
bool hoverState=false; bool hoverState=false;
@ -137,8 +136,7 @@ public:
MenuType parentMenu=MenuType::ENUM_END; MenuType parentMenu=MenuType::ENUM_END;
std::weak_ptr<ScrollableWindowComponent>parentComponent{}; std::weak_ptr<ScrollableWindowComponent>parentComponent{};
MenuComponent(geom2d::rect<float>rect,std::string label,MenuFunc onClick,ButtonAttr attributes=ButtonAttr::NONE); MenuComponent(geom2d::rect<float>rect,std::string label,MenuFunc onClick,ButtonAttr attributes=ButtonAttr::NONE);
MenuComponent(geom2d::rect<float>rect,std::string label,MenuType menuDest,MenuFunc onClick,ButtonAttr attributes=ButtonAttr::NONE); MenuComponent(geom2d::rect<float>rect,std::string label,MenuFunc onClick,vf2d labelScaling,ButtonAttr attributes=ButtonAttr::NONE);
MenuComponent(geom2d::rect<float>rect,std::string label,MenuType menuDest,MenuFunc onClick,vf2d labelScaling,ButtonAttr attributes=ButtonAttr::NONE);
virtual ~MenuComponent(); virtual ~MenuComponent();
vf2d GetPos(); vf2d GetPos();
const vf2d&GetSize()const; const vf2d&GetSize()const;

View File

@ -56,9 +56,7 @@ protected:
Pixel tint=WHITE; Pixel tint=WHITE;
public: public:
inline MenuIconButton(geom2d::rect<float>rect,Decal*icon,MenuFunc onClick,IconButtonAttr attributes=IconButtonAttr::SELECTABLE) inline MenuIconButton(geom2d::rect<float>rect,Decal*icon,MenuFunc onClick,IconButtonAttr attributes=IconButtonAttr::SELECTABLE)
:MenuIconButton(rect,icon,MenuType::ENUM_END,onClick,attributes){} :MenuComponent(rect,"",onClick,ButtonAttr(attributes)),icon(icon){
inline MenuIconButton(geom2d::rect<float>rect,Decal*icon,MenuType menuDest,MenuFunc onClick,IconButtonAttr attributes=IconButtonAttr::SELECTABLE)
:MenuComponent(rect,"",menuDest,onClick,ButtonAttr(attributes)),icon(icon){
border=!(attributes&IconButtonAttr::NO_OUTLINE); border=!(attributes&IconButtonAttr::NO_OUTLINE);
background=!(attributes&IconButtonAttr::NO_BACKGROUND); background=!(attributes&IconButtonAttr::NO_BACKGROUND);
} }

View File

@ -57,13 +57,13 @@ private:
protected: protected:
std::weak_ptr<Item>itemRef; std::weak_ptr<Item>itemRef;
public: public:
inline MenuItemItemButton(geom2d::rect<float>rect,const std::weak_ptr<Item>itemRef,MenuType menuDest,MenuFunc onClick,std::string itemNameLabelName,std::string itemDescriptionLabelName,IconButtonAttr attributes=IconButtonAttr::SELECTABLE) inline MenuItemItemButton(geom2d::rect<float>rect,const std::weak_ptr<Item>itemRef,MenuFunc onClick,std::string itemNameLabelName,std::string itemDescriptionLabelName,IconButtonAttr attributes=IconButtonAttr::SELECTABLE)
:MenuIconButton(rect,!ISBLANK(itemRef)?const_cast<Decal*>(itemRef.lock()->Decal()):nullptr,menuDest,onClick,attributes),itemRef(itemRef),itemNameLabelName(itemNameLabelName),itemDescriptionLabelName(itemDescriptionLabelName){ :MenuIconButton(rect,!ISBLANK(itemRef)?const_cast<Decal*>(itemRef.lock()->Decal()):nullptr,onClick,attributes),itemRef(itemRef),itemNameLabelName(itemNameLabelName),itemDescriptionLabelName(itemDescriptionLabelName){
draggable=false; draggable=false;
valid=!ISBLANK(itemRef); valid=!ISBLANK(itemRef);
} }
inline MenuItemItemButton(geom2d::rect<float>rect,const std::weak_ptr<Item>itemRef,MenuType menuDest,MenuFunc onClick,MenuFunc onHover,MenuFunc onMouseOut,std::string itemNameLabelName="",std::string itemDescriptionLabelName="",IconButtonAttr attributes=IconButtonAttr::SELECTABLE) inline MenuItemItemButton(geom2d::rect<float>rect,const std::weak_ptr<Item>itemRef,MenuFunc onClick,MenuFunc onHover,MenuFunc onMouseOut,std::string itemNameLabelName="",std::string itemDescriptionLabelName="",IconButtonAttr attributes=IconButtonAttr::SELECTABLE)
:MenuIconButton(rect,!ISBLANK(itemRef)?const_cast<Decal*>(itemRef.lock()->Decal()):nullptr,menuDest,onClick,attributes),itemRef(itemRef),itemNameLabelName(itemNameLabelName),itemDescriptionLabelName(itemDescriptionLabelName){ :MenuIconButton(rect,!ISBLANK(itemRef)?const_cast<Decal*>(itemRef.lock()->Decal()):nullptr,onClick,attributes),itemRef(itemRef),itemNameLabelName(itemNameLabelName),itemDescriptionLabelName(itemDescriptionLabelName){
runHoverFunctions=true; runHoverFunctions=true;
draggable=false; draggable=false;
valid=!ISBLANK(itemRef); valid=!ISBLANK(itemRef);

View File

@ -41,7 +41,7 @@ enum MenuType{
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
/*DO NOT REMOVE!!*/ENUM_START,/////////////////////////////// /*DO NOT REMOVE!!*/ENUM_START,///////////////////////////////
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// 69% Controller Compatibility. (100 total items, 4 items per menu * 25 menus) // 73% Controller Compatibility. (100 total items, 4 items per menu * 25 menus)
INVENTORY_CONSUMABLES, //100% Controller Compatibility INVENTORY_CONSUMABLES, //100% Controller Compatibility
CLASS_INFO, //100% Controller Compatibility CLASS_INFO, //100% Controller Compatibility
CLASS_SELECTION, //100% Controller Compatibility CLASS_SELECTION, //100% Controller Compatibility
@ -61,7 +61,7 @@ enum MenuType{
CONSUMABLE_CRAFT_ITEM, //100% Controller Compatibility CONSUMABLE_CRAFT_ITEM, //100% Controller Compatibility
SAVE_FILE_NAME, //100% Controller Compatibility SAVE_FILE_NAME, //100% Controller Compatibility
LOAD_GAME, //100% Controller Compatibility - Online Mode Tab switching LOAD_GAME, //100% Controller Compatibility - Online Mode Tab switching
USER_ID, //0% Controller Compatibility USER_ID, //100% Controller Compatibility
SETTINGS, //0% Controller Compatibility SETTINGS, //0% Controller Compatibility
SHERMAN, //0% Controller Compatibility SHERMAN, //0% Controller Compatibility
INPUT_KEY_DISPLAY, //25% Controller Compatibility INPUT_KEY_DISPLAY, //25% Controller Compatibility

View File

@ -146,7 +146,7 @@ void Menu::InitializeMerchantWindow(){
float buttonWidth=64; float buttonWidth=64;
float textScaling=std::min(1.f,buttonWidth/textWidth); float textScaling=std::min(1.f,buttonWidth/textWidth);
auto button=merchantWindow->ADD(category+" Inventory Tab",MenuComponent)(geom2d::rect<float>{{2,30+yOffset},{68,16}},category,MenuType::ENUM_END, auto button=merchantWindow->ADD(category+" Inventory Tab",MenuComponent)(geom2d::rect<float>{{2,30+yOffset},{68,16}},category,
[&](MenuFuncData data){ [&](MenuFuncData data){
//Close the old inventory window and show the proper one. //Close the old inventory window and show the proper one.
Component<RowInventoryScrollableWindowComponent>(data.menu.GetType(),"Inventory Display - "+data.menu.S(A::LAST_INVENTORY_TYPE_OPENED))->Disable(); Component<RowInventoryScrollableWindowComponent>(data.menu.GetType(),"Inventory Display - "+data.menu.S(A::LAST_INVENTORY_TYPE_OPENED))->Disable();
@ -220,7 +220,7 @@ void Menu::InitializeMerchantWindow(){
#pragma region Inventory Description #pragma region Inventory Description
float inventoryDescriptionWidth=merchantWindow->pos.x+merchantWindow->size.x-26-224; float inventoryDescriptionWidth=merchantWindow->pos.x+merchantWindow->size.x-26-224;
merchantWindow->ADD("Item Description Outline",MenuLabel)(geom2d::rect<float>{{224,28},{inventoryDescriptionWidth,merchantWindow->size.y-44}},"",1,ComponentAttr::LEFT_ALIGN|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END; merchantWindow->ADD("Item Description Outline",MenuLabel)(geom2d::rect<float>{{224,28},{inventoryDescriptionWidth,merchantWindow->size.y-44}},"",1,ComponentAttr::LEFT_ALIGN|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END;
merchantWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect<float>{{226+inventoryDescriptionWidth/2-24,30},{48,48}},Item::BLANK,MenuType::ENUM_END,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END; merchantWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect<float>{{226+inventoryDescriptionWidth/2-24,30},{48,48}},Item::BLANK,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END;
merchantWindow->ADD("Item Name Label",MenuLabel)(geom2d::rect<float>{{226,84},{inventoryDescriptionWidth-6,12}},"",0.75f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END; merchantWindow->ADD("Item Name Label",MenuLabel)(geom2d::rect<float>{{226,84},{inventoryDescriptionWidth-6,12}},"",0.75f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END;
merchantWindow->ADD("Item Description Label",MenuLabel)(geom2d::rect<float>{{226,94},{inventoryDescriptionWidth-6,merchantWindow->size.y-44-66}},"",0.5f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END; merchantWindow->ADD("Item Description Label",MenuLabel)(geom2d::rect<float>{{226,94},{inventoryDescriptionWidth-6,merchantWindow->size.y-44-66}},"",0.5f,ComponentAttr::LEFT_ALIGN|ComponentAttr::SHADOW)END;
#pragma endregion #pragma endregion
@ -235,7 +235,7 @@ void Menu::InitializeMerchantWindow(){
Player::AddMoneyListener(moneyDisplay); Player::AddMoneyListener(moneyDisplay);
#pragma endregion #pragma endregion
merchantWindow->ADD("Leave Button",MenuComponent)(geom2d::rect<float>{{merchantWindow->size.x/2-48,28+merchantWindow->size.y-44+6},{96,24}},"Leave",MenuType::ENUM_END, merchantWindow->ADD("Leave Button",MenuComponent)(geom2d::rect<float>{{merchantWindow->size.x/2-48,28+merchantWindow->size.y-44+6},{96,24}},"Leave",
[](MenuFuncData data){ [](MenuFuncData data){
Menu::CloseMenu(); Menu::CloseMenu();
return true; return true;

View File

@ -60,7 +60,10 @@ void Menu::InitializeOverworldMapLevelWindow(){
levelSelectWindow->ADD("Encounters Label",MenuLabel)(geom2d::rect<float>{{0,52},{windowSize.x-1,12}},"Encounters:",1,ComponentAttr::SHADOW|ComponentAttr::LEFT_ALIGN)END; levelSelectWindow->ADD("Encounters Label",MenuLabel)(geom2d::rect<float>{{0,52},{windowSize.x-1,12}},"Encounters:",1,ComponentAttr::SHADOW|ComponentAttr::LEFT_ALIGN)END;
levelSelectWindow->ADD("Spawns List",EncountersSpawnListScrollableWindowComponent)(geom2d::rect<float>{{1,64},{windowSize.x-2,84}},ComponentAttr::BACKGROUND)END; levelSelectWindow->ADD("Spawns List",EncountersSpawnListScrollableWindowComponent)(geom2d::rect<float>{{1,64},{windowSize.x-2,84}},ComponentAttr::BACKGROUND)END;
levelSelectWindow->ADD("Change Loadout Button",MenuComponent)(geom2d::rect<float>{{0,152},{windowSize.x-1,12}},"Change Loadout",ITEM_LOADOUT,[](MenuFuncData data){return true;})END; levelSelectWindow->ADD("Change Loadout Button",MenuComponent)(geom2d::rect<float>{{0,152},{windowSize.x-1,12}},"Change Loadout",[](MenuFuncData data){
Menu::OpenMenu(ITEM_LOADOUT);
return true;
})END;
levelSelectWindow->ADD("Enter Button",MenuComponent)(geom2d::rect<float>{{0,166},{windowSize.x-1,16}},"Enter",[](MenuFuncData data){State_OverworldMap::StartLevel();return true;})END; levelSelectWindow->ADD("Enter Button",MenuComponent)(geom2d::rect<float>{{0,166},{windowSize.x-1,16}},"Enter",[](MenuFuncData data){State_OverworldMap::StartLevel();return true;})END;
#pragma region Keyboard Navigation Rules #pragma region Keyboard Navigation Rules

View File

@ -43,7 +43,7 @@ All rights reserved.
class SaveFileNameButton:public MenuComponent{ class SaveFileNameButton:public MenuComponent{
public: public:
inline SaveFileNameButton(geom2d::rect<float>rect,MenuFunc onClick,vf2d labelScaling,ButtonAttr attributes=ButtonAttr::FIT_TO_LABEL) inline SaveFileNameButton(geom2d::rect<float>rect,MenuFunc onClick,vf2d labelScaling,ButtonAttr attributes=ButtonAttr::FIT_TO_LABEL)
:MenuComponent(rect,"",MenuType::ENUM_END,onClick,labelScaling,attributes){} :MenuComponent(rect,"",onClick,labelScaling,attributes){}
inline void Update(AiL*game)override{ inline void Update(AiL*game)override{
MenuComponent::Update(game); MenuComponent::Update(game);

View File

@ -47,9 +47,10 @@ void Menu::InitializeSaveFileWindow(){
Component<MenuComponent>(SAVE_FILE_NAME,"Continue Button")->SetGrayedOut(updatedLabel.length()==0); Component<MenuComponent>(SAVE_FILE_NAME,"Continue Button")->SetGrayedOut(updatedLabel.length()==0);
},false,16U,2.f,ComponentAttr::FIT_TO_LABEL|ComponentAttr::OUTLINE|ComponentAttr::SHADOW|ComponentAttr::BACKGROUND)END; },false,16U,2.f,ComponentAttr::FIT_TO_LABEL|ComponentAttr::OUTLINE|ComponentAttr::SHADOW|ComponentAttr::BACKGROUND)END;
saveFileWindow->ADD("Back Button",MenuComponent)(geom2d::rect<float>{{-8,68},{48,12}},"Cancel",[](MenuFuncData data){Menu::CloseMenu();game->TextEntryEnable(false);return true;})END; saveFileWindow->ADD("Back Button",MenuComponent)(geom2d::rect<float>{{-8,68},{48,12}},"Cancel",[](MenuFuncData data){Menu::CloseMenu();game->TextEntryEnable(false);return true;})END;
saveFileWindow->ADD("Continue Button",MenuComponent)(geom2d::rect<float>{{56,68},{48,12}},"Submit",MenuType::CLASS_SELECTION,[](MenuFuncData data){ saveFileWindow->ADD("Continue Button",MenuComponent)(geom2d::rect<float>{{56,68},{48,12}},"Submit",[](MenuFuncData data){
SaveFile::SetSaveFileName(game->TextEntryGetString()); SaveFile::SetSaveFileName(game->TextEntryGetString());
game->TextEntryEnable(false); game->TextEntryEnable(false);
Menu::CloseMenu();
return true; return true;
})END })END
->SetGrayedOut(true); ->SetGrayedOut(true);
@ -60,15 +61,11 @@ void Menu::InitializeSaveFileWindow(){
returnData="Continue Button"; returnData="Continue Button";
}, },
{ //Button Key { //Button Key
{game->KEY_START,{"Confirm Character Name",[](MenuType type){ {game->KEY_CONTROLLER_START,{"Confirm Character Name","Continue Button"}},
{{game->KEY_ENTER},{"Confirm Character Name",[](MenuType type){
Component<MenuComponent>(type,"Continue Button")->Click(); Component<MenuComponent>(type,"Continue Button")->Click();
}}}, }}},
{game->KEY_ENTER,{"Confirm Character Name",[](MenuType type){ {game->KEY_SELECT,{"Cancel","Back Button"}},
Component<MenuComponent>(type,"Continue Button")->Click();
}}},
{game->KEY_SELECT,{"Cancel",[](MenuType type){
Component<MenuComponent>(type,"Back Button")->Click();
}}},
}, },
{}); {});
} }

View File

@ -116,13 +116,13 @@ void Menu::InitializeSettingsWindow(){
}; };
#pragma endregion #pragma endregion
settingsWindow->ADD("Keyboard Bindings Button",MenuComponent)(geom2d::rect<float>{{28,132.f},vf2d{windowSize.x-32,24}},"Keyboard Bindings",MenuType::ENUM_END,[&](MenuFuncData data){ settingsWindow->ADD("Keyboard Bindings Button",MenuComponent)(geom2d::rect<float>{{28,132.f},vf2d{windowSize.x-32,24}},"Keyboard Bindings",[&](MenuFuncData data){
ChangeKeybindDisplayType(KEY); ChangeKeybindDisplayType(KEY);
Component<MenuLabel>(INPUT_KEY_DISPLAY,"Keyboard Mapping Label")->SetLabel("Keyboard Mappings"); Component<MenuLabel>(INPUT_KEY_DISPLAY,"Keyboard Mapping Label")->SetLabel("Keyboard Mappings");
Menu::OpenMenu(INPUT_KEY_DISPLAY); Menu::OpenMenu(INPUT_KEY_DISPLAY);
return true; return true;
},vf2d{1.5f,2.f})END; },vf2d{1.5f,2.f})END;
settingsWindow->ADD("Controller Bindings Button",MenuComponent)(geom2d::rect<float>{{28,160.f},vf2d{windowSize.x-32,24}},"Controller Bindings",MenuType::ENUM_END,[&](MenuFuncData data){ settingsWindow->ADD("Controller Bindings Button",MenuComponent)(geom2d::rect<float>{{28,160.f},vf2d{windowSize.x-32,24}},"Controller Bindings",[&](MenuFuncData data){
ChangeKeybindDisplayType(CONTROLLER); ChangeKeybindDisplayType(CONTROLLER);
Component<MenuLabel>(INPUT_KEY_DISPLAY,"Keyboard Mapping Label")->SetLabel("Controller Mappings"); Component<MenuLabel>(INPUT_KEY_DISPLAY,"Keyboard Mapping Label")->SetLabel("Controller Mappings");
Menu::OpenMenu(INPUT_KEY_DISPLAY); Menu::OpenMenu(INPUT_KEY_DISPLAY);

View File

@ -43,16 +43,16 @@ All rights reserved.
void Menu::InitializeShermanWindow(){ void Menu::InitializeShermanWindow(){
Menu*shermanWindow=CreateMenu(SHERMAN,CENTERED,vi2d{144,88}); Menu*shermanWindow=CreateMenu(SHERMAN,CENTERED,vi2d{144,88});
shermanWindow->ADD("Leave Button",MenuComponent)(geom2d::rect<float>{{0.f,4.f},{144.f,24.f}},"Leave",MenuType::ENUM_END,[](MenuFuncData data){ shermanWindow->ADD("Leave Button",MenuComponent)(geom2d::rect<float>{{0.f,4.f},{144.f,24.f}},"Leave",[](MenuFuncData data){
GameState::ChangeState(States::OVERWORLD_MAP,0.3f); GameState::ChangeState(States::OVERWORLD_MAP,0.3f);
return true; return true;
},vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END; },vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END;
shermanWindow->ADD("Consumable Crafting Button",MenuComponent)(geom2d::rect<float>{{0.f,32.f},{144.f,24.f}},"Consumable Crafting",MenuType::ENUM_END,[](MenuFuncData data){ shermanWindow->ADD("Consumable Crafting Button",MenuComponent)(geom2d::rect<float>{{0.f,32.f},{144.f,24.f}},"Consumable Crafting",[](MenuFuncData data){
Menu::OpenMenu(CRAFT_CONSUMABLE); Menu::OpenMenu(CRAFT_CONSUMABLE);
return true; return true;
},vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END },vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END
->SetGrayedOut(true); ->SetGrayedOut(true);
shermanWindow->ADD("Stay Button",MenuComponent)(geom2d::rect<float>{{0.f,60.f},{144.f,24.f}},"Stay Here",MenuType::ENUM_END,[](MenuFuncData data){ shermanWindow->ADD("Stay Button",MenuComponent)(geom2d::rect<float>{{0.f,60.f},{144.f,24.f}},"Stay Here",[](MenuFuncData data){
Menu::CloseMenu(); Menu::CloseMenu();
return true; return true;
},vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END; },vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END;

View File

@ -69,4 +69,17 @@ void Menu::InitializeUserIDWindow(){
return true; return true;
})END })END
->SetGrayedOut(true); ->SetGrayedOut(true);
userIDWindow->SetupKeyboardNavigation(
[](MenuType type,Data&returnData){ //On Open
returnData="Submit Button";
},
{ //Button Key
{game->KEY_CONTROLLER_START,{"Confirm ID","Submit Button"}},
{{game->KEY_ENTER},{"Confirm ID",[](MenuType type){
Component<MenuComponent>(type,"Submit Button")->Click();
}}},
{game->KEY_SELECT,{"Cancel","Back Button"}},
},
{});
} }

View File

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 3 #define VERSION_MINOR 3
#define VERSION_PATCH 0 #define VERSION_PATCH 0
#define VERSION_BUILD 7313 #define VERSION_BUILD 7326
#define stringify(a) stringify_(a) #define stringify(a) stringify_(a)
#define stringify_(a) #a #define stringify_(a) #a