Jypeli  9
The simple game programming library
AbstractMoverBrain.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.ComponentModel;
3 
4 namespace Jypeli
5 {
9  [EditorBrowsable( EditorBrowsableState.Never )]
10  public abstract class AbstractMoverBrain : Brain
11  {
12  private double _speed = 100;
14 
19  public virtual double Speed
20  {
21  get { return _speed; }
22  set { _speed = value; }
23  }
24 
28  public bool TurnWhileMoving { get; set; }
29 
34  {
35  get { return _turnSpeed; }
36  set { _turnSpeed = value; }
37  }
38 
40  {
41  }
42 
43  public AbstractMoverBrain( double speed )
44  {
45  this.Speed = speed;
46  }
47 
48  private double dist( double a1, double a2 )
49  {
50  return Math.PI - Math.Abs( Math.Abs( a2 - a1 ) - Math.PI );
51  }
52 
53  public void Turn( Angle angle )
54  {
55  if ( !TurnWhileMoving || Game.Time.SinceLastUpdate.TotalSeconds == 0 || Owner == null || Owner.Angle == angle ) return;
56 
57  double maxTurn = TurnSpeed.Radians * Game.Time.SinceLastUpdate.TotalSeconds;
58 
59  if ( Math.Abs( angle.Radians - Owner.Angle.Radians ) <= maxTurn )
60  Owner.Angle = angle;
61  else
62  {
63  double a1 = Owner.Angle.Radians;
64  double a2 = angle.Radians;
65  double d = dist( a2, a1 );
66  double dcw = dist( a2, a1 - maxTurn );
67  double dccw = dist( a2, a1 + maxTurn );
68 
69  double step = dcw < dccw ? -maxTurn : maxTurn;
71  }
72  }
73 
74  protected void Move( Vector direction )
75  {
76  if ( Owner == null || direction == Vector.Zero ) return;
77  double d = Math.Min( direction.Magnitude, Speed );
78  Owner.Move( Vector.FromLengthAndAngle( d, direction.Angle ) );
79  Turn(direction.Angle);
80  }
81 
82  protected void Move( Angle direction )
83  {
84  if ( Owner == null ) return;
85  Owner.Move( Vector.FromLengthAndAngle( Speed, direction ) );
86  Turn( direction );
87  }
88  }
89 }
Jypeli.AbstractMoverBrain.TurnSpeed
UnlimitedAngle TurnSpeed
Maksimikääntymisnopeus (radiaania sekunnissa)
Definition: AbstractMoverBrain.cs:34
Jypeli.AbstractMoverBrain.Move
void Move(Angle direction)
Definition: AbstractMoverBrain.cs:82
Jypeli.Game.Time
static Time Time
Peliaika. Sisältää tiedon siitä, kuinka kauan peliä on pelattu (Time.SinceStartOfGame) ja kuinka kaua...
Definition: Time.cs:25
Jypeli.Brain.Owner
IGameObject Owner
Aivojen haltija.
Definition: Brain.cs:69
Jypeli.Vector.Zero
static readonly Vector Zero
Nollavektori.
Definition: Vector.cs:63
Jypeli.AbstractMoverBrain.Speed
virtual double Speed
Nopeus, jolla liikutaan.
Definition: AbstractMoverBrain.cs:20
Jypeli
Definition: Automobile.cs:5
Jypeli.UnlimitedAngle
Rajoittamaton kulma (asteina ja radiaaneina). Tietoja kulmasta: http://en.wikipedia....
Definition: UnlimitedAngle.cs:40
Jypeli.Angle.Radians
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: Angle.cs:85
Jypeli.AbstractMoverBrain.dist
double dist(double a1, double a2)
Definition: AbstractMoverBrain.cs:48
Jypeli.Brain
Aivoluokka peliolioille. Voidaan käyttää tekoälyn ja tilannekohtaisten toimintamallien luomiseen peli...
Definition: Brain.cs:41
Jypeli.AbstractMoverBrain.Turn
void Turn(Angle angle)
Definition: AbstractMoverBrain.cs:53
Jypeli.UnlimitedAngle.Infinity
static readonly UnlimitedAngle Infinity
Ääretön kulma.
Definition: UnlimitedAngle.cs:64
Jypeli.UnlimitedAngle.Radians
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: UnlimitedAngle.cs:89
Jypeli.IGameObject.Move
void Move(Vector movement)
Jypeli.AbstractMoverBrain.AbstractMoverBrain
AbstractMoverBrain(double speed)
Definition: AbstractMoverBrain.cs:43
Jypeli.Vector.Angle
Angle Angle
Kulma radiaaneina.
Definition: Vector.cs:346
Jypeli.Time.SinceLastUpdate
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Definition: Time.cs:24
Jypeli.Angle.FromRadians
static Angle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
Definition: Angle.cs:315
Jypeli.AbstractMoverBrain.TurnWhileMoving
bool TurnWhileMoving
Käännytäänkö siihen suuntaan mihin liikutaan.
Definition: AbstractMoverBrain.cs:28
Jypeli.AbstractMoverBrain.AbstractMoverBrain
AbstractMoverBrain()
Definition: AbstractMoverBrain.cs:39
Jypeli.AbstractMoverBrain
Yleiset liikkumiseen tarkoitetut aivot.
Definition: AbstractMoverBrain.cs:11
Jypeli.Vector.FromLengthAndAngle
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.
Definition: Vector.cs:106
Jypeli.Vector.Magnitude
double Magnitude
Vektorin pituus.
Definition: Vector.cs:319
Jypeli.Vector
2D-vektori.
Definition: Vector.cs:59
System
Definition: CFFauxAttributes.cs:29
Jypeli.AbstractMoverBrain._turnSpeed
UnlimitedAngle _turnSpeed
Definition: AbstractMoverBrain.cs:13
Jypeli.IGameObject.Angle
Angle Angle
Definition: IGameObject.cs:27
Jypeli.Game
Definition: Content.cs:46
Jypeli.AbstractMoverBrain._speed
double _speed
Definition: AbstractMoverBrain.cs:12
Jypeli.Angle
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
Jypeli.AbstractMoverBrain.Move
void Move(Vector direction)
Definition: AbstractMoverBrain.cs:74