UnrealShare
Class UnrealHUD

source: e:\games\UnrealTournament\UnrealShare\Classes\UnrealHUD.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.HUD
         |
         +--UnrealShare.UnrealHUD
Direct Known Subclasses:EndgameHud, IntroNullHud, SpectatorHud, UnrealTeamHUD

class UnrealHUD
extends Engine.HUD

//============================================================================= // UnrealHUD // Parent class of heads up display //=============================================================================
Variables
 color AltTeamColor[4]
 int ArmorOffset
 string CurrentMessage
 RedColor, GreenColor
 float IdentifyFadeTime
 string IdentifyHealth
 string IdentifyName
 Pawn IdentifyTarget
 float MOTDFadeOutTime
 color TeamColor[4]
 string TeamName[4]
 int TranslatorTimer
 int TranslatorY,CurTranY,SizeY,Count
 string VersionMessage
 bDisplayTran, bFlashTranslator


Function Summary
 
simulated
ChangeCrosshair(int d)
 
simulated
ChangeHud(int d)
 
simulated
CreateMenu()
 
simulated
DisplayMenu(Canvas Canvas)
 bool DisplayMessages(Canvas Canvas)
 
simulated
DisplayProgressMessage(Canvas Canvas)
 
simulated
DrawAmmo(Canvas Canvas, int X, int Y)
 
simulated
DrawArmor(Canvas Canvas, int X, int Y, bool bDrawOne)
 
simulated
DrawCrossHair(Canvas Canvas, int StartX, int StartY)
 
simulated
DrawFragCount(Canvas Canvas, int X, int Y)
 
simulated
DrawHealth(Canvas Canvas, int X, int Y)
 
simulated
DrawHudIcon(Canvas Canvas, int X, int Y, Inventory Item)
 
simulated
DrawIconValue(Canvas Canvas, int Amount)
     
// Draw the icons value in text on the icon
//
 
simulated
DrawIdentifyInfo(Canvas Canvas, float PosX, float PosY)
 
simulated
DrawInventory(Canvas Canvas, int X, int Y, bool bDrawOne)
 
simulated
DrawMOTD(Canvas Canvas)
 bool DrawMessageHeader(Canvas Canvas, MessageStruct ShortMessage, int YPos)
 float DrawNextMessagePart(Canvas Canvas, string MString, float XOffset, int YPos)
 
simulated
DrawNumberOf(Canvas Canvas, int NumberOf, int X, int Y)
 
simulated
DrawTeamGameSynopsis(Canvas Canvas)
 
simulated
DrawTypingPrompt(Canvas Canvas, Console Console)
 
simulated
HUDSetup(Canvas canvas)
 
simulated
PostBeginPlay()
 
simulated
PostRender(Canvas Canvas)
 
simulated
PreRender(Canvas Canvas)
 bool SpecialType(Name Type)
 
simulated
Tick(float DeltaTime)
 bool TraceIdentify(Canvas Canvas)



Source Code


