Jypeli  5
The simple game programming library
RandomMoverBrain.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 
6 namespace Jypeli
7 {
12  {
13  private Timer changeDirectionTimer;
14  private Angle currentDirection;
15 
19  public double ChangeMovementSeconds
20  {
21  get { return changeDirectionTimer.Interval; }
22  set { changeDirectionTimer.Interval = value; }
23  }
24 
28  public Vector WanderPosition { get; set; }
29 
33  public double WanderRadius { get; set; }
34 
39  : base()
40  {
41  changeDirectionTimer = new Timer();
42  changeDirectionTimer.Timeout += ChangeDirection;
43  changeDirectionTimer.Interval = 3;
44 
45  ChangeDirection();
46  WanderRadius = double.PositiveInfinity;
47  }
48 
52  public RandomMoverBrain( double speed )
53  : this()
54  {
55  Speed = speed;
56  }
57 
58  protected override void OnAdd( IGameObject newOwner )
59  {
60  changeDirectionTimer.Start();
62  base.OnAdd( newOwner );
63  }
64 
65  protected override void OnRemove( IGameObject prevOwner )
66  {
67  changeDirectionTimer.Stop();
68  base.OnRemove( prevOwner );
69  }
70 
71  void ChangeDirection()
72  {
73  currentDirection = RandomGen.NextAngle();
74  }
75 
80  public override void OnCollision( IGameObject target )
81  {
83  Angle n1 = d.Angle - Angle.RightAngle;
84  Angle n2 = d.Angle + Angle.RightAngle;
85 
86  currentDirection = RandomGen.NextAngle( n1, n2 );
87 
88  base.OnCollision( target );
89  }
90 
91  protected override void Update( Time time )
92  {
93  if ( Owner == null )
94  return;
95 
96  if ( !double.IsInfinity( WanderRadius ) )
97  {
99  if ( d.Magnitude > WanderRadius )
100  currentDirection = d.Angle;
101  }
102 
103  Move( currentDirection );
104  base.Update( time );
105  }
106  }
107 }
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
Definition: Timer.cs:99
double Magnitude
Vektorin pituus.
Definition: Vector.cs:281
Angle Angle
Kulma radiaaneina.
Definition: Vector.cs:308
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Definition: Timer.cs:255
override void OnCollision(IGameObject target)
Kutsutaan, kun tapahtuu törmäys.
Action Timeout
Tapahtuu väliajoin.
Definition: Timer.cs:46
override void OnAdd(IGameObject newOwner)
Kutsutaan, kun aivot lisätään oliolle.
double ChangeMovementSeconds
Aika sekunteina, jonka kuluttua muutetaan liikesuuntaa
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
RandomMoverBrain()
Luo uudet satunnaisliikkujan aivot.
Satunnaisgeneraattori. Luo satunnaisia arvoja, mm. lukuja, vektoreita sekä kulmia.
Definition: RandomGen.cs:39
Vector WanderPosition
Paikka, jonka ympärillä harhaillaan, jos WanderRadius on asetettu.
virtual double Speed
Nopeus, jolla liikutaan.
override void Update(Time time)
Kutsutaan, kun tilaa päivitetään. Suurin osa päätöksenteosta tapahtuu täällä. Perivässä luokassa meth...
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:13
static readonly Angle RightAngle
Suora kulma (90 astetta).
Definition: Angle.cs:50
Yleiset liikkumiseen tarkoitetut aivot.
Aivot, jotka laittavat omistajansa liikkumaan satunnaisesti eri suuntiin törmäyksissä ja tietyn ajan ...
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Definition: Timer.cs:39
static Angle NextAngle()
Palauttaa satunnaisen kulman.
Definition: RandomGen.cs:199
RandomMoverBrain(double speed)
Luo uudet satunnaisliikkujan aivot ja asettaa niille nopeuden.
Yhteinen rajapinta kaikille peliolioille.
Definition: IGameObject.cs:14
void Start()
Käynnistää ajastimen.
Definition: Timer.cs:220
double WanderRadius
Säde, jonka sisälle harhailu rajoittuu.
2D-vektori.
Definition: Vector.cs:56
Vector AbsolutePosition
Definition: IGameObject.cs:46
IGameObject Owner
Aivojen haltija.
Definition: Brain.cs:69
void Move(Vector direction)
override void OnRemove(IGameObject prevOwner)
Kutsutaan, kun aivot poistetaan oliolta.