2 using System.Collections.Generic;
11 private List<Vector> path;
12 private int wayPointIndex = 0;
14 private double _waypointRadius = 10;
15 private int stoppedAtCount = -1;
20 public IList<Vector> Path
25 path =
new List<Vector>( value );
33 public int NextWaypointIndex
35 get {
return wayPointIndex; }
36 set { wayPointIndex = value; }
44 get {
return Path[wayPointIndex]; }
61 public double WaypointRadius
63 get {
return _waypointRadius; }
64 set { _waypointRadius = value; }
75 public bool Loop {
get;
set; }
80 public bool ReverseReturn {
get;
set; }
99 DistanceToWaypoint =
new DoubleMeter(
double.PositiveInfinity, 0,
double.PositiveInfinity);
117 DistanceToWaypoint =
new DoubleMeter(
double.PositiveInfinity, 0,
double.PositiveInfinity );
127 DistanceToWaypoint =
new DoubleMeter(
double.PositiveInfinity, 0,
double.PositiveInfinity );
135 this.Path = path.ToArray();
136 DistanceToWaypoint =
new DoubleMeter(
double.PositiveInfinity, 0,
double.PositiveInfinity );
145 this.Path = path.ToArray();
146 DistanceToWaypoint =
new DoubleMeter(
double.PositiveInfinity, 0,
double.PositiveInfinity );
151 if ( Owner == null || Path == null || Path.Count == 0 )
return;
153 if ( wayPointIndex < 0 )
155 else if ( wayPointIndex >= Path.Count )
156 wayPointIndex = Path.Count - 1;
158 if ( stoppedAtCount >= 0 )
160 if ( stoppedAtCount == Path.Count )
166 Vector target = path[wayPointIndex];
167 Vector dist = target - Owner.AbsolutePosition;
168 DistanceToWaypoint.Value = dist.
Magnitude;
170 if ( DistanceToWaypoint.Value < WaypointRadius )
175 else if ( DistanceToWaypoint.Value > 2 * Speed * time.
SinceLastUpdate.TotalSeconds )
184 private void OnArrivedAtWaypoint()
186 if ( ArrivedAtWaypoint != null )
190 private void OnArrivedAtEnd()
192 if ( ArrivedAtEnd != null )
196 ( (PhysicsObject)Owner ).Stop();
199 private void Arrived()
201 if ( Path == null || Path.Count == 0 || wayPointIndex >= path.Count )
204 OnArrivedAtWaypoint();
206 int nextIndex = wayPointIndex + step;
208 if ( nextIndex < 0 || nextIndex >= path.Count )
215 wayPointIndex = nextIndex + step;
219 wayPointIndex = nextIndex + Math.Sign( step ) * Path.Count;
220 while ( wayPointIndex < 0 ) wayPointIndex += Path.Count;
221 while ( wayPointIndex >= Path.Count ) wayPointIndex -= Path.Count;
225 stoppedAtCount = Path.Count;
231 wayPointIndex = nextIndex;
PathFollowerBrain(double speed, List< Vector > path)
Luo aivot, jotka seuraavat polkua path.
double Magnitude
Vektorin pituus.
Angle Angle
Kulma radiaaneina.
PathFollowerBrain()
Luo uudet polunseuraaja-aivot.
PathFollowerBrain(List< Vector >path)
Luo aivot, jotka seuraavat polkua path.
PathFollowerBrain(double speed)
Luo uudet polunseuraaja-aivot ja asettaa niille nopeuden.
Aivot, jotka seuraavat annettua polkua.
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Mittari, joka mittaa double-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
override void Update(Time time)
Kutsutaan, kun tilaa päivitetään. Suurin osa päätöksenteosta tapahtuu täällä. Perivässä luokassa meth...
Yleiset liikkumiseen tarkoitetut aivot.
PathFollowerBrain(double speed, params Vector[] path)
Luo aivot, jotka seuraavat polkua path.
PathFollowerBrain(params Vector[] path)
Luo aivot, jotka seuraavat polkua path.
Action ArrivedAtWaypoint
Tapahtuu, kun saavutetaan reitin piste.
Action ArrivedAtEnd
Tapahtuu, kun saavutaan reitin päähän.