UnrealShare
Class UnrealMeshMenu

source: e:\games\UnrealTournament\UnrealShare\Classes\UnrealMeshMenu.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Menu
         |
         +--UnrealShare.UnrealMenu
            |
            +--UnrealShare.UnrealShortMenu
               |
               +--UnrealShare.UnrealPlayerMenu
                  |
                  +--UnrealShare.UnrealMeshMenu
Direct Known Subclasses:UnrealMultiplayerMeshMenu

class UnrealMeshMenu
extends UnrealShare.UnrealPlayerMenu

//============================================================================= // UnrealMeshMenu //=============================================================================
Variables
 string GamePassword
 int NumPlayerClasses
 Class PlayerClass
 int PlayerClassNum
 string PlayerClasses[32]
 bool SinglePlayerOnly
 string StartMap


Function Summary
 void DrawMenu(Canvas Canvas)
 void LoadAllMeshes()
 void PostBeginPlay()
 bool ProcessLeft()
 void ProcessMenuInput(string InputString)
 void ProcessMenuUpdate(string InputString)
 bool ProcessRight()
 bool ProcessSelection()
 void SetUpDisplay()
 void UpdatePlayerClass(string NewClass, int Offset)



Source Code


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	}

End Source Code