Jypeli 10
The simple game programming library
AbstractMoverBrain.cs
Siirry tämän tiedoston dokumentaatioon.
1using System;
2using System.ComponentModel;
3
4namespace 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
43 {
44 }
45
50 public AbstractMoverBrain( double speed )
51 {
52 this.Speed = speed;
53 }
54
55 private double dist( double a1, double a2 )
56 {
57 return Math.PI - Math.Abs( Math.Abs( a2 - a1 ) - Math.PI );
58 }
59
64 public void Turn( Angle angle )
65 {
66 if ( !TurnWhileMoving || Game.Time.SinceLastUpdate.TotalSeconds == 0 || Owner == null || Owner.Angle == angle ) return;
67
68 double maxTurn = TurnSpeed.Radians * Game.Time.SinceLastUpdate.TotalSeconds;
69
70 if ( Math.Abs( angle.Radians - Owner.Angle.Radians ) <= maxTurn )
71 Owner.Angle = angle;
72 else
73 {
74 double a1 = Owner.Angle.Radians;
75 double a2 = angle.Radians;
76 double d = dist( a2, a1 );
77 double dcw = dist( a2, a1 - maxTurn );
78 double dccw = dist( a2, a1 + maxTurn );
79
80 double step = dcw < dccw ? -maxTurn : maxTurn;
82 }
83 }
84
89 protected void Move( Vector direction )
90 {
91 if ( Owner == null || direction == Vector.Zero ) return;
92 double d = Math.Min( direction.Magnitude, Speed );
93 Owner.Move( Vector.FromLengthAndAngle( d, direction.Angle ) );
94 Turn(direction.Angle);
95 }
96
101 protected void Move( Angle direction )
102 {
103 if ( Owner == null ) return;
104 Owner.Move( Vector.FromLengthAndAngle( Speed, direction ) );
105 Turn( direction );
106 }
107 }
108}
Yleiset liikkumiseen tarkoitetut aivot.
AbstractMoverBrain()
Yleiset liikkumiseen tarkoitetut aivot
virtual double Speed
Nopeus, jolla liikutaan.
UnlimitedAngle TurnSpeed
Maksimikääntymisnopeus (radiaania sekunnissa)
bool TurnWhileMoving
Käännytäänkö siihen suuntaan mihin liikutaan.
void Turn(Angle angle)
Kääntää aivojen hallitsemaan hahmoa
void Move(Angle direction)
Liikuttaa aivojen hallitsemaa hahmoa
AbstractMoverBrain(double speed)
Yleiset liikkumiseen tarkoitetut aivot
void Move(Vector direction)
Liikuttaa aivojen hallitsemaa hahmoa
double dist(double a1, double a2)
Aivoluokka peliolioille. Voidaan käyttää tekoälyn ja tilannekohtaisten toimintamallien luomiseen peli...
Definition: Brain.cs:41
IGameObject Owner
Aivojen haltija.
Definition: Brain.cs:69
static Time Time
Peliaika. Sisältää tiedon siitä, kuinka kauan peliä on pelattu (Time.SinceStartOfGame) ja kuinka kaua...
Definition: Time.cs:25
void Move(Vector movement)
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
static Angle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
Definition: Angle.cs:315
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: Angle.cs:85
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Definition: Time.cs:27
Rajoittamaton kulma (asteina ja radiaaneina). Tietoja kulmasta: http://en.wikipedia....
static readonly UnlimitedAngle Infinity
Ääretön kulma.
double Radians
Palauttaa tai asettaa kulman radiaaneina.
2D-vektori.
Definition: Vector.cs:67
static readonly Vector Zero
Nollavektori.
Definition: Vector.cs:71
Angle Angle
Kulma radiaaneina.
Definition: Vector.cs:372
double Magnitude
Vektorin pituus.
Definition: Vector.cs:345
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.
Definition: Vector.cs:114