//============================================================================= // Player start location. // Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. //============================================================================= class PlayerStart extends NavigationPoint placeable native ClassGroup(Common) hidecategories(Collision); cpptext { #if WITH_EDITOR void addReachSpecs(AScout *Scout, UBOOL bOnlyChanged=0); #if __TW_PATHFINDING_ virtual UBOOL CanConnectTo(ANavigationPoint* Nav, UBOOL bCheckDistance); #endif #endif } var() bool bEnabled; var() bool bPrimaryStart; // None primary starts used only if no primary start available /** Team specific player start, 255 for any team */ var() int TeamIndex; // Properties used only by the PlayerStart scoring postrender system for visualizing playerstart scoring in multiplayer games. Set these in // your RatePlayerStart() or equivalent method. Will be displayed if PlayerStart's bPostRenderIfNotVisible=true and the PlayerStart is added to // the HUD's PostRenderedActors array. var int Score; var int SelectionIndex; var bool bBestStart; /* epic =============================================== * ::OnToggle * * Scripted support for toggling a playerstart, checks which * operation to perform by looking at the action input. * * Input 1: turn on * Input 2: turn off * Input 3: toggle * * ===================================================== */ simulated function OnToggle(SeqAct_Toggle action) { if (action.InputLinks[0].bHasImpulse) { // turn on bEnabled = true; } else if (action.InputLinks[1].bHasImpulse) { // turn off bEnabled = false; } else if (action.InputLinks[2].bHasImpulse) { // toggle bEnabled = !bEnabled; } } /** Hook to allow agents to render HUD overlays for themselves. Called only if the agent was rendered this tick. Assumes that appropriate font has already been set Will be displayed if PlayerStart's bPostRenderIfNotVisible=true and the PlayerStart is added to the HUD's PostRenderedActors array. */ simulated event PostRenderFor(PlayerController PC, Canvas Canvas, vector CameraPosition, vector CameraDir) { local float NameXL, TextYL, YL, XL, textscale; local vector ScreenLoc, ViewLoc; local rotator ViewRot; local string ScreenName; local FontRenderInfo FontInfo; PC.GetPlayerViewPoint(ViewLoc, ViewRot); if ( (vector(ViewRot) dot (Location - ViewLoc)) < 0.5 ) return; // make sure not clipped out screenLoc = Canvas.Project(Location); if (screenLoc.X < 0 || screenLoc.X >= Canvas.ClipX || screenLoc.Y < 0 || screenLoc.Y >= Canvas.ClipY) { return; } ScreenName = "("$SelectionIndex$")"@Score; Canvas.StrLen(ScreenName, NameXL, TextYL); XL = FMax(XL, NameXL); YL += TextYL; textscale = 1.0; if ( bBestStart ) { Canvas.DrawColor = class'HUD'.default.GreenColor; textscale = 4.0; } else if ( Score == 10000000.0 ) { Canvas.DrawColor = class'HUD'.default.WhiteColor; Canvas.DrawColor.B = 0; } else if ( Score == 0.0 ) { Canvas.DrawColor.R = 200; Canvas.DrawColor.G = 50; Canvas.DrawColor.B = 255; textscale = 0.5; } else { Canvas.DrawColor = class'HUD'.default.RedColor; } Canvas.SetPos(ScreenLoc.X-0.5*NameXL,ScreenLoc.Y-1.7*YL); FontInfo.bClipText = true; Canvas.DrawText(ScreenName, true, textscale, textscale, FontInfo); } defaultproperties { Begin Object NAME=CollisionCylinder CollisionRadius=+00040.000000 CollisionHeight=+00080.000000 End Object Begin Object NAME=Sprite LegacyClassName=PlayerStart_PlayerStartSprite_Class Sprite=Texture2D'EditorResources.S_Player' SpriteCategoryName="PlayerStart" End Object bPrimaryStart=true bEnabled=true bCollideWhenPlacing=false TeamIndex=0 bEdShouldSnap=true `if(`__TW_PATHFINDING_) bBuildLongPaths=false `endif }