Jypeli 10
The simple game programming library
Movement.cs
Siirry tämän tiedoston dokumentaatioon.
1using System;
2
3namespace 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#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
80 [Obsolete("Ei käytössä")]
81 public void Push( Vector force, TimeSpan time )
82 {
83 throw new NotImplementedException();
84 }
85#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
86
90 public virtual void Hit( Vector impulse )
91 {
92 Body.ApplyImpulse( impulse );
93 }
94
99 public virtual void ApplyTorque( double torque )
100 {
101 Body.ApplyTorque( torque );
102 }
103
107 public override void Stop()
108 {
109 Body.Stop();
110 base.Stop();
111 }
112
117 public void StopAxial( Vector axis )
118 {
119 StopMoveTo();
120
121 // TODO: Distinguish between horizontal and vertical oscillations
123
124 Body.StopAxial( axis );
125 }
126
130 public void StopHorizontal()
131 {
133 }
134
138 public void StopVertical()
139 {
141 }
142
146 public void StopAngular()
147 {
148 Body.StopAngular();
149 }
150
159 protected virtual void PrepareThrowable( PhysicsObject obj, Angle angle, double force, double distanceDelta, double axialDelta )
160 {
161 double d = ( this.Width + obj.Width ) / 2 + distanceDelta;
162 Angle a = this.Angle + angle;
163 obj.Position = this.Position + a.GetVector() * d + ( a + Angle.RightAngle ).GetVector() * axialDelta;
164 obj.Hit( Vector.FromLengthAndAngle( force, a ) );
165 }
166
176 public void Throw( PhysicsObject obj, Angle angle, double force, double distOffset = 0, int layer = 0, double axialOffset = 0 )
177 {
178 PrepareThrowable( obj, angle, force, distOffset, axialOffset );
179 Game.Add( obj, layer );
180 }
181
186 public override void Move( Vector movement )
187 {
188 Vector dv = movement - this.Velocity;
189 Hit( Mass * dv );
190 }
191
195 protected override void MoveToTarget()
196 {
197 if ( !moveTarget.HasValue )
198 {
199 Stop();
200 moveTimer.Stop();
201 return;
202 }
203
204 Vector d = moveTarget.Value - Position;
205 double vt = moveSpeed * moveTimer.Interval;
206
207 if ( d.Magnitude < vt )
208 {
209 Vector targetLoc = moveTarget.Value;
210 Stop();
211 moveTimer.Stop();
212 moveTarget = null;
213
214 if ( arrivedAction != null )
216 }
217 else
218 {
220 Hit( Mass * dv );
221 }
222 }
223 }
224}
void Add(Light light)
Lisää valon peliin. Nykyisellään valoja voi olla ainoastaan yksi kappale. Toistaiseksi ei tuettu Wind...
Definition: Effects.cs:27
void StopMoveTo()
Pysäyttää MoveTo-aliohjelmalla aloitetun liikkeen.
Definition: Movement.cs:102
Action arrivedAction
Kun olio saapuu kohteeseen
Definition: Movement.cs:57
double moveSpeed
Liikkumisnopeus kohdetta kohti
Definition: Movement.cs:52
void ClearOscillations()
Poistaa kaikki värähtelyt kappaleelta.
Definition: Movement.cs:185
Vector? moveTarget
Piste johon liikutaan
Definition: Movement.cs:47
Timer moveTimer
Ajastin joka liikuttaa kappaletta kohti kohdepistettä
Definition: Movement.cs:42
double Width
Olion leveys (X-suunnassa, leveimmässä kohdassa).
bool IsUpdated
Tarvitseeko olio päivittämistä. Kun perit oman luokkasi tästä luokasta, aseta tämä arvoon true,...
Kappale joka noudattaa fysiikan lakeja, johon voi törmätä. Vaatii että käytössä on fysiikkapeli.
Definition: Collisions.cs:7
double AngularVelocity
Kulmanopeus.
Definition: Movement.cs:35
override void MoveToTarget()
Siirtää oliota kohti kohdetta
Definition: Movement.cs:195
double AngularAcceleration
Kulmakiihtyvyys.
Definition: Movement.cs:45
IPhysicsBody Body
Fysiikkamoottorin käsittelemä fysiikkakappale.
Definition: Dimensions.cs:12
virtual void Push(Vector force)
Työntää oliota.
Definition: Movement.cs:74
double MaxVelocity
Suurin nopeus, jonka olio voi saavuttaa.
Definition: Movement.cs:55
override Vector?? Position
Definition: Dimensions.cs:30
void StopHorizontal()
Pysäyttää olion liikkeen vaakasuunnassa.
Definition: Movement.cs:130
double Mass
Olion massa (paino). Mitä enemmän massaa, sitä enemmän voimaa tarvitaan saamaan olio liikkeelle / pys...
Definition: Inertia.cs:14
void Push(Vector force, TimeSpan time)
Definition: Movement.cs:81
virtual void Hit(Vector impulse)
Kohdistaa kappaleeseen impulssin. Tällä kappaleen saa nopeasti liikkeeseen.
Definition: Movement.cs:90
void StopAxial(Vector axis)
Pysäyttää liikkeen akselin suunnassa.
Definition: Movement.cs:117
void StopVertical()
Pysäyttää olion liikkeen pystysuunnassa.
Definition: Movement.cs:138
Vector Velocity
Nopeus.
Definition: Movement.cs:15
virtual void PrepareThrowable(PhysicsObject obj, Angle angle, double force, double distanceDelta, double axialDelta)
Valmistelee heitettävän kappaleen heittoa varten valmiiksi, ei lisää sitä peliin.
Definition: Movement.cs:159
double _maxAngularV
Definition: Movement.cs:7
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:176
void StopAngular()
Pysäyttää kaiken pyörimisliikkeen.
Definition: Movement.cs:146
override void Stop()
Pysäyttää olion.
Definition: Movement.cs:107
double _maxLinearV
Definition: Movement.cs:8
Vector Acceleration
Kiihtyvyys.
Definition: Movement.cs:25
override void Move(Vector movement)
Siirtää oliota.
Definition: Movement.cs:186
virtual void ApplyTorque(double torque)
Kohdistaa kappaleeseen vääntövoiman. Voiman suunta riippuu merkistä.
Definition: Movement.cs:99
double MaxAngularVelocity
Suurin kulmanopeus, jonka olio voi saavuttaa.
Definition: Movement.cs:65
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
Definition: Timer.cs:87
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Definition: Timer.cs:292
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
static readonly Angle RightAngle
Suora kulma (90 astetta).
Definition: Angle.cs:49
Vector GetVector()
Kulmaa vastaava yksikkövektori
Definition: Angle.cs:470
2D-vektori.
Definition: Vector.cs:67
Angle Angle
Kulma radiaaneina.
Definition: Vector.cs:372
static readonly Vector UnitY
Pystysuuntainen yksikkövektori (pituus 1, suunta ylös).
Definition: Vector.cs:86
static readonly Vector UnitX
Vaakasuuntainen yksikkövektori (pituus 1, suunta oikealle).
Definition: Vector.cs:81
double Magnitude
Vektorin pituus.
Definition: Vector.cs:345
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.
Definition: Vector.cs:114