Torque3D/Templates/BaseGame/game/data/UI/guis/mainMenu.tscript
Areloch 616d974212 Wipwork for updating the BaseUI
Adds ability to select an actionmap for a GuiInputCtrl which will push it onto the stack, so menus can enact an action map
Update of the MainMenuGUI to fit new style and have the logic needed for KBM and gamepad navigation
Very early wipwork of OptionsMenu overhaul for new standard
2023-12-06 19:50:51 -06:00

90 lines
No EOL
2.3 KiB
Text

function MainMenuGui::onAdd(%this)
{
}
function MainMenuGui::onWake(%this)
{
MainMenuButtonList.listPosition = 0;
}
if(!isObject( MainMenuActionMap ) )
{
new ActionMap(MainMenuActionMap){};
MainMenuActionMap.bind( keyboard, w, mainMenuNavigateUp );
MainMenuActionMap.bind( keyboard, s, mainMenuNavigateDown );
MainMenuActionMap.bind( gamepad, yaxis, "D", "-0.23 0.23", mainMenuStickNavigate );
MainMenuActionMap.bind( gamepad, upov, mainMenuNavigateUp );
MainMenuActionMap.bind( gamepad, dpov, mainMenuNavigateDown );
MainMenuActionMap.bind( keyboard, Enter, activateSelected );
MainMenuActionMap.bind( gamepad, btn_a, activateSelected );
}
function mainMenuNavigateUp(%val)
{
if(%val)
{
MainMenuButtonList.listPosition -= 1;
if(MainMenuButtonList.listPosition < 0)
MainMenuButtonList.listPosition = 0;
MainMenuGUI.syncGUI();
}
}
function mainMenuNavigateDown(%val)
{
if(%val)
{
MainMenuButtonList.listPosition += 1;
if(MainMenuButtonList.listPosition >= MainMenuButtonList.getCount())
MainMenuButtonList.listPosition = MainMenuButtonList.getCount()-1;
MainMenuGUI.syncGUI();
}
}
function mainMenuStickNavigate(%val)
{
if(%val == -1)
mainMenuNavigateUp(1);
else if(%val == 1)
mainMenuNavigateDown(1);
}
function MainMenuGUI::syncGUI(%this)
{
MainMenuButtonList.callOnChildren("setHighlighted", false);
%btn = MainMenuButtonList.getObject(MainMenuButtonList.listPosition);
%btn.setHighlighted(true);
//
//Update the button imagery to comply to the last input device we'd used
%device = Canvas.getLastInputDevice();
if(%device $= "mouse")
%device = "keyboard";
%binding = MainMenuActionMap.getBinding("activateSelected");
%bindingCount = getFieldCount(%binding);
for(%i=0; %i < %bindingCount; %i+=2)
{
%mapDevice = stripTrailingNumber(getField(%binding, %i));
if(%mapDevice $= %device)
{
%button = getField(%binding, %i+1);
break;
}
}
%assetId = getButtonBitmap(%device, %button);
MainMenuGoButton.setBitmap(%assetId);
}
function activateSelected()
{
%btn = MainMenuButtonList.getObject(MainMenuButtonList.listPosition);
%btn.performClick();
}