UMenu
Class UMenuPlayerSetupClient

source: e:\games\UnrealTournament\UMenu\Classes\UMenuPlayerSetupClient.uc
Core.Object
   |
   +--UWindow.UWindowBase
      |
      +--UWindow.UWindowWindow
         |
         +--UWindow.UWindowClientWindow
            |
            +--UWindow.UWindowDialogClientWindow
               |
               +--UMenu.UMenuDialogClientWindow
                  |
                  +--UMenu.UMenuPlayerSetupClient
Direct Known Subclasses:UMenuBotSetupBase, UTPlayerSetupClient

class UMenuPlayerSetupClient
extends UMenu.UMenuDialogClientWindow


Variables
 UWindowComboControl ClassCombo
 string ClassHelp
 string ClassText
 int ControlOffset
 UWindowComboControl FaceCombo
 string FaceHelp
 string FaceText
 bool Initialized
 string MeshName
 UMenuPlayerMeshClient MeshWindow
 UWindowEditControl NameEdit
 string NameHelp
 string NameText
 class NewPlayerClass
 string NoTeam
 string PlayerBaseClass
 UWindowComboControl SkinCombo
 string SkinHelp
 string SkinText
 UWindowComboControl TeamCombo
 string TeamHelp
 string TeamText
 string Teams[4]


Function Summary
 void AfterCreate()
 void BeforePaint(Canvas C, float X, float Y)
 void ClassChanged()
 void Created()
 void FaceChanged()
 void IterateFaces(string InSkinName)
 void IterateSkins()
 void LoadClasses()
 void LoadCurrent()
 void NameChanged()
 void Notify(UWindowDialogControl C, byte E)
 void SaveConfigs()
 void SkinChanged()
 void TeamChanged()
 void UseSelected()



Source Code


