//==============================================================================
//	Description
//
//	Created by Ron Prestenback
//	© 2003, Epic Games, Inc.  All Rights Reserved
//==============================================================================
class UT2K4Tab_PlayerSettings extends Settings_Tabs;

var localized string HandNames[4];
var localized string TeamNames[3];
var localized string ClickInst;
var localized string All;
var localized string Previews[3];

var bool bChanged;

// Used for character (not just weapons!)
var() editinline editconst noexport 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 localized string    DefaultText;

var string OriginalTeam;
var automated GUISectionBackground i_BG1, i_BG2, i_BG3;
var automated GUIImage	i_Portrait;
var automated GUIButton	b_Left, b_Right, b_Pick, b_3DView, b_DropTarget;
var automated GUIScrollTextBox	lb_Scroll;
var automated moEditBox		ed_Name;
var automated moCheckBox	ch_SmallWeaps;
var automated moComboBox	co_Team, co_Hand, co_Voice;
var automated moNumericEdit	nu_FOV;
var automated GUILabel lbl_ModelName;
var automated GUIComboBox co_SkinPreview;

var array<class<xVoicePack> > VoiceClasses;


var() string	sChar, sName, sNameD, sCharD, sVoice, sVoiceD;
var() int		iTeam, iHand, iFOV, iTeamD, iHandD, iFOVD;
var() bool	bWeaps, bWeapsD;
var() int		nfov;
var() xUtil.PlayerRecord PlayerRec;
var() int YawValue;

delegate VoiceTypeChanged(string NewVoiceType);

function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
	Super.Initcomponent(MyController, MyOwner);

	co_Hand.AddItem(HandNames[0]);
	co_Hand.AddItem(HandNames[1]);
	co_Hand.AddItem(HandNames[2]);
	co_Hand.AddItem(HandNames[3]);
	co_Hand.ReadOnly(true);

	co_Team.AddItem(TeamNames[0]);
	co_Team.AddItem(TeamNames[1]);
	co_Team.AddItem(TeamNames[2]);
	co_Team.ReadOnly(true);

	// Spawn spinning character actor
	if ( SpinnyDude == None )
		SpinnyDude = PlayerOwner().spawn(class'XInterface.SpinnyWeap');

	SpinnyDude.bPlayCrouches = false;
    SpinnyDude.bPlayRandomAnims = false;

	SpinnyDude.SetDrawType(DT_Mesh);
	SpinnyDude.SetDrawScale(0.9);
	SpinnyDude.SpinRate = 0;

	b_3DView.Caption = Show3DViewCaption;

	ed_Name.MyEditBox.bConvertSpaces = true;
	ed_Name.MyEditBox.MaxWidth=16;  // as per polge, check UT2K4Tab_PlayerSettings if you change this

	nu_FOV.MyNumericEdit.Step = 5;

    co_SkinPreview.AddItem(Previews[0]);
    co_SkinPreview.AddItem(Previews[1]);
    co_SkinPreview.AddItem(Previews[2]);

	i_BG2.Managecomponent(ed_Name);
    i_BG2.Managecomponent(ch_SmallWeaps);
    i_BG2.Managecomponent(co_Team);
    i_BG2.Managecomponent(co_Hand);
    i_BG2.Managecomponent(co_Voice);
    i_BG2.Managecomponent(nu_FOV);

    i_BG3.Managecomponent(lb_Scroll);
}

function SetPlayerRec()
{
	local int i;
	local array<xUtil.PlayerRecord> PList;

	class'xUtil'.static.GetPlayerList(PList);

	// Filter out to only characters without the 's' menu setting
	for(i=0; i<PList.Length; i++)
	{
    	if ( sChar ~= Plist[i].DefaultName )
    	{
        	PlayerRec = PList[i];
        	break;
        }
    }

	UpdateVoiceOptions();
	UpdateScroll();
	ShowSpinnyDude();
}

