UnrealShare
Class UnrealPlayerMenu

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

class UnrealPlayerMenu
extends UnrealShare.UnrealShortMenu

//============================================================================= // UnrealPlayerMenu //=============================================================================
Variables
 string ClassString
 int CurrentTeam
 string PlayerName
 string PreferredSkin
 Actor RealOwner
 string Teams[4]
 bSetup, bPulseDown


Function Summary
 void DrawMenu(Canvas Canvas)
 Menu ExitMenu()
 void FindSkin(int Dir)
 void MenuTick(float DeltaTime)
 bool ProcessLeft()
 void ProcessMenuEscape()
 void ProcessMenuInput(string InputString)
 void ProcessMenuUpdate(string InputString)
 bool ProcessRight()
 bool ProcessSelection()
 void SaveConfigs()
 void SetUpDisplay()



Source Code


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	}

End Source Code