Core.Object | +--Engine.Actor | +--Engine.Controller | +--Engine.AIController | +--XIDPawn.SharkController
bool
CHARGE_LES_LOGS
array
PathNodeSharkList
bMove
void
InitPathNodeSharkList()
//----------------------------------------------------- // init PathNodeJohan List
NavigationPoint
PickStartPoint()
//----------------------------------------------------- // troouve le point le plus pres pour commencer
LookForNextPoint()
00001 //----------------------------------------------------------- 00002 // 00003 //----------------------------------------------------------- 00004 class SharkController extends AIController; 00005 00006 var array<NavigationPoint> PathNodeSharkList; 00007 var bool CHARGE_LES_LOGS; // Pour voir mes logs 00008 var bool bMove; 00009 00010 //----------------------------------------------------- 00011 // init PathNodeJohan List 00012 function InitPathNodeSharkList() 00013 { 00014 local navigationpoint nav; 00015 00016 nav = Level.NavigationPointList; 00017 while (nav != None) 00018 { 00019 if (nav.tag==pawn.tag) 00020 { 00021 PathNodeSharkList.Length = PathNodeSharkList.Length + 1; 00022 PathNodeSharkList[PathNodeSharkList.Length - 1] = nav; 00023 } 00024 nav = nav.nextNavigationPoint; 00025 } 00026 } 00027 00028 //----------------------------------------------------- 00029 // troouve le point le plus pres pour commencer 00030 function NavigationPoint PickStartPoint() 00031 { 00032 local int i; 00033 local NavigationPoint BestPoint; 00034 00035 for (i=0;i<PathNodeSharkList.Length;i++) 00036 { 00037 if (BestPoint==none) 00038 { 00039 BestPoint=PathNodeSharkList[i]; 00040 } 00041 else 00042 { 00043 if (vsize(PathNodeSharkList[i].location-pawn.location)<vsize(BestPoint.location-pawn.location)) 00044 BestPoint=PathNodeSharkList[i]; 00045 } 00046 } 00047 return BestPoint; 00048 } 00049 00050 //_________________________________________________________________________ 00051 // ETAT INIT 00052 auto state init 00053 { 00054 begin: 00055 //CHARGE_LES_LOGS=true; 00056 InitShark: 00057 InitPathNodeSharkList(); 00058 if (PickStartPoint()==none) 00059 { 00060 log("WARNING PAS DE POINTS POUR LE REQUIN:"@pawn.tag); 00061 stop; 00062 } 00063 pawn.rotationrate.yaw=9000; 00064 pawn.velocity=vect(0,0,0); 00065 pawn.acceleration=vect(0,0,0); 00066 pawn.PlayMoving(); 00067 pawn.bcanswim=true; 00068 //bRotateToDesired = false; 00069 pawn.SetPhysics(PHYS_Swimming); 00070 gotostate('PathWandering'); 00071 } 00072 00073 00074 //_________________________________________________________________________ 00075 // ETAT PathWandering 00076 State PathWandering 00077 { 00078 event tick(float dt) //steering 00079 { 00080 super.tick(dt); 00081 00082 if (vsize((movetarget.location-pawn.location)*vect(1,1,0))>150) 00083 { 00084 pawn.acceleration=shark(pawn).fFacteurvitesse*( 150*normal((movetarget.location-pawn.location)*vect(1,1,0)) + 350*(1-(normal(movetarget.location-pawn.location) dot vector(pawn.rotation)))*vector(pawn.rotation)*vect(1,1,0)); 00085 if (CHARGE_LES_LOGS) log("...suite"@vsize(pawn.acceleration)@vsize(pawn.velocity)); 00086 } 00087 else 00088 gotostate('PathWandering','move'); 00089 } 00090 event timer() 00091 { 00092 focalpoint=10000*(movetarget.location-pawn.location)*vect(1,1,0)+pawn.Location; 00093 } 00094 function NavigationPoint LookForNextPoint() 00095 { 00096 local int i; 00097 local NavigationPoint BestPoint; 00098 local float Proba; 00099 00100 for (i=0;i<PathNodeSharkList.Length;i++) 00101 { 00102 if (vSize(PathNodeSharkList[i].location-pawn.location)<2000) 00103 { 00104 Proba=0.5*normal(PathNodeSharkList[i].location-pawn.location) dot vector(pawn.rotation); 00105 if (frand()<proba*0.7) 00106 { 00107 BestPoint=PathNodeSharkList[i]; 00108 break; 00109 } 00110 } 00111 } 00112 if (BestPoint==none) 00113 { 00114 if (CHARGE_LES_LOGS) log("jai pas selectionne de points j'en prend un au hasard"); 00115 BestPoint=PathNodeSharkList[rand(i-2)]; 00116 } 00117 return BestPoint; 00118 } 00119 begin: 00120 bmove=true; 00121 Move: 00122 MoveTarget=LookForNextPoint(); 00123 timer(); //actualisation vision 00124 settimer(2,true); //actualisation vision 00125 focus=none; 00126 destination=MoveTarget.location; //juste pour avoir visuel dans debug 00127 stop; 00128 } 00129 00130 00131 00132 defaultproperties 00133 { 00134 }