function ShowPanel(bool bShow)
{
	local int i;
    local array<string> VoiceClassNames;
    local class<xVoicePack> VP;

	Super.ShowPanel(bShow);
	if ( bShow )
	{
		if ( bInit )
		{
			bInit = False;

		    PlayerOwner().GetAllInt("XGame.xVoicePack", VoiceClassNames);
		    VoiceClasses.Remove(0, VoiceClasses.Length);

		    for ( i = 0; i < VoiceClassNames.Length; i++ )
		    {
		    	VP = class<xVoicePack>(DynamicLoadObject(VoiceClassNames[i],class'Class'));
		    	if ( VP != None )
		    		VoiceClasses[VoiceClasses.Length] = VP;
		    }

		    bRenderDude = True;
		    SetPlayerRec();
			for (i = 0; i < Components.Length; i++)
				Components[i].OnChange = InternalOnChange;
		}
	}
}

function SaveSettings()
{
	local bool bSave;
	local PlayerController PC;

	Super.SaveSettings();
	PC = PlayerOwner();

	if (sNameD != sName)
	{
		PC.ReplaceText(sName, "\"", "");
		sNameD = sName;
		PC.ConsoleCommand("SetName"@sName);
	}

	if (iTeam == 2)
		iTeam = 255;

	if (iTeamD != iTeam)
	{
		iTeamD = iTeam;
		PC.UpdateUrl("Team", string(iTeam), True);
		PC.ChangeTeam(iTeam);
	}

	if (iTeam == 255)
		iTeam = 2;

	if (bWeapsD != bWeaps)
	{
		bWeapsD = bWeaps;
		PC.bSmallWeapons = bWeaps;
		bSave = True;
	}

	if (iHandD != iHand)
	{
		iHandD = iHand;
		PC.Handedness = iHand - 1;
		PC.SetHand(iHand - 1);
		bSave = False;
	}

	if (iFOVD != iFOV)
	{
		iFOVD = iFOV;
		PC.FOV( float(iFOV) );
		bSave = False;
	}

	if (sChar != sCharD)
	{
		sCharD = sChar;
		PC.ConsoleCommand("ChangeCharacter"@sChar);
		if ( PC.IsA('xPlayer') )
			bSave = False;
		else PC.UpdateURL("Character", sChar, True);

		if ( PlayerRec.Sex ~= "Female" )
			PC.UpdateURL("Sex", "F", True);
		else
			PC.UpdateURL("Sex", "M", True);
	}

	if (sVoice != sVoiceD)
	{
		sVoiceD = sVoice;
		PC.SetVoice(sVoice);
	}

	if (bSave)
		PC.SaveConfig();
}

function ResetClicked()
{
	local int i;
	local bool bTemp;
	local PlayerController PC;

	Super.ResetClicked();

	PC = PlayerOwner();
	PC.ConsoleCommand("ChangeCharacter Jakob");
	PC.ConsoleCommand("setname Player");
	PC.ChangeTeam(255);

	PC.UpdateURL("Name", "Player", True);
	PC.UpdateURL("Character", "Jakob", True);
	PC.UpdateURL("Sex", "M", True);
	PC.UpdateURL("Team", "255", True);


	class'Controller'.static.ResetConfig("Handedness");
	class'PlayerController'.static.ResetConfig("bSmallWeapons");
	class'PlayerController'.static.ResetConfig("DefaultFOV");

	bTemp = Controller.bCurMenuInitialized;
	Controller.bCurMenuInitialized = False;

	for (i = 0; i < Controls.Length; i++)
		Controls[i].LoadINI();

    bRenderDude = True;
    SetPlayerRec();

	Controller.bCurMenuInitialized = bTemp;
}

