rott/kf_sources/XInterface/Classes/Tab_PlayerSettings.uc
2026-07-14 20:27:09 +07:00

576 lines
15 KiB
Ucode

// ====================================================================
// Class: XInterface.Tab_OnlineSettings
// Parent: XInterface.GUITabPanel
//
// <Enter a description here>
// ====================================================================
class Tab_PlayerSettings extends UT2K3TabPanel;
var localized string HandNames[4];
var localized string TeamNames[2];
var config bool bUnlocked; // whether the boss characters have been unlocked
var bool bChanged;
// Used for character (not just weapons!)
var SpinnyWeap SpinnyDude; // MUST be set to null when you leave the window
var vector SpinnyDudeOffset;
var bool bRenderDude;
var localized string ShowBioCaption;
var localized string Show3DViewCaption;
var string OriginalTeam;
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
local int i;
Super.Initcomponent(MyController, MyOwner);
for (i=0;i<Controls.Length;i++)
Controls[i].OnChange=InternalOnChange;
moComboBox(Controls[3]).AddItem(HandNames[0]);
moComboBox(Controls[3]).AddItem(HandNames[1]);
moComboBox(Controls[3]).AddItem(HandNames[2]);
moComboBox(Controls[3]).AddItem(HandNames[3]);
moComboBox(Controls[3]).ReadOnly(true);
moComboBox(Controls[2]).AddItem(TeamNames[0]);
moComboBox(Controls[2]).AddItem(TeamNames[1]);
moComboBox(Controls[2]).ReadOnly(true);
moComboBox(Controls[2]).MyComboBox.OnChange = TeamChange;
if (bUnlocked)
GUICharacterListTeam(Controls[4]).InitListExclusive("DUP");
else
GUICharacterListTeam(Controls[4]).InitListExclusive("DUP", "UNLOCK");
GUIImage(Controls[8]).Image = GUICharacterList(Controls[4]).GetPortrait();
GUIScrollTextBox(Controls[5]).SetContent(Controller.LoadDecoText("",GUICharacterListTeam(Controls[4]).GetDecoText()));
// Spawn spinning character actor
SpinnyDude = PlayerOwner().spawn(class'XInterface.SpinnyWeap');
SpinnyDude.SetRotation(PlayerOwner().Rotation);
SpinnyDude.SetDrawType(DT_Mesh);
SpinnyDude.bPlayRandomAnims = true;
SpinnyDude.SetDrawScale(0.9);
SpinnyDude.SpinRate = 12000;
bRenderDude = false;
GUIButton(Controls[9]).Caption = Show3DViewCaption;
moEditBox(Controls[1]).MyEditBox.bConvertSpaces = true;
moEditBox(Controls[1]).MyEditBox.MaxWidth=16; // as per polge, check Tab_PlayerSettings if you change this
moNumericEdit(Controls[12]).MyNumericEdit.Step = 5;
moCheckBox(Controls[13]).Checked(PlayerOwner().bSmallWeapons);
// RO
/*if (ExtendedConsole(PlayerOwner().Player.Console).MusicManager==None)
Controls[14].bVisible = false;*/
}
function UpdateSpinnyDude()
{
local xUtil.PlayerRecord Rec;
local Mesh PlayerMesh;
local Material BodySkin, HeadSkin;
Rec = GUICharacterListTeam(Controls[4]).GetRecord();
PlayerMesh = Mesh(DynamicLoadObject(Rec.MeshName, class'Mesh'));
if(PlayerMesh == None)
{
Log("Could not load mesh: "$Rec.MeshName$" For player: "$Rec.DefaultName);
return;
}
BodySkin = Material(DynamicLoadObject(Rec.BodySkinName, class'Material'));
if(BodySkin == None)
{
Log("Could not load body material: "$Rec.BodySkinName$" For player: "$Rec.DefaultName);
return;
}
HeadSkin = Material(DynamicLoadObject(Rec.FaceSkinName, class'Material'));
if(HeadSkin == None)
{
Log("Could not load head material: "$Rec.FaceSkinName$" For player: "$Rec.DefaultName);
return;
}
SpinnyDude.LinkMesh(PlayerMesh);
SpinnyDude.Skins[0] = BodySkin;
SpinnyDude.Skins[1] = HeadSkin;
SpinnyDude.LoopAnim( 'Idle_Rest', 1.0 );
}
function bool InternalDraw(Canvas canvas)
{
local vector CamPos, X, Y, Z;
local rotator CamRot;
if(bRenderDude)
{
canvas.GetCameraLocation(CamPos, CamRot);
GetAxes(CamRot, X, Y, Z);
SpinnyDude.SetLocation(CamPos + (SpinnyDudeOffset.X * X) + (SpinnyDudeOffset.Y * Y) + (SpinnyDudeOffset.Z * Z));
canvas.DrawActor(SpinnyDude, false, true, 90.0);
}
return false;
}
function bool PlayList(GUIComponent Sender)
{
ExtendedConsole(PlayerOwner().Player.Console).MusicMenu();
return true;
}
function bool Toggle3DView(GUIComponent Sender)
{
bRenderDude = !bRenderDude;
if(bRenderDude)
{
UpdateSpinnyDude(); // Load current character
Controls[5].bVisible = false; // Hide biography text
// Controls[11].bVisible = true; // Show player border
GUIButton(Controls[9]).Caption = ShowBioCaption; // Change button caption
}
else
{
// Put text back into box
Controls[5].bVisible = true;
Controls[11].bVisible = false;
GUIButton(Controls[9]).Caption = Show3DViewCaption;
SpinnyDude.LinkMesh(None);
}
return true;
}
function bool NextAnim(GUIComponent Sender)
{
if(bRenderDude)
{
SpinnyDude.PlayNextAnim();
}
return true;
}
function InternalOnLoadINI(GUIComponent Sender, string s)
{
local string CharName,TeamName;
local int i;
if (Sender==Controls[1])
{
moEditBox(Sender).SetText(PlayerOwner().GetUrlOption( "Name" ));
}
else if (Sender==Controls[2])
{
if ( (PlayerOwner().PlayerReplicationInfo==None) || (PlayerOwner().PlayerReplicationInfo.Team==None) )
TeamName = PlayerOwner().GetURLOption("Team");
else
TeamName = ""$PlayerOwner().PlayerReplicationInfo.Team.TeamIndex;
OriginalTeam = TeamName;
if (TeamName~="1")
moComboBox(Controls[2]).SetText(TeamNames[1]);
else
moComboBox(Controls[2]).SetText(TeamNames[0]);
}
else if (Sender==Controls[3])
{
i = class'PlayerController'.default.Handedness;
if (i==2)
moComboBox(Controls[3]).SetText(HandNames[1]);
else if (i==-1)
moComboBox(Controls[3]).SetText(HandNames[2]);
else if (i==0)
moComboBox(Controls[3]).SetText(HandNames[3]);
else
moComboBox(Controls[3]).SetText(HandNames[0]);
}
else if (Sender==Controls[4])
{
CharName = PlayerOwner().GetUrlOption( "Character" );
GUICharacterList(Sender).find(charname);
GUIImage(Controls[8]).Image = GUICharacterList(Controls[4]).GetPortrait();
GUIScrollTextBox(Controls[5]).SetContent(Controller.LoadDecoText("",GUICharacterListTeam(Controls[4]).GetDecoText()));
}
else if (Sender==Controls[12])
moNumericEdit(Controls[12]).SetValue(PlayerOwner().DefaultFOV);
}
function TeamChange(GUIComponent Sender)
{
bChanged=true;
}
function InternalOnChange(GUIComponent Sender)
{
local int i;
local GUICharacterList c;
local string cname;
local sound NameSound;
local bool CharName;
if (!Controller.bCurMenuInitialized)
return;
if ((Sender==Controls[1]) || (Sender==Controls[2]) || (Sender==Controls[3]) || Sender==Controls[12] )
bChanged=true;
else if (Sender==Controls[4])
{
GUIImage(Controls[8]).Image = GUICharacterList(Controls[4]).GetPortrait();
GUIScrollTextBox(Controls[5]).SetContent(Controller.LoadDecoText("",GUICharacterListTeam(Controls[4]).GetDecoText()));
C = GUICharacterList(Controls[4]);
cname = moEditBox(Controls[1]).GetText();
// If the text box is an existing character name (or blank), change it when we click on new characters
CharName=false;
if(cname ~= "Nothing" || cname ~= "" || cname ~= "Player")
CharName=true;
for (i=0; i<C.PlayerList.Length && !CharName; i++)
{
if (C.PlayerList[i].DefaultName~=cname)
CharName=true;
}
if(CharName)
moEditBox(Controls[1]).SetText(GUICharacterList(Controls[4]).SelectedText());
NameSound = GUICharacterList(Controls[4]).GetSound();
PlayerOwner().ClientPlaySound(NameSound,,,SLOT_Interface);
// Change 3D graphic if desplayed
if(bRenderDude)
UpdateSpinnyDude();
bChanged=true;
}
else if (Sender==Controls[13])
{
PlayerOwner().bSmallWeapons = moCheckBox(Controls[13]).IsChecked();
PlayerOwner().SaveConfig();
}
}
function bool InternalOnClick(GUIComponent Sender)
{
if (Sender==Controls[6])
GUICharacterList(Controls[4]).PgUp();
else if (Sender==Controls[7])
GUICharacterList(Controls[4]).PgDown();
return true;
}
function bool InternalApply(GUIComponent Sender)
{
local string PName, PChar, PTeam;
local string NewTeam;
if (!bChanged)
return true;
PName = moEditBox(Controls[1]).GetText();
PChar = GUICharacterList(Controls[4]).SelectedText();
PTeam = moComboBox(Controls[2]).GetText();
PlayerOwner().UpdateURL("Name",PName, true);
PlayerOwner().UpdateURL("Character",pChar,true);
if (PTeam~=TeamNames[1])
NewTeam = "1";
else
NewTeam = "0";
if (NewTeam != OriginalTeam)
{
PlayerOwner().UpdateURL("Team", NewTeam, true);
PlayerOwner().ChangeTeam(int(PlayerOwner().GetURLOption("Team")));
}
PlayerOwner().ConsoleCommand("setname"@PName);
PlayerOwner().ConsoleCommand("changecharacter"@PChar);
if (moComboBox(Controls[3]).GetText()==HandNames[1])
PlayerOwner().SetHand(2);
else if (moComboBox(Controls[3]).GetText()==HandNames[2])
PlayerOwner().SetHand(-1);
else if (moComboBox(Controls[3]).GetText()==HandNames[3])
PlayerOwner().SetHand(0);
else
PlayerOwner().SetHand(1);
PlayerOwner().FOV(moNumericEdit(Controls[12]).GetValue());
bChanged = false;
return true;
}
function ShowPanel(bool bShow) // Show Panel should be subclassed if any special processing is needed
{
Super.ShowPanel(bShow);
if (!bShow)
InternalApply(none);
}
defaultproperties
{
Begin Object class=GUIImage Name=PlayerBK1
WinWidth=0.434062
WinLeft=0.506016
WinTop=0.008854
WinHeight=0.377694
Image=Texture'InterfaceArt_tex.Menu.changeme_texture' //Material'InterfaceContent.Menu.BorderBoxD'
ImageColor=(R=255,G=255,B=255,A=160);
ImageRenderStyle=MSTY_Alpha
ImageStyle=ISTY_Stretched
End Object
Controls(0)=GUIImage'PlayerBK1'
Begin Object class=moEditBox Name=PlayerName
WinWidth=0.300000
WinHeight=0.060000
WinLeft=0.121093
WinTop=0.714063
Caption="Name"
INIOption="@INTERNAL"
INIDefault="Player"
OnLoadINI=InternalOnLoadINI
Hint="Changes the alias you play as."
CaptionWidth=0.25
End Object
Controls(1)=moEditBox'PlayerName'
Begin Object class=moComboBox Name=PlayerTeam
WinWidth=0.393750
WinHeight=0.060000
WinLeft=0.524766
WinTop=0.036979
Caption="Preferred Team"
INIOption="@Internal"
INIDefault="Red"
OnLoadINI=InternalOnLoadINI
Hint="Changes the team you will play on by default."
CaptionWidth=0.65
ComponentJustification=TXTA_Left
End Object
Controls(2)=GUIMenuOption'PlayerTeam'
Begin Object class=moComboBox Name=PlayerHand
WinWidth=0.393750
WinHeight=0.060000
WinLeft=0.524766
WinTop=0.130729
Caption="Weapon"
INIOption="@INTERNAL"
INIDefault="High"
OnLoadINI=InternalOnLoadINI
Hint="Changes whether your weapon is visible."
CaptionWidth=0.65
ComponentJustification=TXTA_Left
End Object
Controls(3)=GUIMenuOption'PlayerHand'
Begin Object class=GUICharacterListTeam Name=PlayerCharList
WinWidth=0.453729
WinHeight=0.189297
WinLeft=0.036465
WinTop=0.813543
StyleName="CharButton"
INIOption="@Internal"
OnLoadINI=InternalOnLoadINI
Hint="Changes the character you play as."
End Object
Controls(4)=GUICharacterListTeam'PlayerCharList'
Begin Object Class=GUIScrollTextBox Name=PlayerScroll
WinWidth=0.472071
WinHeight=0.397070
WinLeft=0.506132
WinTop=0.406000
CharDelay=0.0025
EOLDelay=0.5
bNeverFocus=true
//StyleName="NoBackground"
End Object
Controls(5)=GUIScrollTextBox'PlayerScroll'
Begin Object class=GUIButton Name=PlayerLeft
WinWidth=0.043555
WinHeight=0.084414
WinLeft=0.000781
WinTop=0.886460
bNeverFocus=true
bRepeatClick=true
OnClick=InternalOnClick
OnClickSound=CS_Down
StyleName="ArrowLeft"
End Object
Controls(6)=GUIButton'PlayerLeft'
Begin Object class=GUIButton Name=PlayerRight
WinWidth=0.043555
WinHeight=0.084414
WinLeft=0.479688
WinTop=0.886460
StyleName="ArrowRight"
bNeverFocus=true
bRepeatClick=true
OnClick=InternalOnClick
OnClickSound=CS_Up
End Object
Controls(7)=GUIButton'PlayerRight'
Begin Object class=GUIImage Name=PlayerPortrait
WinWidth=0.183000
WinHeight=0.637000
WinLeft=0.172250
WinTop=0.024583
Image=Texture'InterfaceArt_tex.Menu.changeme_texture' //Material'InterfaceContent.Menu.BorderBoxD'
ImageColor=(R=255,G=255,B=255,A=255);
ImageRenderStyle=MSTY_Normal
ImageStyle=ISTY_Scaled
End Object
Controls(8)=GUIImage'PlayerPortrait'
Begin Object class=GUIButton Name=Player3DView
WinWidth=0.250000
WinHeight=0.050000
WinLeft=0.620000
WinTop=0.977868
Caption="3D View"
Hint="Toggle between 3D view and biography of character."
OnClick=Toggle3DView
End Object
Controls(9)=GUIButton'Player3DView'
Begin Object class=GUIImage Name=PlayerPortraitBorder
WinWidth=0.188563
WinHeight=0.647875
WinLeft=0.168687
WinTop=0.018500
Image=Texture'InterfaceArt_tex.Menu.changeme_texture' //Material'InterfaceContent.Menu.BorderBoxA1'
ImageColor=(R=255,G=255,B=255,A=255);
ImageRenderStyle=MSTY_Normal
ImageStyle=ISTY_Stretched
End Object
Controls(10)=GUIImage'PlayerPortraitBorder'
Begin Object class=GUIImage Name=Player3DBack
WinWidth=0.472071
WinHeight=0.742383
WinLeft=0.506132
WinTop=0.156000
Image=Texture'InterfaceArt_tex.Menu.changeme_texture' //Material'InterfaceContent.Menu.BorderBoxA'
ImageColor=(R=255,G=255,B=255,A=160);
ImageStyle=ISTY_Stretched
OnClick=NextAnim
bVisible=false
bAcceptsInput=true
OnClickSound=CS_Click
End Object
Controls(11)=GUIImage'Player3DBack'
Begin Object class=moNumericEdit Name=PlayerFOV
WinWidth=0.393750
WinHeight=0.060000
WinLeft=0.524766
WinTop=0.228123
Caption="Default FOV"
CaptionWidth=0.65
MinValue=80
MaxValue=100
INIOption="@INTERNAL"
INIDefault="85"
OnLoadINI=InternalOnLoadINI
ComponentJustification=TXTA_Left
Hint="This value will change your field of view while playing."
End Object
Controls(12)=moNumericEdit'PlayerFOV'
Begin Object class=moCheckBox Name=PlayerSmallWeap
WinWidth=0.393750
WinHeight=0.040000
WinLeft=0.521875
WinTop=0.318333
Caption="Small Weapons"
INIOption="@Internal"
INIDefault="False"
Hint="Makes your first person weapon smaller."
CaptionWidth=0.9
bSquare=true
ComponentJustification=TXTA_Left
End Object
Controls(13)=moCheckBox'PlayerSmallWeap'
Begin Object class=GUIButton Name=PlayerOGG
WinWidth=0.250000
WinHeight=0.050000
WinLeft=0.620000
WinTop=0.918750
Caption="Play List"
Hint="Configure your OGG Play List."
OnClick=PlayList
End Object
Controls(14)=GUIButton'PlayerOGG'
WinTop=0.15
WinLeft=0
WinWidth=1
WinHeight=0.72
bAcceptsInput=false
HandNames(0)="Right"
HandNames(1)="Hidden"
HandNames(2)="Left"
HandNames(3)="Center"
TeamNames(0)="Red"
TeamNames(1)="Blue"
OnDraw=InternalDraw
bRenderDude=true
SpinnyDudeOffset=(X=150,Y=77,Z=-22)
ShowBioCaption="Bio"
Show3DViewCaption="3D View"
}