Jypeli 10
The simple game programming library
DriverBrain.cs
Siirry tämän tiedoston dokumentaatioon.
1using System;
2using System.Collections.Generic;
3
4namespace Jypeli.Assets
5{
11 public class DriverBrain : Brain
12 {
13 private List<PhysicsObject> chkpoints;
14
20 public List<PhysicsObject> Checkpoints
21 {
22 get { return chkpoints; }
23 set
24 {
25 chkpoints = value;
27 CheckpointsPassed.MaxValue = value.Count;
28 }
29 }
30
35 {
36 get
37 {
39 }
40 }
41
45 public IntMeter RoundsDriven { get; set; }
46
50 public IntMeter CheckpointsPassed { get; set; }
51
52
58 public DriverBrain( List<PhysicsObject> checkpoints, int rounds )
59 {
60 RoundsDriven = new IntMeter( 0 );
61 RoundsDriven.MaxValue = rounds;
62
63 CheckpointsPassed = new IntMeter( 0 );
66
67 Checkpoints = checkpoints;
68 }
69
70 private void nextRound()
71 {
74 }
75
80 public override void OnCollision( IGameObject target )
81 {
82 if ( target == NextCheckpoint )
83 {
84 // Checkpoint reached, set next
87 }
88
89 base.OnCollision( target );
90 }
91 }
92
99 {
105 public ComputerDriverBrain( List<PhysicsObject> checkpoints, int rounds )
106 : base( checkpoints, rounds )
107 {
108 }
109
115 protected override void Update( Time time )
116 {
117 Automobile OwnerAuto = Owner as Automobile;
118
119 if ( OwnerAuto != null )
120 {
121 Vector distance = NextCheckpoint.Position - OwnerAuto.Position;
122 Angle turnAngle = distance.Angle - OwnerAuto.Angle;
123
124 double dt = time.SinceLastUpdate.TotalSeconds;
125 double dist = Math.Max( distance.Magnitude, Double.Epsilon );
126 double spd = Math.Max( OwnerAuto.Velocity.Magnitude, Double.Epsilon );
127 double eta = dist / spd;
128 double braketime = spd / OwnerAuto.BrakeDeceleration;
129 double turntime = Math.Abs( turnAngle.Radians ) / OwnerAuto.Maneuverability.Radians;
130
131 if ( turntime >= eta || braketime * OwnerAuto.KineticFriction >= eta )
132 {
133 OwnerAuto.Brake( dt );
134 }
135
136 else
137 {
138 OwnerAuto.Accelerate( dt );
139 }
140
141 OwnerAuto.Turn( turnAngle, dt );
142 }
143
144 base.Update( time );
145 }
146 }
147}
void Accelerate(double time)
Kiihdyttää.
Definition: Automobile.cs:86
Angle Maneuverability
Ohjattavuus, eli kulma jonka auto voi korkeintaan kääntyä sekunnissa.
Definition: Automobile.cs:58
void Brake(double time)
Jarruttaa.
Definition: Automobile.cs:95
void Turn(Angle angle, double time)
Kääntyy niin paljon kuin auton ohjattavuus sallii.
Definition: Automobile.cs:129
double BrakeDeceleration
Jarrujen hidastavuus, eli kuinka monta yksikköä korkeintaan nopeutta voidaan vähentää sekunnissa jarr...
Definition: Automobile.cs:53
Tietokoneajajan aivot. Kuten DriverBrain, mutta osaa automaattisesti suunnistaa checkpointilta toisel...
Definition: DriverBrain.cs:99
override void Update(Time time)
Kutsutaan, kun tilaa päivitetään. Ajamislogiikka sijaitsee täällä.
Definition: DriverBrain.cs:115
ComputerDriverBrain(List< PhysicsObject > checkpoints, int rounds)
Alustaa uudet tietokoneajajan aivot.
Definition: DriverBrain.cs:105
Ajajan aivot. Laskee checkpointteja ja kierroksia automaattisesti. Nämä aivot ovat ihmispelaajalle,...
Definition: DriverBrain.cs:12
PhysicsObject? NextCheckpoint
Seuraava tarkistuspiste.
Definition: DriverBrain.cs:35
override void OnCollision(IGameObject target)
Kutsutaan, kun tapahtuu törmäys.
Definition: DriverBrain.cs:80
List< PhysicsObject > Checkpoints
Lista checkpointeista eli tarkistuspisteistä radalla. Auton tulee ajaa kaikkien näiden pisteiden läpi...
Definition: DriverBrain.cs:21
IntMeter RoundsDriven
Mittari joka mittaa ajettuja kierroksia.
Definition: DriverBrain.cs:45
IntMeter CheckpointsPassed
Mittari joka mittaa läpäistyjä tarkistuspisteitä tällä kierroksella.
Definition: DriverBrain.cs:50
DriverBrain(List< PhysicsObject > checkpoints, int rounds)
Alustaa uudet ajajan aivot.
Definition: DriverBrain.cs:58
List< PhysicsObject > chkpoints
Definition: DriverBrain.cs:13
Aivoluokka peliolioille. Voidaan käyttää tekoälyn ja tilannekohtaisten toimintamallien luomiseen peli...
Definition: Brain.cs:41
IGameObject Owner
Aivojen haltija.
Definition: Brain.cs:69
Mittari, joka mittaa int-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: IntMeter.cs:11
void Reset()
Palauttaa mittarin arvon oletusarvoonsa.
Definition: Meter.cs:273
ValueType MaxValue
Mittarin suurin sallittu arvo. Kun mittari saavuttaa tämän arvon, laukeaa tapahtuma UpperLimit.
Definition: Meter.cs:177
ValueType Value
Mittarin arvo.
Definition: Meter.cs:129
Action UpperLimit
Tapahtuu, kun mittari saavuttaa suurimman sallitun arvonsa.
Definition: Meter.cs:202
Kappale joka noudattaa fysiikan lakeja, johon voi törmätä. Vaatii että käytössä on fysiikkapeli.
Definition: Collisions.cs:7
double KineticFriction
Liikekitka (hidastaa kun olio on jo liikkeessä). Ks. StaticFriction (lepokitka)
Definition: Collisions.cs:90
override Angle?? Angle
Definition: Dimensions.cs:55
override Vector?? Position
Definition: Dimensions.cs:30
Vector Velocity
Nopeus.
Definition: Movement.cs:15
Yhteinen rajapinta kaikille peliolioille.
Definition: IGameObject.cs:11
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: Angle.cs:85
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:14
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Definition: Time.cs:27
2D-vektori.
Definition: Vector.cs:67
Angle Angle
Kulma radiaaneina.
Definition: Vector.cs:372
double Magnitude
Vektorin pituus.
Definition: Vector.cs:345