function InternalOnLoadINI(GUIComponent Sender, string s)
{
	local PlayerController PC;

	PC = PlayerOwner();
	if (GUIMenuOption(Sender) != None)
	{
		switch (GUIMenuOption(Sender))
		{
		case ed_Name:
			sName = PC.GetUrlOption("Name");
			sNameD = sName;
			ed_Name.SetText(sName);
			break;

		case co_Team:
			if (PC.PlayerReplicationInfo == None || PC.PlayerReplicationInfo.Team == None)
				iTeam = int(PC.GetUrlOption("Team"));
			else iTeam = PC.PlayerReplicationInfo.Team.TeamIndex;

			iTeamD = iTeam;
			if (iTeam > 1)
				iTeam = 2;

			co_Team.SetIndex(iTeam);
			break;

		case co_Voice:
			if ( PC.PlayerReplicationInfo == None || PC.PlayerReplicationInfo.VoiceTypeName == "" )
				sVoice = PC.GetUrlOption("Voice");
			else sVoice = PC.PlayerReplicationInfo.VoiceTypeName;
			sVoiceD = sVoice;
			break;

		case ch_SmallWeaps:
			bWeaps = PC.bSmallWeapons;
			bWeapsD = bWeaps;
			ch_SmallWeaps.Checked(bWeaps);
			break;

		case co_Hand:
			iHand = PC.Handedness + 1;
			iHandD = iHand;
			co_Hand.SetIndex(iHand);
			break;

		case nu_FOV:
			iFOV = PC.DefaultFOV;
			iFOVD = iFOV;
			nu_FOV.SetValue(iFOV);
			break;

		default:
			log(Name@"Unknown component calling LoadINI:"$ GUIMenuOption(Sender).Caption);
			GUIMenuOption(Sender).SetComponentValue(s,true);
		}
	}

	else if ( Sender == i_Portrait )
	{
		sChar = PC.GetUrlOption("Character");
		sCharD = sChar;
	}
}

function InternalOnChange(GUIComponent Sender)
{
	local PlayerController PC;

	PC = PlayerOwner();
	Super.InternalOnChange(Sender);
	if (GUIMenuOption(Sender) != None)
	{
		switch (GUIMenuOption(Sender))
		{
		case ed_Name:
			sName = ed_Name.GetText();
			break;

		case co_Team:
			iTeam = co_Team.GetIndex();
			break;

		case ch_SmallWeaps:
			bWeaps = ch_SmallWeaps.IsChecked();
			break;

		case co_Hand:
			iHand = co_Hand.GetIndex();
			break;

		case nu_FOV:
			iFOV = nu_FOV.GetValue();
			break;

		case co_Voice:
			sVoice = co_Voice.GetExtra();
			PreviewVoice( class<xVoicePack>(co_Voice.GetObject()) );
			VoiceTypeChanged(sVoice);
			break;
		}
	}

	else if ( Sender == co_SkinPreview )
		UpdateSpinnyDude();
}

function PreviewVoice(class<xVoicePack> NewVoiceClass)
{
	local int Index;

	if ( NewVoiceClass == None )
		return;

	Index = NewVoiceClass.static.PickCustomTauntFor( PlayerOwner(), True, False, 21 );
	PlayerOwner().ClientPlaySound(NewVoiceClass.default.TauntSound[Index],,,SLOT_Interface);
}
function UpdateVoiceOptions()
{
	local int i;
	local bool bTemp;

	bTemp = Controller.bCurMenuInitialized;
	Controller.bCurMenuInitialized = False;

	co_Voice.MyComboBox.List.Clear();
	co_Voice.AddItem(DefaultText);
	for ( i = 0; i < VoiceClasses.Length; i++ )
	{
		if ( class'TeamVoicePack'.static.VoiceMatchesGender(VoiceClasses[i].default.VoiceGender, PlayerRec.Sex) )
			co_Voice.AddItem(VoiceClasses[i].default.VoicePackName,VoiceClasses[i],string(VoiceClasses[i]));
	}

	i = co_Voice.FindIndex(sVoice,,True);
	if ( i != -1 )
		co_Voice.SetIndex(i);
	else co_Voice.SetIndex(0);

	Controller.bCurMenuInitialized = bTemp;
}

function UpdateScroll()
{
	lb_Scroll.SetContent(Controller.LoadDecoText("",PlayerRec.TextName));
}

