KF2-Server-Extension/ServerExt/Classes/UIP_Settings.uc
2020-11-28 23:12:58 +03:00

250 lines
6.9 KiB
Ucode

Class UIP_Settings extends KFGUI_MultiComponent;
var KFGUI_ComponentList SettingsBox;
var KFGUI_Button KeyBindButton;
var KFGUI_TextLable KeyBindLabel;
var name CurKeybind;
var bool bSetKeybind,bDelayedSet;
var localized string FirstPersonLegsText;
var localized string FirstPersonLegsToolTip;
var localized string HideNameBeaconsText;
var localized string HideNameBeaconsToolTip;
var localized string HideKillMessagesText;
var localized string HideKillMessagesToolTip;
var localized string HideDamageMessagesText;
var localized string HideDamageMessagesToolTip;
var localized string HideDamagePopupText;
var localized string HideDamagePopupToolTip;
var localized string UseKf2DeathMessagesText;
var localized string UseKf2DeathMessagesToolTip;
var localized string UseKf2KillMessagesText;
var localized string UseKf2KillMessagesToolTip;
var localized string DontBecomeZombieText;
var localized string DontBecomeZombieToolTip;
var localized string NoScreenShakeText;
var localized string NoScreenShakeToolTip;
var localized string ButtonToggleBehindviewKeybindText;
var localized string ButtonToggleBehindviewKeybindToolTip;
var localized string ButtonPressButtonText;
var localized string NotSetText;
function InitMenu()
{
Super.InitMenu();
// Client settings
SettingsBox = KFGUI_ComponentList(FindComponentID('SettingsBox'));
//AddCheckBox("Text-To-Speech:","Enable Text-to-Speech talk for player chat messages",'TTS', bool bDefault);
AddCheckBox(FirstPersonLegsText,FirstPersonLegsToolTip,'FP',class'ExtPlayerController'.Default.bShowFPLegs);
if (class'ExtPlayerController'.Default.bShowFPLegs)
ExtPlayerController(GetPlayer()).ToggleFPBody(false);
AddCheckBox(HideNameBeaconsText,HideNameBeaconsToolTip,'NB',class'ExtPlayerController'.Default.bHideNameBeacons);
AddCheckBox(HideKillMessagesText,HideKillMessagesToolTip,'KM',class'ExtPlayerController'.Default.bHideKillMsg);
AddCheckBox(HideDamageMessagesText,HideDamageMessagesToolTip,'DM',class'ExtPlayerController'.Default.bHideDamageMsg);
AddCheckBox(HideDamagePopupText,HideDamagePopupToolTip,'PP',class'ExtPlayerController'.Default.bHideNumberMsg);
AddCheckBox(UseKf2DeathMessagesText,UseKf2DeathMessagesToolTip,'K2DM',class'ExtPlayerController'.Default.bUseKF2DeathMessages);
AddCheckBox(UseKf2KillMessagesText,UseKf2KillMessagesToolTip,'K2KM',class'ExtPlayerController'.Default.bUseKF2KillMessages);
KeyBindButton = AddButton("",ButtonToggleBehindviewKeybindText,ButtonToggleBehindviewKeybindToolTip,'KB',KeyBindLabel);
AddCheckBox(DontBecomeZombieText,DontBecomeZombieToolTip,'ZP',class'ExtPlayerController'.Default.bNoMonsterPlayer);
AddCheckBox(NoScreenShakeText,NoScreenShakeToolTip,'NS',class'ExtPlayerController'.Default.bNoScreenShake);
InitBehindviewKey();
}
final function InitBehindviewKey()
{
local PlayerInput IN;
local int i;
CurKeybind = '';
// Check what keys now using!
IN = Owner.BackupInput;
for (i=0; i<IN.Bindings.Length; ++i)
{
if (IN.Bindings[i].Command~="Camera FirstPerson")
{
CurKeybind = IN.Bindings[i].Name;
break;
}
}
KeyBindButton.ButtonText = (CurKeybind!='' ? string(CurKeybind) : NotSetText);
}
final function KFGUI_CheckBox AddCheckBox(string Cap, string TT, name IDN, bool bDefault)
{
local KFGUI_CheckBox CB;
CB = KFGUI_CheckBox(SettingsBox.AddListComponent(class'KFGUI_CheckBox'));
CB.LableString = Cap;
CB.ToolTip = TT;
CB.bChecked = bDefault;
CB.InitMenu();
CB.ID = IDN;
CB.OnCheckChange = CheckChange;
return CB;
}
final function KFGUI_Button AddButton(string ButtonText, string Cap, string TT, name IDN, out KFGUI_TextLable Label)
{
local KFGUI_Button CB;
local KFGUI_MultiComponent MC;
MC = KFGUI_MultiComponent(SettingsBox.AddListComponent(class'KFGUI_MultiComponent'));
MC.InitMenu();
Label = new(MC) class'KFGUI_TextLable';
Label.SetText(Cap);
Label.XSize = 0.75;
Label.FontScale = 0;
Label.AlignY = 1;
MC.AddComponent(Label);
CB = new(MC) class'KFGUI_Button';
CB.XPosition = 0.77;
CB.XSize = 0.22;
CB.ButtonText = ButtonText;
CB.ToolTip = TT;
CB.ID = IDN;
CB.OnClickLeft = ButtonClicked;
CB.OnClickRight = ButtonClicked;
MC.AddComponent(CB);
return CB;
}
function CheckChange(KFGUI_CheckBox Sender)
{
local ExtPlayerController PC;
PC = ExtPlayerController(GetPlayer());
switch (Sender.ID)
{
case 'FP':
PC.ToggleFPBody(Sender.bChecked);
break;
case 'NB':
PC.bHideNameBeacons = Sender.bChecked;
break;
case 'KM':
PC.bHideKillMsg = Sender.bChecked;
PC.SendServerSettings();
break;
case 'DM':
PC.bHideDamageMsg = Sender.bChecked;
PC.SendServerSettings();
break;
case 'PP':
PC.bHideNumberMsg = Sender.bChecked;
PC.SendServerSettings();
break;
case 'ZP':
PC.bNoMonsterPlayer = Sender.bChecked;
PC.SendServerSettings();
break;
case 'NS':
PC.bNoScreenShake = Sender.bChecked;
break;
case 'K2DM':
PC.bUseKF2DeathMessages = Sender.bChecked;
break;
case 'K2KM':
PC.bUseKF2KillMessages = Sender.bChecked;
break;
}
PC.SaveConfig();
}
function ButtonClicked(KFGUI_Button Sender)
{
switch (Sender.ID)
{
case 'KB':
KeyBindButton.ButtonText = ButtonPressButtonText;
KeyBindButton.SetDisabled(true);
GrabKeyFocus();
bSetKeybind = true;
bDelayedSet = false;
SetTimer(0.4,false);
break;
}
}
function Timer()
{
bDelayedSet = false;
}
function bool NotifyInputKey(int ControllerId, name Key, EInputEvent Event, float AmountDepressed, bool bGamepad)
{
if (Event==IE_Pressed && !bDelayedSet && InStr(Caps(string(Key)),"MOUSE")==-1)
{
if (Key!='Escape')
BindNewKey(Key,"Camera FirstPerson");
ReleaseKeyFocus();
}
return true;
}
function LostKeyFocus()
{
KeyBindButton.SetDisabled(false);
bSetKeybind = false;
InitBehindviewKey();
}
final function BindNewKey(name Key, string Cmd)
{
local int i;
local PlayerInput IN;
// First unbind old key.
IN = Owner.BackupInput;
if (CurKeybind!='')
{
for (i=0; i<IN.Bindings.Length; ++i)
{
if (IN.Bindings[i].Name==CurKeybind)
IN.Bindings.Remove(i,1);
}
}
// Then bind a new key.
for (i=0; i<IN.Bindings.Length; ++i)
{
if (IN.Bindings[i].Name==Key)
{
IN.Bindings[i].Command = Cmd;
break;
}
}
if (i==IN.Bindings.Length)
IN.Bindings.Length = i+1;
IN.Bindings[i].Name = Key;
IN.Bindings[i].Command = Cmd;
IN.Bindings[i].Control = false;
IN.Bindings[i].Shift = false;
IN.Bindings[i].Alt = false;
IN.Bindings[i].bIgnoreCtrl = false;
IN.Bindings[i].bIgnoreShift = (Key=='F1'); // Hack, fix Steam overlay commands.
IN.Bindings[i].bIgnoreAlt = (Key=='F7');
// Check for any other duplicates of same key.
for (i=(i+1); i<IN.Bindings.Length; ++i)
{
if (IN.Bindings[i].Name==Key)
IN.Bindings.Remove(i,1);
}
if (IN.Class!=Class'KFPlayerInput')
{
Class'KFPlayerInput'.Default.Bindings = IN.Bindings; // Hack!
Class'KFPlayerInput'.Static.StaticSaveConfig();
}
else IN.SaveConfig();
}
defaultproperties
{
Begin Object Class=KFGUI_ComponentList Name=ClientSettingsBox
XPosition=0.025
YPosition=0.025
XSize=0.95
YSize=0.95
ID="SettingsBox"
ListItemsPerPage=14
End Object
Components.Add(ClientSettingsBox)
}