Jypeli  9
The simple game programming library
PhysicsStructure.cs
Siirry tämän tiedoston dokumentaatioon.
1 using AdvanceMath;
2 using System;
3 using System.Collections.Generic;
4 
5 namespace Jypeli
6 {
10  public class PhysicsStructure : GameObjects.GameObjectBase, IPhysicsObjectInternal, GameObjectContainer
11  {
12  private double _softness = 0;
13  private List<PhysicsObject> objects;
14 
18  public bool IsAddedToGame { get; set; }
19 
23  public IList<PhysicsObject> Objects
24  {
25  get { return objects; }
26  }
27 
31  public int ObjectCount
32  {
33  get { return objects.Count; }
34  }
35 
39  internal List<IAxleJoint> Joints { get; private set; }
40 
44  public double Softness
45  {
46  get { return _softness; }
47  set
48  {
49  _softness = value;
50 
51  for ( int i = 0; i < Joints.Count; i++ )
52  {
53  Joints[i].Softness = value;
54  }
55  }
56  }
57 
59  {
60  get
61  {
62  if ( objects.Count == 0 )
63  return new BoundingRectangle();
64 
65  double top = objects[0].Top;
66  double left = objects[0].Left;
67  double bottom = objects[0].Bottom;
68  double right = objects[0].Right;
69 
70  for ( int i = 1; i < objects.Count; i++ )
71  {
72  if ( objects[i].Top > top ) top = objects[i].Top;
73  if ( objects[i].Left < left ) left = objects[i].Left;
74  if ( objects[i].Bottom < bottom ) bottom = objects[i].Bottom;
75  if ( objects[i].Right > right ) right = objects[i].Right;
76  }
77 
78  return new BoundingRectangle( new Vector( left, top ), new Vector( right, bottom ) );
79  }
80  }
81 
82  #region Tagged
83 
84  public object Tag { get; set; }
85 
86  #endregion
87 
88  #region IGameObject
89 
90  //public event Action AddedToGame;
91 
92  bool _isVisible = true;
93  bool _ignoresLighting = false;
95 
96  public bool IsVisible
97  {
98  get { return false; }
99  set
100  {
101  foreach ( var obj in objects )
102  {
103  obj.IsVisible = value;
104  }
105 
106  _isVisible = value;
107  }
108  }
109 
113  public bool IgnoresLighting
114  {
115  get { return _ignoresLighting; }
116  set
117  {
118  objects.ForEach(o => o.IgnoresLighting = value);
119  _ignoresLighting = value;
120  }
121  }
122 
123  public List<Listener> AssociatedListeners { get; private set; }
124 
128  public override Vector Position
129  {
130  get
131  {
132  return centerObject.Position;
133  }
134  set
135  {
136  Vector delta = value - Position;
137 
138  foreach ( var obj in objects )
139  {
140  obj.Position += delta;
141  }
142 
143  centerObject.Position = value;
144  }
145  }
146 
147  public override Vector Size
148  {
149  get
150  {
151  return BoundingRectangle.Size;
152  }
153  set
154  {
155  throw new NotImplementedException( "Setting size for a structure is not implemented." );
156  }
157  }
158 
159  public override Animation Animation
160  {
161  get { return null; }
162  set
163  {
164  throw new InvalidOperationException( "Physics structure has no image or animation." );
165  }
166  }
167 
169  {
170  get { return new Vector( 1, 1 ); }
171  set { throw new NotImplementedException(); }
172  }
173 
174  public bool TextureFillsShape
175  {
176  get { return false; }
177  set { throw new NotImplementedException(); }
178  }
179 
180  public Color Color
181  {
182  get
183  {
184  throw new NotImplementedException();
185  }
186  set
187  {
188  foreach ( var obj in objects )
189  obj.Color = value;
190  }
191  }
192 
193  public Shape Shape
194  {
195  get { return Shape.Rectangle; }
196  set { throw new NotImplementedException(); }
197  }
198 
199  //TODO
205  public override Angle Angle
206  {
207  get
208  {
209  IEnumerable<double> angles = objects.ConvertAll<PhysicsObject, double>(delegate (PhysicsObject o) { return o.Angle.Degrees; });
210  return Angle.FromDegrees(angles.Average()); // TODO: IEnumerable<Angle>.Average
211  }
212  set
213  {
214  foreach (var obj in objects)
215  {
216  //obj.Angle = value; // Tämä tuottaa hyvin paljon haamuvoimia
217  obj.Position = (new Matrix2x2(value.Cos, -value.Sin, value.Sin, value.Cos)) * (Vector2D)obj.Position; // Tämä ei niin paljon?
218  }
219  }
220  }
221 
222  #endregion
223 
224  #region IPhysicsObject
225 
226  bool _ignoresGravity = false;
228  bool _ignoresExplosions = false;
229  bool _ignoresPhysicsLogics = false;
232  double _sfriction = 0.4;
233  double _kfriction = 0.4;
234  double _restitution = 0.5;
235  double _linearDamping = 1;
236  double _angularDamping = 1;
237  double? _setMomentOfInertia = null;
239 
243  public event CollisionHandler<IPhysicsObject, IPhysicsObject> Collided;
244 
249  {
250  // No nested physics structures for now
251  get { return null; }
252  }
253 
254  public double Mass
255  {
256  get
257  {
258  double totalMass = 0;
259  objects.ForEach( o => totalMass += o.Mass );
260  return totalMass;
261  }
262  set
263  {
264  double massMultiplier = value / this.Mass;
265  objects.ForEach( o => o.Mass *= massMultiplier );
266  }
267  }
268 
269  public bool IgnoresGravity
270  {
271  get { return _ignoresGravity; }
272  set
273  {
274  objects.ForEach( o => o.IgnoresGravity = value );
275  _ignoresGravity = value;
276  }
277  }
278 
280  {
281  get { return _ignoresCollisionResponse; }
282  set
283  {
284  objects.ForEach( o => o.IgnoresCollisionResponse = value );
286  }
287  }
288 
289  public bool IgnoresExplosions
290  {
291  get { return _ignoresExplosions; }
292  set
293  {
294  objects.ForEach( o => o.IgnoresExplosions = value );
295  _ignoresExplosions = value;
296  }
297  }
298 
300  {
301  get { return _ignoresPhysicsLogics; }
302  set
303  {
304  objects.ForEach( o => o.IgnoresPhysicsLogics = value );
305  _ignoresPhysicsLogics = value;
306  }
307  }
308 
310  {
311  get { return _collisionIgnorer; }
312  set
313  {
314  objects.ForEach( o => o.CollisionIgnorer = value );
315  _collisionIgnorer = value;
316  }
317  }
318 
320  {
321  get { return _collisionIgnoreGroup; }
322  set
323  {
324  objects.ForEach( o => o.CollisionIgnoreGroup = value );
325  _collisionIgnoreGroup = value;
326  }
327  }
328 
329  public double StaticFriction
330  {
331  get { return _sfriction; }
332  set
333  {
334  objects.ForEach( o => o.StaticFriction = value );
335  _sfriction = value;
336  }
337  }
338 
339  public double KineticFriction
340  {
341  get { return _kfriction; }
342  set
343  {
344  objects.ForEach( o => o.KineticFriction = value );
345  _kfriction = value;
346  }
347  }
348 
349  public double Restitution
350  {
351  get { return _restitution; }
352  set
353  {
354  objects.ForEach( o => o.Restitution = value );
355  _restitution = value;
356  }
357  }
358 
359  public double LinearDamping
360  {
361  get { return _linearDamping; }
362  set
363  {
364  objects.ForEach( o => o.LinearDamping = value );
365  _linearDamping = value;
366  }
367  }
368 
369  public double AngularDamping
370  {
371  get { return _angularDamping; }
372  set
373  {
374  objects.ForEach( o => o.AngularDamping = value );
375  _angularDamping = value;
376  }
377  }
378 
380  {
381  get
382  {
383  var velocities = objects.ConvertAll<PhysicsObject, Vector>( delegate( PhysicsObject o ) { return o.Velocity; } );
384  return Vector.Average( velocities );
385  }
386  set
387  {
388  foreach ( var obj in objects )
389  obj.Velocity = value;
390  }
391  }
392 
393  public double AngularVelocity
394  {
395  get
396  {
397  IEnumerable<double> velocities = objects.ConvertAll<PhysicsObject, double>( delegate( PhysicsObject o ) { return o.AngularVelocity; } );
398  return velocities.Average();
399  }
400  set
401  {
402  foreach ( var obj in objects )
403  obj.AngularVelocity = value;
404  }
405  }
406 
408  {
409  get
410  {
411  var accs = objects.ConvertAll<PhysicsObject, Vector>( delegate( PhysicsObject o ) { return o.Acceleration; } );
412  return Vector.Average( accs );
413  }
414  set
415  {
416  foreach ( var obj in objects )
417  obj.Acceleration = value;
418  }
419  }
420 
421  public double AngularAcceleration
422  {
423  get
424  {
425  IEnumerable<double> accs = objects.ConvertAll<PhysicsObject, double>( delegate( PhysicsObject o ) { return o.AngularAcceleration; } );
426  return accs.Average();
427  }
428  set
429  {
430  foreach ( var obj in objects )
431  obj.AngularAcceleration = value;
432  }
433  }
434 
435  public double MomentOfInertia
436  {
437  get
438  {
440  }
441  set
442  {
443  _setMomentOfInertia = value;
444  }
445  }
446 
450  public bool CanRotate
451  {
452  get { return !double.IsPositiveInfinity( MomentOfInertia ); }
453  set
454  {
455  if ( !value )
456  {
457  foreach (var obj in objects)
458  obj.CanRotate = false;
459  //MomentOfInertia = double.PositiveInfinity;
460  }
461  else
462  {
463  foreach (var obj in objects)
464  obj.CanRotate = true;
466  _setMomentOfInertia = null;
467  }
468  }
469  }
470 
471  #endregion
472 
477  {
478  centerObject = new PhysicsObject( 1, 1 ) { IgnoresPhysicsLogics = true, IsVisible = false };
479  objects = new List<PhysicsObject>();
480  Joints = new List<IAxleJoint>();
482  AssociatedListeners = new List<Listener>();
485  Add(centerObject); // Tämä pitää lisätä, sillä muuten jossain tilanteissa structuren ensimmäinen kappale pyörii keskiakselinsa ympäri.
486  }
487 
488  private void AddJoints()
489  {
490  Joints.ForEach( PhysicsGameBase.Instance.Add );
491  }
492 
493  private void RemoveJoints()
494  {
496  }
497 
502  public PhysicsStructure( params PhysicsObject[] objs )
503  : this()
504  {
505  for ( int i = 0; i < objs.Length; i++ )
506  {
507  Add( objs[i] );
508  }
509  }
510 
511  // TODO tämä saattaa olla turha jäänne, siivoa mikäli ongelmia ei ilmene (13.5.2018)
515  //public void OnAddedToGame()
516  //{
517  // if (AddedToGame != null)
518  // AddedToGame();
519  //}
520 
524  internal void OnCollided( IPhysicsObject part, IPhysicsObject target )
525  {
526  if ( Collided != null )
527  Collided( this, target );
528  }
529 
535  public IEnumerable<T> GetChildObjects<T>() where T : IGameObject
536  {
537  foreach ( IGameObject o in Objects )
538  {
539  if ( o is T )
540  yield return (T)o;
541  }
542  }
543 
549  public IEnumerable<T> GetChildObjects<T>( Predicate<T> predicate ) where T : IGameObject
550  {
551  foreach ( IGameObject o in Objects )
552  {
553  if ( o is T && predicate( (T)o ) )
554  yield return (T)o;
555  }
556  }
557 
558  public void Update( Time time ) // new vai override?
559  {
560  foreach ( var obj in objects )
561  {
562  if ( obj.IsUpdated )
563  obj.Update( time );
564  }
565  }
566 
571  public void Add( IGameObject obj )
572  {
573  if ( !( obj is PhysicsObject ) )
574  throw new NotImplementedException( "Currently only PhysicsObjects can be added to a structure." );
575 
576  if ( !IsAddedToGame )
577  {
578  // Add to game and use relative coordinates
579  obj.Position += this.Position;
580 
581  if ( !obj.IsAddedToGame )
582  Game.Instance.Add( obj );
583  }
584 
585  PhysicsObject physObj = (PhysicsObject)obj;
586  physObj.ParentStructure = this;
587  physObj.IsVisible = _isVisible;
594  physObj.Restitution = _restitution;
595  physObj.StaticFriction = _sfriction;
596  physObj.KineticFriction = _kfriction;
597  physObj.LinearDamping = _linearDamping;
599 
600  physObj.Collided += this.OnCollided;
601 
602  var game = PhysicsGameBase.Instance;
603 
604  foreach ( var existing in objects )
605  {
606  IAxleJoint joint = game.Engine.CreateJoint( physObj, existing, existing.AbsolutePosition );
607  joint.Softness = _softness;
608  Joints.Add( joint );
609  game.Add( joint );
610  }
611 
612  objects.Add( physObj );
614  }
615 
616  public void Remove( IGameObject obj )
617  {
618  if ( !( obj is PhysicsObject ) )
619  throw new NotImplementedException( "Currently only PhysicsObjects can be added to a structure." );
620 
621  PhysicsObject physObj = (PhysicsObject)obj;
622 
623  if ( !objects.Contains( physObj ) )
624  return;
625 
626  physObj.ParentStructure = null;
627  physObj.CollisionIgnorer = null;
628  physObj.CollisionIgnoreGroup = 0;
629  physObj.Collided -= this.OnCollided;
630 
631  foreach ( var joint in Joints.FindAll( j => j.Object1 == physObj || j.Object2 == physObj ) )
632  {
633  joint.Destroy();
635  }
636 
637  objects.Remove( physObj );
639  }
640 
642  {
643  Vector center = this.Position;
644  _calcMomentOfInertia = 0;
645 
646  foreach ( var part in objects )
647  {
648  double r = Vector.Distance( center, part.Position );
649  _calcMomentOfInertia += part.Mass * r * r;
650  }
651  }
652 
653  public bool IsInside( Vector point )
654  {
655  foreach ( var obj in objects )
656  {
657  if ( obj.IsInside( point ) )
658  return true;
659  }
660 
661  return false;
662  }
663 
664  #region IPhysicsObject
665 
666  public void Hit( Vector impulse )
667  {
668  Vector velocity = impulse / Mass;
669 
670  foreach ( var obj in objects )
671  {
672  obj.Hit( velocity * obj.Mass );
673  }
674  }
675 
676  public void Push( Vector force )
677  {
678  Vector acceleration = force / Mass;
679 
680  foreach ( var obj in objects )
681  {
682  obj.Push( acceleration * obj.Mass );
683  }
684  }
685 
686  public void Push( Vector force, TimeSpan time )
687  {
688  Vector acceleration = force / Mass;
689 
690  foreach ( var obj in objects )
691  {
692  obj.Push( acceleration * obj.Mass, time );
693  }
694  }
695 
696  public void ApplyTorque( double torque )
697  {
698  if ( MomentOfInertia == 0 || double.IsInfinity( MomentOfInertia ) )
699  return;
700 
701  double angularAcc = torque / MomentOfInertia;
702  Vector center = this.Position;
703 
704  foreach ( var obj in objects )
705  {
706  Vector radius = obj.Position - center;
707  double linearAcc = radius.Magnitude * angularAcc;
708  obj.Push( linearAcc * obj.Mass * radius.LeftNormal );
709  }
710  }
711 
712  public void Move( Vector movement )
713  {
714  foreach ( var obj in objects )
715  {
716  obj.Move( movement );
717  }
718  }
719 
720  public override void MoveTo( Vector location, double speed, Action doWhenArrived )
721  {
722  centerObject.MoveTo( location, speed, doWhenArrived );
723 
724  foreach ( var obj in objects )
725  {
726  Vector displacement = obj.AbsolutePosition - centerObject.AbsolutePosition;
727  obj.MoveTo( location + displacement, speed );
728  }
729  }
730 
731  public void StopMoveTo()
732  {
733  objects.ForEach( o => o.StopMoveTo() );
734  }
735 
736  public void Stop()
737  {
738  objects.ForEach( o => o.Stop() );
739  }
740 
741  public void StopHorizontal()
742  {
743  objects.ForEach( o => o.StopHorizontal() );
744  }
745 
746  public void StopVertical()
747  {
748  objects.ForEach( o => o.StopVertical() );
749  }
750 
751  public void StopAxial( Vector axis )
752  {
753  objects.ForEach( o => o.StopAxial( axis ) );
754  }
755 
756  public void StopAngular()
757  {
758  objects.ForEach( o => o.StopAngular() );
759  }
760 
761  #endregion
762 
763  #region DelayedDestroyable
764 
765  #region DelayedDestroyable
766 
770  public bool IsDestroying { get; private set; }
771 
775  public event Action Destroying;
776 
777  protected void OnDestroying()
778  {
779  if ( Destroying != null )
780  Destroying();
781  }
782 
783  public override void Destroy()
784  {
785  IsDestroying = true;
786  OnDestroying();
788  }
789 
790  protected virtual void ReallyDestroy()
791  {
792  foreach ( var joint in Joints ) joint.Destroy();
793  foreach ( var obj in objects ) obj.Destroy();
794  this.MaximumLifetime = new TimeSpan( 0 );
795  base.Destroy();
796  }
797 
798  #endregion
799 
800  #endregion
801 
802  #region Unimplemented Members / IGameObject
803 
805  {
806  get { throw new NotImplementedException(); }
807  set { throw new NotImplementedException(); }
808  }
809 
810  #endregion
811  }
812 }
Jypeli.BoundingRectangle.Size
Vector Size
Suorakaiteen koko
Definition: BoundingRectangle.cs:58
Jypeli.PhysicsStructure.Objects
IList< PhysicsObject > Objects
Rakenteeseen kuuluvat oliot.
Definition: PhysicsStructure.cs:24
Jypeli.GameObjectContainer
Rajapinta luokalle joka sisältää peliolioita.
Definition: GameObjectContainer.cs:7
Jypeli.PhysicsObject.IgnoresGravity
bool IgnoresGravity
Jättääkö painovoiman huomiotta.
Definition: PhysicsObject.cs:13
Jypeli.IGameObject.StopMoveTo
void StopMoveTo()
Jypeli.PhysicsStructure.StopAxial
void StopAxial(Vector axis)
Definition: PhysicsStructure.cs:751
Jypeli.PhysicsStructure.CollisionIgnoreGroup
int CollisionIgnoreGroup
Definition: PhysicsStructure.cs:320
Jypeli.Vector.LeftNormal
Vector LeftNormal
Vasen normaali.
Definition: Vector.cs:89
Jypeli.PhysicsObject.IgnoresCollisionResponse
bool IgnoresCollisionResponse
Jättääkö törmäykset huomiotta.
Definition: Collisions.cs:50
Jypeli.PhysicsObject.AngularDamping
double AngularDamping
Kulmanopeuskerroin. Pienempi arvo kuin 1 (esim. 0.998) toimii kuten kitka / ilmanvastus.
Definition: Inertia.cs:76
Jypeli.PhysicsStructure.IgnoresGravity
bool IgnoresGravity
Definition: PhysicsStructure.cs:270
Jypeli.PhysicsObject.LinearDamping
double LinearDamping
Nopeuskerroin. Pienempi arvo kuin 1 (esim. 0.998) toimii kuten kitka / ilmanvastus.
Definition: Inertia.cs:65
Jypeli.PhysicsStructure.Softness
double Softness
Olioiden välisten liitosten pehmeys.
Definition: PhysicsStructure.cs:45
Jypeli.PhysicsStructure.IgnoresCollisionResponse
bool IgnoresCollisionResponse
Definition: PhysicsStructure.cs:280
Jypeli.GameObjects.GameObjectBase.AddedToGame
Action AddedToGame
Tapahtuu, kun olio lisätään peliin.
Definition: GameObjectBase.cs:111
Jypeli.PhysicsStructure.Add
void Add(IGameObject obj)
Lisää olion rakenteeseen.
Definition: PhysicsStructure.cs:571
Jypeli.PhysicsStructure._collisionIgnorer
Ignorer _collisionIgnorer
Definition: PhysicsStructure.cs:230
Jypeli.PhysicsStructure.KineticFriction
double KineticFriction
Definition: PhysicsStructure.cs:340
Jypeli.PhysicsStructure.RemoveJoints
void RemoveJoints()
Definition: PhysicsStructure.cs:493
AdvanceMath.Matrix2x2
A 2x2 matrix which can represent rotations for 2D vectors.
Definition: Matrix2x2.cs:58
Jypeli.PhysicsStructure
Rakenne, joka pitää fysiikkaoliot kiinteän matkan päässä toisistaan.
Definition: PhysicsStructure.cs:11
Jypeli.PhysicsStructure._ignoresGravity
bool _ignoresGravity
Definition: PhysicsStructure.cs:226
Jypeli.PhysicsStructure.IsVisible
bool IsVisible
Definition: PhysicsStructure.cs:97
Jypeli
Definition: Automobile.cs:5
Jypeli.PhysicsStructure.AssociatedListeners
List< Listener > AssociatedListeners
Definition: PhysicsStructure.cs:123
Jypeli.PhysicsStructure._sfriction
double _sfriction
Definition: PhysicsStructure.cs:232
Jypeli.PhysicsObject.Collided
CollisionHandler< IPhysicsObject, IPhysicsObject > Collided
Tapahtuu, kun törmätään toiseen fysiikkaolioon.
Definition: Collisions.cs:102
Jypeli.GameObjects.GameObjectBase.Bottom
double Bottom
Olion alareunan y-koordinaatti.
Definition: GameObjectBase.cs:327
Jypeli.PhysicsStructure._linearDamping
double _linearDamping
Definition: PhysicsStructure.cs:235
Jypeli.PhysicsStructure.Move
void Move(Vector movement)
Definition: PhysicsStructure.cs:712
Jypeli.PhysicsStructure.Joints
List< IAxleJoint > Joints
Rakenteeseen kuuluvat liitokset.
Definition: PhysicsStructure.cs:39
Jypeli.PhysicsObject.IgnoresExplosions
bool IgnoresExplosions
Definition: PhysicsObject.cs:34
Jypeli.PhysicsGameBase
Kantaluokka fysiikkapeleille.
Definition: PhysicsGameBase.cs:12
Jypeli.PhysicsStructure.GetChildObjects< T >
IEnumerable< T > GetChildObjects< T >()
Palauttaa rakenteeseen kuuluvat oliot.
Definition: PhysicsStructure.cs:535
Jypeli.PhysicsStructure.Size
override Vector Size
Definition: PhysicsStructure.cs:148
Jypeli.PhysicsStructure.Destroying
Action Destroying
Tapahtuu, kun olion tuhoaminen alkaa.
Definition: PhysicsStructure.cs:775
Jypeli.PhysicsStructure.ReallyDestroy
virtual void ReallyDestroy()
Definition: PhysicsStructure.cs:790
Jypeli.PhysicsStructure.Push
void Push(Vector force, TimeSpan time)
Definition: PhysicsStructure.cs:686
Jypeli.PhysicsStructure._calcMomentOfInertia
double _calcMomentOfInertia
Definition: PhysicsStructure.cs:238
Jypeli.PhysicsStructure.BoundingRectangle
BoundingRectangle BoundingRectangle
Definition: PhysicsStructure.cs:59
Jypeli.Vector.Average
static Vector Average(IEnumerable< Vector > vectors)
Palauttaa kahden tai useamman vektorin keskiarvon.
Definition: Vector.cs:277
Jypeli.IGameObject
Yhteinen rajapinta kaikille peliolioille.
Definition: IGameObject.cs:11
Jypeli.PhysicsStructure.CalculateMomentOfInertia
void CalculateMomentOfInertia()
Definition: PhysicsStructure.cs:641
Jypeli.Shape
Kuvio.
Definition: Shapes.cs:47
Jypeli.PhysicsObject.AngularAcceleration
double AngularAcceleration
Kulmakiihtyvyys.
Definition: Movement.cs:45
Jypeli.PhysicsStructure._ignoresPhysicsLogics
bool _ignoresPhysicsLogics
Definition: PhysicsStructure.cs:229
Jypeli.PhysicsGameBase.Add
void Add(IAxleJoint j)
Lisää liitoksen peliin.
Definition: PhysicsGameBase.cs:189
Jypeli.PhysicsStructure.Mass
double Mass
Definition: PhysicsStructure.cs:255
Jypeli.PhysicsStructure.Destroy
override void Destroy()
Tuhoaa olion.
Definition: PhysicsStructure.cs:783
Jypeli.PhysicsStructure.Push
void Push(Vector force)
Definition: PhysicsStructure.cs:676
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.PhysicsStructure.Parent
IGameObject Parent
Definition: PhysicsStructure.cs:805
Jypeli.PhysicsStructure.IgnoresPhysicsLogics
bool IgnoresPhysicsLogics
Definition: PhysicsStructure.cs:300
Jypeli.PhysicsObject.StaticFriction
double StaticFriction
Lepokitka (hidastaa liikkeelle lähtiessä). Ks. KineticFriction (liikekitka)
Definition: Collisions.cs:71
Jypeli.Game.DoNextUpdate
static void DoNextUpdate(Action action)
Suorittaa aliohjelman seuraavalla päivityksellä.
Definition: DelayedActions.cs:65
Jypeli.PhysicsStructure.Velocity
Vector Velocity
Definition: PhysicsStructure.cs:380
Jypeli.PhysicsObject.CollisionIgnoreGroup
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:28
Jypeli.PhysicsStructure.AngularDamping
double AngularDamping
Definition: PhysicsStructure.cs:370
Jypeli.PhysicsStructure.TextureWrapSize
Vector TextureWrapSize
Definition: PhysicsStructure.cs:169
Jypeli.IPhysicsObject
Yhteinen rajapinta kaikille fysiikkaolioille.
Definition: IPhysicsObject.cs:12
Jypeli.PhysicsStructure.CanRotate
bool CanRotate
Jos false, olio ei voi pyöriä.
Definition: PhysicsStructure.cs:451
Jypeli.PhysicsStructure._setMomentOfInertia
double? _setMomentOfInertia
Definition: PhysicsStructure.cs:237
Jypeli.Shape.Rectangle
static readonly Rectangle Rectangle
Suorakulmio.
Definition: Shapes.cs:70
Jypeli.PhysicsObject.Angle
override Angle Angle
Definition: Dimensions.cs:34
Jypeli.Game.Instance
static Game Instance
Käynnissä olevan pelin pääolio.
Definition: Game.cs:90
Jypeli.PhysicsStructure.AddJoints
void AddJoints()
Definition: PhysicsStructure.cs:488
Jypeli.PhysicsObject.KineticFriction
double KineticFriction
Liikekitka (hidastaa kun olio on jo liikkeessä). Ks. StaticFriction (lepokitka)
Definition: Collisions.cs:88
Jypeli.PhysicsStructure.IsAddedToGame
bool IsAddedToGame
Onko rakenne lisätty peliin.
Definition: PhysicsStructure.cs:18
Jypeli.PhysicsStructure.StaticFriction
double StaticFriction
Definition: PhysicsStructure.cs:330
Jypeli.PhysicsStructure._angularDamping
double _angularDamping
Definition: PhysicsStructure.cs:236
Jypeli.PhysicsStructure.IgnoresExplosions
bool IgnoresExplosions
Definition: PhysicsStructure.cs:290
Jypeli.PhysicsGameBase.Remove
void Remove(IAxleJoint j)
Poistaa liitoksen pelistä.
Definition: PhysicsGameBase.cs:198
Jypeli.PhysicsStructure.OnCollided
void OnCollided(IPhysicsObject part, IPhysicsObject target)
Kutsutaan kun törmätään.
Definition: PhysicsStructure.cs:524
Jypeli.PhysicsStructure.Acceleration
Vector Acceleration
Definition: PhysicsStructure.cs:408
Jypeli.Game.Add
void Add(Light light)
Lisää valon peliin. Nykyisellään valoja voi olla ainoastaan yksi kappale. Toistaiseksi ei tuettu Wind...
Definition: Effects.cs:27
Jypeli.GameObjects.GameObjectBase.Removed
Action Removed
Tapahtuu, kun olio poistetaan pelistä (tuhotaan tai ei).
Definition: GameObjectBase.cs:125
Jypeli.PhysicsStructure._isVisible
bool _isVisible
Definition: PhysicsStructure.cs:92
Jypeli.PhysicsObject.CollisionIgnorer
virtual Ignorer CollisionIgnorer
Olio, jolla voi välttää oliota osumasta tiettyihin muihin olioihin.
Definition: Collisions.cs:13
Jypeli.PhysicsStructure._restitution
double _restitution
Definition: PhysicsStructure.cs:234
Jypeli.Time
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:14
Jypeli.PhysicsStructure.objects
List< PhysicsObject > objects
Definition: PhysicsStructure.cs:13
Jypeli.PhysicsStructure.PhysicsStructure
PhysicsStructure()
Luo uuden tyhjän rakenteen.
Definition: PhysicsStructure.cs:476
Jypeli.PhysicsObject.Velocity
Vector Velocity
Nopeus.
Definition: Movement.cs:15
Jypeli.GameObjects.GameObjectBase.Right
double Right
Olion oikean reunan x-koordinaatti.
Definition: GameObjectBase.cs:309
Jypeli.PhysicsObject.AngularVelocity
double AngularVelocity
Kulmanopeus.
Definition: Movement.cs:35
Jypeli.Ignorer
Base class for Collision Ignorers to impliment.
Definition: Ignorer.cs:40
Jypeli.Animation
Sarja kuvia, jotka vaihtuvat halutulla nopeudella. Yksi animaatio koostuu yhdestä tai useammasta kuva...
Definition: Animation.cs:62
Jypeli.PositionalRW.Position
new Vector Position
Paikka.
Definition: Positional.cs:32
Jypeli.PhysicsStructure.Collided
CollisionHandler< IPhysicsObject, IPhysicsObject > Collided
Tapahtuu kun olio törmää toiseen.
Definition: PhysicsStructure.cs:243
Jypeli.PhysicsStructure.AngularAcceleration
double AngularAcceleration
Definition: PhysicsStructure.cs:422
Jypeli.PhysicsStructure.LinearDamping
double LinearDamping
Definition: PhysicsStructure.cs:360
Jypeli.PhysicsObject.IgnoresPhysicsLogics
bool IgnoresPhysicsLogics
Jättääkö fysiikkakentät (esim. painovoiman) huomiotta.
Definition: PhysicsObject.cs:23
Jypeli.PhysicsStructure.centerObject
PhysicsObject centerObject
Definition: PhysicsStructure.cs:94
Jypeli.IAxleJoint.Softness
double Softness
Liitoksen pehmeys eli kuinka paljon sillä on liikkumavaraa.
Definition: IAxleJoint.cs:55
Jypeli.PhysicsStructure.Hit
void Hit(Vector impulse)
Definition: PhysicsStructure.cs:666
Jypeli.PhysicsStructure._softness
double _softness
Definition: PhysicsStructure.cs:12
Jypeli.IGameObject.IsAddedToGame
bool IsAddedToGame
Definition: IGameObject.cs:20
Jypeli.PhysicsStructure.ApplyTorque
void ApplyTorque(double torque)
Definition: PhysicsStructure.cs:696
Jypeli.GameObjects.GameObjectBase.Left
double Left
Olion vasemman reunan x-koordinaatti.
Definition: GameObjectBase.cs:300
Jypeli.Color
Väri.
Definition: Color.cs:13
Jypeli.PhysicsObject.Position
override Vector Position
Definition: Dimensions.cs:27
Jypeli.IAxleJoint
Definition: IAxleJoint.cs:36
Jypeli.PhysicsStructure.StopHorizontal
void StopHorizontal()
Definition: PhysicsStructure.cs:741
Jypeli.PhysicsStructure.StopAngular
void StopAngular()
Definition: PhysicsStructure.cs:756
Jypeli.PhysicsStructure.Stop
void Stop()
Definition: PhysicsStructure.cs:736
Jypeli.PhysicsStructure._ignoresLighting
bool _ignoresLighting
Definition: PhysicsStructure.cs:93
Jypeli.PhysicsStructure.IgnoresLighting
bool IgnoresLighting
Jättääkö olio kentän valaistuksen huomiotta.
Definition: PhysicsStructure.cs:114
Jypeli.Vector.Distance
static double Distance(Vector p1, Vector p2)
Etäisyys kahden pisteen välillä.
Definition: Vector.cs:133
Jypeli.PhysicsStructure.IsInside
bool IsInside(Vector point)
Definition: PhysicsStructure.cs:653
Jypeli.PhysicsStructure.PhysicsStructure
PhysicsStructure(params PhysicsObject[] objs)
Luo uuden rakenteen ja varustaa sen fysiikkaolioilla.
Definition: PhysicsStructure.cs:502
Jypeli.PhysicsStructure.Tag
object Tag
Definition: PhysicsStructure.cs:84
Jypeli.PhysicsStructure._collisionIgnoreGroup
int _collisionIgnoreGroup
Definition: PhysicsStructure.cs:231
Jypeli.PhysicsStructure._ignoresCollisionResponse
bool _ignoresCollisionResponse
Definition: PhysicsStructure.cs:227
Jypeli.PhysicsStructure.TextureFillsShape
bool TextureFillsShape
Definition: PhysicsStructure.cs:175
Jypeli.IPhysicsObjectInternal
Jypelin sisäiset metodit ja propertyt joihin käyttäjän ei tarvitse päästä käsiksi kuuluvat tähän luok...
Definition: IPhysicsObject.cs:72
Jypeli.PhysicsObject.Acceleration
Vector Acceleration
Kiihtyvyys.
Definition: Movement.cs:25
Jypeli.PhysicsStructure.Position
override Vector Position
Rakenteen paikka pelimaailmassa.
Definition: PhysicsStructure.cs:129
Jypeli.PhysicsStructure.StopVertical
void StopVertical()
Definition: PhysicsStructure.cs:746
Jypeli.PhysicsStructure.MomentOfInertia
double? MomentOfInertia
Definition: PhysicsStructure.cs:436
Jypeli.Vector.Magnitude
double Magnitude
Vektorin pituus.
Definition: Vector.cs:319
Jypeli.Vector
2D-vektori.
Definition: Vector.cs:59
Jypeli.PhysicsStructure.OnDestroying
void OnDestroying()
Definition: PhysicsStructure.cs:777
System
Definition: CFFauxAttributes.cs:29
Jypeli.PhysicsStructure.ObjectCount
int ObjectCount
Rakenteeseen kuuluvien olioiden määrä.
Definition: PhysicsStructure.cs:32
Jypeli.PhysicsStructure.StopMoveTo
void StopMoveTo()
Definition: PhysicsStructure.cs:731
Jypeli.PhysicsObject
Definition: Collisions.cs:6
Jypeli.Angle.FromDegrees
static Angle FromDegrees(double degree)
Luo kulman annettujen asteiden mukaan.
Definition: Angle.cs:324
Jypeli.PhysicsStructure.Update
void Update(Time time)
Peliolion päivitys. Tätä kutsutaan, kun IsUpdated-ominaisuuden arvoksi on asetettu true ja olio on li...
Definition: PhysicsStructure.cs:558
Jypeli.PhysicsStructure.AngularVelocity
double AngularVelocity
Definition: PhysicsStructure.cs:394
Jypeli.PhysicsObject.Restitution
double Restitution
Kimmoisuuskerroin (0 = ei kimmoisa, 1 = täysin kimmoisa, yli 1 = saa energiaa tyhjästä)
Definition: Collisions.cs:60
Jypeli.BoundingRectangle
Suorakaide
Definition: BoundingRectangle.cs:9
Jypeli.ObjectIgnorer
A collision ignorer that uses reference comparison. All Bodies with the same instance of this ignorer...
Definition: ObjectIgnorer.cs:41
Jypeli.PhysicsStructure._ignoresExplosions
bool _ignoresExplosions
Definition: PhysicsStructure.cs:228
Jypeli.Angle.Degrees
double Degrees
Palauttaa tai asettaa kulman asteina.
Definition: Angle.cs:69
Jypeli.PhysicsObject.ParentStructure
PhysicsStructure ParentStructure
Rakenneolio, johon tämä olio kuuluu.
Definition: PhysicsObject.cs:31
AdvanceMath.Vector2D
This is the Vector Class.
Definition: Vector2D.cs:50
Jypeli.PhysicsStructure.CollisionIgnorer
Ignorer CollisionIgnorer
Definition: PhysicsStructure.cs:310
Jypeli.PhysicsStructure.Remove
void Remove(IGameObject obj)
Poistaa peliolion tuhoamatta sitä.
Definition: PhysicsStructure.cs:616
Jypeli.Game
Definition: Content.cs:46
Jypeli.PhysicsStructure.MoveTo
override void MoveTo(Vector location, double speed, Action doWhenArrived)
Yrittää siirtyä annettuun paikkaan annetulla nopeudella. Laukaisee annetun aliohjelman,...
Definition: PhysicsStructure.cs:720
Jypeli.PhysicsStructure.IsDestroying
bool IsDestroying
Onko olio tuhoutumassa.
Definition: PhysicsStructure.cs:770
AdvanceMath
Definition: Clamped.cs:36
Jypeli.PhysicsStructure.ParentStructure
PhysicsStructure ParentStructure
Rakenneolio, johon tämä olio kuuluu.
Definition: PhysicsStructure.cs:249
Jypeli.PhysicsStructure.Restitution
double Restitution
Definition: PhysicsStructure.cs:350
Jypeli.Angle
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
Jypeli.PhysicsGameBase.Instance
static new PhysicsGameBase Instance
Käynnissä olevan fysiikkapelin pääolio.
Definition: PhysicsGameBase.cs:59
Jypeli.PhysicsStructure._kfriction
double _kfriction
Definition: PhysicsStructure.cs:233