Botpack
Class TrapSpringer

source: e:\games\UnrealTournament\Botpack\Classes\TrapSpringer.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Inventory
         |
         +--Botpack.TrapSpringer
Direct Known Subclasses:None

class TrapSpringer
extends Engine.Inventory

//============================================================================= // TrapSpringer. //=============================================================================
Variables
 name TrapTag
           tag of trap - could be zone, mover, or a trigger which counts touches
 Actor TrapTrigger
           tag of trigger for trap
 Actor Trap[8]
           tag of trigger for trap
 name TriggerTag
           tag of trigger for trap
 bool bShootIt
           tag of trigger for trap
 int trapnum
           tag of trigger for trap

States
Pickup

Function Summary
 void BecomeItem()
     
//
// Become an inventory item.
//
 void BecomePickup()
     
//
// Become a pickup.
//
 float CalcDesire(Pawn Bot, Pawn Enemy)
     
//=============================================================================
// AI inventory functions.
 bool FoundTrapTarget(Pawn Bot, Pawn P)
 void GiveTo(Pawn Other)
     
//
// Give this inventory item to a pawn.
//
 void PostBeginPlay()
 void SetRespawn()
     
//
// Set up respawn waiting if desired.
//
 Inventory SpawnCopy(Pawn Other)
     
// Either give this inventory to player Other, or spawn a copy
// and give it to the player Other, setting up original to be respawned.
//


State Pickup Function Summary
 void BeginState()
 void Touch(Actor Other)
     
// When touched by an actor.
 void ZoneChange(ZoneInfo NewZone)



Source Code


00001	//=============================================================================
00002	// TrapSpringer.
00003	//=============================================================================
00004	class TrapSpringer extends Inventory;
00005	
00006	var() name TrapTag; //tag of trap - could be zone, mover, or a trigger which counts touches
00007	var() name TriggerTag;	// tag of trigger for trap
00008	var Actor Trap[8];
00009	var Actor TrapTrigger;
00010	var() bool bShootIt;
00011	var int trapnum;
00012	
00013	function PostBeginPlay()
00014	{
00015		local int num;
00016		local Actor A;
00017	
00018		// hack fix for DM-Pressure
00019		if ( TrapTag == 'DisFat' )
00020			TrapTag = 'dapressurezone';
00021	
00022		Super.PostBeginPlay();
00023		DrawType = DT_None;
00024	
00025		if ( (TrapTag == '') || (TriggerTag == '') )
00026		{
00027			Destroy();
00028			return;
00029		}
00030	
00031		ForEach AllActors(class'Actor', TrapTrigger, TriggerTag)
00032			break;
00033	
00034		trapnum = 0;
00035		ForEach AllActors(class'Actor', A, TrapTag)
00036			if ( A.IsA('ZoneInfo') )
00037			{
00038				Trap[0] = A;
00039				TrapNum = 1;
00040				return;
00041			}
00042			else if ( A.IsA('Mover') || A.IsA('Trigger') )
00043			{
00044				Trap[trapnum] = A;
00045				trapnum++;
00046				if ( trapnum == 8 )
00047					return;
00048			}
00049	}
00050	
00051	//=============================================================================
00052	// AI inventory functions.
00053	
00054	function float CalcDesire( Pawn Bot, Pawn Enemy )
00055	{
00056		TrapTrigger.SpecialHandling(Bot);
00057		return 1.5;
00058	}
00059	
00060	event float BotDesireability( pawn Bot )
00061	{
00062		local Pawn P;
00063		local int i,j;
00064		local float dist;
00065	
00066		if ( (Trap[0] == None) || (TrapTrigger == None) )
00067		{
00068			Destroy();
00069			return -1;
00070		}
00071		
00072		if ( bShootit && ((Bot.bFire !=0) || (Bot.bAltFire != 0)) )
00073			return -1;
00074	
00075		dist = VSize(Bot.Location - Location);
00076	
00077		if ( dist > 1600 )
00078			return -1;
00079	
00080		for ( j=0; j<trapnum; j++ )
00081			if ( Trap[j] != None )
00082			{
00083				if ( Trap[j].IsA('ZoneInfo') )
00084				{
00085					for ( P=Level.PawnList; P!=None; P=P.NextPawn )
00086						if ( (P.Region.Zone == Trap[j]) && FoundTrapTarget(Bot, P) )
00087							return CalcDesire(Bot, P);
00088				}
00089				else if ( Trap[j].bBlockActors || Trap[j].bBlockPlayers )
00090				{
00091					for ( P=Level.PawnList; P!=None; P=P.NextPawn )
00092						if ( (P.Base == Trap[j]) && FoundTrapTarget(Bot, P) )
00093							return CalcDesire(Bot, P);
00094				}
00095				else if ( Trap[j].bCollideActors )
00096				{
00097					for ( i=0 ;i<4; i++ )
00098					{
00099						P = Pawn(Trap[j].Touching[i]);
00100						if ( (P != None) && FoundTrapTarget(Bot, P) )
00101							return CalcDesire(Bot, Pawn(Trap[j].Touching[i]));
00102					}
00103				}
00104			}
00105		return -1;
00106	}
00107	
00108	function bool FoundTrapTarget(Pawn Bot, Pawn P)
00109	{
00110		return ( P.bIsPlayer && (P != Bot) && (P.Health > 0) 
00111				&& (!Level.Game.bTeamGame || (P.PlayerReplicationInfo.Team != Bot.PlayerReplicationInfo.Team)) );
00112	}
00113	
00114	//
00115	// Become a pickup.
00116	//
00117	function BecomePickup()
00118	{
00119		SetCollision( true, false, false );
00120	}
00121	
00122	//
00123	// Become an inventory item.
00124	//
00125	function BecomeItem()
00126	{
00127	}
00128	
00129	//
00130	// Give this inventory item to a pawn.
00131	//
00132	function GiveTo( pawn Other )
00133	{
00134	}
00135	
00136	// Either give this inventory to player Other, or spawn a copy
00137	// and give it to the player Other, setting up original to be respawned.
00138	//
00139	function inventory SpawnCopy( pawn Other )
00140	{
00141		return None;
00142	}
00143	
00144	//
00145	// Set up respawn waiting if desired.
00146	//
00147	function SetRespawn()
00148	{
00149	}
00150	
00151	//=============================================================================
00152	// Pickup state: this inventory item is sitting on the ground.
00153	
00154	auto state Pickup
00155	{
00156		singular function ZoneChange( ZoneInfo NewZone )
00157		{
00158		}
00159	
00160		// When touched by an actor.
00161		function Touch( actor Other )
00162		{
00163			local Actor A;
00164	
00165			if( (Event != '') && (Pawn(Other)!=None) 
00166				&& Pawn(Other).bIsPlayer && (Pawn(Other).Health > 0) )
00167				foreach AllActors( class 'Actor', A, Event )
00168					A.Trigger( Other, Other.Instigator );
00169		}
00170	
00171		function BeginState()
00172		{
00173			BecomePickup();
00174		}
00175	
00176	Begin:
00177		BecomePickup();
00178	
00179	Dropped:
00180	}
00181	
00182	defaultproperties
00183	{
00184	     MaxDesireability=1.000000
00185	     DrawType=DT_Sprite
00186	}

End Source Code