UnrealI
Class CodeMaster

source: e:\games\UnrealTournament\UnrealI\Classes\CodeMaster.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Info
         |
         +--UnrealI.CodeMaster
Direct Known Subclasses:None

class CodeMaster
extends Engine.Info

//============================================================================= // CodeMaster. //=============================================================================
Variables
 int ActualOrder[6]
 name MainEvent
 name MoverTags[6]
 int NumElements
 int NumTriggered
 int OrderCode[6]
 int TriggerFlags[6]
 bool bTriggeredAlready


Function Summary
 void BeginPlay()
 void CheckOrder()
 void NotifyTriggered(int TriggerCode)



Source Code


00001	//=============================================================================
00002	// CodeMaster.
00003	//=============================================================================
00004	class CodeMaster extends Info;
00005	
00006	// When a set of CodeTriggers are set up along with their corresponding
00007	// ElevatorMovers, the CodeMaster is notified by the CodeTriggers whenever
00008	// something encroaches upon them, and tries to match the order of trigger
00009	// activations to a preset pattern, and if the pattern is matched, the
00010	// main event is called, solving the "puzzle". M
00011	
00012	var() int  OrderCode[6];
00013	var() name MoverTags[6];
00014	var() int  NumElements;
00015	var() name MainEvent;
00016	
00017	var   int  ActualOrder[6];
00018	var   int  TriggerFlags[6];
00019	var   int  NumTriggered;
00020	var   bool bTriggeredAlready;
00021	
00022	function BeginPlay()
00023	{
00024		local int i;
00025		
00026		bTriggeredAlready = false;
00027		for( i=0; i<NumElements; i++ ) TriggerFlags[i] = 0;
00028		NumTriggered = 0;
00029	}
00030	
00031	function NotifyTriggered( int TriggerCode )
00032	{
00033		// Don't continue if the main Event has already been successfully called
00034		if( bTriggeredAlready ) return; 
00035	
00036		// Don't add it to the order list if this trigger has been triggered already
00037		if( TriggerFlags[ TriggerCode ] == 1 ) return;
00038	
00039		// Set the trigger flag for this code
00040		//log( "TriggerCode = " $ TriggerCode );
00041		TriggerFlags[ TriggerCode ] = 1;
00042		
00043		// Add this code to the sequence
00044		if( NumTriggered == NumElements ) NumTriggered = 0;
00045		ActualOrder[ NumTriggered ] = TriggerCode;
00046		NumTriggered++;
00047		
00048		CheckOrder();
00049	}
00050	
00051	function CheckOrder()
00052	{
00053		local int i;
00054		local int bR;
00055		local ElevatorMover EM;
00056		local Actor tAct;
00057	
00058		// Check if the order given matches what is required to cause the event
00059		
00060		bR = 1;
00061		// First check if all the triggers were activated
00062		for( i=0; i<NumElements; i++ )
00063			bR = bR * TriggerFlags[i];
00064			
00065		if( bR != 0 )
00066		{	
00067			//log("All triggers activated");
00068			// All the triggers were activated
00069			// Now check if the order of activation was correct
00070			for( i=0; i<NumElements; i++ )
00071			{
00072				if( OrderCode[i] == ActualOrder[i] )
00073				{
00074					if( i == NumElements-1 )
00075					{
00076						//log("Successful! Calling Main Event.");
00077						// successful match				
00078						// Call the main Event
00079						if( MainEvent != '' )
00080							foreach AllActors( class 'Actor', tAct, MainEvent )
00081								tAct.Trigger( Self, Self.Instigator );
00082	
00083						// deactivate the CodeMaster
00084						bTriggeredAlready = true;	
00085						return;
00086					}
00087				}
00088				else break;
00089			}
00090	
00091			//log("Resetting puzzle");
00092	
00093			// If false then find all ElevatorMovers who have Tags which match
00094			// this CodeMaster's Event, and Move them to keyframe 0.
00095			for( i=0; i<NumElements; i++ )
00096			{
00097				if( MoverTags[i] != '' )
00098					foreach AllActors( class 'ElevatorMover', EM, MoverTags[i] )
00099						EM.MoveKeyframe( 0, EM.MoveTime );
00100			}
00101	
00102			// Clear the TriggerFlags array, reset the puzzle
00103			for( i=0; i<NumElements; i++ ) TriggerFlags[i] = 0;
00104			NumTriggered = 0;
00105		}
00106	}
00107	
00108	defaultproperties
00109	{
00110	}

End Source Code