00001	//=============================================================================
00002	// UnrealHUD
00003	// Parent class of heads up display
00004	//=============================================================================
00005	class UnrealHUD extends HUD;
00006	
00007	#exec TEXTURE IMPORT NAME=HalfHud FILE=TEXTURES\HUD\HalfHud.PCX GROUP="Icons" MIPS=OFF
00008	#exec TEXTURE IMPORT NAME=HudLine FILE=TEXTURES\HUD\Line.PCX GROUP="Icons" MIPS=OFF
00009	#exec TEXTURE IMPORT NAME=HudGreenAmmo FILE=TEXTURES\HUD\greenammo.PCX GROUP="Icons" MIPS=OFF
00010	#exec TEXTURE IMPORT NAME=IconHealth FILE=TEXTURES\HUD\i_health.PCX GROUP="Icons" MIPS=OFF
00011	#exec TEXTURE IMPORT NAME=IconSelection FILE=TEXTURES\HUD\i_rim.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00012	#exec TEXTURE IMPORT NAME=IconSkull FILE=TEXTURES\HUD\i_skull.PCX GROUP="Icons" MIPS=OFF
00013	
00014	#exec TEXTURE IMPORT NAME=TranslatorHUD3 FILE=models\TRANHUD3.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00015	
00016	#exec TEXTURE IMPORT NAME=Crosshair1 FILE=Textures\Hud\chair1.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00017	#exec TEXTURE IMPORT NAME=Crosshair2 FILE=Textures\Hud\chair2.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00018	#exec TEXTURE IMPORT NAME=Crosshair3 FILE=Textures\Hud\chair3.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00019	#exec TEXTURE IMPORT NAME=Crosshair4 FILE=Textures\Hud\chair4.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00020	#exec TEXTURE IMPORT NAME=Crosshair5 FILE=Textures\Hud\chair5.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00021	#exec TEXTURE IMPORT NAME=Crosshair6 FILE=Textures\Hud\chair6.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00022	#exec TEXTURE IMPORT NAME=Crosshair7 FILE=Textures\Hud\chair7.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
00023	
00024	#exec Font Import File=Textures\Lrgred.pcx Name=LargeRedFont
00025	#exec Font Import File=Textures\TinyFont.pcx Name=TinyFont
00026	#exec Font Import File=Textures\TinyFon3.pcx Name=TinyWhiteFont
00027	#exec Font Import File=Textures\TinyFon2.pcx Name=TinyRedFont
00028	#exec Font Import File=Textures\MedFont3.pcx Name=WhiteFont
00029	
00030	var int TranslatorTimer;
00031	var() int TranslatorY,CurTranY,SizeY,Count;
00032	var string CurrentMessage;
00033	var bool bDisplayTran, bFlashTranslator;
00034	var float MOTDFadeOutTime;
00035	
00036	var float IdentifyFadeTime;
00037	var Pawn IdentifyTarget;
00038	
00039	// Identify Strings
00040	var localized string IdentifyName;
00041	var localized string IdentifyHealth;
00042	
00043	var() localized string VersionMessage;
00044	
00045	var localized string TeamName[4];
00046	var() color TeamColor[4];
00047	var() color AltTeamColor[4];
00048	var color RedColor, GreenColor;
00049	
00050	var int ArmorOffset;
00051	
00052	// Message Struct
00053	Struct MessageStruct
00054	{
00055		var name Type;
00056		var PlayerReplicationInfo PRI;
00057	};
00058	
00059	simulated function PostBeginPlay()
00060	{
00061		MOTDFadeOutTime = 255;
00062	
00063		Super.PostBeginPlay();
00064	}
00065	
00066	simulated function ChangeHud(int d)
00067	{
00068		HudMode = HudMode + d;
00069		if ( HudMode>5 ) HudMode = 0;
00070		else if ( HudMode < 0 ) HudMode = 5;
00071	}
00072	
00073	simulated function ChangeCrosshair(int d)
00074	{
00075		Crosshair = Crosshair + d;
00076		if ( Crosshair>6 ) Crosshair=0;
00077		else if ( Crosshair < 0 ) Crosshair = 6;
00078	}
00079	
00080	simulated function CreateMenu()
00081	{
00082		if ( PlayerPawn(Owner).bSpecialMenu && (PlayerPawn(Owner).SpecialMenu != None) )
00083		{
00084			MainMenu = Spawn(PlayerPawn(Owner).SpecialMenu, self);
00085			PlayerPawn(Owner).bSpecialMenu = false;
00086		}
00087		
00088		if ( MainMenu == None )
00089			MainMenu = Spawn(MainMenuType, self);
00090			
00091		if ( MainMenu == None )
00092		{
00093			PlayerPawn(Owner).bShowMenu = false;
00094			Level.bPlayersOnly = false;
00095			return;
00096		}
00097		else
00098		{
00099			MainMenu.PlayerOwner = PlayerPawn(Owner);
00100			MainMenu.PlayEnterSound();
00101			MainMenu.MenuInit();
00102		}
00103	}
00104	
00105	simulated function HUDSetup(canvas canvas)
00106	{
00107		// Setup the way we want to draw all HUD elements
00108		Canvas.Reset();
00109		Canvas.SpaceX=0;
00110		Canvas.bNoSmooth = True;
00111		Canvas.DrawColor.r = 255;
00112		Canvas.DrawColor.g = 255;
00113		Canvas.DrawColor.b = 255;	
00114		Canvas.Font = Canvas.LargeFont;
00115	}
00116	
00117	simulated function DrawCrossHair( canvas Canvas, int StartX, int StartY )
00118	{
00119		if (Crosshair>5) Return;
00120		Canvas.SetPos(StartX, StartY );
00121		Canvas.Style = 2;
00122		if		(Crosshair==0) 	Canvas.DrawIcon(Texture'Crosshair1', 1.0);
00123		else if (Crosshair==1) 	Canvas.DrawIcon(Texture'Crosshair2', 1.0);	
00124		else if (Crosshair==2) 	Canvas.DrawIcon(Texture'Crosshair3', 1.0);
00125		else if (Crosshair==3) 	Canvas.DrawIcon(Texture'Crosshair4', 1.0);
00126		else if (Crosshair==4) 	Canvas.DrawIcon(Texture'Crosshair5', 1.0);	
00127		else if (Crosshair==5) 	Canvas.DrawIcon(Texture'Crosshair7', 1.0);		
00128		Canvas.Style = 1;	
00129	}
00130	
00131	simulated function DisplayProgressMessage( canvas Canvas )
00132	{
00133		local int i;
00134		local float YOffset, XL, YL;
00135	
00136		Canvas.DrawColor.R = 255;
00137		Canvas.DrawColor.G = 255;
00138		Canvas.DrawColor.B = 255;
00139		Canvas.bCenter = true;
00140		Canvas.Font = Canvas.MedFont;
00141		YOffset = 0;
00142		Canvas.StrLen("TEST", XL, YL);
00143		for (i=0; i<8; i++)
00144		{
00145			Canvas.SetPos(0, 0.25 * Canvas.ClipY + YOffset);
00146			Canvas.DrawColor = PlayerPawn(Owner).ProgressColor[i];
00147			Canvas.DrawText(PlayerPawn(Owner).ProgressMessage[i], false);
00148			YOffset += YL + 1;
00149		}
00150		Canvas.bCenter = false;
00151		Canvas.DrawColor.R = 255;
00152		Canvas.DrawColor.G = 255;
00153		Canvas.DrawColor.B = 255;
00154	}
00155	
00156	simulated function PreRender( canvas Canvas )
00157	{
00158		if (PlayerPawn(Owner).Weapon != None)
00159			PlayerPawn(Owner).Weapon.PreRender(Canvas);
00160	}
00161	
00162	simulated function DisplayMenu( canvas Canvas )
00163	{
00164		local float VersionW, VersionH;
00165	
00166		if ( MainMenu == None )
00167			CreateMenu();
00168		if ( MainMenu != None )
00169			MainMenu.DrawMenu(Canvas);
00170	
00171		if ( MainMenu.Class == MainMenuType )
00172		{
00173			Canvas.bCenter = false;
00174			Canvas.Font = Canvas.MedFont;
00175			Canvas.Style = 1;
00176			Canvas.StrLen(VersionMessage@Level.EngineVersion, VersionW, VersionH);
00177			Canvas.SetPos(Canvas.ClipX - VersionW - 4, 4);	
00178			Canvas.DrawText(VersionMessage@Level.EngineVersion, False);	
00179		}
00180	}
00181	
00182	simulated function PostRender( canvas Canvas )
00183	{
00184		HUDSetup(canvas);
00185	
00186		if ( PlayerPawn(Owner) != None )
00187		{
00188			if ( PlayerPawn(Owner).PlayerReplicationInfo == None )
00189				return;
00190			if ( PlayerPawn(Owner).bShowMenu )
00191			{
00192				DisplayMenu(Canvas);
00193				return;
00194			}
00195			if ( PlayerPawn(Owner).bShowScores )
00196			{
00197				if ( ( PlayerPawn(Owner).Weapon != None ) && ( !PlayerPawn(Owner).Weapon.bOwnsCrossHair ) )
00198					DrawCrossHair(Canvas, 0.5 * Canvas.ClipX - 8, 0.5 * Canvas.ClipY - 8);
00199				if ( (PlayerPawn(Owner).Scoring == None) && (PlayerPawn(Owner).ScoringType != None) )
00200					PlayerPawn(Owner).Scoring = Spawn(PlayerPawn(Owner).ScoringType, PlayerPawn(Owner));
00201				if ( PlayerPawn(Owner).Scoring != None )
00202				{ 
00203					PlayerPawn(Owner).Scoring.ShowScores(Canvas);
00204					return;
00205				}
00206			}
00207			else if ( (PlayerPawn(Owner).Weapon != None) && (Level.LevelAction == LEVACT_None) )
00208			{
00209				Canvas.Font = Font'WhiteFont';
00210				PlayerPawn(Owner).Weapon.PostRender(Canvas);
00211				if ( !PlayerPawn(Owner).Weapon.bOwnsCrossHair )
00212					DrawCrossHair(Canvas, 0.5 * Canvas.ClipX - 8, 0.5 * Canvas.ClipY - 8);
00213			}
00214	
00215			if ( PlayerPawn(Owner).ProgressTimeOut > Level.TimeSeconds )
00216				DisplayProgressMessage(Canvas);
00217	
00218		}
00219	
00220		if (HudMode==5) 
00221		{
00222			DrawInventory(Canvas, Canvas.ClipX-96, 0,False);		
00223			Return;
00224		}
00225		if (Canvas.ClipX<320) HudMode = 4;
00226	
00227		// Draw Armor
00228		if (HudMode<2) DrawArmor(Canvas, 0, 0,False);
00229		else if (HudMode==3 || HudMode==2) DrawArmor(Canvas, 0, Canvas.ClipY-32,False);
00230		else if (HudMode==4) DrawArmor(Canvas, Canvas.ClipX-64, Canvas.ClipY-64,True);
00231		
00232		// Draw Ammo
00233		if (HudMode!=4) DrawAmmo(Canvas, Canvas.ClipX-48-64, Canvas.ClipY-32);
00234		else DrawAmmo(Canvas, Canvas.ClipX-48, Canvas.ClipY-32);
00235		
00236		// Draw Health
00237		if (HudMode<2) DrawHealth(Canvas, 0, Canvas.ClipY-32);
00238		else if (HudMode==3||HudMode==2) DrawHealth(Canvas, Canvas.ClipX-128, Canvas.ClipY-32);
00239		else if (HudMode==4) DrawHealth(Canvas, Canvas.ClipX-64, Canvas.ClipY-32);
00240			
00241		// Display Inventory
00242		if (HudMode<2) DrawInventory(Canvas, Canvas.ClipX-96, 0,False);
00243		else if (HudMode==3) DrawInventory(Canvas, Canvas.ClipX-96, Canvas.ClipY-64,False);
00244		else if (HudMode==4) DrawInventory(Canvas, Canvas.ClipX-64, Canvas.ClipY-64,True);
00245		else if (HudMode==2) DrawInventory(Canvas, Canvas.ClipX/2-64, Canvas.ClipY-32,False);	
00246	
00247		// Display Frag count
00248		if ( (Level.Game == None) || Level.Game.bDeathMatch ) 
00249		{
00250			if (HudMode<3) DrawFragCount(Canvas, Canvas.ClipX-32,Canvas.ClipY-64);
00251			else if (HudMode==3) DrawFragCount(Canvas, 0,Canvas.ClipY-64);
00252			else if (HudMode==4) DrawFragCount(Canvas, 0,Canvas.ClipY-32);
00253		}
00254	
00255		// Display Identification Info
00256		DrawIdentifyInfo(Canvas, 0, Canvas.ClipY - 64.0);
00257	
00258		// Message of the Day / Map Info Header
00259		if (MOTDFadeOutTime != 0.0)
00260			DrawMOTD(Canvas);
00261	
00262		// Team Game Synopsis
00263		if ( PlayerPawn(Owner) != None )
00264		{
00265			if ( (PlayerPawn(Owner).GameReplicationInfo != None) && PlayerPawn(Owner).GameReplicationInfo.bTeamGame)
00266				DrawTeamGameSynopsis(Canvas);
00267		}
00268	}
00269	
00270	simulated function DrawTeamGameSynopsis(Canvas Canvas)
00271	{
00272		local TeamInfo TI;
00273		local float XL, YL;
00274	
00275		foreach AllActors(class'TeamInfo', TI)
00276		{
00277			if (TI.Size > 0)
00278			{
00279				Canvas.Font = Font'WhiteFont';
00280				Canvas.DrawColor = TeamColor[TI.TeamIndex]; 
00281				Canvas.StrLen(TeamName[TI.TeamIndex], XL, YL);
00282				Canvas.SetPos(0, Canvas.ClipY - 128 + 16 * TI.TeamIndex);
00283				Canvas.DrawText(TeamName[TI.TeamIndex], false);
00284				Canvas.SetPos(XL, Canvas.ClipY - 128 + 16 * TI.TeamIndex);
00285				Canvas.DrawText(int(TI.Score), false);
00286			}
00287		}
00288	
00289		Canvas.DrawColor.R = 255;
00290		Canvas.DrawColor.G = 255;
00291		Canvas.DrawColor.B = 255;
00292	}
00293	
00294	simulated function DrawFragCount(Canvas Canvas, int X, int Y)
00295	{
00296		Canvas.SetPos(X,Y);
00297		Canvas.DrawIcon(Texture'IconSkull', 1.0);	
00298		Canvas.CurX -= 19;
00299		Canvas.CurY += 23;
00300		if ( Pawn(Owner).PlayerReplicationInfo == None )
00301			return;
00302		Canvas.Font = Font'TinyWhiteFont';
00303		if (Pawn(Owner).PlayerReplicationInfo.Score<100) 
00304			Canvas.CurX+=6;
00305		if (Pawn(Owner).PlayerReplicationInfo.Score<10) 
00306			Canvas.CurX+=6;	
00307		if (Pawn(Owner).PlayerReplicationInfo.Score<0) 
00308			Canvas.CurX-=6;
00309		if (Pawn(Owner).PlayerReplicationInfo.Score<-9)
00310			Canvas.CurX-=6;
00311		Canvas.DrawText(int(Pawn(Owner).PlayerReplicationInfo.Score),False);
00312					
00313	}
00314	
00315	simulated function DrawInventory(Canvas Canvas, int X, int Y, bool bDrawOne)
00316	{	
00317		local bool bGotNext, bGotPrev, bGotSelected;
00318		local inventory Inv,Prev, Next, SelectedItem;
00319		local translator Translator;
00320		local int TempX,TempY, HalfHUDX, HalfHUDY, AmmoIconSize, i;
00321	
00322		if ( HudMode < 4 ) //then draw HalfHUD
00323		{
00324			Canvas.Font = Font'TinyFont';
00325			HalfHUDX = Canvas.ClipX-64;
00326			HalfHUDY = Canvas.ClipY-32;
00327			Canvas.CurX = HalfHudX;
00328			Canvas.CurY = HalfHudY;
00329			Canvas.DrawIcon(Texture'HalfHud', 1.0);	
00330		}
00331	
00332		if ( Owner.Inventory==None) Return;
00333		bGotSelected = False;
00334		bGotNext = false;
00335		bGotPrev = false;
00336		Prev = None;
00337		Next = None;
00338		SelectedItem = Pawn(Owner).SelectedItem;
00339	
00340		for ( Inv=Owner.Inventory; Inv!=None; Inv=Inv.Inventory )
00341		{
00342			if ( !bDrawOne ) // if drawing more than one inventory, find next and previous items
00343			{
00344				if ( Inv == SelectedItem )
00345					bGotSelected = True;
00346				else if ( Inv.bActivatable )
00347				{
00348					if ( bGotSelected )
00349					{
00350						if ( !bGotNext )
00351						{
00352							Next = Inv;
00353							bGotNext = true;
00354						}
00355						else if ( !bGotPrev )
00356							Prev = Inv;
00357					}
00358					else
00359					{
00360						if ( Next == None )
00361							Next = Prev;
00362						Prev = Inv;
00363						bGotPrev = True;
00364					}
00365				}
00366			}
00367			
00368			if ( Translator(Inv) != None )
00369				Translator = Translator(Inv);
00370	
00371			if ( (HudMode < 4) && (Inv.InventoryGroup>0) && (Weapon(Inv)!=None) ) 
00372			{
00373				if (Pawn(Owner).Weapon == Inv) Canvas.Font = Font'TinyWhiteFont';
00374				else Canvas.Font = Font'TinyFont';
00375				Canvas.CurX = HalfHudX-3+Inv.InventoryGroup*6;
00376				Canvas.CurY = HalfHudY+4;
00377				if (Inv.InventoryGroup<10) Canvas.DrawText(Inv.InventoryGroup,False);
00378				else Canvas.DrawText("0",False);
00379			}
00380			
00381			
00382			if ( (HudMode < 4) && (Ammo(Inv)!=None) ) 
00383			{
00384				for (i=0; i<10; i++)
00385				{
00386					if (Ammo(Inv).UsedInWeaponSlot[i]==1)
00387					{
00388						Canvas.CurX = HalfHudX+3+i*6;
00389						if (i==0) Canvas.CurX += 60;
00390						Canvas.CurY = HalfHudY+11;
00391						AmmoIconSize = 16.0*FMin(1.0,(float(Ammo(Inv).AmmoAmount)/float(Ammo(Inv).MaxAmmo)));
00392						if (AmmoIconSize<8 && Ammo(Inv).AmmoAmount<10 && Ammo(Inv).AmmoAmount>0) 
00393						{
00394							Canvas.CurX -= 6;			
00395							Canvas.CurY += 5;
00396							Canvas.Font = Font'TinyRedFont';
00397							Canvas.DrawText(Ammo(Inv).AmmoAmount,False);				
00398							Canvas.CurY -= 12;
00399						}
00400						Canvas.CurY += 19-AmmoIconSize;
00401						Canvas.CurX -= 6;
00402						Canvas.DrawColor.g = 255;
00403						Canvas.DrawColor.r = 0;		
00404						Canvas.DrawColor.b = 0;					
00405						if (AmmoIconSize<8) 
00406						{
00407							Canvas.DrawColor.r = 255-AmmoIconSize*30;
00408							Canvas.DrawColor.g = AmmoIconSize*30+40;				
00409						}
00410						if (Ammo(Inv).AmmoAmount >0) 
00411						{
00412							Canvas.DrawTile(Texture'HudGreenAmmo',4.0,AmmoIconSize,0,0,4.0,AmmoIconSize);		
00413						}
00414						Canvas.DrawColor.g = 255;
00415						Canvas.DrawColor.r = 255;		
00416						Canvas.DrawColor.b = 255;	
00417					}
00418				}
00419			}
00420	
00421	
00422			
00423		}
00424	
00425		// List Translator messages if activated
00426		if ( Translator!=None )
00427		{
00428			if( Translator.bCurrentlyActivated )
00429			{
00430				Canvas.bCenter = false;
00431				Canvas.Font = Canvas.MedFont;
00432				TempX = Canvas.ClipX;
00433				TempY = Canvas.ClipY;
00434				CurrentMessage = Translator.NewMessage;
00435				Canvas.Style = 2;	
00436				Canvas.SetPos(Canvas.ClipX/2-128, Canvas.ClipY/2-68);
00437				Canvas.DrawIcon(texture'TranslatorHUD3', 1.0);
00438				Canvas.SetOrigin(Canvas.ClipX/2-110,Canvas.ClipY/2-52);
00439				Canvas.SetClip(225,110);
00440				Canvas.SetPos(0,0);
00441				Canvas.Style = 1;	
00442				Canvas.DrawText(CurrentMessage, False);	
00443				HUDSetup(canvas);	
00444				Canvas.ClipX = TempX;
00445				Canvas.ClipY = TempY;
00446			}
00447			else 
00448				bFlashTranslator = ( Translator.bNewMessage || Translator.bNotNewMessage );
00449		}
00450	
00451		if ( HUDMode == 5 )
00452			return;
00453	
00454		if ( SelectedItem != None )
00455		{	
00456			Count++;
00457			if (Count>20) Count=0;
00458			
00459			if (Prev!=None) 
00460			{
00461				if ( Prev.bActive || (bFlashTranslator && (Translator == Prev) && (Count>15)) )
00462				{
00463					Canvas.DrawColor.b = 0;		
00464					Canvas.DrawColor.g = 0;		
00465				}
00466				DrawHudIcon(Canvas, X, Y, Prev);				
00467				if ( (Pickup(Prev) != None) && Pickup(Prev).bCanHaveMultipleCopies )
00468					DrawNumberOf(Canvas,Pickup(Prev).NumCopies,X,Y);
00469				Canvas.DrawColor.b = 255;
00470				Canvas.DrawColor.g = 255;		
00471			}
00472			if ( SelectedItem.Icon != None )	
00473			{
00474				if ( SelectedItem.bActive || (bFlashTranslator && (Translator == SelectedItem) && (Count>15)) )
00475				{
00476					Canvas.DrawColor.b = 0;		
00477					Canvas.DrawColor.g = 0;		
00478				}
00479				if ( (Next==None) && (Prev==None) && !bDrawOne) DrawHudIcon(Canvas, X+64, Y, SelectedItem);
00480				else DrawHudIcon(Canvas, X+32, Y, SelectedItem);		
00481				Canvas.Style = 2;
00482				Canvas.CurX = X+32;
00483				if ( (Next==None) && (Prev==None) && !bDrawOne ) Canvas.CurX = X+64;
00484				Canvas.CurY = Y;
00485				Canvas.DrawIcon(texture'IconSelection', 1.0);
00486				if ( (Pickup(SelectedItem) != None) 
00487					&& Pickup(SelectedItem).bCanHaveMultipleCopies )
00488					DrawNumberOf(Canvas,Pickup(SelectedItem).NumCopies,Canvas.CurX-32,Y);
00489				Canvas.Style = 1;
00490				Canvas.DrawColor.b = 255;
00491				Canvas.DrawColor.g = 255;		
00492			}
00493			if (Next!=None) {
00494				if ( Next.bActive || (bFlashTranslator && (Translator == Next) && (Count>15)) )
00495				{
00496					Canvas.DrawColor.b = 0;		
00497					Canvas.DrawColor.g = 0;		
00498				}
00499				DrawHudIcon(Canvas, X+64, Y, Next);
00500				if ( (Pickup(Next) != None) && Pickup(Next).bCanHaveMultipleCopies )
00501					DrawNumberOf(Canvas,Pickup(Next).NumCopies,Canvas.CurX-32,Y);
00502				Canvas.DrawColor.b = 255;
00503				Canvas.DrawColor.g = 255;
00504			}
00505		}
00506	}
00507	
00508	simulated function DrawNumberOf(Canvas Canvas, int NumberOf, int X, int Y)
00509	{
00510		local int TempX,TempY;
00511		
00512		if (NumberOf<=0) Return;
00513		
00514		Canvas.CurX = X + 14;
00515		Canvas.CurY = Y + 20;
00516		NumberOf++;
00517		if (NumberOf<100) Canvas.CurX+=6;
00518		if (NumberOf<10) Canvas.CurX+=6;	
00519		Canvas.Font = Font'TinyRedFont';						
00520		Canvas.DrawText(NumberOf,False);			
00521	}
00522	
00523	simulated function DrawArmor(Canvas Canvas, int X, int Y, bool bDrawOne)
00524	{
00525		Local int ArmorAmount,CurAbs;
00526		Local inventory Inv,BestArmor;
00527		Local float XL, YL;
00528	
00529		ArmorAmount = 0;
00530		ArmorOffset = 0;
00531		Canvas.Font = Canvas.LargeFont;
00532		Canvas.CurX = X;
00533		Canvas.CurY = Y;
00534		CurAbs=0;
00535		BestArmor=None;
00536		for( Inv=Owner.Inventory; Inv!=None; Inv=Inv.Inventory ) 
00537		{
00538			if (Inv.bIsAnArmor) 
00539			{
00540				ArmorAmount += Inv.Charge;				
00541				if (Inv.Charge>0 && Inv.Icon!=None) 
00542				{
00543					if (!bDrawOne) 
00544					{
00545						ArmorOffset += 32;
00546						DrawHudIcon(Canvas, Canvas.CurX, Y, Inv);
00547						DrawIconValue(Canvas, Inv.Charge);						
00548					}
00549					else if (Inv.ArmorAbsorption>CurAbs) 
00550					{
00551						CurAbs = Inv.ArmorAbsorption;
00552						BestArmor = Inv;
00553					}
00554				}
00555			}
00556		}
00557		if (bDrawOne && BestArmor!=None) 
00558		{
00559			DrawHudIcon(Canvas, Canvas.CurX, Y, BestArmor);
00560			DrawIconValue(Canvas, BestArmor.Charge);		
00561		}
00562		Canvas.CurY = Y;
00563		if (ArmorAmount>0 && HudMode==0) {
00564			Canvas.StrLen(ArmorAmount,XL,YL);
00565			ArmorOffset += XL;
00566			Canvas.DrawText(ArmorAmount,False);	
00567		}
00568	}
00569	
00570	// Draw the icons value in text on the icon
00571	//
00572	simulated function DrawIconValue(Canvas Canvas, int Amount)
00573	{
00574		local int TempX,TempY;
00575	
00576		if (HudMode==0 || HudMode==3) Return;
00577	
00578		TempX = Canvas.CurX;
00579		TempY = Canvas.CurY;
00580		Canvas.CurX -= 20;
00581		Canvas.CurY -= 5;
00582		if (Amount<100) Canvas.CurX+=6;
00583		if (Amount<10) Canvas.CurX+=6;	
00584		Canvas.Font = Font'TinyFont';						
00585		Canvas.DrawText(Amount,False);
00586		Canvas.Font = Canvas.LargeFont;
00587		Canvas.CurX = TempX;
00588		Canvas.CurY = TempY;						
00589	}
00590	
00591	simulated function DrawAmmo(Canvas Canvas, int X, int Y)
00592	{
00593		if ( (Pawn(Owner).Weapon == None) || (Pawn(Owner).Weapon.AmmoType == None) )
00594			return;
00595		Canvas.CurY = Y;
00596		Canvas.CurX = X;
00597		Canvas.Font = Canvas.LargeFont;
00598		if (Pawn(Owner).Weapon.AmmoType.AmmoAmount<10) Canvas.Font = Font'LargeRedFont';	
00599		if (HudMode==0) {
00600			if (Pawn(Owner).Weapon.AmmoType.AmmoAmount>=100) Canvas.CurX -= 16;
00601			if (Pawn(Owner).Weapon.AmmoType.AmmoAmount>=10) Canvas.CurX -= 16;
00602			Canvas.DrawText(Pawn(Owner).Weapon.AmmoType.AmmoAmount,False);
00603			Canvas.CurY = Canvas.ClipY-32;
00604		}
00605		else Canvas.CurX+=16;
00606		if (Pawn(Owner).Weapon.AmmoType.Icon!=None) Canvas.DrawIcon(Pawn(Owner).Weapon.AmmoType.Icon, 1.0);
00607		Canvas.CurY += 29;
00608		DrawIconValue(Canvas, Pawn(Owner).Weapon.AmmoType.AmmoAmount);
00609		Canvas.CurX = X+19;
00610		Canvas.CurY = Y+29;
00611		if (HudMode!=1 && HudMode!=2 && HudMode!=4)  Canvas.DrawTile(Texture'HudLine',
00612			FMin(27.0*(float(Pawn(Owner).Weapon.AmmoType.AmmoAmount)/float(Pawn(Owner).Weapon.AmmoType.MaxAmmo)),27),2.0,0,0,32.0,2.0);
00613	}
00614	
00615	simulated function DrawHealth(Canvas Canvas, int X, int Y)
00616	{
00617		Canvas.CurY = Y;
00618		Canvas.CurX = X;	
00619		Canvas.Font = Canvas.LargeFont;
00620		if (Pawn(Owner).Health<25) Canvas.Font = Font'LargeRedFont';
00621		Canvas.DrawIcon(Texture'IconHealth', 1.0);
00622		Canvas.CurY += 29;	
00623		DrawIconValue(Canvas, Max(0,Pawn(Owner).Health));
00624		Canvas.CurY -= 29;		
00625		if (HudMode==0) Canvas.DrawText(Max(0,Pawn(Owner).Health),False);	
00626		Canvas.CurY = Y+29;		
00627		Canvas.CurX = X+2;
00628		if (HudMode!=1 && HudMode!=2 && HudMode!=4) 
00629			Canvas.DrawTile(Texture'HudLine',FMin(27.0*(float(Pawn(Owner).Health)/float(Pawn(Owner).Default.Health)),27),2.0,0,0,32.0,2.0);	
00630	}
00631	
00632	simulated function DrawHudIcon(Canvas Canvas, int X, int Y, Inventory Item)
00633	{
00634		Local int Width;
00635		if (Item.Icon==None) Return;
00636		Width = Canvas.CurX;
00637		Canvas.CurX = X;
00638		Canvas.CurY = Y;
00639		Canvas.DrawIcon(Item.Icon, 1.0);
00640		Canvas.CurX -= 30;
00641		Canvas.CurY += 28;
00642		if ((HudMode!=2 && HudMode!=4 && HudMode!=1) || !Item.bIsAnArmor)
00643			Canvas.DrawTile(Texture'HudLine',fMin(27.0,27.0*(float(Item.Charge)/float(Item.Default.Charge))),2.0,0,0,32.0,2.0);
00644		Canvas.CurX = Width + 32;
00645	}
00646	
00647	simulated function DrawTypingPrompt( canvas Canvas, console Console )
00648	{
00649		local string TypingPrompt;
00650		local float XL, YL;
00651	
00652		if ( Console.bTyping )
00653		{
00654			Canvas.DrawColor.r = 0;
00655			Canvas.DrawColor.g = 255;
00656			Canvas.DrawColor.b = 0;	
00657			TypingPrompt = "(> "$Console.TypedStr$"_";
00658			Canvas.Font = Font'WhiteFont';
00659			Canvas.StrLen( TypingPrompt, XL, YL );
00660			Canvas.SetPos( 2, Console.FrameY - Console.ConsoleLines - YL - 1 );
00661			Canvas.DrawText( TypingPrompt, false );
00662		}
00663	}
00664	
00665	simulated function bool DisplayMessages( canvas Canvas )
00666	{
00667		local string TypingPrompt;
00668		local float XL, YL;
00669		local int I, J, YPos, ExtraSpace;
00670		local float PickupColor;
00671		local console Console;
00672		local inventory Inv;
00673		local MessageStruct ShortMessages[4];
00674		local string MessageString[4];
00675		local name MsgType;
00676	
00677		Console = PlayerPawn(Owner).Player.Console;
00678	
00679		Canvas.Font = Font'WhiteFont';
00680	
00681		if ( !Console.Viewport.Actor.bShowMenu )
00682			DrawTypingPrompt(Canvas, Console);
00683	
00684		if ( (Console.TextLines > 0) && (!Console.Viewport.Actor.bShowMenu || Console.Viewport.Actor.bShowScores) )
00685		{
00686			MsgType = Console.GetMsgType(Console.TopLine);
00687			if ( MsgType == 'Pickup' )
00688			{
00689				Canvas.bCenter = true;
00690				if ( Level.bHighDetailMode )
00691					Canvas.Style = ERenderStyle.STY_Translucent;
00692				else
00693					Canvas.Style = ERenderStyle.STY_Normal;
00694				PickupColor = 42.0 * FMin(6, Console.GetMsgTick(Console.TopLine));
00695				Canvas.DrawColor.r = PickupColor;
00696				Canvas.DrawColor.g = PickupColor;
00697				Canvas.DrawColor.b = PickupColor;
00698				Canvas.SetPos(4, Console.FrameY - 44);
00699				Canvas.DrawText( Console.GetMsgText(Console.TopLine), true );
00700				Canvas.bCenter = false;
00701				Canvas.Style = 1;
00702				J = Console.TopLine - 1;
00703			} 
00704			else if ( (MsgType == 'CriticalEvent') || (MsgType == 'LowCriticalEvent')
00705						|| (MsgType == 'RedCriticalEvent') ) 
00706			{
00707				Canvas.bCenter = true;
00708				Canvas.Style = 1;
00709				Canvas.DrawColor.r = 0;
00710				Canvas.DrawColor.g = 128;
00711				Canvas.DrawColor.b = 255;
00712				if ( MsgType == 'CriticalEvent' ) 
00713					Canvas.SetPos(0, Console.FrameY/2 - 32);
00714				else if ( MsgType == 'LowCriticalEvent' ) 
00715					Canvas.SetPos(0, Console.FrameY/2 + 32);
00716				else if ( MsgType == 'RedCriticalEvent' ) {
00717					PickupColor = 42.0 * FMin(6, Console.GetMsgTick(Console.TopLine));
00718					Canvas.DrawColor.r = PickupColor;
00719					Canvas.DrawColor.g = 0;
00720					Canvas.DrawColor.b = 0;	
00721					Canvas.SetPos(4, Console.FrameY - 44);
00722				}
00723	
00724				Canvas.DrawText( Console.GetMsgText(Console.TopLine), true );
00725				Canvas.bCenter = false;
00726				J = Console.TopLine - 1;
00727			} 
00728			else 
00729				J = Console.TopLine;
00730	
00731			I = 0;
00732			while ( (I < 4) && (J >= 0) )
00733			{
00734				MsgType = Console.GetMsgType(J);
00735				if ((MsgType != '') && (MsgType != 'Log'))
00736				{
00737					MessageString[I] = Console.GetMsgText(J);
00738					if ( (MessageString[I] != "") && (Console.GetMsgTick(J) > 0.0) )
00739					{
00740						if ( (MsgType == 'Event') || (MsgType == 'DeathMessage') )
00741						{
00742							ShortMessages[I].PRI = None;
00743							ShortMessages[I].Type = MsgType;
00744							I++;
00745						} 
00746						else if ( (MsgType == 'Say') || (MsgType == 'TeamSay') )
00747						{
00748							ShortMessages[I].PRI = Console.GetMsgPlayer(J);
00749							ShortMessages[I].Type = MsgType;
00750							I++;
00751						}
00752					}
00753				}
00754				J--;
00755			}
00756	
00757			// decide which speech message to show face for
00758			// FIXME - get the face from the PlayerReplicationInfo.TalkTexture
00759			J = 0;
00760			Canvas.Font = Font'WhiteFont';
00761			Canvas.StrLen("TEST", XL, YL );
00762			for ( I=0; I<4; I++ )
00763				if (MessageString[3 - I] != "")
00764				{
00765					YPos = 2 + (10 * J) + (10 * ExtraSpace); 
00766					if ( !DrawMessageHeader(Canvas, ShortMessages[3 - I], YPos) )
00767					{
00768						if (ShortMessages[3 - I].Type == 'DeathMessage')
00769							Canvas.DrawColor = RedColor;
00770						else 
00771						{
00772							Canvas.DrawColor.r = 200;
00773							Canvas.DrawColor.g = 200;
00774							Canvas.DrawColor.b = 200;	
00775						}
00776						Canvas.SetPos(4, YPos);
00777					}
00778					if ( !SpecialType(ShortMessages[3 - I].Type) ) {
00779						Canvas.DrawText(MessageString[3-I], false );
00780						J++;
00781					}
00782					if ( YL == 18.0 )
00783						ExtraSpace++;
00784				}
00785		}
00786		return true;
00787	}
00788	
00789	simulated function bool SpecialType(Name Type)
00790	{
00791		if (Type == '')
00792			return true;
00793		if (Type == 'Log')
00794			return true;
00795		if (Type == 'Pickup')
00796			return true;
00797		if (Type == 'CriticalEvent')
00798			return true;
00799		if (Type == 'LowCriticalEvent')
00800			return true;
00801		if (Type == 'RedCriticalEvent')
00802			return true;
00803		return false;
00804	}
00805	
00806	simulated function float DrawNextMessagePart( Canvas Canvas, coerce string MString, float XOffset, int YPos )
00807	{
00808		local float XL, YL;
00809	
00810		Canvas.SetPos(4 + XOffset, YPos);
00811		Canvas.StrLen( MString, XL, YL );
00812		XOffset += XL;
00813		Canvas.DrawText( MString, false );
00814		return XOffset;
00815	}
00816	
00817	simulated function bool DrawMessageHeader(Canvas Canvas, MessageStruct ShortMessage, int YPos)
00818	{
00819		local float XOffset;
00820	
00821		if ( ShortMessage.Type != 'Say' )
00822			return false;
00823	
00824		Canvas.DrawColor = GreenColor;
00825		XOffset += ArmorOffset;
00826		XOffset = DrawNextMessagePart(Canvas, ShortMessage.PRI.PlayerName$": ", XOffset, YPos);	
00827		Canvas.SetPos(4 + XOffset, YPos);
00828		return true;
00829	}
00830	
00831	simulated function Tick(float DeltaTime)
00832	{
00833		IdentifyFadeTime -= DeltaTime;
00834		if (IdentifyFadeTime < 0.0)
00835			IdentifyFadeTime = 0.0;
00836	
00837		MOTDFadeOutTime -= DeltaTime * 45;
00838		if (MOTDFadeOutTime < 0.0)
00839			MOTDFadeOutTime = 0.0;
00840	}
00841	
00842	simulated function bool TraceIdentify(canvas Canvas)
00843	{
00844		local actor Other;
00845		local vector HitLocation, HitNormal, X, Y, Z, StartTrace, EndTrace;
00846	
00847		StartTrace = Owner.Location;
00848		StartTrace.Z += Pawn(Owner).BaseEyeHeight;
00849	
00850		EndTrace = StartTrace + vector(Pawn(Owner).ViewRotation) * 1000.0;
00851	
00852		Other = Trace(HitLocation, HitNormal, EndTrace, StartTrace, true);
00853	
00854		if ( (Pawn(Other) != None) && (Pawn(Other).bIsPlayer) )
00855		{
00856			IdentifyTarget = Pawn(Other);
00857			IdentifyFadeTime = 3.0;
00858		}
00859	
00860		if ( IdentifyFadeTime == 0.0 )
00861			return false;
00862	
00863		if ( (IdentifyTarget == None) || (!IdentifyTarget.bIsPlayer) ||
00864			 (IdentifyTarget.bHidden) || (IdentifyTarget.PlayerReplicationInfo == None ))
00865			return false;
00866	
00867		return true;
00868	}
00869	
00870	simulated function DrawIdentifyInfo(canvas Canvas, float PosX, float PosY)
00871	{
00872		local float XL, YL, XOffset;
00873	
00874		if (!TraceIdentify(Canvas))
00875			return;
00876	
00877		Canvas.Font = Font'WhiteFont';
00878		Canvas.Style = 3;
00879	
00880		XOffset = 0.0;
00881		Canvas.StrLen(IdentifyName$": "$IdentifyTarget.PlayerReplicationInfo.PlayerName, XL, YL);
00882		XOffset = Canvas.ClipX/2 - XL/2;
00883		Canvas.SetPos(XOffset, Canvas.ClipY - 54);
00884		
00885		if(IdentifyTarget.IsA('PlayerPawn'))
00886			if(PlayerPawn(IdentifyTarget).PlayerReplicationInfo.bFeigningDeath)
00887				return;
00888	
00889		if(IdentifyTarget.PlayerReplicationInfo.PlayerName != "")
00890		{
00891			Canvas.DrawColor.R = 0;
00892			Canvas.DrawColor.G = 160 * (IdentifyFadeTime / 3.0);
00893			Canvas.DrawColor.B = 0;
00894	
00895			Canvas.StrLen(IdentifyName$": ", XL, YL);
00896			XOffset += XL;
00897			Canvas.DrawText(IdentifyName$": ");
00898			Canvas.SetPos(XOffset, Canvas.ClipY - 54);
00899	
00900			Canvas.DrawColor.R = 0;
00901			Canvas.DrawColor.G = 255 * (IdentifyFadeTime / 3.0);
00902			Canvas.DrawColor.B = 0;
00903	
00904			Canvas.StrLen(IdentifyTarget.PlayerReplicationInfo.PlayerName, XL, YL);
00905			Canvas.DrawText(IdentifyTarget.PlayerReplicationInfo.PlayerName);
00906		}
00907	
00908		Canvas.Style = 1;
00909		Canvas.DrawColor.R = 255;
00910		Canvas.DrawColor.G = 255;
00911		Canvas.DrawColor.B = 255;
00912	}
00913	
00914	simulated function DrawMOTD(Canvas Canvas)
00915	{
00916		local GameReplicationInfo GRI;
00917		local float XL, YL;
00918	
00919		if(Owner == None) return;
00920	
00921		Canvas.Font = Font'WhiteFont';
00922		Canvas.Style = 3;
00923	
00924		Canvas.DrawColor.R = MOTDFadeOutTime;
00925		Canvas.DrawColor.G = MOTDFadeOutTime;
00926		Canvas.DrawColor.B = MOTDFadeOutTime;
00927	
00928		Canvas.bCenter = true;
00929	
00930		foreach AllActors(class'GameReplicationInfo', GRI)
00931		{
00932			if (GRI.GameName != "Game")
00933			{
00934				Canvas.DrawColor.R = 0;
00935				Canvas.DrawColor.G = MOTDFadeOutTime / 2;
00936				Canvas.DrawColor.B = MOTDFadeOutTime;
00937				Canvas.SetPos(0.0, 32);
00938				Canvas.StrLen("TEST", XL, YL);
00939				if (Level.NetMode != NM_Standalone)
00940					Canvas.DrawText(GRI.ServerName);
00941				Canvas.DrawColor.R = MOTDFadeOutTime;
00942				Canvas.DrawColor.G = MOTDFadeOutTime;
00943				Canvas.DrawColor.B = MOTDFadeOutTime;
00944	
00945				Canvas.SetPos(0.0, 32 + YL);
00946				Canvas.DrawText("Game Type: "$GRI.GameName, true);
00947				Canvas.SetPos(0.0, 32 + 2*YL);
00948				Canvas.DrawText("Map Title: "$Level.Title, true);
00949				Canvas.SetPos(0.0, 32 + 3*YL);
00950				Canvas.DrawText("Author: "$Level.Author, true);
00951				Canvas.SetPos(0.0, 32 + 4*YL);
00952				if (Level.IdealPlayerCount != "")
00953					Canvas.DrawText("Ideal Player Load:"$Level.IdealPlayerCount, true);
00954	
00955				Canvas.DrawColor.R = 0;
00956				Canvas.DrawColor.G = MOTDFadeOutTime / 2;
00957				Canvas.DrawColor.B = MOTDFadeOutTime;
00958	
00959				Canvas.SetPos(0, 32 + 6*YL);
00960				Canvas.DrawText(Level.LevelEnterText, true);
00961	
00962				Canvas.SetPos(0.0, 32 + 8*YL);
00963				Canvas.DrawText(GRI.MOTDLine1, true);
00964				Canvas.SetPos(0.0, 32 + 9*YL);
00965				Canvas.DrawText(GRI.MOTDLine2, true);
00966				Canvas.SetPos(0.0, 32 + 10*YL);
00967				Canvas.DrawText(GRI.MOTDLine3, true);
00968				Canvas.SetPos(0.0, 32 + 11*YL);
00969				Canvas.DrawText(GRI.MOTDLine4, true);
00970			}
00971		}
00972		Canvas.bCenter = false;
00973	
00974		Canvas.Style = 1;
00975		Canvas.DrawColor.R = 255;
00976		Canvas.DrawColor.G = 255;
00977		Canvas.DrawColor.B = 255;
00978	}
00979	
00980	defaultproperties
00981	{
00982	     TranslatorY=-128
00983	     CurTranY=-128
00984	     IdentifyName="Name"
00985	     IdentifyHealth="Health"
00986	     VersionMessage="Version"
00987	     TeamName(0)="Red Team: "
00988	     TeamName(1)="Blue Team: "
00989	     TeamName(2)="Green Team: "
00990	     TeamName(3)="Gold Team: "
00991	     TeamColor(0)=(R=255)
00992	     TeamColor(1)=(G=128,B=255)
00993	     TeamColor(2)=(G=255)
00994	     TeamColor(3)=(R=255,G=255)
00995	     AltTeamColor(0)=(R=200)
00996	     AltTeamColor(1)=(G=94,B=187)
00997	     AltTeamColor(2)=(G=128)
00998	     AltTeamColor(3)=(R=255,G=255,B=128)
00999	     RedColor=(R=255)
01000	     GreenColor=(G=255)
01001	     MainMenuType=Class'UnrealShare.UnrealMainMenu'
01002	}

End Source Code