function UpdateSpinnyDude()
{
	local Mesh PlayerMesh;
	local Material BodySkin, HeadSkin;
    local string BodySkinName, HeadSkinName, TeamSuffix;
    local bool bBrightSkin;

	i_Portrait.Image = PlayerRec.Portrait;
	PlayerMesh = Mesh(DynamicLoadObject(PlayerRec.MeshName, class'Mesh'));
	if(PlayerMesh == None)
	{
		Log("Could not load mesh: "$PlayerRec.MeshName$" For player: "$PlayerRec.DefaultName);
		return;
	}


	// Setup options
	TeamSuffix = Eval( co_SkinPreview.GetIndex() > 0, Eval(co_SkinPreview.GetIndex() == 1, "_0", "_1"), "" );

	// Get the body skin
    BodySkinName = PlayerRec.BodySkinName $ TeamSuffix;
	bBrightSkin = class'DMMutator'.default.bBrightSkins && Left(BodySkinName,12) ~= "PlayerSkins.";

    if ( bBrightSkin && TeamSuffix != "" )
    	BodySkinName = "Bright" $ BodySkinName $ "B";

	// Get the head skin
    HeadSkinName = PlayerRec.FaceSkinName;
    if ( PlayerRec.TeamFace )
    	HeadSkinName $= TeamSuffix;

	BodySkin = Material(DynamicLoadObject(BodySkinName, class'Material'));
	if(BodySkin == None)
	{
		Log("Could not load body material: "$PlayerRec.BodySkinName$" For player: "$PlayerRec.DefaultName);
		return;
	}

	if ( bBrightSkin )
		SpinnyDude.AmbientGlow = SpinnyDude.default.AmbientGlow * 0.8;
	else SpinnyDude.AmbientGlow = SpinnyDude.default.AmbientGlow;


	HeadSkin = Material(DynamicLoadObject(HeadSkinName, class'Material'));
	if(HeadSkin == None)
	{
		Log("Could not load head material: "$HeadSkinName$" For player: "$PlayerRec.DefaultName);
		return;
	}

	SpinnyDude.LinkMesh(PlayerMesh);
	SpinnyDude.Skins[0] = BodySkin;
	SpinnyDude.Skins[1] = HeadSkin;
	SpinnyDude.LoopAnim( 'Idle_Rest', 1.0/SpinnyDude.Level.TimeDilation );
}

function bool InternalDraw(Canvas canvas)
{
	local vector CamPos, X, Y, Z;
	local rotator CamRot;
	local float   oOrgX, oOrgY;
	local float   oClipX, oClipY;

	if(bRenderDude)
	{
    	oOrgX = Canvas.OrgX;
        oOrgY = Canvas.OrgY;
        oClipX = Canvas.ClipX;
        oClipY = Canvas.ClipY;

        Canvas.OrgX = b_DropTarget.ActualLeft();
        Canvas.OrgY = b_DropTarget.ActualTop();
        Canvas.ClipX = b_DropTarget.ActualWidth();
        Canvas.ClipY = b_DropTarget.ActualHeight();

		canvas.GetCameraLocation(CamPos, CamRot);
		GetAxes(CamRot, X, Y, Z);

		SpinnyDude.SetLocation(CamPos + (SpinnyDudeOffset.X * X) + (SpinnyDudeOffset.Y * Y) + (SpinnyDudeOffset.Z * Z));
		canvas.DrawActorClipped(SpinnyDude, false,  b_DropTarget.ActualLeft(), b_DropTarget.ActualTop(), b_DropTarget.ActualWidth(), b_DropTarget.ActualHeight(), true, nFov);

        Canvas.OrgX = oOrgX;
	    Canvas.OrgY = oOrgY;
    	Canvas.ClipX = oClipX;
        Canvas.ClipY = oClipY;
	}

	return bRenderDude;
}

function bool PickModel(GUIComponent Sender)
{
    if ( Controller.OpenMenu("GUI2K4.UT2K4ModelSelect",
                              PlayerRec.DefaultName,
		                      Eval(Controller.CtrlPressed, PlayerRec.Race, "")) )
    	Controller.ActivePage.OnClose = ModelSelectClosed;

    return true;
}

function ModelSelectClosed( optional bool bCancelled )
{
	local string str;

	if ( bCancelled )
		return;

	str = Controller.ActivePage.GetDataString();
	if ( str != "" )
	{
		sChar = str;
		SetPlayerRec();
	}
}

