| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- // =============================================================================
- // KEYBINDS MENU
- // =============================================================================
- $RemapCount = 0;
- $RemapName[$RemapCount] = "Forward";
- $RemapCmd[$RemapCount] = "moveforward";
- $RemapGroup[$RemapCount] = "Movement";
- $RemapCount++;
- $RemapName[$RemapCount] = "Backward";
- $RemapCmd[$RemapCount] = "movebackward";
- $RemapGroup[$RemapCount] = "Movement";
- $RemapCount++;
- $RemapName[$RemapCount] = "Strafe Left";
- $RemapCmd[$RemapCount] = "moveleft";
- $RemapGroup[$RemapCount] = "Movement";
- $RemapCount++;
- $RemapName[$RemapCount] = "Strafe Right";
- $RemapCmd[$RemapCount] = "moveright";
- $RemapGroup[$RemapCount] = "Movement";
- $RemapCount++;
- $RemapName[$RemapCount] = "Jump";
- $RemapCmd[$RemapCount] = "jump";
- $RemapGroup[$RemapCount] = "Movement";
- $RemapCount++;
- $RemapName[$RemapCount] = "Fire Weapon";
- $RemapCmd[$RemapCount] = "mouseFire";
- $RemapGroup[$RemapCount] = "Combat";
- $RemapCount++;
- $RemapName[$RemapCount] = "Adjust Zoom";
- $RemapCmd[$RemapCount] = "setZoomFov";
- $RemapGroup[$RemapCount] = "Combat";
- $RemapCount++;
- $RemapName[$RemapCount] = "Toggle Zoom";
- $RemapCmd[$RemapCount] = "toggleZoom";
- $RemapGroup[$RemapCount] = "Combat";
- $RemapCount++;
- $RemapName[$RemapCount] = "Free Look";
- $RemapCmd[$RemapCount] = "toggleFreeLook";
- $RemapGroup[$RemapCount] = "Miscellaneous";
- $RemapCount++;
- $RemapName[$RemapCount] = "Switch 1st/3rd";
- $RemapCmd[$RemapCount] = "toggleFirstPerson";
- $RemapGroup[$RemapCount] = "Miscellaneous";
- $RemapCount++;
- $RemapName[$RemapCount] = "Toggle Camera";
- $RemapCmd[$RemapCount] = "toggleCamera";
- $RemapGroup[$RemapCount] = "Miscellaneous";
- $RemapCount++;
- function ControlsMenu::onWake(%this)
- {
- ControlSetList.clear();
- ControlSetList.add( "Movement", "Movement" );
- ControlSetList.add( "Combat", "Combat" );
- ControlSetList.add( "Miscellaneous", "Miscellaneous" );
-
- ControlSetList.setSelected( "Movement", false );
-
- ControlsMenuOptionsArray.clear();
- ControlsMenu.loadGroupKeybinds("Movement");
- ControlsMenuOptionsArray.refresh();
- }
- function ControlSetList::onSelect( %this, %id, %text )
- {
- ControlsMenuOptionsArray.clear();
-
- if(%text $= "Movement")
- ControlsMenu.loadGroupKeybinds("Movement");
- else if(%text $= "Combat")
- ControlsMenu.loadGroupKeybinds("Combat");
- else if(%text $= "Miscellaneous")
- ControlsMenu.loadGroupKeybinds("Miscellaneous");
- ControlsMenuOptionsArray.refresh();
- }
- function ControlsMenuOKButton::onClick(%this)
- {
- // write out the control config into the keybinds.cs file
- %prefPath = getPrefpath();
- moveMap.save( %prefPath @ "/keybinds.cs" );
-
- OptionsMenu.backOut();
- }
- function ControlsMenuDefaultsButton::onClick(%this)
- {
- //For this to work with module-style, we have to figure that somewhere, we'll set where our default keybind script is at.
- //This can be hardcoded in your actual project.
- exec($KeybindPath);
- ControlsMenu.reload();
- }
- function ControlsMenu::loadGroupKeybinds(%this, %keybindGroup)
- {
- %optionIndex = 0;
- for(%i=0; %i < $RemapCount; %i++)
- {
- //find and add all the keybinds for the particular group we're looking at
- if($RemapGroup[%i] $= %keybindGroup)
- {
- %temp = %this.getKeybindString(%i);
-
- %option = %this.addKeybindOption();
- %option-->nameText.setText($RemapName[%i]);
- %option-->rebindButton.setText(%temp);
- %option-->rebindButton.keybindIndex = %i;
- %option-->rebindButton.optionIndex = %optionIndex;
- %optionIndex++;
- }
- }
- }
- function ControlsMenu::addKeybindOption(%this)
- {
- %tamlReader = new Taml();
-
- %graphicsOption = %tamlReader.read("data/ui/scripts/guis/controlsMenuSetting.taml");
- ControlsMenuOptionsArray.add(%graphicsOption);
- return %graphicsOption;
- }
- function ControlsMenu::getKeybindString(%this, %index )
- {
- %name = $RemapName[%index];
- %cmd = $RemapCmd[%index];
- %temp = moveMap.getBinding( %cmd );
- if ( %temp $= "" )
- return %name TAB "";
- %mapString = "";
- %count = getFieldCount( %temp );
- for ( %i = 0; %i < %count; %i += 2 )
- {
- %device = getField( %temp, %i + 0 );
- %object = getField( %temp, %i + 1 );
-
- %displayName = %this.getMapDisplayName( %device, %object );
-
- if(%displayName !$= "")
- {
- %tmpMapString = %this.getMapDisplayName( %device, %object );
-
- if(%mapString $= "")
- {
- %mapString = %tmpMapString;
- }
- else
- {
- if ( %tmpMapString !$= "")
- {
- %mapString = %mapString @ ", " @ %tmpMapString;
- }
- }
- }
- }
- return %mapString;
- }
- function ControlsMenu::redoMapping( %device, %action, %cmd, %oldIndex, %newIndex )
- {
- //%actionMap.bind( %device, %action, $RemapCmd[%newIndex] );
- moveMap.bind( %device, %action, %cmd );
-
- %remapList = %this-->OptRemapList;
- %remapList.setRowById( %oldIndex, buildFullMapString( %oldIndex ) );
- %remapList.setRowById( %newIndex, buildFullMapString( %newIndex ) );
- }
- function ControlsMenu::getMapDisplayName( %this, %device, %action )
- {
- if ( %device $= "keyboard" )
- return( %action );
- else if ( strstr( %device, "mouse" ) != -1 )
- {
- // Substitute "mouse" for "button" in the action string:
- %pos = strstr( %action, "button" );
- if ( %pos != -1 )
- {
- %mods = getSubStr( %action, 0, %pos );
- %object = getSubStr( %action, %pos, 1000 );
- %instance = getSubStr( %object, strlen( "button" ), 1000 );
- return( %mods @ "mouse" @ ( %instance + 1 ) );
- }
- else
- error( "Mouse input object other than button passed to getDisplayMapName!" );
- }
- else if ( strstr( %device, "joystick" ) != -1 )
- {
- // Substitute "joystick" for "button" in the action string:
- %pos = strstr( %action, "button" );
- if ( %pos != -1 )
- {
- %mods = getSubStr( %action, 0, %pos );
- %object = getSubStr( %action, %pos, 1000 );
- %instance = getSubStr( %object, strlen( "button" ), 1000 );
- return( %mods @ "joystick" @ ( %instance + 1 ) );
- }
- else
- {
- %pos = strstr( %action, "pov" );
- if ( %pos != -1 )
- {
- %wordCount = getWordCount( %action );
- %mods = %wordCount > 1 ? getWords( %action, 0, %wordCount - 2 ) @ " " : "";
- %object = getWord( %action, %wordCount - 1 );
- switch$ ( %object )
- {
- case "upov": %object = "POV1 up";
- case "dpov": %object = "POV1 down";
- case "lpov": %object = "POV1 left";
- case "rpov": %object = "POV1 right";
- case "upov2": %object = "POV2 up";
- case "dpov2": %object = "POV2 down";
- case "lpov2": %object = "POV2 left";
- case "rpov2": %object = "POV2 right";
- default: %object = "";
- }
- return( %mods @ %object );
- }
- else
- error( "Unsupported Joystick input object passed to getDisplayMapName!" );
- }
- }
-
- return( "" );
- }
- function ControlsMenu::buildFullMapString( %this, %index )
- {
- %name = $RemapName[%index];
- %cmd = $RemapCmd[%index];
- %temp = moveMap.getBinding( %cmd );
- if ( %temp $= "" )
- return %name TAB "";
- %mapString = "";
- %count = getFieldCount( %temp );
- for ( %i = 0; %i < %count; %i += 2 )
- {
- if ( %mapString !$= "" )
- %mapString = %mapString @ ", ";
- %device = getField( %temp, %i + 0 );
- %object = getField( %temp, %i + 1 );
- %mapString = %mapString @ %this.getMapDisplayName( %device, %object );
- }
- return %name TAB %mapString;
- }
- function ControlsMenu::fillRemapList( %this )
- {
- %remapList = %this-->OptRemapList;
-
- %remapList.clear();
- for ( %i = 0; %i < $RemapCount; %i++ )
- %remapList.addRow( %i, %this.buildFullMapString( %i ) );
- }
- function ControlsMenu::doRemap( %this )
- {
- %remapList = %this-->OptRemapList;
-
- %selId = %remapList.getSelectedId();
- %name = $RemapName[%selId];
- RemapDlg-->OptRemapText.setValue( "Re-bind \"" @ %name @ "\" to..." );
- OptRemapInputCtrl.index = %selId;
- Canvas.pushDialog( RemapDlg );
- }
- function ControlsMenuRebindButton::onClick(%this)
- {
- %name = $RemapName[%this.keybindIndex];
- RemapDlg-->OptRemapText.setValue( "Re-bind \"" @ %name @ "\" to..." );
-
- OptRemapInputCtrl.index = %this.keybindIndex;
- OptRemapInputCtrl.optionIndex = %this.optionIndex;
- Canvas.pushDialog( RemapDlg );
- }
- function OptRemapInputCtrl::onInputEvent( %this, %device, %action )
- {
- //error( "** onInputEvent called - device = " @ %device @ ", action = " @ %action @ " **" );
- Canvas.popDialog( RemapDlg );
- // Test for the reserved keystrokes:
- if ( %device $= "keyboard" )
- {
- // Cancel...
- if ( %action $= "escape" )
- {
- // Do nothing...
- return;
- }
- }
- %cmd = $RemapCmd[%this.index];
- %name = $RemapName[%this.index];
- // Grab the friendly display name for this action
- // which we'll use when prompting the user below.
- %mapName = ControlsMenu.getMapDisplayName( %device, %action );
-
- // Get the current command this action is mapped to.
- %prevMap = moveMap.getCommand( %device, %action );
- // If nothing was mapped to the previous command
- // mapping then it's easy... just bind it.
- if ( %prevMap $= "" )
- {
- ControlsMenu.unbindExtraActions( %cmd, 1 );
- moveMap.bind( %device, %action, %cmd );
-
- //ControlsMenu.reload();
- %newCommands = getField(ControlsMenu.buildFullMapString( %this.index ), 1);
- ControlsMenuOptionsArray.getObject(%this.optionIndex)-->rebindButton.setText(%newCommands);
- return;
- }
- // If the previous command is the same as the
- // current then they hit the same input as what
- // was already assigned.
- if ( %prevMap $= %cmd )
- {
- ControlsMenu.unbindExtraActions( %cmd, 0 );
- moveMap.bind( %device, %action, %cmd );
- //ControlsMenu.reload();
- %newCommands = getField(ControlsMenu.buildFullMapString( %this.index ), 1);
- ControlsMenuOptionsArray.getObject(%this.optionIndex)-->rebindButton.setText(%newCommands);
- return;
- }
- // Look for the index of the previous mapping.
- %prevMapIndex = ControlsMenu.findRemapCmdIndex( %prevMap );
-
- // If we get a negative index then the previous
- // mapping was to an item that isn't included in
- // the mapping list... so we cannot unmap it.
- if ( %prevMapIndex == -1 )
- {
- MessageBoxOK( "Remap Failed", "\"" @ %mapName @ "\" is already bound to a non-remappable command!" );
- return;
- }
- // Setup the forced remapping callback command.
- %callback = "redoMapping(" @ %device @ ", \"" @ %action @ "\", \"" @
- %cmd @ "\", " @ %prevMapIndex @ ", " @ %this.index @ ");";
-
- // Warn that we're about to remove the old mapping and
- // replace it with another.
- %prevCmdName = $RemapName[%prevMapIndex];
- Canvas.pushDialog( RemapConfirmDlg );
-
- RemapConfirmationText.setText("\"" @ %mapName @ "\" is already bound to \""
- @ %prevCmdName @ "\"! Do you wish to replace this mapping?");
- RemapConfirmationYesButton.command = "ControlsMenu.redoMapping(" @ %device @ ", \"" @ %action @ "\", \"" @
- %cmd @ "\", " @ %prevMapIndex @ ", " @ %this.index @ "); Canvas.popDialog();";
- RemapConfirmationNoButton.command = "Canvas.popDialog();";
-
- /*MessageBoxYesNo( "Warning",
- "\"" @ %mapName @ "\" is already bound to \""
- @ %prevCmdName @ "\"!\nDo you wish to replace this mapping?",
- %callback, "" );*/
- }
- function ControlsMenu::findRemapCmdIndex( %this, %command )
- {
- for ( %i = 0; %i < $RemapCount; %i++ )
- {
- if ( %command $= $RemapCmd[%i] )
- return( %i );
- }
- return( -1 );
- }
- /// This unbinds actions beyond %count associated to the
- /// particular moveMap %commmand.
- function ControlsMenu::unbindExtraActions( %this, %command, %count )
- {
- %temp = moveMap.getBinding( %command );
- if ( %temp $= "" )
- return;
- %count = getFieldCount( %temp ) - ( %count * 2 );
- for ( %i = 0; %i < %count; %i += 2 )
- {
- %device = getField( %temp, %i + 0 );
- %action = getField( %temp, %i + 1 );
-
- moveMap.unbind( %device, %action );
- }
- }
- function ControlsMenu::redoMapping( %this, %device, %action, %cmd, %oldIndex, %newIndex )
- {
- //%actionMap.bind( %device, %action, $RemapCmd[%newIndex] );
- moveMap.bind( %device, %action, %cmd );
-
- %remapList = %this-->OptRemapList;
- %remapList.setRowById( %oldIndex, %this.buildFullMapString( %oldIndex ) );
- %remapList.setRowById( %newIndex, %this.buildFullMapString( %newIndex ) );
-
- %this.changeSettingsPage();
- }
|