Jypeli  5
The simple game programming library
DriverBrain.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 
7 namespace Jypeli.Assets
8 {
14  public class DriverBrain : Brain
15  {
16  private List<PhysicsObject> chkpoints;
17 
23  public List<PhysicsObject> Checkpoints
24  {
25  get { return chkpoints; }
26  set
27  {
28  chkpoints = value;
29  CheckpointsPassed.Value = 0;
30  CheckpointsPassed.MaxValue = value.Count;
31  }
32  }
33 
37  public PhysicsObject NextCheckpoint
38  {
39  get
40  {
41  return ( CheckpointsPassed.Value < Checkpoints.Count ) ? Checkpoints[CheckpointsPassed.Value] : null;
42  }
43  }
44 
48  public IntMeter RoundsDriven { get; set; }
49 
53  public IntMeter CheckpointsPassed { get; set; }
54 
55 
61  public DriverBrain( List<PhysicsObject> checkpoints, int rounds )
62  {
63  RoundsDriven = new IntMeter( 0 );
64  RoundsDriven.MaxValue = rounds;
65 
66  CheckpointsPassed = new IntMeter( 0 );
67  CheckpointsPassed.MaxValue = 1;
68  CheckpointsPassed.UpperLimit += nextRound;
69 
70  Checkpoints = checkpoints;
71  }
72 
73  private void nextRound()
74  {
75  CheckpointsPassed.Reset();
76  ++RoundsDriven.Value;
77  }
78 
83  public override void OnCollision( IGameObject target )
84  {
85  if ( target == NextCheckpoint )
86  {
87  // Checkpoint reached, set next
88  CheckpointsPassed.MaxValue = Checkpoints.Count;
89  ++CheckpointsPassed.Value;
90  }
91 
92  base.OnCollision( target );
93  }
94  }
95 
102  {
108  public ComputerDriverBrain( List<PhysicsObject> checkpoints, int rounds )
109  : base( checkpoints, rounds )
110  {
111  }
112 
118  protected override void Update( Time time )
119  {
120  Automobile OwnerAuto = Owner as Automobile;
121 
122  if ( OwnerAuto != null )
123  {
124  Vector distance = NextCheckpoint.Position - OwnerAuto.Position;
125  Angle turnAngle = distance.Angle - OwnerAuto.Angle;
126 
127  double dt = time.SinceLastUpdate.TotalSeconds;
128  double dist = Math.Max( distance.Magnitude, Double.Epsilon );
129  double spd = Math.Max( OwnerAuto.Velocity.Magnitude, Double.Epsilon );
130  double eta = dist / spd;
131  double braketime = spd / OwnerAuto.BrakeDeceleration;
132  double turntime = Math.Abs( turnAngle.Radians ) / OwnerAuto.Maneuverability.Radians;
133 
134  if ( turntime >= eta || braketime * OwnerAuto.KineticFriction >= eta )
135  {
136  OwnerAuto.Brake( dt );
137  }
138 
139  else
140  {
141  OwnerAuto.Accelerate( dt );
142  }
143 
144  OwnerAuto.Turn( turnAngle, dt );
145  }
146 
147  base.Update( time );
148  }
149  }
150 }
Ajajan aivot. Laskee checkpointteja ja kierroksia automaattisesti. Nämä aivot ovat ihmispelaajalle...
Definition: DriverBrain.cs:14
double Magnitude
Vektorin pituus.
Definition: Vector.cs:281
Angle Angle
Kulma radiaaneina.
Definition: Vector.cs:308
void Brake(double time)
Jarruttaa.
Definition: Automobile.cs:100
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
DriverBrain(List< PhysicsObject > checkpoints, int rounds)
Alustaa uudet ajajan aivot.
Definition: DriverBrain.cs:61
Vector Velocity
Olion nopeus.
Definition: Movement.cs:46
Tietokoneajajan aivot. Kuten DriverBrain, mutta osaa automaattisesti suunnistaa checkpointilta toisel...
Definition: DriverBrain.cs:101
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
override Angle Angle
Kulma, jossa olio on. Oliota voi pyörittää kulmaa vaihtamalla.
Definition: Dimensions.cs:80
Aivoluokka peliolioille. Voidaan käyttää tekoälyn ja tilannekohtaisten toimintamallien luomiseen peli...
Definition: Brain.cs:40
override void OnCollision(IGameObject target)
Kutsutaan, kun tapahtuu törmäys.
Definition: DriverBrain.cs:83
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:13
Angle Maneuverability
Ohjattavuus, eli kulma jonka auto voi korkeintaan kääntyä sekunnissa.
Definition: Automobile.cs:63
Mittari, joka mittaa int-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:387
override void Update(Time time)
Kutsutaan, kun tilaa päivitetään. Ajamislogiikka sijaitsee täällä.
Definition: DriverBrain.cs:118
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: Angle.cs:86
Yhteinen rajapinta kaikille peliolioille.
Definition: IGameObject.cs:14
override Vector Position
Olion paikka koordinaatistossa. Käsittää sekä X- että Y-koordinaatin.
Definition: Dimensions.cs:49
double KineticFriction
Liikekitka. Liikettä vastustava voima joka ilmenee kun kaksi oliota liikkuu toisiaan vasten (esim...
Definition: Coefficients.cs:55
void Turn(Angle angle, double time)
Kääntyy niin paljon kuin auton ohjattavuus sallii.
Definition: Automobile.cs:134
2D-vektori.
Definition: Vector.cs:56
double BrakeDeceleration
Jarrujen hidastavuus, eli kuinka monta yksikköä korkeintaan nopeutta voidaan vähentää sekunnissa jarr...
Definition: Automobile.cs:58
void Accelerate(double time)
Kiihdyttää.
Definition: Automobile.cs:91
ComputerDriverBrain(List< PhysicsObject > checkpoints, int rounds)
Alustaa uudet tietokoneajajan aivot.
Definition: DriverBrain.cs:108