function ShowSpinnyDude()
{
	if ( bRenderDude )
	{
		UpdateSpinnyDude(); // Load current character
        co_SkinPreview.SetVisibility(true);
		b_3DView.Caption = ShowBioCaption; // Change button caption
		b_DropTarget.MouseCursorIndex = 5;
	}
	else
	{
		// Put text back into box
		i_Portrait.Image = PlayerRec.Portrait;
		b_3DView.Caption = Show3DViewCaption;
        co_SkinPreview.SetVisibility(false);
		SpinnyDude.LinkMesh(None);
		b_DropTarget.MouseCursorIndex = 0;
	}

}

function bool Toggle3DView(GUIComponent Sender)
{
	bRenderDude = !bRenderDude;
	ShowSpinnyDude();

	return true;
}

function bool NextAnim(GUIComponent Sender)
{
	if(bRenderDude)
	{
		SpinnyDude.PlayNextAnim();
	}

	return true;
}

function bool RaceCapturedMouseMove(float deltaX, float deltaY)
{
	local rotator r;
  	r = SpinnyDude.Rotation;
    r.Yaw -= (256 * DeltaX);
    SpinnyDude.SetRotation(r);
    return true;
}

event Opened(GUIComponent Sender)
{
	local rotator R;

	Super.Opened(Sender);

	if ( SpinnyDude != None )
	{
		R.Yaw = 32768;
		R.Pitch = -1024;
		SpinnyDude.SetRotation(R+PlayerOwner().Rotation);
		SpinnyDude.bHidden = false;
	}
}

event Closed(GUIComponent Sender, bool bCancelled)
{
	Super.Closed(Sender, bCancelled);
	if ( SpinnyDude != None )
		SpinnyDude.bHidden = true;
}

