XIII
Class MitraillGuardController

source: C:\XIII\XIII\Classes\MitraillGuardController.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Controller
         |
         +--Engine.AIController
            |
            +--XIII.MitraillGuardController
Direct Known Subclasses:None

class MitraillGuardController
extends Engine.AIController

//----------------------------------------------------------- // //-----------------------------------------------------------
Variables
 MitraillTop GunnedTurret
           the controlled turret.
 int TeamID
           Accuracy of the shoot, more accurate w/ time
 XIIIPawn XIIITarget
           the current target
 float fAcquireTimer
           time to recognize player & shoot.
 float fTraceAccuracy
           Accuracy of the shoot, more accurate w/ time

States
Gunning
State Gunning Function Summary
 void Timer()
 void SeePlayer(Pawn SeenPlayer)
 void Tick(float DT)



Source Code


00001	//-----------------------------------------------------------
00002	//
00003	//-----------------------------------------------------------
00004	class MitraillGuardController extends AIController;
00005	
00006	var XIIIPawn XIIITarget;      // the current target
00007	var MitraillTop GunnedTurret; // the controlled turret.
00008	var float fAcquireTimer;      // time to recognize player & shoot.
00009	//var bool bAware;              // Player already seen, target faster.
00010	var float fTraceAccuracy;     // Accuracy of the shoot, more accurate w/ time
00011	var int TeamID;
00012	
00013	//_____________________________________________________________________________
00014	auto state Gunning
00015	{
00016	    function Tick(float DT)
00017	    {
00018	      local rotator R;
00019	      local vector X,Y,Z;
00020	
00021	      if ( XIIITarget == none )
00022	      {
00023	        GunnedTurret.TrySetRotation(Rotation);
00024	        bFire = 0.0;
00025	      }
00026	      else
00027	      {
00028	        if( ( !FastTrace(XIIITarget.Location, GunnedTurret.Location) ) || ( XIIITarget.bIsDead ) )
00029	        {
00030	          XIIITarget = none;
00031	          GunnedTurret.TrySetRotation(Rotation);
00032	          bFire = 0.0;
00033	          return;
00034	        }
00035	        X = XIIITarget.Location - Location;
00036	        Z = vect(0,0,1);
00037	        Y = Z cross X;
00038	        R = OrthoRotation(X,Y,Z);
00039	        if ( GunnedTurret.TrySetRotation(R) )
00040	        {
00041	          if ( bFire == 0.0 )
00042	          {
00043	            bFire = 1.0;
00044	            GunnedTurret.Fire();
00045	          }
00046	          else
00047	          {
00048	//            Log("fTraceAccuracy="$fTraceAccuracy);
00049	            GunnedTurret.TraceAccuracy = fTraceAccuracy;
00050	            fTraceAccuracy = (fTraceAccuracy * (1/DT) + 5.0) / (1/DT + 1);
00051	          }
00052	        }
00053	        else
00054	          bFire = 0.0;
00055	      }
00056	      SetRotation(GunnedTurret.Rotation);
00057	    }
00058	
00059	    function SeePlayer(Pawn SeenPlayer)
00060	    {
00061	//      log(SeenPlayer.Controller.PlayerReplicationInfo.Team.TeamIndex@GunnedTurret.TeamID);
00062	
00063	      if( SeenPlayer.Controller.PlayerReplicationInfo.Team.TeamIndex == GunnedTurret.TeamID )
00064	          return;
00065	
00066	      if ( (XIIITarget == none) && (vSize(SeenPlayer.Location - GunnedTurret.Location) < GunnedTurret.TraceDist) )
00067	      {
00068	        fAcquireTimer = GunnedTurret.fGuardReactionDelay + frand() * 1.0;
00069	/*        if ( bAware )
00070	          fAcquireTimer /= 2.0; */
00071	        SetTimer(fAcquireTimer, false);
00072	        XIIITarget = XIIIPawn(SeenPlayer);
00073	        fTraceAccuracy = 120.0;
00074	      }
00075	    }
00076	
00077	    function Timer()
00078	    {
00079	      if ( (XIIITarget != none) && FastTrace(XIIITarget.Location, GunnedTurret.Location) )
00080	      {
00081	//        bAware=true;
00082	        Enable('tick');
00083	      }
00084	      else
00085	      {
00086	        XIIITarget = none;
00087	        Disable('tick');
00088	      }
00089	    }
00090	
00091	Begin:
00092	  Disable('Tick');
00093	  Sleep(0.5);
00094	  GunnedTurret = MitraillTop(Pawn.ControlledActor);
00095	}
00096	
00097	
00098	
00099	defaultproperties
00100	{
00101	}

End Source Code