Jypeli  5
The simple game programming library
Automobile.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using AdvanceMath;
3 using Jypeli;
4 using Microsoft.Xna.Framework;
5 using System.Collections.Generic;
6 using Microsoft.Xna.Framework.Graphics;
7 
8 
9 namespace Jypeli.Assets
10 {
14  public class Automobile : PhysicsObject
15  {
16  private static Image commonImage = null;
17 
18  private double topspeed;
19 
24  public DoubleMeter SpeedMeter { get; set; }
25 
30  public double Speed
31  {
32  get { return SpeedMeter.Value; }
33  }
34 
38  public double TopSpeed
39  {
40  get { return topspeed; }
41  set
42  {
43  topspeed = value;
44  SpeedMeter.MaxValue = topspeed;
45  }
46  }
47 
52  public double Acceleration { get; set; }
53 
58  public double BrakeDeceleration { get; set; }
59 
63  public Angle Maneuverability { get; set; }
64 
65  private double pendingAcceleration = 0;
66  private double pendingDeceleration = 0;
67 
73  public Automobile( double width, double height )
74  : base( width, height, Shape.Rectangle )
75  {
76  SpeedMeter = new DoubleMeter( 0 );
77  TopSpeed = 1000;
78  Acceleration = 100;
79  BrakeDeceleration = 200;
80  Maneuverability = Angle.FromDegrees( 20 );
81  if ( commonImage == null )
82  commonImage = Game.LoadImageFromResources( "Auto" );
83  Image = Image.Color( commonImage, Color );
84  IsUpdated = true;
85  }
86 
91  public void Accelerate( double time )
92  {
93  pendingAcceleration += Acceleration * time;
94  }
95 
100  public void Brake( double time )
101  {
102  pendingDeceleration += BrakeDeceleration * time;
103  }
104 
108  public void Accelerate()
109  {
110  pendingAcceleration += Acceleration * Game.Time.SinceLastUpdate.TotalSeconds;
111  }
112 
116  public void Reverse()
117  {
118  pendingAcceleration += -Acceleration * Game.Time.SinceLastUpdate.TotalSeconds;
119  }
120 
124  public void Brake()
125  {
126  pendingDeceleration += BrakeDeceleration * Game.Time.SinceLastUpdate.TotalSeconds;
127  }
128 
134  public void Turn( Angle angle, double time )
135  {
136  int sign = Math.Sign( angle.Radians );
137  Angle += ( sign * angle <= time * Maneuverability ) ? angle : sign * time * Maneuverability;
138  }
139 
144  public override void Update( Time time )
145  {
146  double dt = time.SinceLastUpdate.TotalSeconds;
147  bool nochange = true;
148 
149  if ( pendingAcceleration != 0 )
150  {
151  // Accelerate
152  double accel = Math.Min( pendingAcceleration, Acceleration * dt );
153  pendingAcceleration -= accel;
154 
155  Velocity += Vector.FromLengthAndAngle( accel, Angle );
156  SpeedMeter.Value += accel;
157 
158  nochange = false;
159  }
160 
161  if ( pendingDeceleration > 0 )
162  {
163  // Brake
164  double decel = AdvanceMath.MathHelper.Min((float)pendingDeceleration, (float)(BrakeDeceleration * dt), (float)Velocity.Magnitude);
165  pendingDeceleration -= decel;
166 
167  Velocity += Vector.FromLengthAndAngle( -decel, Velocity.Angle );
168  SpeedMeter.Value -= decel;
169 
170  nochange = false;
171 
172  }
173 
174  if ( nochange )
175  {
176  SpeedMeter.Value -= dt * Acceleration;
177  }
178 
179  base.Update( time );
180  }
181  }
182 }
static Image LoadImageFromResources(string name)
Definition: Game.cs:1613
Kuvio.
Definition: Shapes.cs:48
void Brake(double time)
Jarruttaa.
Definition: Automobile.cs:100
void Brake()
Jarruttaa.
Definition: Automobile.cs:124
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
Suorakulmio.
Definition: Shapes.cs:315
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
Definition: Coefficients.cs:36
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Definition: Time.cs:24
Mittari, joka mittaa double-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:515
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:13
Kuva.
Definition: Image.cs:24
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
static Image Color(Image image, Color color)
Värittää kuvan.
Definition: Image.cs:894
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: Angle.cs:86
Väri.
Definition: Color.cs:13
Automobile(double width, double height)
Alustaa uuden auton.
Definition: Automobile.cs:73
static Time Time
Peliaika. Sisältää tiedon siitä, kuinka kauan peliä on pelattu (Time.SinceStartOfGame) ja kuinka kaua...
Definition: Game.cs:309
void Accelerate()
Kiihdyttää.
Definition: Automobile.cs:108
void Turn(Angle angle, double time)
Kääntyy niin paljon kuin auton ohjattavuus sallii.
Definition: Automobile.cs:134
2D-vektori.
Definition: Vector.cs:56
void Reverse()
Kiihdyttää takaperin.
Definition: Automobile.cs:116
void Accelerate(double time)
Kiihdyttää.
Definition: Automobile.cs:91
override void Update(Time time)
Ajetaan kun pelitilannetta päivitetään. Päivityksen voi toteuttaa omassa luokassa toteuttamalla tämän...
Definition: Automobile.cs:144
static Angle FromDegrees(double degree)
Luo kulman annettujen asteiden mukaan.
Definition: Angle.cs:325