Jypeli  9
The simple game programming library
GameObjectBase.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.ComponentModel;
3 
5 {
9  public abstract class GameObjectBase : Tagged, Destroyable
10  {
11  private Layer _layer = null;
12  private Brain _brain = Brain.None;
13  private TimeSpan _maxLifetime = TimeSpan.MaxValue;
14  private bool _rotateImage = true;
15 
19  public Game Game
20  {
21  get { return Game.Instance; }
22  }
23 
27  public Layer Layer
28  {
29  get
30  {
31  if ( Parent != null ) return Parent.Layer;
32  return _layer;
33  }
34  set
35  {
36  _layer = value;
37  }
38  }
39 
43  public bool RotateImage
44  {
45  get { return _rotateImage; }
46  set { _rotateImage = value; }
47  }
48 
53  public IGameObject Parent { get; set; }
54 
69  public bool IsUpdated { get; set; }
70 
85  public object Tag { get; set; }
86 
91  public virtual Brain Brain
92  {
93  get
94  {
95  return _brain;
96  }
97  set
98  {
99  _brain.Owner = null;
100  _brain = ( ( value != null ) ? value : Brain.None );
101  _brain.Owner = (IGameObject)this;
103  if ( value != null )
104  IsUpdated = true;
105  }
106  }
107 
111  public event Action AddedToGame;
112 
116  public void OnAddedToGame()
117  {
118  AddedToGame?.Invoke();
120  }
121 
125  public event Action Removed;
126 
130  public void OnRemoved()
131  {
132  if ( Removed != null )
133  Removed();
134  }
135 
139  public bool IsDestroyed { get; private set; }
140 
144  public event Action Destroyed;
145 
146  protected void OnDestroyed()
147  {
148  if ( Destroyed != null )
149  Destroyed();
150  }
151 
155  public virtual void Destroy()
156  {
157  if ( IsDestroyed )
158  return;
159 
160  IsDestroyed = true;
161  OnDestroyed();
162  }
163 
168  [Save] public abstract Vector Size { get; set; }
169 
174  [Save] public virtual Vector Position { get; set; }
175 
180  [Save] public abstract Angle Angle { get; set; }
181 
185  public TimeSpan CreationTime { get; protected set; }
186 
190  public TimeSpan Lifetime
191  {
192  get { return Game.Time.SinceStartOfGame - CreationTime; }
193  }
194 
199  public TimeSpan MaximumLifetime
200  {
201  get { return _maxLifetime; }
202  set
203  {
204  _maxLifetime = value;
205  IsUpdated = true;
206  }
207  }
208 
212  [Save]
213  public TimeSpan LifetimeLeft
214  {
215  get { return MaximumLifetime - Lifetime; }
216  set
217  {
218  try
219  {
220  MaximumLifetime = Lifetime + value;
221  }
222  catch ( OverflowException )
223  {
224  MaximumLifetime = TimeSpan.MaxValue;
225  }
226  }
227  }
228 
232  public double Width
233  {
234  get { return Size.X; }
235  set { Size = new Vector( value, Size.Y ); }
236  }
237 
241  public double Height
242  {
243  get { return Size.Y; }
244  set { Size = new Vector( Size.X, value ); }
245  }
246 
253  {
254  get
255  {
256  if ( Parent != null )
258  return Position;
259  }
260  set
261  {
262  if ( Parent != null )
263  {
264  var rawPosition = value - Parent.AbsolutePosition;
265  double x = Vector.DotProduct(Parent.AbsoluteUnitX, rawPosition);
266  double y = Vector.DotProduct(Parent.AbsoluteUnitY, rawPosition);
267  Position = new Vector(x, y);
268  }
269  else
270  Position = value;
271  }
272  }
273 
280  {
281  get
282  {
283  if ( Parent != null )
284  return Parent.AbsoluteAngle + this.Angle;
285  return Angle;
286  }
287  set
288  {
289  if ( Parent != null )
290  Angle = value - Parent.AbsoluteAngle;
291  else
292  Angle = value;
293  }
294  }
295 
299  public double Left
300  {
301  get { return Position.X - 0.5 * ( Size.Y * Math.Abs( Angle.Sin ) + Size.X * Math.Abs( Angle.Cos ) ); }
302  set { Position = new Vector( value + Size.X / 2, Position.Y ); }
303  }
304 
308  public double Right
309  {
310  get { return Position.X + 0.5 * ( Size.Y * Math.Abs( Angle.Sin ) + Size.X * Math.Abs( Angle.Cos ) ); }
311  set { Position = new Vector( value - Size.X / 2, Position.Y ); }
312  }
313 
317  public double Top
318  {
319  get { return Position.Y + 0.5 * ( Size.X * Math.Abs( Angle.Sin ) + Size.Y * Math.Abs( Angle.Cos ) ); }
320  set { Position = new Vector( Position.X, value - Size.Y / 2 ); }
321  }
322 
326  public double Bottom
327  {
328  get { return Position.Y - 0.5 * ( Size.X * Math.Abs( Angle.Sin ) + Size.Y * Math.Abs( Angle.Cos ) ); }
329  set { Position = new Vector( Position.X, value + Size.Y / 2 ); }
330  }
331 
335  public double AbsLeft
336  {
337  get { return AbsolutePosition.X - 0.5 * ( Size.Y * Math.Abs( Angle.Sin ) + Size.X * Math.Abs( Angle.Cos ) ); }
338  }
339 
343  public double AbsRight
344  {
345  get { return AbsolutePosition.X + 0.5 * ( Size.Y * Math.Abs( Angle.Sin ) + Size.X * Math.Abs( Angle.Cos ) ); }
346  }
347 
351  public double AbsTop
352  {
353  get { return AbsolutePosition.Y + 0.5 * ( Size.X * Math.Abs( Angle.Sin ) + Size.Y * Math.Abs( Angle.Cos ) ); }
354  }
355 
359  public double AbsBottom
360  {
361  get { return AbsolutePosition.Y - 0.5 * ( Size.X * Math.Abs( Angle.Sin ) + Size.Y * Math.Abs( Angle.Cos ) ); }
362  }
363 
367  public double X
368  {
369  get
370  {
371  return Position.X;
372  }
373  set
374  {
375  Position = new Vector( value, Position.Y );
376  }
377  }
378 
382  public double Y
383  {
384  get
385  {
386  return Position.Y;
387  }
388  set
389  {
390  Position = new Vector( Position.X, value );
391  }
392  }
393 
397  public Vector UnitX
398  {
399  get { return Vector.FromAngle( Angle ); }
400  }
401 
405  public Vector UnitY
406  {
407  get { return UnitX.LeftNormal; }
408  }
409 
414  {
415  get { return Vector.FromAngle( AbsoluteAngle ); }
416  }
417 
422  {
423  get { return AbsoluteUnitX.LeftNormal; }
424  }
425 
429  public abstract Animation Animation { get; set; }
430 
434  public Image Image
435  {
436  get
437  {
438  if ( Animation != null )
439  return Animation.CurrentFrame;
440  return null;
441  }
442  set
443  {
444  Animation = value;
445  }
446  }
447 
448  protected GameObjectBase()
449  {
451  this.Tag = "";
452  }
453 
468  public abstract void MoveTo( Vector location, double speed, Action doWhenArrived );
469 
479  public void MoveTo( Vector location, double speed )
480  {
481  MoveTo( location, speed, null );
482  }
483 
490  [EditorBrowsable( EditorBrowsableState.Never )]
491  public virtual void Update( Time time )
492  {
493  if ( IsDestroyed )
494  return;
495 
496  if ( Lifetime > MaximumLifetime )
497  {
498  Destroy();
499  return;
500  }
501 
502  Brain.DoUpdate( time );
503  }
504  }
505 }
Jypeli.Animation.CurrentFrame
Image CurrentFrame
Tällä hetkellä näkyvä ruutu animaatiosta.
Definition: Animation.cs:139
Jypeli.GameObjects.GameObjectBase.IsUpdated
bool IsUpdated
Tarvitseeko olio päivittämistä. Kun perit oman luokkasi tästä luokasta, aseta tämä arvoon true,...
Definition: GameObjectBase.cs:69
Jypeli.GameObjects.GameObjectBase.AbsBottom
double AbsBottom
Olion alareunan absoluuttinen y-koordinaatti.
Definition: GameObjectBase.cs:360
Jypeli.GameObjects.GameObjectBase.OnDestroyed
void OnDestroyed()
Definition: GameObjectBase.cs:146
Jypeli.Vector.LeftNormal
Vector LeftNormal
Vasen normaali.
Definition: Vector.cs:89
Jypeli.GameObjects.GameObjectBase.Lifetime
TimeSpan Lifetime
Olion elinaika. Lasketaan siitä lähtien, kun olio luodaan.
Definition: GameObjectBase.cs:191
Jypeli.GameObjects.GameObjectBase.AddedToGame
Action AddedToGame
Tapahtuu, kun olio lisätään peliin.
Definition: GameObjectBase.cs:111
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.GameObjects.GameObjectBase.CreationTime
TimeSpan CreationTime
Olion luomisaika.
Definition: GameObjectBase.cs:185
Jypeli.Vector.X
double X
Definition: Vector.cs:312
Jypeli.Brain.Owner
IGameObject Owner
Aivojen haltija.
Definition: Brain.cs:69
Jypeli.Angle.Cos
double Cos
Kulman kosini.
Definition: Angle.cs:119
Jypeli.Vector.DotProduct
static double DotProduct(Vector left, Vector right)
Pistetulo.
Definition: Vector.cs:147
Jypeli.GameObjects.GameObjectBase.Height
double Height
Olion korkeus (Y-suunnassa, korkeimmassa kohdassa).
Definition: GameObjectBase.cs:242
Jypeli.GameObjects.GameObjectBase.AbsoluteUnitY
Vector AbsoluteUnitY
Olion koordinaatiston absoluuttinen Y-yksikkökantavektori.
Definition: GameObjectBase.cs:422
Jypeli.GameObjects.GameObjectBase._layer
Layer _layer
Definition: GameObjectBase.cs:11
Jypeli.GameObjects.GameObjectBase.Bottom
double Bottom
Olion alareunan y-koordinaatti.
Definition: GameObjectBase.cs:327
Jypeli.GameObjects.GameObjectBase.IsDestroyed
bool IsDestroyed
Onko olio tuhottu.
Definition: GameObjectBase.cs:139
Jypeli.GameObjects.GameObjectBase._rotateImage
bool _rotateImage
Definition: GameObjectBase.cs:14
Jypeli.GameObjects.GameObjectBase.Width
double Width
Olion leveys (X-suunnassa, leveimmässä kohdassa).
Definition: GameObjectBase.cs:233
Jypeli.GameObjects.GameObjectBase.UnitX
Vector UnitX
Olion koordinaatiston X-yksikkökantavektori.
Definition: GameObjectBase.cs:398
Jypeli.IGameObject
Yhteinen rajapinta kaikille peliolioille.
Definition: IGameObject.cs:11
Jypeli.GameObjects.GameObjectBase.MoveTo
void MoveTo(Vector location, double speed)
Yrittää siirtyä annettuun paikkaan annetulla nopeudella.
Definition: GameObjectBase.cs:479
Jypeli.GameObjects.GameObjectBase.AbsoluteAngle
Angle AbsoluteAngle
Olion absoluuttinen kulma pelimaailmassa. Jos olio ei ole minkään toisen peliolion lapsiolio,...
Definition: GameObjectBase.cs:280
Jypeli.IGameObject.AbsolutePosition
Vector AbsolutePosition
Definition: IGameObject.cs:29
Jypeli.GameObjects.GameObjectBase._maxLifetime
TimeSpan _maxLifetime
Definition: GameObjectBase.cs:13
Jypeli.GameObjects
Definition: GameObjectBase.cs:5
Jypeli.GameObjects.GameObjectBase.Top
double Top
Olion yläreunan y-koordinaatti.
Definition: GameObjectBase.cs:318
Jypeli.GameObjects.GameObjectBase.MaximumLifetime
TimeSpan MaximumLifetime
Olion suurin mahdollinen elinaika. Kun Lifetime on suurempi kuin tämä, olio kuolee.
Definition: GameObjectBase.cs:200
Jypeli.GameObjects.GameObjectBase.Position
virtual Vector Position
Olion paikka. Jos olio on jonkun toisen peliolion lapsi, paikka on suhteessa tämän vanhempaan (Parent...
Definition: GameObjectBase.cs:174
Jypeli.Brain
Aivoluokka peliolioille. Voidaan käyttää tekoälyn ja tilannekohtaisten toimintamallien luomiseen peli...
Definition: Brain.cs:41
Jypeli.Game.Instance
static Game Instance
Käynnissä olevan pelin pääolio.
Definition: Game.cs:90
Jypeli.GameObjects.GameObjectBase.X
double X
Olion paikan X-koordinaatti.
Definition: GameObjectBase.cs:368
Jypeli.GameObjects.GameObjectBase.Removed
Action Removed
Tapahtuu, kun olio poistetaan pelistä (tuhotaan tai ei).
Definition: GameObjectBase.cs:125
Jypeli.Layer
Kerros. Vastaa olioiden piirtämisestä.
Definition: Layer.cs:32
Jypeli.GameObjects.GameObjectBase.Angle
abstract Angle Angle
Olion kulma tai rintamasuunta. Nolla = osoittaa oikealle.
Definition: GameObjectBase.cs:180
Jypeli.Time
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:14
Jypeli.GameObjects.GameObjectBase.Y
double Y
Olion paikan Y-koordinaatti.
Definition: GameObjectBase.cs:383
Jypeli.GameObjects.GameObjectBase.OnRemoved
void OnRemoved()
Kutsutaan kun olio poistetaan pelistä.
Definition: GameObjectBase.cs:130
Jypeli.IGameObject.AbsoluteUnitX
Vector AbsoluteUnitX
Definition: IGameObject.cs:33
Jypeli.GameObjects.GameObjectBase.Right
double Right
Olion oikean reunan x-koordinaatti.
Definition: GameObjectBase.cs:309
Jypeli.Tagged
Rajapinta olioille, joilla on Tag-ominaisuus.
Definition: Tagged.cs:7
Jypeli.GameObjects.GameObjectBase.RotateImage
bool RotateImage
Pyöritetäänkö kuvaa olion kulman mukana.
Definition: GameObjectBase.cs:44
Jypeli.IGameObject.AbsoluteUnitY
Vector AbsoluteUnitY
Definition: IGameObject.cs:34
Jypeli.Destroyable
Rajapinta olioille, jotka ovat tuhottavissa.
Definition: Destroyable.cs:9
Jypeli.Animation
Sarja kuvia, jotka vaihtuvat halutulla nopeudella. Yksi animaatio koostuu yhdestä tai useammasta kuva...
Definition: Animation.cs:62
Jypeli.Angle.Sin
double Sin
Kulman sini.
Definition: Angle.cs:111
Jypeli.IGameObject.Layer
Layer Layer
Definition: IGameObject.cs:12
Jypeli.Brain.DoUpdate
void DoUpdate(Time time)
Definition: Brain.cs:86
Jypeli.Vector.FromAngle
static Vector FromAngle(Angle angle)
Luo vektorin kulman perusteella yksikköpituudella.
Definition: Vector.cs:125
Jypeli.GameObjects.GameObjectBase.Left
double Left
Olion vasemman reunan x-koordinaatti.
Definition: GameObjectBase.cs:300
Jypeli.GameObjects.GameObjectBase.UnitY
Vector UnitY
Olion koordinaatiston Y-yksikkökantavektori.
Definition: GameObjectBase.cs:406
Jypeli.GameObjects.GameObjectBase.Tag
object Tag
Vapaasti asetettava muuttuja.
Definition: GameObjectBase.cs:85
Jypeli.GameObjects.GameObjectBase.MoveTo
abstract void MoveTo(Vector location, double speed, Action doWhenArrived)
Yrittää siirtyä annettuun paikkaan annetulla nopeudella. Laukaisee annetun aliohjelman,...
Jypeli.GameObjects.GameObjectBase.AbsTop
double AbsTop
Olion yläreunan absoluuttinen y-koordinaatti.
Definition: GameObjectBase.cs:352
Jypeli.Brain.None
static readonly Brain None
Tyhjät aivot, eivät sisällä mitään toiminnallisuutta.
Definition: Brain.cs:45
Jypeli.IGameObject.AbsoluteAngle
Angle AbsoluteAngle
Definition: IGameObject.cs:30
Jypeli.GameObjects.GameObjectBase.Size
abstract Vector Size
Olion koko pelimaailmassa. Kertoo olion äärirajat, ei muotoa.
Definition: GameObjectBase.cs:168
Jypeli.Time.SinceStartOfGame
TimeSpan SinceStartOfGame
Aika joka on kulunut pelin alusta.
Definition: Time.cs:32
Jypeli.GameObjects.GameObjectBase.Destroy
virtual void Destroy()
Tuhoaa olion.
Definition: GameObjectBase.cs:155
Jypeli.Image
Kuva.
Definition: Image.cs:29
Jypeli.Vector
2D-vektori.
Definition: Vector.cs:59
System
Definition: CFFauxAttributes.cs:29
Jypeli.GameObjects.GameObjectBase.AbsRight
double AbsRight
Olion oikean reunan absoluuttinen x-koordinaatti.
Definition: GameObjectBase.cs:344
Jypeli.GameObjects.GameObjectBase.AbsLeft
double AbsLeft
Olion vasemman reunan absoluuttinen x-koordinaatti.
Definition: GameObjectBase.cs:336
Jypeli.GameObjects.GameObjectBase
Kaikille peliolioille yhteinen kantaluokka
Definition: GameObjectBase.cs:10
Jypeli.GameObjects.GameObjectBase.OnAddedToGame
void OnAddedToGame()
Kutsutaan kun olio lisätään peliin.
Definition: GameObjectBase.cs:116
Jypeli.GameObjects.GameObjectBase.LifetimeLeft
TimeSpan LifetimeLeft
Olion jäljellä oleva elinaika.
Definition: GameObjectBase.cs:214
Jypeli.GameObjects.GameObjectBase.GameObjectBase
GameObjectBase()
Definition: GameObjectBase.cs:448
Jypeli.GameObjects.GameObjectBase._brain
Brain _brain
Definition: GameObjectBase.cs:12
Jypeli.GameObjects.GameObjectBase.Parent
IGameObject Parent
Olio, jonka lapsiolio tämä olio on. Jos null, olio ei ole minkään olion lapsiolio.
Definition: GameObjectBase.cs:53
Jypeli.Game
Definition: Content.cs:46
Jypeli.GameObjects.GameObjectBase.AbsolutePosition
Vector AbsolutePosition
Olion absoluuttinen paikka pelimaailmassa. Jos olio ei ole minkään toisen peliolion lapsiolio,...
Definition: GameObjectBase.cs:253
Jypeli.Brain.AddToGameEvent
void AddToGameEvent()
Definition: Brain.cs:81
Jypeli.GameObjects.GameObjectBase.AbsoluteUnitX
Vector AbsoluteUnitX
Olion koordinaatiston absoluuttinen X-yksikkökantavektori.
Definition: GameObjectBase.cs:414
Jypeli.Vector.Y
double Y
Definition: Vector.cs:313
Jypeli.GameObjects.GameObjectBase.Destroyed
Action Destroyed
Tapahtuu, kun olio tuhotaan.
Definition: GameObjectBase.cs:144
Jypeli.GameObjects.GameObjectBase.Update
virtual void Update(Time time)
Peliolion päivitys. Tätä kutsutaan, kun IsUpdated-ominaisuuden arvoksi on asetettu true ja olio on li...
Definition: GameObjectBase.cs:491
Jypeli.Angle
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40