XIDPawn
Class Patrouille

source: C:\XIII\XIDPawn\Classes\Patrouille.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Keypoint
         |
         +--XIDPawn.GenFRD
            |
            +--XIDPawn.Patrouille
Direct Known Subclasses:None

class Patrouille
extends XIDPawn.GenFRD

//============================================================================= // Patrouille. //=============================================================================
Variables
 float AncienDelai
           2 controllers
 IAController Cont1,Cont2
           2 controllers
 float DistEntreChemins
 XIIIGameInfo GI
           2 controllers
 Actor LastWP
           2 controllers
 int NbRecul
 name PersoName1,PersoName2
 int i
           2 controllers
 BaseSoldier perso1,perso2,perso

States
Fin, patrouille
State Fin Function Summary


State patrouille Function Summary
 void Timer()



Source Code


00001	//=============================================================================
00002	// Patrouille.
00003	//=============================================================================
00004	class Patrouille extends GenFRD;
00005	
00006	var basesoldier perso1,perso2,perso;
00007	var() name PersoName1,PersoName2;
00008	var int NbRecul;
00009	var float DistEntreChemins;
00010	var IAController Cont1,Cont2;  //2 controllers
00011	var float AncienDelai;
00012	var actor LastWP;
00013	var int i;
00014	var Xiiigameinfo GI;
00015	
00016	
00017	
00018	
00019	//=============================================================================
00020	// Patrouille ||.
00021	//=============================================================================
00022	Auto state patrouille
00023	{
00024	     function Timer()
00025	     {
00026	          local vector direct;
00027	          local vector distance;
00028	          local float delai;
00029	
00030	
00031	          if ((perso1==none)||(perso2==none)||(Cont1.DestNavPoint==none)||(Cont2.DestNavPoint==none)||(perso1.health<=0)||(perso2.health<=0))
00032	          {
00033	               gotostate('fin');
00034	               return;
00035	          }
00036	          Cont1=IAController(perso1.controller);
00037	          Cont2=IAController(perso2.controller);
00038	          //si repassse devant alors annule delais
00039	          if ((perso==perso1)&&((vector(perso1.rotation) dot (perso2.location-perso1.location))>0))
00040	          {
00041	               log("retabli ancien delai 1");
00042	               patrolpoint(Cont1.DestNavPoint).pausetime=Anciendelai;
00043	               NbRecul=0;
00044	               LAstWP=none;
00045	               perso=none;
00046	               if (Cont1.sleeptime!=0)
00047	                    Cont1.gotostate('patrouille','patrol');
00048	          }
00049	          else if ((perso==perso2)&&((vector(perso2.rotation) dot (perso1.location-perso2.location))>0))
00050	          {
00051	               log("retabli ancien delai 2");
00052	               patrolpoint(Cont2.DestNavPoint).pausetime=Anciendelai;
00053	               NbRecul=0;
00054	               LAstWP=none;
00055	               perso=none;
00056	               if (Cont2.sleeptime!=0)
00057	                    Cont2.gotostate('patrouille','patrol');
00058	          }
00059	          if ((LastWP==none) || ((perso!=none)&&(LastWP!=IACOntroller                    (perso.controller).DestNavPoint)))
00060	          {
00061	               distance=perso1.location-perso2.location;
00062	               if (sqrt(square(Vsize(distance))-DistEntreChemins)>396)
00063	               {
00064	                    log(" ****************   trop loin ***************");
00065	                    // Qui est devant?
00066	                    if (Cont1.Isinstate('patrouille')&&(Cont1.LastPatrolPoint!=none)&&(Cont1.DestNavPoint!=none))
00067	                    {
00068	                         direct=(Cont1.DestNavPoint.location - Cont1.LastPatrolPoint.location);
00069	                    }
00070	                    else if (Cont2.Isinstate('patrouille')&&(Cont2.LastPatrolPoint!=none)&&(Cont2.DestNavPoint!=none))
00071	                         {
00072	                              direct=(Cont2.DestNavPoint.location - Cont2.LastPatrolPoint.location);
00073	                         }
00074	                    if (direct dot (distance)>0)
00075	                    {
00076	                         log("perso1 devant");
00077	                         if (perso==perso2)
00078	                              NbRecul=0;
00079	                         perso=perso1;
00080	                    }
00081	                    else
00082	                    {
00083	                         if (direct dot (distance)==0)
00084	                         {
00085	                              log("pas de delai");
00086	                              return;
00087	                         }
00088	                         else
00089	                         {
00090	                              log("perso2 devant");
00091	                              if (perso==perso2)
00092	                                   NbRecul=0;
00093	                              perso=perso2;
00094	                         }
00095	                    }
00096	
00097	
00098	                    if (perso==perso1)
00099	                    {
00100	                         delai=Vsize(distance)/(perso2.groundSpeed*perso2.walkingspeed);
00101	                         if ((Cont2.Isinstate('chasse')) || (Cont2.Isinstate('temporise'))||                               (Cont2.Isinstate('Vavers')))
00102	                         {
00103	                              log("1 rallonge le delai");
00104	                              delai+=12+4*Frand();
00105	                         }
00106	                         else if (!Cont2.Isinstate('patrouille'))
00107	                              delai+=6+4*Frand();
00108	                    }
00109	                    else
00110	                    {
00111	                         delai=Vsize(distance)/(perso1.groundSpeed*perso1.walkingspeed);
00112	                         if ((Cont1.Isinstate('chasse')) || (Cont1.Isinstate('temporise'))||                               (Cont1.Isinstate('Vavers')))
00113	                         {
00114	                              log("2 rallonge le delai");
00115	                              delai+=12+4*Frand();
00116	                         }
00117	                         else if (!Cont1.Isinstate('patrouille'))
00118	                              delai+=6+4*Frand();
00119	                    }
00120	                    log("effectue delai"$delai);
00121	                    Cont1=IAcontroller(perso.controller); //reutil de cont1
00122	                    Anciendelai=patrolpoint(Cont1.DestNavPoint).pausetime;
00123	                    patrolpoint(Cont1.DestNavPoint).pausetime += delai;
00124	                    LastWP=Cont1.DestNavPoint;
00125	                    NbRecul++;
00126	                    if (NbRecul>1)
00127	                         gotostate('fin');
00128	               }
00129	               else
00130	                    NbRecul=0;
00131	          }
00132	     }
00133	
00134	begin:
00135	
00136	init:
00137	     sleep(2);
00138	    GI=XIIIGameInfo(level.game);
00139	     For(i=0;i<GI.BaseSoldierList.Length;i++)
00140	     {
00141	          perso=basesoldier(GI.BaseSoldierList[i]);
00142	          if (!perso.bisdead && !perso.controller.isinstate('faction'))
00143	          {
00144	               if (perso.name==PersoName1)
00145	                    perso1=perso;
00146	               else if (perso.name==PersoName2)
00147	                    perso2=perso;
00148	          }
00149	     }
00150	     if ((perso1==none) || (perso2==none))
00151	     {
00152	          log(" ***    pas trouve persos de patrouille   **** ");
00153	          gotostate('fin');
00154	     }
00155	     Cont1=IAController(perso1.controller);
00156	     Cont2=IAController(perso2.controller);
00157	     if ((Cont1.DestNavPoint!=none) && (Cont2.DestNavPoint!=none))
00158	          DistEntreChemins= square(VSize(Cont1.DestNavPoint.location-Cont2.DestNavPoint.location));
00159	     else
00160	          DistEntreChemins=square(236);
00161	     NbRecul=0;
00162	     perso=none;
00163	     LAstWP=none;
00164	     setTimer(2,true);
00165	retard:
00166	
00167	}
00168	
00169	
00170	//=============================================================================
00171	// FIN
00172	//=============================================================================
00173	state Fin
00174	{
00175	
00176	begin:
00177	     log(self$"fin");
00178	}
00179	
00180	
00181	
00182	defaultproperties
00183	{
00184	     bDirectional=True
00185	}

End Source Code