function Free()
{
	Super.Free();

	VoiceClasses.Remove(0, VoiceClasses.Length);
	if ( co_Voice != None )
		co_Voice.MyComboBox.List.Clear();

	if ( SpinnyDude != None )
		SpinnyDude.Destroy();

	SpinnyDude = None;
}
/*
function bool CoolOnKeyEvent(out byte Key, out byte State, float delta)
{
	local rotator r;
	local Interactions.EInputKey iKey;

	iKey = EInputKey(Key);

	if ( State != 1 )
		return false;

	if ( iKey == IK_A || iKey == IK_Left )
	if (key==69 && state==1)
    {
    	SpinnyDudeOffset.X = SpinnyDudeOffset.X - 1;
    	logspinnydude();
        return true;
    }

	if (key==67 && state==1)
    {
    	SpinnyDudeOffset.X = SpinnyDudeOffset.X + 1;
    	logspinnydude();
        return true;
    }

	if (key==65 && state==1)
    {
    	SpinnyDudeOffset.Y = SpinnyDudeOffset.Y - 1;
    	logspinnydude();
        return true;
    }

	if (key==68 && state==1)
    {
    	SpinnyDudeOffset.Y = SpinnyDudeOffset.Y + 1;
    	logspinnydude();
        return true;
    }

	if (key==87 && state==1)
    {
    	SpinnyDudeOffset.Z = SpinnyDudeOffset.Z - 1;
    	logspinnydude();
        return true;
    }

	if (key==88 && state==1)
    {
    	SpinnyDudeOffset.Z = SpinnyDudeOffset.Z + 1;
    	logspinnydude();
        return true;
    }

	if (key==81 && state==1)
    {
    	r = SpinnyDude.Rotation;
        r.Yaw += 1024;
        SpinnyDude.SetRotation(r);
    	logspinnydude();
        return true;
    }

	if (key==90 && state==1)
    {
    	r = SpinnyDude.Rotation;
        r.Yaw -= 1024;
        SpinnyDude.SetRotation(r);
    	logspinnydude();
        return true;
    }

	if (key==82 && state==1)
    {
    	r = SpinnyDude.Rotation;
        r.Pitch += 1024;
        SpinnyDude.SetRotation(r);
    	logspinnydude();
        return true;
    }

	if (key==86 && state==1)
    {
    	r = SpinnyDude.Rotation;
        r.Pitch -= 1024;
        SpinnyDude.SetRotation(r);
    	logspinnydude();
        return true;
    }

	if (key==49 && state==1)
    {
        nFOV+=5;
    	logspinnydude();
        return true;
    }

	if (key==50 && state==1)
    {
        nFOV-=5;
    	logspinnydude();
        return true;
    }


    return false;
}
*/
function logspinnydude()
{
	log("SpinnyDudeOffset X:"$SpinnyDudeOffset.X@"Y:"$SpinnyDudeOffset.Y@"Z:"$SpinnyDudeOffset.Z@"Roll:"$SpinnyDude.Rotation.Roll@"Pitch:"$SpinnyDude.Rotation.Pitch@"Yaw:"$SpinnyDude.Rotation.Yaw@"FOV:"$nfov);
}
defaultproperties
{
//	OnKeyEvent=CoolOnKeyEvent
	Begin Object class=GUISectionBackground Name=PlayerBK1
		WinWidth=0.446758
		WinHeight=0.963631
		WinLeft=0.004063
		WinTop=0.017969
        Caption="3D View"
	End Object
	i_BG1=PlayerBK1

	Begin Object class=GUISectionBackground Name=PlayerBK2
		WinWidth=0.531719
		WinHeight=0.573006
		WinLeft=0.463047
		WinTop=0.017969
        Caption="Misc."
	End Object
	i_BG2=PlayerBK2

	Begin Object class=GUISectionBackground Name=PlayerBK3
		WinWidth=0.531719
		WinHeight=0.372811
		WinLeft=0.463047
		WinTop=0.610417
        Caption="Biography"
		LeftPadding=0.02
		RightPadding=0.02
		TopPadding=0.02
		BottomPadding=0.02
        bFillClient=true
	End Object
	i_BG3=PlayerBK3

	Begin Object Class=GUIComboBox Name=SkinPreview
		WinWidth=0.346258
		WinLeft=0.053531
		WinHeight=0.03
		WinTop=0.111470
		Hint="Show how the model looks using the selected skin."
		TabOrder=0
        bReadOnly=true
        bVisible=true
        OnChange=InternalOnChange
	End Object
	co_SkinPreview=SkinPreview

	Begin Object class=GUIButton Name=Player3DView
		WinWidth=0.130720
		WinHeight=0.050000
		WinLeft=0.043685
		WinTop=0.901559
		Caption="3D View"
		Hint="Toggle between 3D view and portrait of character."
		OnClick=Toggle3DView
		TabOrder=1
	End Object
	b_3DView=Player3DView

	Begin Object class=GUIButton Name=bPickModel
		WinWidth=0.233399
		WinHeight=0.050000
		WinLeft=0.177174
		WinTop=0.901559
		Caption="Change Character"
		Hint="Select a new Character."
		OnClick=PickModel
		TabOrder=2
	End Object
	b_Pick=bPickModel

	Begin Object class=moEditBox Name=PlayerName
		WinWidth=0.373242
		WinLeft=0.301757
		WinTop=0.076042
		Caption="Name"
		INIOption="@INTERNAL"
		INIDefault="Player"
		OnLoadINI=InternalOnLoadINI
		Hint="Changes the alias you play as."
		CaptionWidth=0.5
		bAutoSizeCaption=True
		TabOrder=3
	End Object
	ed_Name=PlayerName

	Begin Object Class=moComboBox Name=VoiceType
		WinWidth=0.372266
		WinLeft=0.301757
		WinTop=0.212761
		Caption="Voice Type"
		INIOption="@Internal"
		OnLoadINI=InternalOnLoadINI
		Hint="Choose how your character's voice will sound in the game."
		CaptionWidth=0.5
		bAutoSizeCaption=True
		ComponentJustification=TXTA_Left
		TabOrder=4
		bReadOnly=True
	End Object
	co_Voice=VoiceType

	Begin Object class=moNumericEdit Name=PlayerFOV
		WinWidth=0.266797
		WinLeft=0.705430
		WinTop=0.076042
		Caption="Default FOV"
		CaptionWidth=0.7
		MinValue=80
		MaxValue=100
		INIOption="@INTERNAL"
		INIDefault="85"
		OnLoadINI=InternalOnLoadINI
		ComponentJustification=TXTA_Left
		Hint="This value will change your field of view while playing."
		bHeightFromComponent=false
		TabOrder=5
	End Object
	nu_FOV=PlayerFOV

	Begin Object class=moComboBox Name=PlayerTeam
		WinWidth=0.374219
		WinLeft=0.301757
		WinTop=0.150261
		Caption="Preferred Team"
		INIOption="@Internal"
		INIDefault="Red"
		OnLoadINI=InternalOnLoadINI
		Hint="Changes the team you will play on by default."
		CaptionWidth=0.7
		ComponentJustification=TXTA_Left
		bAutoSizeCaption=True
		TabOrder=6
		bReadOnly=True
	End Object
	co_Team=PlayerTeam

	Begin Object class=moComboBox Name=PlayerHand
		WinWidth=0.264766
		WinLeft=0.705430
		WinTop=0.212761
		Caption="Weapon Hand"
		INIOption="@INTERNAL"
		INIDefault="Right"
		OnLoadINI=InternalOnLoadINI
		Hint="Changes whether your weapon is visible."
		CaptionWidth=0.7
		ComponentJustification=TXTA_Left
		bAutoSizeCaption=True
		TabOrder=7
		bReadOnly=True
	End Object
	co_Hand=PlayerHand

	Begin Object class=moCheckBox Name=PlayerSmallWeap
		WinWidth=0.266797
		WinLeft=0.705430
		WinTop=0.150261
		Caption="Small Weapons"
		OnLoadINI=InternalOnLoadINI
		INIOption="@Internal"
		INIDefault="False"
		Hint="Makes your first person weapon smaller."
		CaptionWidth=0.94
		bSquare=true
		bHeightFromComponent=false
		ComponentJustification=TXTA_Right
		TabOrder=8
	End Object
	ch_SmallWeaps=PlayerSmallWeap


	Begin Object Class=GUIScrollTextBox Name=PlayerScroll
		WinWidth=0.686915
		WinHeight=0.260351
		WinLeft=0.291288
		WinTop=0.321365
		CharDelay=0.0025
		EOLDelay=0.5
		TabOrder=9
        StyleName="NoBackground"
	End Object
	lb_Scroll=PlayerScroll

	Begin Object class=GUIImage Name=PlayerPortrait
		WinWidth=0.334368
		WinHeight=0.798132
		WinLeft=0.057016
		WinTop=0.094895
		Image=Texture'InterfaceArt_tex.Menu.changeme_texture' //Material'2K4Menus.Controls.thinpipe_b'
		ImageColor=(R=255,G=255,B=255,A=255)
		ImageRenderStyle=MSTY_Normal
		ImageStyle=ISTY_Scaled
        RenderWeight=0.3
        OnLoadINI=InternalOnLoadINI
        IniOption="@Internal"
        OnDraw=InternalDraw
	End Object
	i_Portrait=PlayerPortrait

	Begin Object class=GUIButton Name=DropTarget
		WinWidth=0.427141
		WinHeight=0.798132
		WinLeft=0.013071
		WinTop=0.114426
		Caption=""
		Hint=""
        bNeverFocus=true
        StyleName="NoBackground"
        bDropTarget=true
        bCaptureMouse=true
        OnCapturedMouseMove=RaceCapturedMouseMove
        MouseCursorIndex=5
        bTabStop=false
	End Object
	b_DropTarget=DropTarget

	WinTop=0.15
	WinLeft=0
	WinWidth=1
	WinHeight=0.72
	bAcceptsInput=false

	HandNames(0)="Left"
	HandNames(1)="Center"
	HandNames(2)="Right"
	HandNames(3)="Hidden"

	TeamNames(0)="Red"
	TeamNames(1)="Blue"
	TeamNames(2)="None"

	PanelCaption="Player"

	SpinnyDudeOffset=(X=70,Y=0,Z=0)
	ShowBioCaption="Portrait"
	Show3DViewCaption="3D View"
	DefaultText="Default"
    ClickInst="Double-Click or drag to select"
    All="All"
    nFov=65

    Previews(0)="View Normal Skin"
    Previews(1)="View Red Skin"
    Previews(2)="View Blue Skin"

}
