UnrealI
Class RockSlide

source: e:\games\UnrealTournament\UnrealI\Classes\Rockslide.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Keypoint
         |
         +--UnrealI.RockSlide
Direct Known Subclasses:MagmaBurst

class RockSlide
extends Engine.Keypoint

//============================================================================= // RockSlide. //=============================================================================
Variables
 vector CubeDimensions
 rotator InitialDirection
           Is there a limit on it's lifespan?
 float MaxBetweenTime
           Is there a limit on it's lifespan?
 float MaxScaleFactor
           Is there a limit on it's lifespan?
 float MinBetweenTime
           Is there a limit on it's lifespan?
 float MinScaleFactor
           Is there a limit on it's lifespan?
 float NextRockTime
           Is there a limit on it's lifespan?
 float TimeLength
           Is there a limit on it's lifespan?
 bool TimeLimit
           Is there a limit on it's lifespan?
 float TotalPassedTime
           Is there a limit on it's lifespan?
 float maxInitialSpeed
           Is there a limit on it's lifespan?
 float minInitialSpeed
           Is there a limit on it's lifespan?

States
Active

Function Summary
 void BeginPlay()
 void MakeRock()
 void Trigger(Actor Other, Pawn EventInstigator)


State Active Function Summary



Source Code


00001	//=============================================================================
00002	// RockSlide.
00003	//=============================================================================
00004	class RockSlide extends KeyPoint;
00005	
00006	// Spawns a set of rocks within a cubical volume.  The rocks are
00007	// produced at random intervals, and the entirety of the effect
00008	// lasts for a set amount of time.  MZM
00009	
00010	var() vector   CubeDimensions;
00011	var() bool     TimeLimit;          // Is there a limit on it's lifespan?
00012	var() float    TimeLength;
00013	var() float    MinBetweenTime;
00014	var() float    MaxBetweenTime;
00015	var() float    MinScaleFactor;
00016	var() float    MaxScaleFactor;
00017	var() rotator  InitialDirection;
00018	var() float    minInitialSpeed;
00019	var() float    maxInitialSpeed;
00020	
00021	var   float  NextRockTime;
00022	var   float  TotalPassedTime;
00023	
00024	
00025	function BeginPlay() 
00026	{
00027		// Initialize and check the values of variables.
00028		MaxScaleFactor = FMin(1.0, MaxScaleFactor);
00029		MinScaleFactor = FMax(0.0, MinScaleFactor);
00030		if (MinBetweenTime >= MaxBetweenTime) 
00031			MaxBetweenTime=MinBetweenTime + 0.1;
00032		if (MinScaleFactor >= MaxScaleFactor) 
00033			MaxScaleFactor=MinScaleFactor;
00034	
00035		Super.BeginPlay();
00036	}
00037	
00038	function MakeRock () 
00039	{
00040		// Spawns another rock somewhere within the cube,
00041		// of a randomized size and shape.  The rock has
00042		// falling physics but no initial velocity, so it 
00043		// needs to fall a distance before it becomes dangerous.
00044	
00045		local vector  SpawnLoc;
00046		local BigRock    TempRock;
00047		
00048		SpawnLoc = Location - (CubeDimensions*0.5);
00049		SpawnLoc.X += FRand()*CubeDimensions.X;
00050		SpawnLoc.Y += FRand()*CubeDimensions.Y;
00051		SpawnLoc.Z += FRand()*CubeDimensions.Z;
00052	
00053		TempRock = Spawn (class 'BigRock', ,'', SpawnLoc);
00054		if ( TempRock != None )
00055		{
00056			TempRock.SetRotation(InitialDirection);
00057			TempRock.Speed = (MinInitialSpeed+
00058			         		(MaxInitialSpeed-MinInitialSpeed)*FRand());
00059	
00060			TempRock.DrawScale = (MaxScaleFactor-MinScaleFactor)*FRand()+MinScaleFactor;
00061			TempRock.SetCollisionSize(TempRock.CollisionRadius*TempRock.DrawScale/TempRock.Default.DrawScale, 
00062										 TempRock.CollisionHeight*TempRock.DrawScale/TempRock.Default.DrawScale);
00063		}
00064	}
00065	
00066	auto state() Triggered 
00067	{
00068		function Trigger (actor Other, pawn EventInstigator) 
00069		{
00070			MakeRock();
00071			GotoState ('Active');
00072		}
00073	}
00074	
00075	state Active
00076	{
00077	Begin:
00078		// A loop which lasts for the total time allowed for the
00079		// effect, producing rocks at randomized intervals.
00080		MakeRock();
00081		NextRockTime = FRand()*(MaxBetweenTime-MinBetweenTime)+ MinBetweenTime;
00082		TotalPassedTime += NextRockTime;
00083		sleep (NextRockTime);
00084		if ( !TimeLimit || (TotalPassedTime < TimeLength) ) 
00085			goto 'RocksFall';
00086		Destroy();
00087	}
00088	
00089	defaultproperties
00090	{
00091	     CubeDimensions=(X=50.000000,Y=50.000000,Z=50.000000)
00092	     TimeLength=10.000000
00093	     MinBetweenTime=1.000000
00094	     MaxBetweenTime=3.000000
00095	     MinScaleFactor=0.500000
00096	     MaxScaleFactor=1.000000
00097	     bStatic=False
00098	     Tag=Event1
00099	     Texture=Texture'UnrealShare.S_Bubble2'
00100	}

End Source Code