1
0
KF2-Dev-Scripts/KFGame/Classes/KFGFxControlsContainer_ControllerPresets.uc
2020-12-13 18:01:13 +03:00

199 lines
6.2 KiB
Ucode

//=============================================================================
// KFGFxControlsContainer_ControllerPresets
//=============================================================================
// Class Description
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
// Zane Gholson - 11/19/2014
//=============================================================================
class KFGFxControlsContainer_ControllerPresets extends KFGFxObject_Container
config(UI);
`include(KFProfileSettings.uci);
var const string InputSectionName;
var const string PackageName;
var localized string MovementString;
var localized string LookString;
var localized string ShowScoardBoardString;
var localized string ShowIngameMenuString;
var localized string HoldString;
var localized string TapString;
var localized string CurrentControllerPresetString;
var localized array<string> PresetStrings;
var int numGamepadLayouts;
struct KeyBinding
{
var string Key;
var string Command;
var string HoldCommand;
};
var byte CurrentLocalizedIndex;
var byte CurrentPresetIndex;
function Initialize( KFGFxObject_Menu NewParentMenu )
{
super.Initialize( NewParentMenu );
CurrentPresetIndex = KFPlayerInput(GetPC().PlayerInput).CurrentLayoutIndex;
UpdateCurrentPresetArray(CurrentPresetIndex);
}
/**
* This is function will tell KFPlayerInput to update gamepad button mappings
* and then update the UI.
*
* PresetIndex - the index of the controller layout we want applied to the game.
*/
function UpdateCurrentPresetArray(byte PresetIndex)
{
local KFPlayerInput kfPlayerInput;
local KFPlayerInput KFPI;
CurrentPresetIndex = PresetIndex;
numGamepadLayouts = class'KFGamepadLayoutManager'.static.GetNumLayouts();
// Wrap around for the index.
if(CurrentPresetIndex >= numGamepadLayouts)
{
CurrentPresetIndex = 0;
}
else if( CurrentPresetIndex < 0)
{
CurrentPresetIndex = numGamepadLayouts -1;
}
// Tell the player input to update the actual controls.
KFPlayerInput = KFPlayerInput(GetPC().PlayerInput);
KFPlayerInput.SetGamepadLayout(CurrentPresetIndex);
// Update the GUI with the new button layout descriptions.
LocalizeText();
UpdateButtonDescriptions();
KFPI = KFPlayerInput(GetPC().PlayerInput);
KFPI.CurrentLayoutIndex = CurrentPresetIndex;
KFPI.SaveConfig();
}
function LocalizeText()
{
local GfxObject TextField;
local GFxObject PresetArray;
local GfxObject StepperOption;
local GFxObject defaultButton;
local int i;
TextField = GetObject("CurrentPresetTextfield");
PresetArray = CreateArray();
for (i = 0; i < numGamepadLayouts; i++)
{
StepperOption = CreateObject("Object");
StepperOption.SetString("label", PresetStrings[i]);
PresetArray.SetElementObject(i, StepperOption);
}
SetObject("presetOptions",PresetArray);
SetInt("currentPreset", CurrentPresetIndex);
if(TextField != none)
{
Textfield.SetText(CurrentControllerPresetString);
}
defaultButton = GetObject("defaultButton");
if ( defaultButton != None )
{
defaultButton.SetString("label",Localize("KFGFxOptionsMenu_Graphics","DefaultString","KFGame"));
}
}
/**
* This is function updates all the button descriptions based off of the
* current key bindings in KFPlayerInput.
*/
function UpdateButtonDescriptions( )
{
local GFxObject LocalizedObject;
local name gamepadButtonNames[20];
local KFPlayerInput kfPlayerInput;
local byte i;
local string bindCommand;
local GfxObject TempTextField;
local string TextFieldName;
local string localizedCommand;
//local string localizedLayoutName;
CurrentLocalizedIndex = 0;
LocalizedObject = CreateObject( "Object" );
LocalizedObject.SetString("leftThumbstick", MovementString);
LocalizedObject.SetString("rightThumbstick", LookString);
LocalizedObject.SetString("back", ShowScoardBoardString);
LocalizedObject.SetString("start", ShowIngameMenuString);
kfPlayerInput = KFPlayerInput(GetPC().PlayerInput);
class'KFGamepadLayoutManager'.static.GetGamepadButtonNames(gamepadButtonNames);
//localizedLayoutName = class'KFGamepadLayoutManager'.static.GetLayoutName(CurrentPresetIndex);
for (i = 0; i < 20; i++)
{
TextFieldName = gamepadButtonNames[i] $"Textfield";
TempTextField = GetObject(TextFieldName);
if(TempTextField != none)
{
// Find out the localized display name of the action assigned to this button.
bindCommand = kfPlayerInput.GetGameBindableAction( gamepadButtonNames[i]);
localizedCommand = Localize(InputSectionName, bindCommand, PackageName);
TempTextField.SetText(localizedCommand);
}
}
}
function AddBindingToGFxObject(out GFxObject ObjectArray, string Key, string Command, string HoldCommand, byte i)
{
local GFxObject TempObject;
local string CommandString, HoldCommandString;
TempObject = CreateObject("Object");
CommandString = Localize(InputSectionName, Command, PackageName);
if(HoldCommand != "")
{
HoldCommandString = Localize(InputSectionName, HoldCommand, PackageName);
HoldCommandString -= HoldString;
CommandString = CommandString $"\n" $HoldCommandString @HoldString;
}
TempObject.SetString("Key", Key);
TempObject.SetString("Command", CommandString);
ObjectArray.SetElementObject(i, TempObject);
}
function ResetPresetOptions()
{
CurrentPresetIndex = ParentMenu.Manager.CachedProfile.GetDefaultInt(KFID_CurrentLayoutIndex);
ParentMenu.Manager.CachedProfile.SetProfileSettingValueInt(KFID_CurrentLayoutIndex, CurrentPresetIndex);
UpdateCurrentPresetArray(CurrentPresetIndex);
}
DefaultProperties
{
InputSectionName="LocalizedControls"
PackageName="KFGame"
CurrentPresetIndex=0
}