RuneI
Class Confinement

source: c:\runehov\RuneI\Classes\Confinement.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--RuneI.Accelerator
         |
         +--RuneI.Confinement
Direct Known Subclasses:None

class Confinement
extends RuneI.Accelerator

//============================================================================= // Confinement. //=============================================================================
Variables
 name ConfinerTag[4]
           Maximum velocity transfer allowed from collision
 Actor Confiner[4]
           Maximum velocity transfer allowed from collision
 float MaxVelocityPickup
           Maximum velocity transfer allowed from collision


Function Summary
 void Bump(Actor Other)
 void ConfinementTick(float DeltaSeconds)
 void PreBeginPlay()
 void Tick(float DeltaTime)



Source Code


00001	//=============================================================================
00002	// Confinement.
00003	//=============================================================================
00004	class Confinement extends Accelerator
00005		native;
00006	
00007	// Confinement actors try to stay in the geometric center of a specified group
00008	// of actors.
00009	
00010	var() float MaxVelocityPickup;			// Maximum velocity transfer allowed from collision
00011	var() name ConfinerTag[4];
00012	var actor Confiner[4];
00013	
00014	const MaxConfiners = 4;
00015	
00016	native(651) final function ConfinementTick(float DeltaSeconds);
00017	
00018	function PreBeginPlay()
00019	{
00020		local actor A;
00021		local int i;
00022		
00023		for (i=0; i<MaxConfiners; i++)
00024		{
00025			if (ConfinerTag[i] != '')
00026				foreach AllActors(class'actor', A, ConfinerTag[i])
00027					Confiner[i] = A;
00028		}
00029	}
00030	
00031	function Bump(actor Other)
00032	{
00033	//	local vector transfer;
00034		local int i;
00035		
00036		if (Other.IsA('Pawn'))
00037		{	// Propogate velocity on to my confiners
00038	/*
00039			transfer = Normal(Other.Velocity) * Min(VSize(Other.Velocity), MaxVelocityPickup);
00040			for (i=0; i<MaxConfiners; i++)
00041				if (Confiner[i] != None)
00042					Confiner[i].Velocity += transfer;
00043	*/
00044			for (i=0; i<MaxConfiners; i++)
00045				if (Confiner[i] != None)
00046					Confiner[i].Touch(Other);
00047		}
00048	}
00049	
00050	
00051	function Tick(float DeltaTime)
00052	{
00053	/*
00054		local vector accum;
00055		local int i,numConfiners;
00056	
00057		// Move to average location of confiners	
00058		accum = vect(0,0,0);
00059		numConfiners = 0;
00060		for (i=0; i<MaxConfiners; i++)
00061		{
00062			if (Confiner[i] != None)
00063			{
00064				accum += Confiner[i].Location;
00065				numConfiners++;
00066			}
00067		}
00068		Move((accum / numConfiners) - Location);
00069	
00070		// Calculate Rotation (if necessary)
00071	*/	
00072		ConfinementTick(DeltaTime);
00073	}
00074	
00075	defaultproperties
00076	{
00077	     MaxVelocityPickup=100.000000
00078	     Physics=PHYS_Projectile
00079	     DrawType=DT_Mesh
00080	     CollisionRadius=20.000000
00081	     CollisionHeight=5.000000
00082	     bBlockActors=True
00083	     bBlockPlayers=True
00084	}

End Source Code