00001 //=============================================================================
00002 // UnrealPlayerMenu
00003 //=============================================================================
00004 class UnrealPlayerMenu extends UnrealShortMenu
00005 config(user);
00006
00007 var actor RealOwner;
00008 var bool bSetup, bPulseDown;
00009 var string PlayerName;
00010 var int CurrentTeam;
00011 var localized string Teams[4];
00012 var globalconfig string PreferredSkin;
00013 var globalconfig string ClassString;
00014
00015 function FindSkin(int Dir)
00016 {
00017 local string SkinName, SkinDesc, MeshName;
00018 local texture NewSkin;
00019 local int pos;
00020
00021 MeshName = GetItemName(String(Mesh));
00022 SkinName = string(Skin);
00023 if( Left(SkinName, Len(MeshName)) != MeshName )
00024 SkinName = MeshName$"Skins."$GetItemName(SkinName);
00025 GetNextSkin(MeshName, SkinName, Dir, SkinName, SkinDesc);
00026 if( SkinName != "" )
00027 {
00028 NewSkin = texture(DynamicLoadObject(SkinName, class'Texture'));
00029 if ( NewSkin != None )
00030 Skin = NewSkin;
00031 }
00032 }
00033
00034 function ProcessMenuInput( coerce string InputString )
00035 {
00036 InputString = Left(InputString, 20);
00037
00038 if ( selection == 1 )
00039 {
00040 PlayerOwner.ChangeName(InputString);
00041 PlayerName = PlayerOwner.PlayerReplicationInfo.PlayerName;
00042 PlayerOwner.UpdateURL("Name", InputString, true);
00043 }
00044 }
00045
00046 function ProcessMenuEscape()
00047 {
00048 PlayerName = PlayerOwner.PlayerReplicationInfo.PlayerName;
00049 }
00050
00051 function ProcessMenuUpdate( coerce string InputString )
00052 {
00053 InputString = Left(InputString, 20);
00054
00055 if ( selection == 1 )
00056 PlayerName = (InputString$"_");
00057 }
00058
00059 function Menu ExitMenu()
00060 {
00061 SetOwner(RealOwner);
00062 Super.ExitMenu();
00063 }
00064
00065 function bool ProcessLeft()
00066 {
00067 if ( Selection == 1 )
00068 {
00069 PlayerName = "_";
00070 PlayerOwner.Player.Console.GotoState('MenuTyping');
00071 }
00072 else if ( Selection == 2 )
00073 {
00074 CurrentTeam--;
00075 if (CurrentTeam < 0)
00076 CurrentTeam = 3;
00077 }
00078 else if ( Selection == 3 )
00079 FindSkin(-1);
00080
00081 return true;
00082 }
00083
00084 function bool ProcessRight()
00085 {
00086 if ( Selection == 1 )
00087 {
00088 PlayerName = "_";
00089 PlayerOwner.Player.Console.GotoState('MenuTyping');
00090 }
00091 else if ( Selection == 2 )
00092 {
00093 CurrentTeam++;
00094 if (CurrentTeam > 3)
00095 CurrentTeam = 0;
00096 }
00097 else if ( Selection == 3 )
00098 FindSkin(1);
00099
00100 return true;
00101 }
00102
00103 function bool ProcessSelection()
00104 {
00105 if ( Selection == 1 )
00106 {
00107 PlayerName = "_";
00108 PlayerOwner.Player.Console.GotoState('MenuTyping');
00109 }
00110 return true;
00111 }
00112
00113 function SaveConfigs()
00114 {
00115 if ( ClassString == "" )
00116 {
00117 ClassString = string(PlayerOwner.Class);
00118 Skin = PlayerOwner.Skin;
00119 }
00120 PlayerOwner.UpdateURL("Class",ClassString, true);
00121 PreferredSkin = String(Skin);
00122 PlayerOwner.UpdateURL("Skin",PreferredSkin, true);
00123 if ( Mesh == PlayerOwner.Mesh )
00124 PlayerOwner.ServerChangeSkin( PreferredSkin, "", CurrentTeam );
00125
00126 if ( CurrentTeam != PlayerOwner.PlayerReplicationInfo.Team )
00127 {
00128 PlayerOwner.ChangeTeam(CurrentTeam);
00129 PlayerOwner.UpdateURL("Team",string(CurrentTeam), true);
00130 }
00131
00132 SaveConfig();
00133 PlayerOwner.SaveConfig();
00134 //PlayerOwner.PlayerReplicationInfo.SaveConfig();
00135 }
00136
00137 function MenuTick(float DeltaTime)
00138 {
00139 local int I;
00140
00141 Super.MenuTick(DeltaTime);
00142
00143 // Update FadeTimes.
00144 if (TitleFadeTime >= 0.0)
00145 TitleFadeTime += DeltaTime;
00146 for (I=0; I<24; I++)
00147 if (MenuFadeTimes[I] >= 0.0)
00148 MenuFadeTimes[I] += DeltaTime;
00149 }
00150
00151 function SetUpDisplay()
00152 {
00153 local int I;
00154
00155 bSetup = true;
00156
00157 // Init the FadeTimes.
00158 // -1.0 means not updated.
00159 TitleFadeTime = -1.0;
00160 for (I=0; I<24; I++)
00161 MenuFadeTimes[I] = -1.0;
00162
00163 RealOwner = Owner;
00164 SetOwner(PlayerOwner);
00165 CurrentTeam = PlayerOwner.PlayerReplicationInfo.Team;
00166 PlayerName = PlayerOwner.PlayerReplicationInfo.PlayerName;
00167 PlayerOwner.bBehindView = false;
00168 Mesh = PlayerOwner.Mesh;
00169 Skin = PlayerOwner.Skin;
00170 FindSkin(0);
00171 if ( Mesh != None )
00172 LoopAnim(AnimSequence);
00173 }
00174
00175 function DrawMenu(canvas Canvas)
00176 {
00177 local int i, StartX, StartY, Spacing;
00178 local vector DrawOffset, DrawLoc;
00179 local rotator NewRot, DrawRot;
00180
00181 if (!bSetup)
00182 SetUpDisplay();
00183
00184 // Set menu location.
00185 if ( PlayerOwner.ViewTarget == None )
00186 {
00187 PlayerOwner.ViewRotation.Pitch = 0;
00188 PlayerOwner.ViewRotation.Roll = 0;
00189 DrawRot = PlayerOwner.ViewRotation;
00190 DrawOffset = ((vect(10.0,-5.0,0.0)) >> PlayerOwner.ViewRotation);
00191 DrawLoc = PlayerOwner.Location + PlayerOwner.EyeHeight * vect(0,0,1);
00192 }
00193 else
00194 {
00195 DrawLoc = PlayerOwner.ViewTarget.Location;
00196 DrawRot = PlayerOwner.ViewTarget.Rotation;
00197 if ( Pawn(PlayerOwner.ViewTarget) != None )
00198 {
00199 if ( (Level.NetMode == NM_StandAlone)
00200 && (PlayerOwner.ViewTarget.IsA('PlayerPawn') || PlayerOwner.ViewTarget.IsA('Bot')) )
00201 DrawRot = Pawn(PlayerOwner.ViewTarget).ViewRotation;
00202
00203 DrawLoc.Z += Pawn(PlayerOwner.ViewTarget).EyeHeight;
00204 }
00205 }
00206 DrawOffset = (vect(10.0,-5.0,0.0)) >> DrawRot;
00207 SetLocation(DrawLoc + DrawOffset);
00208 NewRot = DrawRot;
00209 NewRot.Yaw = Rotation.Yaw;
00210 SetRotation(NewRot);
00211 Canvas.DrawActor(Self, false);
00212
00213 // Draw title.
00214 DrawFadeTitle(Canvas);
00215
00216 Spacing = Clamp(0.04 * Canvas.ClipY, 12, 32);
00217 StartX = Canvas.ClipX/2;
00218 StartY = Max(40, 0.5 * (Canvas.ClipY - MenuLength * Spacing - 128));
00219
00220 for ( i=1; i<6; i++ )
00221 MenuList[i] = Default.MenuList[i];
00222 DrawFadeList(Canvas, Spacing, StartX, StartY);
00223
00224 if ( !PlayerOwner.Player.Console.IsInState('MenuTyping') )
00225 PlayerName = PlayerOwner.PlayerReplicationInfo.PlayerName;
00226 MenuList[1] = PlayerName;
00227 MenuList[2] = Teams[Clamp(CurrentTeam,0,3)];
00228
00229 if ( Mesh != None )
00230 MenuList[3] = GetItemName(string(Skin));
00231 else
00232 MenuList[3] = "";
00233
00234 MenuList[5] = "";
00235 DrawFadeList(Canvas, Spacing, StartX + 80, StartY);
00236
00237 // Draw help panel.
00238 Canvas.DrawColor.R = 0;
00239 Canvas.DrawColor.G = 255;
00240 Canvas.DrawColor.B = 0;
00241 DrawHelpPanel(Canvas, Canvas.ClipY - 64, 228);
00242 }
00243
00244 defaultproperties
00245 {
00246 Teams(0)="Red"
00247 Teams(1)="Blue"
00248 Teams(2)="Green"
00249 Teams(3)="Gold"
00250 MenuLength=3
00251 HelpMessage(1)="Hit enter to type in your name. Be sure to do this before joining a multiplayer game."
00252 HelpMessage(2)="Use the arrow keys to change your team color (Red, Blue, Green, or Yellow)."
00253 HelpMessage(3)="Change your skin using the left and right arrow keys."
00254 MenuList(1)="Name: "
00255 MenuList(2)="Team Color:"
00256 MenuList(3)="Skin:"
00257 MenuTitle="Select Digital Representation"
00258 bOnlyOwnerSee=True
00259 Physics=PHYS_Rotating
00260 AnimSequence=Walk
00261 DrawType=DT_Mesh
00262 DrawScale=0.100000
00263 bUnlit=True
00264 bFixedRotationDir=True
00265 RotationRate=(Yaw=8000)
00266 DesiredRotation=(Yaw=30000)
00267 }
|