00001	class UMenuPlayerSetupClient extends UMenuDialogClientWindow;
00002	
00003	var() int ControlOffset;
00004	
00005	var class<Pawn> NewPlayerClass;
00006	var string MeshName;
00007	var bool Initialized;
00008	var UMenuPlayerMeshClient MeshWindow;
00009	var string PlayerBaseClass;
00010	
00011	// Player Name
00012	var UWindowEditControl NameEdit;
00013	var localized string NameText;
00014	var localized string NameHelp;
00015	
00016	// Team Combo
00017	var UWindowComboControl TeamCombo;
00018	var localized string TeamText;
00019	var localized string Teams[4];
00020	var localized string NoTeam;
00021	var localized string TeamHelp;
00022	
00023	// Class Combo
00024	var UWindowComboControl ClassCombo;
00025	var localized string ClassText;
00026	var localized string ClassHelp;
00027	
00028	// Skin Combo
00029	var UWindowComboControl SkinCombo;
00030	var localized string SkinText;
00031	var localized string SkinHelp;
00032	
00033	// Face Combo
00034	var UWindowComboControl FaceCombo;
00035	var localized string FaceText;
00036	var localized string FaceHelp;
00037	
00038	function Created()
00039	{
00040		local string SkinName, FaceName;
00041	
00042		local int ControlWidth, ControlLeft, ControlRight;
00043		local int CenterWidth, CenterPos;
00044		local int I;
00045		
00046		MeshWindow = UMenuPlayerMeshClient(UMenuPlayerClientWindow(ParentWindow.ParentWindow.ParentWindow).Splitter.RightClientWindow);
00047	
00048		Super.Created();
00049	
00050		ControlWidth = WinWidth/2.5;
00051		ControlLeft = (WinWidth/2 - ControlWidth)/2;
00052		ControlRight = WinWidth/2 + ControlLeft;
00053	
00054		CenterWidth = (WinWidth/4)*3;
00055		CenterPos = (WinWidth - CenterWidth)/2;
00056	
00057		NewPlayerClass = GetPlayerOwner().Class;
00058	
00059		// Player Name
00060		NameEdit = UWindowEditControl(CreateControl(class'UWindowEditControl', CenterPos, ControlOffset, CenterWidth, 1));
00061		NameEdit.SetText(NameText);
00062		NameEdit.SetHelpText(NameHelp);
00063		NameEdit.SetFont(F_Normal);
00064		NameEdit.SetNumericOnly(False);
00065		NameEdit.SetMaxLength(20);
00066		NameEdit.SetDelayedNotify(True);
00067	
00068		// Team
00069		ControlOffset += 25;
00070		TeamCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', CenterPos, ControlOffset, CenterWidth, 1));
00071		TeamCombo.SetText(TeamText);
00072		TeamCombo.SetHelpText(TeamHelp);
00073		TeamCombo.SetFont(F_Normal);
00074		TeamCombo.SetEditable(False);
00075		TeamCombo.AddItem(NoTeam, String(255));
00076		for (I=0; I<4; I++)
00077			TeamCombo.AddItem(Teams[I], String(i));
00078	
00079		ControlOffset += 25;
00080		// Load Classes
00081		ClassCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', CenterPos, ControlOffset, CenterWidth, 1));
00082		ClassCombo.SetText(ClassText);
00083		ClassCombo.SetHelpText(ClassHelp);
00084		ClassCombo.SetEditable(False);
00085		ClassCombo.SetFont(F_Normal);
00086	
00087		// Skin
00088		ControlOffset += 25;
00089		SkinCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', CenterPos, ControlOffset, CenterWidth, 1));
00090		SkinCombo.SetText(SkinText);
00091		SkinCombo.SetHelpText(SkinHelp);
00092		SkinCombo.SetFont(F_Normal);
00093		SkinCombo.SetEditable(False);
00094	
00095		ControlOffset += 25;
00096		FaceCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', CenterPos, ControlOffset, CenterWidth, 1));
00097		FaceCombo.SetText(FaceText);
00098		FaceCombo.SetHelpText(FaceHelp);
00099		FaceCombo.SetFont(F_Normal);
00100		FaceCombo.SetEditable(False);
00101	
00102		LoadClasses();
00103	}
00104	
00105	
00106	function AfterCreate()
00107	{
00108		Super.AfterCreate();
00109	
00110		DesiredWidth = 220;
00111		DesiredHeight = ControlOffset + 25;
00112	
00113		LoadCurrent();
00114		UseSelected();
00115			
00116		Initialized = True;
00117	}
00118	
00119	function LoadClasses()
00120	{
00121		local int NumPlayerClasses;
00122		local string NextPlayer, NextDesc;
00123		local int SortWeight;
00124	
00125		GetPlayerOwner().GetNextIntDesc(PlayerBaseClass, 0, NextPlayer, NextDesc);
00126		while( (NextPlayer != "") && (NumPlayerClasses < 64) )
00127		{
00128			ClassCombo.AddItem(NextDesc, NextPlayer, SortWeight);
00129			NumPlayerClasses++;
00130			GetPlayerOwner().GetNextIntDesc(PlayerBaseClass, NumPlayerClasses, NextPlayer, NextDesc);
00131		}
00132		ClassCombo.Sort();
00133	}
00134	
00135	function LoadCurrent()
00136	{
00137		local string SN, FN;
00138	
00139		NameEdit.SetValue(GetPlayerOwner().PlayerReplicationInfo.PlayerName);
00140		TeamCombo.SetSelectedIndex(Max(TeamCombo.FindItemIndex2(string(GetPlayerOwner().PlayerReplicationInfo.Team)), 0));
00141		if(GetLevel().Game != None && GetLevel().Game.IsA('UTIntro'))
00142		{
00143			SN = GetPlayerOwner().GetDefaultURL("Skin");
00144			FN = GetPlayerOwner().GetDefaultURL("Face");
00145			ClassCombo.SetSelectedIndex(Max(ClassCombo.FindItemIndex2(GetPlayerOwner().GetDefaultURL("Class"), True), 0));
00146		}
00147		else
00148		{
00149			ClassCombo.SetSelectedIndex(Max(ClassCombo.FindItemIndex2(string(GetPlayerOwner().Class), True), 0));
00150			GetPlayerOwner().static.GetMultiSkin(GetPlayerOwner(), SN, FN);
00151		}
00152		SkinCombo.SetSelectedIndex(Max(SkinCombo.FindItemIndex2(SN, True), 0));
00153		FaceCombo.SetSelectedIndex(Max(FaceCombo.FindItemIndex2(FN, True), 0));
00154	}
00155	
00156	function SaveConfigs()
00157	{
00158		Super.SaveConfigs();
00159		GetPlayerOwner().SaveConfig();
00160		GetPlayerOwner().PlayerReplicationInfo.SaveConfig();
00161	}
00162	
00163	function IterateSkins()
00164	{
00165		local string SkinName, SkinDesc, TestName, Temp, FaceName;
00166		local int i;
00167		local bool bNewFormat;
00168	
00169		SkinCombo.Clear();
00170	
00171		if( ClassIsChildOf(NewPlayerClass, class'Spectator') )
00172		{
00173			SkinCombo.HideWindow();
00174			return;
00175		}
00176		else
00177			SkinCombo.ShowWindow();
00178	
00179		bNewFormat = NewPlayerClass.default.bIsMultiSkinned;
00180	
00181		SkinName = "None";
00182		TestName = "";
00183		while ( True )
00184		{
00185			GetPlayerOwner().GetNextSkin(MeshName, SkinName, 1, SkinName, SkinDesc);
00186	
00187			if( SkinName == TestName )
00188				break;
00189	
00190			if( TestName == "" )
00191				TestName = SkinName;
00192	
00193			if( !bNewFormat )
00194			{
00195				Temp = GetPlayerOwner().GetItemName(SkinName);
00196				if( Left(Temp, 2) != "T_" )
00197					SkinCombo.AddItem(Temp, SkinName);
00198			}
00199			else
00200			{
00201				// Multiskin format
00202				if( SkinDesc != "")
00203				{			
00204					Temp = GetPlayerOwner().GetItemName(SkinName);
00205					if(Mid(Temp, 5, 64) == "")
00206						// This is a skin
00207						SkinCombo.AddItem(SkinDesc, Left(SkinName, Len(SkinName) - Len(Temp)) $ Left(Temp, 4));			
00208				}
00209			}
00210		}
00211		SkinCombo.Sort();
00212	}
00213	
00214	function IterateFaces(string InSkinName)
00215	{
00216		local string SkinName, SkinDesc, TestName, Temp, FaceName;
00217		local bool bNewFormat;
00218	
00219		FaceCombo.Clear();
00220	
00221		// New format only
00222		if( !NewPlayerClass.default.bIsMultiSkinned )
00223		{
00224			FaceCombo.HideWindow();
00225			return;
00226		}
00227		else
00228			FaceCombo.ShowWindow();
00229	
00230	
00231		SkinName = "None";
00232		TestName = "";
00233		while ( True )
00234		{
00235			GetPlayerOwner().GetNextSkin(MeshName, SkinName, 1, SkinName, SkinDesc);
00236	
00237			if( SkinName == TestName )
00238				break;
00239	
00240			if( TestName == "" )
00241				TestName = SkinName;
00242	
00243			// Multiskin format
00244			if( SkinDesc != "")
00245			{			
00246				Temp = GetPlayerOwner().GetItemName(SkinName);
00247				if(Mid(Temp, 5) != "" && Left(Temp, 4) == GetPlayerOwner().GetItemName(InSkinName))
00248					FaceCombo.AddItem(SkinDesc, Left(SkinName, Len(SkinName) - Len(Temp)) $ Mid(Temp, 5));
00249			}
00250		}
00251		FaceCombo.Sort();
00252	}
00253	
00254	
00255	function BeforePaint(Canvas C, float X, float Y)
00256	{
00257		local int ControlWidth, ControlLeft, ControlRight;
00258		local int CenterWidth, CenterPos;
00259		local float W;
00260	
00261		W = Min(WinWidth, 220);
00262	
00263		ControlWidth = W/3;
00264		ControlLeft = (W/2 - ControlWidth)/2;
00265		ControlRight = W/2 + ControlLeft;
00266	
00267		CenterWidth = (W/7)*6;
00268		CenterPos = (W - CenterWidth)/2;
00269	
00270		NameEdit.SetSize(CenterWidth, 1);
00271		NameEdit.WinLeft = CenterPos;
00272		NameEdit.EditBoxWidth = 105;
00273	
00274		TeamCombo.SetSize(CenterWidth, 1);
00275		TeamCombo.WinLeft = CenterPos;
00276		TeamCombo.EditBoxWidth = 105;
00277	
00278		SkinCombo.SetSize(CenterWidth, 1);
00279		SkinCombo.WinLeft = CenterPos;
00280		SkinCombo.EditBoxWidth = 105;
00281	
00282		FaceCombo.SetSize(CenterWidth, 1);
00283		FaceCombo.WinLeft = CenterPos;
00284		FaceCombo.EditBoxWidth = 105;
00285	
00286		ClassCombo.SetSize(CenterWidth, 1);
00287		ClassCombo.WinLeft = CenterPos;
00288		ClassCombo.EditBoxWidth = 105;
00289	
00290	}
00291	
00292	function Notify(UWindowDialogControl C, byte E)
00293	{
00294		Super.Notify(C, E);
00295	
00296		switch(E)
00297		{
00298		case DE_Change:
00299			switch(C)
00300			{
00301				case NameEdit:
00302					NameChanged();
00303					break;
00304				case TeamCombo:
00305					TeamChanged();
00306					break;
00307				case SkinCombo:
00308					SkinChanged();
00309					break;
00310				case ClassCombo:
00311					ClassChanged();
00312					break;
00313				case FaceCombo:
00314					FaceChanged();
00315					break;
00316			}
00317		}
00318	}
00319	
00320	function NameChanged()
00321	{
00322		local string N;
00323		if (Initialized)
00324		{
00325			Initialized = False;
00326			N = NameEdit.GetValue();
00327			ReplaceText(N, " ", "_");
00328			NameEdit.SetValue(N);
00329			Initialized = True;
00330	
00331			GetPlayerOwner().ChangeName(NameEdit.GetValue());
00332			GetPlayerOwner().UpdateURL("Name", NameEdit.GetValue(), True);
00333		}
00334	}
00335	
00336	function TeamChanged()
00337	{
00338		if (Initialized)
00339			UseSelected();
00340	}
00341	
00342	function SkinChanged()
00343	{
00344		local bool OldInitialized;
00345	
00346		OldInitialized = Initialized;
00347		Initialized = False;
00348		IterateFaces(SkinCombo.GetValue2());
00349		FaceCombo.SetSelectedIndex(0);
00350		Initialized = OldInitialized;
00351	
00352		if (Initialized)
00353			UseSelected();
00354	}
00355	
00356	function FaceChanged()
00357	{
00358		if (Initialized)
00359			UseSelected();
00360	}
00361	
00362	function ClassChanged()
00363	{
00364		local string SkinName, SkinDesc;
00365		local bool OldInitialized;
00366	
00367		// Get the class.
00368		NewPlayerClass = class<Pawn>(DynamicLoadObject(ClassCombo.GetValue2(), class'Class'));
00369	
00370		// Get the meshname
00371		MeshName = GetPlayerOwner().GetItemName(String(NewPlayerClass.Default.Mesh));
00372	
00373		OldInitialized = Initialized;
00374		Initialized = False;
00375	
00376		IterateSkins();
00377		SkinCombo.SetSelectedIndex(0);
00378		IterateFaces(SkinCombo.GetValue2());
00379		FaceCombo.SetSelectedIndex(0);
00380		Initialized = OldInitialized;
00381	
00382		if (Initialized)
00383			UseSelected();
00384	}
00385	
00386	
00387	function UseSelected()
00388	{
00389		local int NewTeam;
00390	
00391		if (Initialized)
00392		{
00393			GetPlayerOwner().UpdateURL("Class", ClassCombo.GetValue2(), True);
00394			GetPlayerOwner().UpdateURL("Skin", SkinCombo.GetValue2(), True);
00395			GetPlayerOwner().UpdateURL("Face", FaceCombo.GetValue2(), True);
00396			GetPlayerOwner().UpdateURL("Team", TeamCombo.GetValue2(), True);
00397	
00398			NewTeam = Int(TeamCombo.GetValue2());
00399	
00400			// if the same class as current class, change skin
00401			if( ClassCombo.GetValue2() ~= String( GetPlayerOwner().Class ))
00402				GetPlayerOwner().ServerChangeSkin(SkinCombo.GetValue2(), FaceCombo.GetValue2(), NewTeam);
00403	
00404			if( GetPlayerOwner().PlayerReplicationInfo.Team != NewTeam )
00405				GetPlayerOwner().ChangeTeam(NewTeam);
00406		}
00407	
00408		MeshWindow.SetMeshString(NewPlayerClass.Default.SelectionMesh);
00409		MeshWindow.ClearSkins();
00410		NewPlayerClass.static.SetMultiSkin(MeshWindow.MeshActor, SkinCombo.GetValue2(), FaceCombo.GetValue2(), Int(TeamCombo.GetValue2()));
00411	}
00412	
00413	defaultproperties
00414	{
00415	     ControlOffset=25
00416	     PlayerBaseClass="UnrealiPlayer"
00417	     NameText="Name:"
00418	     NameHelp="Set your player name."
00419	     TeamText="Team:"
00420	     Teams(0)="Red"
00421	     Teams(1)="Blue"
00422	     Teams(2)="Green"
00423	     Teams(3)="Gold"
00424	     NoTeam="None"
00425	     TeamHelp="Select the team you wish to play on."
00426	     ClassText="Class:"
00427	     ClassHelp="Select your player class."
00428	     SkinText="Skin:"
00429	     SkinHelp="Choose a skin for your player."
00430	     FaceText="Face:"
00431	     FaceHelp="Choose a face for your player."
00432	}

End Source Code