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 }
|