Core.Object | +--Engine.Actor | +--Engine.Menu | +--UnrealShare.UnrealMenu | +--UnrealShare.UnrealShortMenu | +--UnrealShare.UnrealPlayerMenu | +--UnrealShare.UnrealMeshMenu
string
GamePassword
int
NumPlayerClasses
Class
PlayerClass
PlayerClassNum
PlayerClasses[32]
bool
SinglePlayerOnly
StartMap
void
DrawMenu(Canvas Canvas)
LoadAllMeshes()
PostBeginPlay()
ProcessLeft()
ProcessMenuInput(string InputString)
ProcessMenuUpdate(string InputString)
ProcessRight()
ProcessSelection()
SetUpDisplay()
UpdatePlayerClass(string NewClass, int Offset)
00001 //============================================================================= 00002 // UnrealMeshMenu 00003 //============================================================================= 00004 class UnrealMeshMenu extends UnrealPlayerMenu 00005 config; 00006 00007 var Class<PlayerPawn> PlayerClass; 00008 var string PlayerClasses[32]; 00009 var int NumPlayerClasses; 00010 var int PlayerClassNum; 00011 var string StartMap; 00012 var bool SinglePlayerOnly; 00013 var string GamePassword; 00014 00015 function PostBeginPlay() 00016 { 00017 local string NextPlayer; 00018 00019 Super.PostBeginPlay(); 00020 NextPlayer = GetNextInt("UnrealiPlayer", 0); 00021 while ( (NextPlayer != "") && (NumPlayerClasses < 16) ) 00022 { 00023 PlayerClasses[NumPlayerClasses] = NextPlayer; 00024 NumPlayerClasses++; 00025 NextPlayer = GetNextInt("UnrealiPlayer", NumPlayerClasses); 00026 } 00027 } 00028 00029 function UpdatePlayerClass( string NewClass, int Offset ) 00030 { 00031 PlayerClasses[Offset] = NewClass; 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 else if ( selection == 5 ) 00045 { 00046 GamePassword = InputString; 00047 PlayerOwner.UpdateURL("Password",GamePassword, true); 00048 } 00049 } 00050 00051 function ProcessMenuUpdate( coerce string InputString ) 00052 { 00053 InputString = Left(InputString, 20); 00054 00055 if ( selection == 1 ) 00056 PlayerName = (InputString$"_"); 00057 else if ( selection == 5 ) 00058 GamePassword = (InputString$"_"); 00059 } 00060 00061 function bool ProcessSelection() 00062 { 00063 local int i, p; 00064 00065 if ( Selection == 5 ) 00066 { 00067 GamePassword = "_"; 00068 PlayerOwner.Player.Console.GotoState('MenuTyping'); 00069 } 00070 else if( selection == 6 ) 00071 { 00072 SetOwner(RealOwner); 00073 bExitAllMenus = true; 00074 00075 SaveConfigs(); 00076 00077 StartMap = StartMap 00078 $"?Class="$ClassString 00079 $"?Skin="$Skin 00080 $"?Name="$PlayerOwner.PlayerReplicationInfo.PlayerName 00081 $"?Team="$PlayerOwner.PlayerReplicationInfo.Team; 00082 00083 if ( GamePassword != "" ) 00084 StartMap = StartMap$"?Password="$GamePassword; 00085 00086 PlayerOwner.ClientTravel(StartMap, TRAVEL_Absolute, false); 00087 } 00088 else 00089 Super.ProcessSelection(); 00090 return true; 00091 } 00092 00093 function bool ProcessLeft() 00094 { 00095 if ( selection == 4 ) 00096 { 00097 PlayerClassNum++; 00098 if ( PlayerClassNum == NumPlayerClasses ) 00099 PlayerClassNum = 0; 00100 PlayerClass = ChangeMesh(); 00101 if ( SinglePlayerOnly && !PlayerClass.Default.bSinglePlayer ) 00102 { 00103 ProcessLeft(); 00104 return true; 00105 } 00106 } 00107 else if ( Selection == 5 ) 00108 { 00109 GamePassword = "_"; 00110 PlayerOwner.Player.Console.GotoState('MenuTyping'); 00111 } 00112 else 00113 Super.ProcessLeft(); 00114 00115 return true; 00116 } 00117 00118 function bool ProcessRight() 00119 { 00120 if ( selection == 4 ) 00121 { 00122 PlayerClassNum--; 00123 if ( PlayerClassNum < 0 ) 00124 PlayerClassNum = NumPlayerClasses - 1; 00125 PlayerClass = ChangeMesh(); 00126 if ( SinglePlayerOnly && !PlayerClass.Default.bSinglePlayer ) 00127 { 00128 ProcessRight(); 00129 return true; 00130 } 00131 } 00132 else if ( Selection == 5 ) 00133 { 00134 GamePassword = "_"; 00135 PlayerOwner.Player.Console.GotoState('MenuTyping'); 00136 } 00137 else 00138 Super.ProcessRight(); 00139 00140 return true; 00141 } 00142 00143 function class<PlayerPawn> ChangeMesh() 00144 { 00145 local class<playerpawn> NewPlayerClass; 00146 00147 NewPlayerClass = class<playerpawn>(DynamicLoadObject(PlayerClasses[PlayerClassNum], class'Class')); 00148 00149 if ( NewPlayerClass != None ) 00150 { 00151 PlayerClass = NewPlayerClass; 00152 ClassString = PlayerClasses[PlayerClassNum]; 00153 mesh = NewPlayerClass.Default.mesh; 00154 skin = NewPlayerClass.Default.skin; 00155 if ( Mesh != None ) 00156 LoopAnim('Walk'); 00157 } 00158 return NewPlayerClass; 00159 } 00160 00161 function LoadAllMeshes() 00162 { 00163 local int i; 00164 00165 for ( i=0; i<NumPlayerClasses; i++ ) 00166 DynamicLoadObject(PlayerClasses[i], class'Class'); 00167 } 00168 00169 function SetUpDisplay() 00170 { 00171 local int i; 00172 local texture NewSkin; 00173 local string MeshName; 00174 00175 Super.SetUpDisplay(); 00176 00177 if ( ClassString == "" ) 00178 ClassString = string(PlayerOwner.Class); 00179 00180 for ( i=0; i<NumPlayerClasses; i++ ) 00181 if ( PlayerClasses[i] ~= ClassString ) 00182 { 00183 PlayerClassNum = i; 00184 break; 00185 } 00186 00187 ChangeMesh(); 00188 if ( PreferredSkin != "" ) 00189 { 00190 MeshName = GetItemName(String(Mesh)); 00191 if ( Left(PreferredSkin, Len(MeshName)) != MeshName ) 00192 PreferredSkin = MeshName$"Skins."$GetItemName(PreferredSkin); 00193 NewSkin = texture(DynamicLoadObject(PreferredSkin, class'Texture')); 00194 if ( NewSkin != None ) 00195 Skin = NewSkin; 00196 } 00197 } 00198 00199 function DrawMenu(canvas Canvas) 00200 { 00201 local int i, StartX, StartY, Spacing; 00202 local vector DrawOffset, DrawLoc; 00203 local rotator NewRot, DrawRot; 00204 00205 if (!bSetup) 00206 SetUpDisplay(); 00207 00208 // Set menu location. 00209 if ( PlayerOwner.ViewTarget == None ) 00210 { 00211 PlayerOwner.ViewRotation.Pitch = 0; 00212 PlayerOwner.ViewRotation.Roll = 0; 00213 DrawRot = PlayerOwner.ViewRotation; 00214 DrawOffset = ((vect(10.0,-5.0,0.0)) >> PlayerOwner.ViewRotation); 00215 DrawLoc = PlayerOwner.Location + PlayerOwner.EyeHeight * vect(0,0,1); 00216 } 00217 else 00218 { 00219 DrawLoc = PlayerOwner.ViewTarget.Location; 00220 DrawRot = PlayerOwner.ViewTarget.Rotation; 00221 if ( Pawn(PlayerOwner.ViewTarget) != None ) 00222 { 00223 if ( (Level.NetMode == NM_StandAlone) 00224 && (PlayerOwner.ViewTarget.IsA('PlayerPawn') || PlayerOwner.ViewTarget.IsA('Bot')) ) 00225 DrawRot = Pawn(PlayerOwner.ViewTarget).ViewRotation; 00226 00227 DrawLoc.Z += Pawn(PlayerOwner.ViewTarget).EyeHeight; 00228 } 00229 } 00230 DrawOffset = (vect(10.0,-5.0,0.0)) >> DrawRot; 00231 SetLocation(DrawLoc + DrawOffset); 00232 NewRot = DrawRot; 00233 NewRot.Yaw = Rotation.Yaw; 00234 SetRotation(NewRot); 00235 Canvas.DrawActor(Self, false); 00236 00237 // Draw title. 00238 DrawFadeTitle(Canvas); 00239 00240 Spacing = Clamp(0.04 * Canvas.ClipY, 12, 32); 00241 StartX = Canvas.ClipX/2; 00242 StartY = Max(40, 0.5 * (Canvas.ClipY - MenuLength * Spacing - 128)); 00243 00244 for ( i=1; i<7; i++ ) 00245 MenuList[i] = Default.MenuList[i]; 00246 DrawFadeList(Canvas, Spacing, StartX, StartY); 00247 00248 if ( !PlayerOwner.Player.Console.IsInState('MenuTyping') ) 00249 PlayerName = PlayerOwner.PlayerReplicationInfo.PlayerName; 00250 MenuList[1] = PlayerName; 00251 if ( CurrentTeam == 255 ) 00252 MenuList[2] = ""; 00253 else 00254 MenuList[2] = Teams[CurrentTeam]; 00255 00256 if ( Mesh != None ) 00257 MenuList[3] = GetItemName(string(Skin)); 00258 else 00259 MenuList[3] = ""; 00260 MenuList[4] = PlayerClass.Default.MenuName; 00261 MenuList[5] = GamePassword; 00262 MenuList[6] = ""; 00263 DrawFadeList(Canvas, Spacing, StartX + 80, StartY); 00264 00265 // Draw help panel. 00266 Canvas.DrawColor.R = 0; 00267 Canvas.DrawColor.G = 255; 00268 Canvas.DrawColor.B = 0; 00269 DrawHelpPanel(Canvas, Canvas.ClipY - 64, 228); 00270 } 00271 00272 defaultproperties 00273 { 00274 Selection=6 00275 MenuLength=6 00276 HelpMessage(4)="Change your class using the left and right arrow keys." 00277 HelpMessage(5)="Enter the admin password here, or game password if required." 00278 HelpMessage(6)="Press enter to start game." 00279 MenuList(4)="Class:" 00280 MenuList(5)="Password:" 00281 MenuList(6)="Start Game" 00282 }