Jypeli  9
The simple game programming library
Movement.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 
3 namespace Jypeli
4 {
5  public partial class PhysicsObject
6  {
7  private double _maxAngularV = double.PositiveInfinity;
8  private double _maxLinearV = double.PositiveInfinity;
9 
15  {
16  get { return Body.Velocity; }
17  set { Body.Velocity = value; }
18  }
19 
25  {
26  get { return Body.Acceleration; }
27  set { Body.Acceleration = value; }
28  }
29 
34  public double AngularVelocity
35  {
36  get { return Body.AngularVelocity; }
37  set { Body.AngularVelocity = value; }
38  }
39 
44  public double AngularAcceleration
45  {
46  get { return Body.AngularAcceleration; }
47  set { Body.AngularAcceleration = value; }
48  }
49 
53  [Save]
54  public double MaxVelocity
55  {
56  get { return _maxLinearV; }
57  set { _maxLinearV = value; IsUpdated = true; }
58  }
59 
63  [Save]
64  public double MaxAngularVelocity
65  {
66  get { return _maxAngularV; }
67  set { _maxAngularV = value; IsUpdated = true; }
68  }
69 
74  public virtual void Push( Vector force )
75  {
76  Body.ApplyForce( force );
77  }
78 
79  public void Push( Vector force, TimeSpan time )
80  {
81  throw new NotImplementedException();
82  }
83 
87  public virtual void Hit( Vector impulse )
88  {
89  Body.ApplyImpulse( impulse );
90  }
91 
96  public virtual void ApplyTorque( double torque )
97  {
98  Body.ApplyTorque( torque );
99  }
100 
104  public override void Stop()
105  {
106  Body.Stop();
107  base.Stop();
108  }
109 
114  public void StopAxial( Vector axis )
115  {
116  StopMoveTo();
117 
118  // TODO: Distinguish between horizontal and vertical oscillations
119  ClearOscillations();
120 
121  Body.StopAxial( axis );
122  }
123 
127  public void StopHorizontal()
128  {
130  }
131 
135  public void StopVertical()
136  {
138  }
139 
143  public void StopAngular()
144  {
145  Body.StopAngular();
146  }
147 
148  protected virtual void PrepareThrowable( PhysicsObject obj, Angle angle, double force, double distanceDelta, double axialDelta )
149  {
150  double d = ( this.Width + obj.Width ) / 2 + distanceDelta;
151  Angle a = this.AbsoluteAngle + angle;
152  obj.Position = this.AbsolutePosition + a.GetVector() * d + ( a + Angle.RightAngle ).GetVector() * axialDelta;
153  obj.Hit( Vector.FromLengthAndAngle( force, a ) );
154  }
155 
165  public void Throw( PhysicsObject obj, Angle angle, double force, double distOffset = 0, int layer = 0, double axialOffset = 0 )
166  {
167  PrepareThrowable( obj, angle, force, distOffset, axialOffset );
168  Game.Add( obj, layer );
169  }
170 
175  public override void Move( Vector movement )
176  {
177  Vector dv = movement - this.Velocity;
178  Hit( Mass * dv );
179  }
180 
181  protected override void MoveToTarget()
182  {
183  if ( !moveTarget.HasValue )
184  {
185  Stop();
186  moveTimer.Stop();
187  return;
188  }
189 
190  Vector d = moveTarget.Value - AbsolutePosition;
191  double vt = moveSpeed * moveTimer.Interval;
192 
193  if ( d.Magnitude < vt )
194  {
195  Vector targetLoc = moveTarget.Value;
196  Stop();
197  moveTimer.Stop();
198  moveTarget = null;
199 
200  if ( arrivedAction != null )
201  arrivedAction();
202  }
203  else
204  {
205  Vector dv = Vector.FromLengthAndAngle( moveSpeed, d.Angle ) - this.Velocity;
206  Hit( Mass * dv );
207  }
208  }
209  }
210 }
Jypeli.Angle.GetVector
Vector GetVector()
Definition: Angle.cs:446
Jypeli.PhysicsObject.Body
IPhysicsBody Body
Definition: Dimensions.cs:10
Jypeli.PhysicsObject.MaxVelocity
double MaxVelocity
Suurin nopeus, jonka olio voi saavuttaa.
Definition: Movement.cs:55
Jypeli.PhysicsObject.Push
void Push(Vector force, TimeSpan time)
Definition: Movement.cs:79
Jypeli.Vector.UnitY
static readonly Vector UnitY
Pystysuuntainen yksikkövektori (pituus 1, suunta ylös).
Definition: Vector.cs:78
Jypeli
Definition: Automobile.cs:5
Jypeli.PhysicsObject.StopHorizontal
void StopHorizontal()
Pysäyttää olion liikkeen vaakasuunnassa.
Definition: Movement.cs:127
Jypeli.PhysicsObject.Push
virtual void Push(Vector force)
Työntää oliota.
Definition: Movement.cs:74
Jypeli.Vector.UnitX
static readonly Vector UnitX
Vaakasuuntainen yksikkövektori (pituus 1, suunta oikealle).
Definition: Vector.cs:73
Jypeli.PhysicsObject.Stop
override void Stop()
Pysäyttää olion.
Definition: Movement.cs:104
Jypeli.PhysicsObject.MaxAngularVelocity
double MaxAngularVelocity
Suurin kulmanopeus, jonka olio voi saavuttaa.
Definition: Movement.cs:65
Jypeli.PhysicsObject.PrepareThrowable
virtual void PrepareThrowable(PhysicsObject obj, Angle angle, double force, double distanceDelta, double axialDelta)
Definition: Movement.cs:148
Jypeli.PhysicsObject.AngularAcceleration
double AngularAcceleration
Kulmakiihtyvyys.
Definition: Movement.cs:45
Jypeli.PhysicsObject.StopVertical
void StopVertical()
Pysäyttää olion liikkeen pystysuunnassa.
Definition: Movement.cs:135
Jypeli.PhysicsObject.MoveToTarget
override void MoveToTarget()
Definition: Movement.cs:181
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.PhysicsObject.Velocity
Vector Velocity
Nopeus.
Definition: Movement.cs:15
Jypeli.PhysicsObject.AngularVelocity
double AngularVelocity
Kulmanopeus.
Definition: Movement.cs:35
Jypeli.PhysicsObject.StopAxial
void StopAxial(Vector axis)
Pysäyttää liikkeen akselin suunnassa.
Definition: Movement.cs:114
Jypeli.PhysicsObject.ApplyTorque
virtual void ApplyTorque(double torque)
Kohdistaa kappaleeseen vääntövoiman. Voiman suunta riippuu merkistä.
Definition: Movement.cs:96
Jypeli.Vector.Angle
Angle Angle
Kulma radiaaneina.
Definition: Vector.cs:346
Jypeli.PhysicsObject.StopAngular
void StopAngular()
Pysäyttää kaiken pyörimisliikkeen.
Definition: Movement.cs:143
Jypeli.PhysicsObject._maxAngularV
double _maxAngularV
Definition: Movement.cs:7
Jypeli.PhysicsObject._maxLinearV
double _maxLinearV
Definition: Movement.cs:8
Jypeli.Vector.FromLengthAndAngle
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.
Definition: Vector.cs:106
Jypeli.PhysicsObject.Acceleration
Vector Acceleration
Kiihtyvyys.
Definition: Movement.cs:25
Jypeli.Vector.Magnitude
double Magnitude
Vektorin pituus.
Definition: Vector.cs:319
Jypeli.Vector
2D-vektori.
Definition: Vector.cs:59
System
Definition: CFFauxAttributes.cs:29
Jypeli.Angle.RightAngle
static readonly Angle RightAngle
Suora kulma (90 astetta).
Definition: Angle.cs:49
Jypeli.PhysicsObject.Throw
void Throw(PhysicsObject obj, Angle angle, double force, double distOffset=0, int layer=0, double axialOffset=0)
Heittää kappaleen hahmon rintamasuuntaa kohti.
Definition: Movement.cs:165
Jypeli.PhysicsObject
Definition: Collisions.cs:6
Jypeli.PhysicsObject.Hit
virtual void Hit(Vector impulse)
Kohdistaa kappaleeseen impulssin. Tällä kappaleen saa nopeasti liikkeeseen.
Definition: Movement.cs:87
Jypeli.PhysicsObject.Mass
double Mass
Olion massa (paino). Mitä enemmän massaa, sitä enemmän voimaa tarvitaan saamaan olio liikkeelle / pys...
Definition: Inertia.cs:14
Jypeli.Game
Definition: Content.cs:46
Jypeli.PhysicsObject.Move
override void Move(Vector movement)
Siirtää oliota.
Definition: Movement.cs:175
Jypeli.Angle
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40