31 using System.Collections.Generic;
44 private static Image commonImage = null;
45 private static Shape commonShape = null;
48 private List<PhysicsObject> wheels =
new List<PhysicsObject>();
49 private List<AxleJoint> joints =
new List<AxleJoint>();
56 public override Vector Size
58 get {
return base.Size; }
59 set {
throw new NotImplementedException(
"The size of the tank can not be changed." ); }
68 get {
return hitPoints; }
85 public Tank(
double width,
double height )
86 : base( width, height )
88 if ( commonImage == null )
90 if ( commonShape == null )
94 HitPoints.LowerLimit += Break;
95 Body.CollisionIgnorer =
new ObjectIgnorer();
97 cannon =
new Cannon( Width * 0.75, Height * 0.2 );
103 AddedToGame += AddWheels;
106 private void AddWheels()
109 if ( pg == null )
throw new InvalidOperationException(
"Cannot have a tank in non-physics game" );
111 const int wheelCount = 6;
113 double r = this.Width / ( 2 * wheelCount );
114 double left = this.
X - this.Width / 2 + r;
115 double[] wheelYPositions =
new double[wheelCount];
116 for (
int i = 0; i < wheelYPositions.Length; i++ )
117 wheelYPositions[i] = this.
Y - this.Height / 2;
118 wheelYPositions[0] = wheelYPositions[wheelCount - 1] = this.Position.Y - ( this.Height * 3 / 8 );
120 for (
int i = 0; i < wheelCount; i++ )
123 wheel.
Mass = this.Mass / 20;
125 wheel.
Body.CollisionIgnorer = this.Body.CollisionIgnorer;
126 wheel.
Body.AngularDamping = 0.95f;
131 Vector axlePos =
new Vector( left + i * ( this.Width / wheelCount ), wheelYPositions[i] );
142 foreach ( var j
in joints )
144 foreach ( var w
in wheels )
166 double realPower = power;
169 else if ( power < -1.0 )
172 double torque = Mass * realPower * 3000;
174 foreach ( var w
in wheels )
176 w.Body.ApplyTorque( (
float)(torque / wheels.Count) );
DoubleMeter Power
Voima, jolla panos ammutaan. Nollautuu ammuttaessa.
Color Color
Väri, jonka värisenä olio piirretään, jos tekstuuria ei ole määritelty.
static Image LoadImageFromResources(string name)
void Add(Physics2DDotNet.Joints.Joint j)
Lisää liitoksen peliin.
Yksinkertainen tykki, joka ampuu kuulia tai muuta ammuksia.
void Shoot()
Ampuu tankin tykillä, jos ammuksia on vielä jäljellä.
void Shoot(double power)
Ampuu halutulla voimalla.
Yksinkertainen tankki eli panssarivaunu.
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
double Mass
Olion massa. Mitä suurempi massa, sitä suurempi voima tarvitaan olion liikuttamiseksi.
Saranaliitos kahden olion välille.
override void Destroy()
Tuhoaa olion.
static readonly Color Gray
Harmaa.
void Add(IGameObject o)
Lisää olion peliin. Tavalliset oliot tulevat automaattisesti kerrokselle 0 ja ruutuoliot päällimmäise...
Peliluokka reaaliaikaisille peleille.
double Softness
Liitoksen pehmeys eli kuinka paljon sillä on liikkumavaraa.
static readonly Ellipse Circle
Ympyrä tai ellipsi.
Mittari, joka mittaa int-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Body Body
Fysiikkamoottorin käyttämä tietorakenne.
override void Destroy()
Tuhoaa olion. Tuhottu olio poistuu pelistä.
override Vector Position
Olion paikka koordinaatistossa. Käsittää sekä X- että Y-koordinaatin.
IntMeter Ammo
Panosten määrä.
double KineticFriction
Liikekitka. Liikettä vastustava voima joka ilmenee kun kaksi oliota liikkuu toisiaan vasten (esim...
static Shape FromImage(Image image)
Luo kuvion annetusta kuvasta. Kuvassa tulee olla vain yksi yhtenäinen muoto (toisin sanoen kuvio ei v...
void Accelerate(double power)
Kiihdyttää tankkia.
Peli, jossa on fysiikan laskenta mukana. Peliin lisätyt
double Force
Voima, jolla räjähdyksen paineaallon uloin reuna heittää olioita räjähdyksestä poispäin. Vihje: voit käyttää myös negatiivisia arvoja, jolloin räjähdys imee olioita sisäänsä.
PhysicsObject Shoot()
Ampuu aseella, ja palauttaa ammuksen tai null, jos ampuminen ei onnistu (esimerkiksi jos panokset ova...
virtual Vector Position
Olion paikka. Jos olio on jonkun toisen peliolion lapsi, paikka on suhteessa tämän vanhempaan (Parent...
Tank(double width, double height)
Alustaa uuden tankin.
TimeSpan TimeBetweenUse
Kuinka kauan kestää, että asetta voidaan käyttää uudestaan.