Jypeli  5
The simple game programming library
PhysicsStructure.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using Physics2DDotNet;
6 using Physics2DDotNet.Ignorers;
7 using AdvanceMath;
8 using Jypeli.Controls;
9 
10 namespace Jypeli
11 {
15  public class PhysicsStructure : GameObjects.GameObjectBase, IPhysicsObjectInternal, GameObjectContainer
16  {
17  private double _softness = 0;
18  private List<PhysicsObject> objects;
19 
23  public bool IsAddedToGame { get; set; }
24 
28  public IList<PhysicsObject> Objects
29  {
30  get { return objects.AsReadOnly(); }
31  }
32 
36  internal List<AxleJoint> Joints { get; private set; }
37 
41  public double Softness
42  {
43  get { return _softness; }
44  set
45  {
46  _softness = value;
47 
48  for ( int i = 0; i < Joints.Count; i++ )
49  {
50  Joints[i].Softness = value;
51  }
52  }
53  }
54 
56  {
57  get
58  {
59  if ( objects.Count == 0 )
60  return new BoundingRectangle();
61 
62  double top = objects[0].Top;
63  double left = objects[0].Left;
64  double bottom = objects[0].Bottom;
65  double right = objects[0].Right;
66 
67  for ( int i = 1; i < objects.Count; i++ )
68  {
69  if ( objects[i].Top > top ) top = objects[i].Top;
70  if ( objects[i].Left < left ) left = objects[i].Left;
71  if ( objects[i].Bottom < bottom ) bottom = objects[i].Bottom;
72  if ( objects[i].Right > right ) right = objects[i].Right;
73  }
74 
75  return new BoundingRectangle( new Vector( left, top ), new Vector( right, bottom ) );
76  }
77  }
78 
79  #region Tagged
80 
81  public object Tag { get; set; }
82 
83  #endregion
84 
85  #region IGameObject
86 
87  public event Action AddedToGame;
88 
89  bool _isVisible = true;
90  bool _ignoresLighting = false;
91  PhysicsObject centerObject;
92 
93  public bool IsVisible
94  {
95  get { return false; }
96  set
97  {
98  foreach ( var obj in objects )
99  {
100  obj.IsVisible = value;
101  }
102 
103  _isVisible = value;
104  }
105  }
106 
110  public bool IgnoresLighting
111  {
112  get { return _ignoresLighting; }
113  set
114  {
115  objects.ForEach( o => o.IgnoresLighting = value );
116  _ignoresLighting = value;
117  }
118  }
119 
120  public List<Listener> AssociatedListeners { get; private set; }
121 
125  public override Vector Position
126  {
127  get
128  {
129  return centerObject.Position;
130  }
131  set
132  {
133  Vector delta = value - Position;
134 
135  foreach ( var obj in objects )
136  {
137  obj.Position += delta;
138  }
139 
140  centerObject.Position = value;
141  }
142  }
143 
144  public override Vector Size
145  {
146  get
147  {
148  return BoundingRectangle.Size;
149  }
150  set
151  {
152  throw new NotImplementedException( "Setting size for a structure is not implemented." );
153  }
154  }
155 
156  public override Animation Animation
157  {
158  get { return null; }
159  set
160  {
161  throw new InvalidOperationException( "Physics structure has no image or animation." );
162  }
163  }
164 
165  public Vector TextureWrapSize
166  {
167  get { return new Vector( 1, 1 ); }
168  set { throw new NotImplementedException(); }
169  }
170 
171  public bool TextureFillsShape
172  {
173  get { return false; }
174  set { throw new NotImplementedException(); }
175  }
176 
177  public Color Color
178  {
179  get
180  {
181  throw new NotImplementedException();
182  }
183  set
184  {
185  foreach ( var obj in objects )
186  obj.Color = value;
187  }
188  }
189 
190  public Shape Shape
191  {
192  get { return Shape.Rectangle; }
193  set { throw new NotImplementedException(); }
194  }
195 
196  public override Angle Angle
197  {
198  // TODO: Rotation
199  get { return Angle.Zero; }
200  set { throw new NotImplementedException(); }
201  }
202 
203  #endregion
204 
205  #region IPhysicsObject
206 
207  bool _ignoresGravity = false;
208  bool _ignoresCollisionResponse = false;
209  bool _ignoresExplosions = false;
210  bool _ignoresPhysicsLogics = false;
211  Ignorer _collisionIgnorer = null;
212  int _collisionIgnoreGroup = 0;
213  Coefficients _coeffs = PhysicsObject.DefaultCoefficients.Duplicate();
214  double _linearDamping = 1;
215  double _angularDamping = 1;
216  double? _setMomentOfInertia = null;
217  double _calcMomentOfInertia = 0;
218 
222  public event CollisionHandler<IPhysicsObject, IPhysicsObject> Collided;
223 
228  {
229  // No nested physics structures for now
230  get { return null; }
231  }
232 
233  public double Mass
234  {
235  get
236  {
237  double totalMass = 0;
238  foreach ( var part in objects )
239  totalMass += part.Mass;
240  return totalMass;
241  }
242  set
243  {
244  double massMultiplier = value / this.Mass;
245  objects.ForEach( o => o.Mass *= massMultiplier );
246  }
247  }
248 
249  public Body Body
250  {
251  get
252  {
253  throw new InvalidOperationException( "Structure has no body." );
254  }
255  }
256 
257  public bool IgnoresGravity
258  {
259  get { return _ignoresGravity; }
260  set
261  {
262  foreach ( var obj in objects )
263  obj.IgnoresGravity = value;
264 
265  _ignoresGravity = value;
266  }
267  }
268 
269  public bool IgnoresCollisionResponse
270  {
271  get { return _ignoresCollisionResponse; }
272  set
273  {
274  foreach ( var obj in objects )
275  obj.IgnoresCollisionResponse = value;
276 
277  _ignoresCollisionResponse = value;
278  }
279  }
280 
281  public bool IgnoresExplosions
282  {
283  get { return _ignoresExplosions; }
284  set
285  {
286  foreach ( var obj in objects )
287  obj.IgnoresExplosions = value;
288 
289  _ignoresExplosions = value;
290  }
291  }
292 
293  public bool IgnoresPhysicsLogics
294  {
295  get { return _ignoresPhysicsLogics; }
296  set
297  {
298  foreach ( var obj in objects )
299  obj.IgnoresPhysicsLogics = value;
300 
301  _ignoresPhysicsLogics = value;
302  }
303  }
304 
305  public Ignorer CollisionIgnorer
306  {
307  get { return _collisionIgnorer; }
308  set
309  {
310  foreach ( var obj in objects )
311  obj.CollisionIgnorer = value;
312 
313  _collisionIgnorer = value;
314  }
315  }
316 
317  public int CollisionIgnoreGroup
318  {
319  get { return _collisionIgnoreGroup; }
320  set
321  {
322  foreach ( var obj in objects )
323  obj.CollisionIgnoreGroup = value;
324 
325  _collisionIgnoreGroup = value;
326  }
327  }
328 
329  public double StaticFriction
330  {
331  get { return _coeffs.StaticFriction; }
332  set
333  {
334  foreach ( var obj in objects )
335  obj.StaticFriction = value;
336 
337  _coeffs.StaticFriction = value;
338  }
339  }
340 
341  public double KineticFriction
342  {
343  get { return _coeffs.DynamicFriction; }
344  set
345  {
346  foreach ( var obj in objects )
347  obj.KineticFriction = value;
348 
349  _coeffs.DynamicFriction = value;
350  }
351  }
352 
353  public double Restitution
354  {
355  get { return _coeffs.Restitution; }
356  set
357  {
358  foreach ( var obj in objects )
359  obj.Restitution = value;
360 
361  _coeffs.Restitution = value;
362  }
363  }
364 
365  public double LinearDamping
366  {
367  get { return _linearDamping; }
368  set
369  {
370  foreach ( var obj in objects )
371  obj.LinearDamping = value;
372 
373  _linearDamping = value;
374  }
375  }
376 
377  public double AngularDamping
378  {
379  get { return _angularDamping; }
380  set
381  {
382  foreach ( var obj in objects )
383  obj.AngularDamping = value;
384 
385  _angularDamping = value;
386  }
387  }
388 
389  public Vector Velocity
390  {
391  get
392  {
393  var velocities = objects.ConvertAll<PhysicsObject, Vector>( delegate( PhysicsObject o ) { return o.Velocity; } );
394  return Vector.Average( velocities );
395  }
396  set
397  {
398  foreach ( var obj in objects )
399  obj.Velocity = value;
400  }
401  }
402 
403  public double AngularVelocity
404  {
405  get
406  {
407  IEnumerable<double> velocities = objects.ConvertAll<PhysicsObject, double>( delegate( PhysicsObject o ) { return o.AngularVelocity; } );
408  return velocities.Average();
409  }
410  set
411  {
412  foreach ( var obj in objects )
413  obj.AngularVelocity = value;
414  }
415  }
416 
417  public Vector Acceleration
418  {
419  get
420  {
421  var accs = objects.ConvertAll<PhysicsObject, Vector>( delegate( PhysicsObject o ) { return o.Acceleration; } );
422  return Vector.Average( accs );
423  }
424  set
425  {
426  foreach ( var obj in objects )
427  obj.Acceleration = value;
428  }
429  }
430 
431  public double AngularAcceleration
432  {
433  get
434  {
435  IEnumerable<double> accs = objects.ConvertAll<PhysicsObject, double>( delegate( PhysicsObject o ) { return o.AngularAcceleration; } );
436  return accs.Average();
437  }
438  set
439  {
440  foreach ( var obj in objects )
441  obj.AngularAcceleration = value;
442  }
443  }
444 
445  public double MomentOfInertia
446  {
447  get
448  {
449  return _setMomentOfInertia.HasValue ? _setMomentOfInertia.Value : _calcMomentOfInertia;
450  }
451  set
452  {
453  _setMomentOfInertia = value;
454  }
455  }
456 
460  public bool CanRotate
461  {
462  get { return !double.IsPositiveInfinity( MomentOfInertia ); }
463  set
464  {
465  if ( !value )
466  {
467  MomentOfInertia = double.PositiveInfinity;
468  }
469  else
470  {
471  CalculateMomentOfInertia();
472  _setMomentOfInertia = null;
473  }
474  }
475  }
476 
477  #endregion
478 
483  {
484  centerObject = new PhysicsObject( 1, 1 ) { IgnoresPhysicsLogics = true, IsVisible = false };
485  objects = new List<PhysicsObject>();
486  Joints = new List<AxleJoint>();
487  AssociatedListeners = new List<Listener>();
488  AddedToGame += AddJoints;
489  Removed += RemoveJoints;
490  }
491 
492  private void AddJoints()
493  {
494  Joints.ForEach( ( (PhysicsGameBase)Game.Instance ).Add );
495  }
496 
497  private void RemoveJoints()
498  {
499  Joints.ForEach( ( (PhysicsGameBase)Game.Instance ).Remove );
500  }
501 
506  public PhysicsStructure( params PhysicsObject[] objs )
507  : this()
508  {
509  for ( int i = 0; i < objs.Length; i++ )
510  {
511  Add( objs[i] );
512  }
513  }
514 
518  public void OnAddedToGame()
519  {
520  if ( AddedToGame != null )
521  AddedToGame();
522  //brain.AddToGameEvent();
523  }
524 
528  internal void OnCollided( IPhysicsObject part, IPhysicsObject target )
529  {
530  if ( Collided != null )
531  Collided( this, target );
532  }
533 
534  public void Update( Time time )
535  {
536  foreach ( var obj in objects )
537  {
538  if ( obj.IsUpdated )
539  obj.Update( time );
540  }
541  }
542 
547  public void Add( IGameObject obj )
548  {
549  if ( !( obj is PhysicsObject ) )
550  throw new NotImplementedException( "Currently only PhysicsObjects can be added to a structure." );
551 
552  if ( !IsAddedToGame )
553  {
554  // Add to game and use relative coordinates
555  obj.Position += this.Position;
556 
557  if ( !obj.IsAddedToGame )
558  Game.Instance.Add( obj );
559  }
560 
561  PhysicsObject physObj = (PhysicsObject)obj;
562  physObj.ParentStructure = this;
563  physObj.IsVisible = _isVisible;
564  physObj.IgnoresGravity = _ignoresGravity;
565  physObj.IgnoresCollisionResponse = _ignoresCollisionResponse;
566  physObj.IgnoresExplosions = _ignoresExplosions;
567  physObj.IgnoresPhysicsLogics = _ignoresPhysicsLogics;
568  physObj.CollisionIgnorer = _collisionIgnorer;
569  physObj.CollisionIgnoreGroup = _collisionIgnoreGroup;
570  physObj.Restitution = _coeffs.Restitution;
571  physObj.StaticFriction = _coeffs.StaticFriction;
572  physObj.KineticFriction = _coeffs.DynamicFriction;
573  physObj.LinearDamping = _linearDamping;
574  physObj.AngularDamping = _angularDamping;
575 
576  physObj.Collided += this.OnCollided;
577 
578  foreach ( var existing in objects )
579  {
580  AddJoint( physObj, existing );
581  }
582 
583  objects.Add( physObj );
584  CalculateMomentOfInertia();
585  }
586 
587  private void AddJoint( PhysicsObject obj1, PhysicsObject obj2 )
588  {
589  AxleJoint joint = new AxleJoint( obj1, obj2 );
590  joint.Softness = _softness;
591  Joints.Add( joint );
592  ( (PhysicsGameBase)Game.Instance ).Add( joint );
593  }
594 
595  public void Remove( IGameObject obj )
596  {
597  if ( !( obj is PhysicsObject ) )
598  throw new NotImplementedException( "Currently only PhysicsObjects can be added to a structure." );
599 
600  PhysicsObject physObj = (PhysicsObject)obj;
601 
602  if ( !objects.Contains( physObj ) )
603  return;
604 
605  physObj.ParentStructure = null;
606  physObj.CollisionIgnorer = null;
607  physObj.CollisionIgnoreGroup = 0;
608  physObj.Collided -= this.OnCollided;
609 
610  foreach ( var joint in Joints.FindAll( j => j.Object1 == physObj || j.Object2 == physObj ) )
611  {
612  ( (PhysicsGameBase)Game.Instance ).Remove( joint );
613  }
614 
615  objects.Remove( physObj );
616  CalculateMomentOfInertia();
617  }
618 
619  private void CalculateMomentOfInertia()
620  {
621  Vector center = this.Position;
622  _calcMomentOfInertia = 0;
623 
624  foreach ( var part in objects )
625  {
626  double r = Vector.Distance( center, part.Position );
627  _calcMomentOfInertia += part.Mass * r * r;
628  }
629  }
630 
631  public bool IsInside( Vector point )
632  {
633  foreach ( var obj in objects )
634  {
635  if ( obj.IsInside( point ) )
636  return true;
637  }
638 
639  return false;
640  }
641 
642  #region IPhysicsObject
643 
644  public void Hit( Vector impulse )
645  {
646  Vector velocity = impulse / Mass;
647 
648  foreach ( var obj in objects )
649  {
650  obj.Hit( velocity * obj.Mass );
651  }
652  }
653 
654  public void Push( Vector force )
655  {
656  Vector acceleration = force / Mass;
657 
658  foreach ( var obj in objects )
659  {
660  obj.Push( acceleration * obj.Mass );
661  }
662  }
663 
664  public void Push( Vector force, TimeSpan time )
665  {
666  Vector acceleration = force / Mass;
667 
668  foreach ( var obj in objects )
669  {
670  obj.Push( acceleration * obj.Mass, time );
671  }
672  }
673 
674  public void ApplyTorque( double torque )
675  {
676  if ( MomentOfInertia == 0 || double.IsInfinity( MomentOfInertia ) )
677  return;
678 
679  double angularAcc = torque / MomentOfInertia;
680  Vector center = this.Position;
681 
682  foreach ( var obj in objects )
683  {
684  Vector radius = obj.Position - center;
685  double linearAcc = radius.Magnitude * angularAcc;
686  obj.Push( linearAcc * obj.Mass * radius.LeftNormal );
687  }
688  }
689 
690  public void Move( Vector movement )
691  {
692  foreach ( var obj in objects )
693  {
694  obj.Move( movement );
695  }
696  }
697 
698  public override void MoveTo( Vector location, double speed, Action doWhenArrived )
699  {
700  centerObject.MoveTo( location, speed, doWhenArrived );
701 
702  foreach ( var obj in objects )
703  {
704  Vector displacement = obj.AbsolutePosition - centerObject.AbsolutePosition;
705  obj.MoveTo( location + displacement, speed );
706  }
707  }
708 
709  public void StopMoveTo()
710  {
711  foreach ( var obj in objects )
712  obj.StopMoveTo();
713  }
714 
715  public void Stop()
716  {
717  foreach ( var obj in objects )
718  obj.Stop();
719  }
720 
721  public void StopHorizontal()
722  {
723  foreach ( var obj in objects )
724  obj.StopHorizontal();
725  }
726 
727  public void StopVertical()
728  {
729  foreach ( var obj in objects )
730  obj.StopVertical();
731  }
732 
733  #endregion
734 
735  #region DelayedDestroyable
736 
737  #region DelayedDestroyable
738 
742  public bool IsDestroying { get; private set; }
743 
747  public event Action Destroying;
748 
749  protected void OnDestroying()
750  {
751  if ( Destroying != null )
752  Destroying();
753  }
754 
755  public override void Destroy()
756  {
757  IsDestroying = true;
758  OnDestroying();
760  }
761 
762  protected virtual void ReallyDestroy()
763  {
764  foreach ( var joint in Joints ) joint.Destroy();
765  foreach ( var obj in objects ) obj.Destroy();
766  this.MaximumLifetime = new TimeSpan( 0 );
767  base.Destroy();
768  }
769 
770  #endregion
771 
772  #endregion
773 
774  #region Unimplemented Members / IGameObject
775 
776  public IGameObject Parent
777  {
778  get { throw new NotImplementedException(); }
779  set { throw new NotImplementedException(); }
780  }
781 
782  #endregion
783  }
784 }
Action Removed
Tapahtuu, kun olio poistetaan pelistä (tuhotaan tai ei).
static void DoNextUpdate(Action action)
Suorittaa aliohjelman seuraavalla päivityksellä.
Definition: Game.cs:642
Kuvio.
Definition: Shapes.cs:48
double Magnitude
Vektorin pituus.
Definition: Vector.cs:281
PhysicsStructure(params PhysicsObject[] objs)
Luo uuden rakenteen ja varustaa sen fysiikkaolioilla.
void Remove(IGameObject obj)
Poistaa peliolion tuhoamatta sitä.
virtual int CollisionIgnoreGroup
Törmäysryhmä. Oliot jotka ovat samassa törmäysryhmässä menevät toistensa läpi. Jos ryhmä on nolla tai...
Definition: Collisions.cs:57
bool IsVisible
Piirretäänkö oliota ruudulle.
Definition: __GameObject.cs:91
double Right
Olion oikean reunan x-koordinaatti.
PhysicsStructure()
Luo uuden tyhjän rakenteen.
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
double LinearDamping
Olion hidastuminen. Hidastaa olion vauhtia, vaikka se ei osuisi mihinkään. Vähän kuin väliaineen (esi...
Definition: Inertia.cs:196
Rajapinta luokalle joka sisältää peliolioita.
Yhteinen rajapinta kaikille fysiikkaolioille.
bool IgnoresCollisionResponse
Jättääkö olio törmäyksen huomioimatta. Jos tosi, törmäyksestä tulee tapahtuma, mutta itse törmäystä e...
Definition: Collisions.cs:72
TimeSpan MaximumLifetime
Olion suurin mahdollinen elinaika. Kun Lifetime on suurempi kuin tämä, olio kuolee.
double Left
Olion vasemman reunan x-koordinaatti.
Vector Velocity
Olion nopeus.
Definition: Movement.cs:46
CollisionHandler< IPhysicsObject, IPhysicsObject > Collided
Tapahtuu kun olio törmää toiseen.
static readonly Rectangle Rectangle
Suorakulmio.
Definition: Shapes.cs:72
bool IgnoresGravity
Jättääkö olio painovoiman huomioimatta.
bool IgnoresLighting
Jättääkö olio kentän valaistuksen huomiotta.
Vector Acceleration
Olion kiihtyvyys.
Definition: Movement.cs:90
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
Definition: Coefficients.cs:36
static Game Instance
Definition: Game.cs:149
double AngularDamping
Olion pyörimisen hidastuminen.
Definition: Inertia.cs:207
double Bottom
Olion alareunan y-koordinaatti.
void Update(Time time)
Peliolion päivitys. Tätä kutsutaan, kun IsUpdated-ominaisuuden arvoksi on asetettu true ja olio on li...
bool CanRotate
Jos false, olio ei voi pyöriä.
void Move(Vector movement)
virtual Ignorer CollisionIgnorer
Olio, jolla voi välttää oliota osumasta tiettyihin muihin olioihin.
Definition: Collisions.cs:46
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:13
Saranaliitos kahden olion välille.
Definition: AxleJoint.cs:45
double Top
Olion yläreunan y-koordinaatti.
override void MoveTo(Vector location, double speed, Action doWhenArrived)
Yrittää siirtyä annettuun paikkaan annetulla nopeudella. Laukaisee annetun aliohjelman, kun paikkaan on päästy.
List< Listener > AssociatedListeners
void ApplyTorque(double torque)
Rakenne, joka pitää fysiikkaoliot kiinteän matkan päässä toisistaan.
void Add(IGameObject o)
Lisää olion peliin. Tavalliset oliot tulevat automaattisesti kerrokselle 0 ja ruutuoliot päällimmäise...
Definition: Game.cs:691
static Vector Average(IEnumerable< Vector > vectors)
Palauttaa kahden tai useamman vektorin keskiarvon.
Definition: Vector.cs:239
CollisionHandler< IPhysicsObject, IPhysicsObject > Collided
Tapahtuu kun olio törmää toiseen.
Definition: Collisions.cs:80
double Restitution
Olion kimmoisuus. Arvo välillä 0.0-1.0. Arvolla 1.0 olio säilyttää kaiken vauhtinsa törmäyksessä...
Definition: Coefficients.cs:66
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
Vector LeftNormal
Vasen normaali.
Definition: Vector.cs:82
void Push(Vector force)
double AngularVelocity
Olion kulmanopeus.
Definition: Movement.cs:60
static readonly Angle Zero
Nollakulma.
Definition: Angle.cs:45
double Softness
Liitoksen pehmeys eli kuinka paljon sillä on liikkumavaraa.
Definition: AxleJoint.cs:77
void OnAddedToGame()
Kutsutaan kun olio lisätään peliin.
Jypelin sisäiset metodit ja propertyt joihin käyttäjän ei tarvitse päästä käsiksi kuuluvat tähän luokkaan...
BoundingRectangle BoundingRectangle
virtual void ReallyDestroy()
bool IsInside(Vector point)
static double Distance(Vector p1, Vector p2)
Etäisyys kahden pisteen välillä.
Definition: Vector.cs:126
double Softness
Olioiden välisten liitosten pehmeys.
Väri.
Definition: Color.cs:13
Kantaluokka fysiikkapeleille.
double StaticFriction
Lepokitka. Liikkeen alkamista vastustava voima, joka ilmenee kun olio yrittää lähteä liikkeelle toise...
Definition: Coefficients.cs:45
void Push(Vector force, TimeSpan time)
Yhteinen rajapinta kaikille peliolioille.
Definition: IGameObject.cs:14
Sarja kuvia, jotka vaihtuvat halutulla nopeudella. Yksi animaatio koostuu yhdestä tai useammasta kuva...
Definition: Animation.cs:56
override Vector Position
Olion paikka koordinaatistossa. Käsittää sekä X- että Y-koordinaatin.
Definition: Dimensions.cs:49
Vector Size
Suorakaiteen koko
bool IsAddedToGame
Onko rakenne lisätty peliin.
bool IgnoresExplosions
Jättääkö olio räjähdyksen paineaallon huomiotta.
double KineticFriction
Liikekitka. Liikettä vastustava voima joka ilmenee kun kaksi oliota liikkuu toisiaan vasten (esim...
Definition: Coefficients.cs:55
IList< PhysicsObject > Objects
Rakenteeseen kuuluvat oliot.
override Vector Position
Rakenteen paikka pelimaailmassa.
void Hit(Vector impulse)
PhysicsStructure ParentStructure
Rakenneolio, johon tämä olio kuuluu.
bool IsDestroying
Onko olio tuhoutumassa.
2D-vektori.
Definition: Vector.cs:56
void Add(IGameObject obj)
Lisää olion rakenteeseen.
Vector AbsolutePosition
Olion absoluuttinen paikka pelimaailmassa. Jos olio ei ole minkään toisen peliolion lapsiolio...
double AngularAcceleration
Olion kulmakiihtyvyys.
Definition: Movement.cs:104
Action Destroying
Tapahtuu, kun olion tuhoaminen alkaa.
PhysicsStructure ParentStructure
Rakenneolio, johon tämä olio kuuluu.
virtual void MoveTo(Vector location, double speed)
Yrittää siirtyä annettuun paikkaan annetulla nopeudella. Laukaisee tapahtuman ArrivedAt, kun paikkaan on päästy.
override void Destroy()
Tuhoaa olion.
bool IgnoresPhysicsLogics
Jättääkö olio kaikki fysiikkalogiikat (ks. AddPhysicsLogic) huomiotta. Vaikuttaa esim. painovoimaan, mutta ei törmäyksiin.