Jypeli  5
The simple game programming library
PlatformWandererBrain.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 
3 namespace Jypeli
4 {
9  public class PlatformWandererBrain : Brain
10  {
11  private PhysicsObject platform;
12  private double _speed = 50;
13  private double _jumpSpeed = 200;
14  private bool _fallsOffPlatforms = false;
15  private bool _triesToJump = false;
16  private Vector lastJumpingPosition;
17 
18  public Direction Direction { get; set; }
19 
23  public double JumpSpeed
24  {
25  get { return _jumpSpeed; }
26  set { _jumpSpeed = value; }
27  }
28 
32  public double Speed
33  {
34  get { return _speed; }
35  set { _speed = value; }
36  }
37 
41  public bool FallsOffPlatforms
42  {
43  get { return _fallsOffPlatforms; }
44  set { _fallsOffPlatforms = value; }
45  }
46 
50  public bool TriesToJump
51  {
52  get { return _triesToJump; }
53  set { _triesToJump = value; }
54  }
55 
57  {
59  }
60 
61  protected override void OnAddToGame()
62  {
63  base.OnAddToGame();
64  lastJumpingPosition = this.Owner.Position;
65  }
66 
67  public override void OnCollision( IGameObject target )
68  {
69  //if ( target is PhysicsObject && Owner.Y > target.Y && target.Width > Owner.Width )
70  //{
71  // platform = (PhysicsObject)target;
72 
73  // // ...
74  // platform.Color = RandomGen.NextColor();
75  // platform.Image = null;
76  //}
77 
78  base.OnCollision( target );
79  }
80 
81  protected override void Update(Time time)
82  {
83 
84  if (!(this.Owner is PlatformCharacter))
85  {
86  return;
87  }
88 
89  //Calculate from Speed later?
90  double yTolerance = 10.0;
91  double xTolerance = 10.0;
92 
93  PlatformCharacter pc = this.Owner as PlatformCharacter;
94 
95  if (_triesToJump)
96  {
97  //Brains are walking against a wall:
98  if (Math.Abs(pc.Velocity.X) < 5)
99  {
100  //If position hasn't changed since last jump, change direction.
101  if ((pc.Position - lastJumpingPosition).Magnitude < 1)
102  {
103  pc.Stop();
104  this.Speed *= -1;
105  }
106  else
107  {
108  pc.Jump(JumpSpeed);
109  lastJumpingPosition = pc.Position;
110 
111  //Brains don't change direction in mid-air while jumping:
112  if(!_fallsOffPlatforms)
113  {
114  _fallsOffPlatforms = true;
115  Timer.SingleShot(0.5, delegate { _fallsOffPlatforms = false;});
116  }
117  }
118  }
119  }
120 
121  //Changes direction if it's about to fall off a platform:
122  if (!_fallsOffPlatforms && pc.IsAboutToFall() && Math.Abs(pc.Velocity.Y) < yTolerance)
123  {
124  pc.Stop();
125 
126  if (_triesToJump && Math.Abs(pc.Velocity.X) < xTolerance) this.Speed *= -1;
127  }
128 
129  if (!_triesToJump && Math.Abs(pc.Velocity.X) < xTolerance) this.Speed *= -1;
130 
131  pc.Walk(this.Speed);
132 
133  base.Update(time);
134 
135  }
136  }
137 }
override void Stop()
Pysäyttää olion.
Definition: Movement.cs:164
Vector Velocity
Olion nopeus.
Definition: Movement.cs:46
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
Definition: Coefficients.cs:36
Aivoluokka peliolioille. Voidaan käyttää tekoälyn ja tilannekohtaisten toimintamallien luomiseen peli...
Definition: Brain.cs:40
override void OnCollision(IGameObject target)
Kutsutaan, kun tapahtuu törmäys. Perivässä luokassa methodin kuuluu kutsua vastaavaa kantaluokan meth...
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:13
Perussuunta tasossa.
Definition: Direction.cs:50
double Y
Definition: Vector.cs:275
bool TriesToJump
Yrittääkö aivojen omistaja hypätä esteen päälle kun se kävelee esteeseen.
static void SingleShot(double seconds, Action onTimeout)
Kutsuu aliohjelmaa onTimeout annetun ajan kuluttua. Ajastin luodaan automaattisesti.
Definition: Timer.cs:186
override void Update(Time time)
Kutsutaan, kun tilaa päivitetään. Suurin osa päätöksenteosta tapahtuu täällä. Perivässä luokassa meth...
Aivot, jotka laittavat omistajansa hortoilemaan tasohyppelytasoa edestakaisin.
bool Jump(double speed)
Hyppää, jos hahmo on staattisen olion päällä.
bool FallsOffPlatforms
Tippuuko aivojen omistaja tasojen reunoilta.
double X
Definition: Vector.cs:274
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Definition: Timer.cs:39
Tasohyppelypelin hahmo. Voi liikkua ja hyppiä. Lisäksi sillä voi olla ase.
Yhteinen rajapinta kaikille peliolioille.
Definition: IGameObject.cs:14
override Vector Position
Olion paikka koordinaatistossa. Käsittää sekä X- että Y-koordinaatin.
Definition: Dimensions.cs:49
static Direction Right
Suunta oikealle.
Definition: Direction.cs:75
override void OnAddToGame()
Kutsutaan, kun aivojen omistaja lisätään peliin tai omistajaksi asetetaan olio, joka on jo lisätty pe...
2D-vektori.
Definition: Vector.cs:56
IGameObject Owner
Aivojen haltija.
Definition: Brain.cs:69
void Walk(double horizontalVelocity)
Liikuttaa hahmoa.
bool IsAboutToFall()
Onko hahmo astumassa tyhjän päälle.