7 using System.ComponentModel;
8 using System.Collections.Generic;
20 private int _tolerance = 5;
21 private double _accel = 1000;
22 private double _maxVel = 500;
24 private enum PlatformCharacterState { Idle, Falling, Jumping }
25 private PlatformCharacterState state = PlatformCharacterState.Idle;
27 private Weapon weapon = null;
29 private double _cachedGravityMagnitude = 0;
32 private bool collisionDetected =
false;
33 private int noCollisionCount = 0;
34 private int walkSteps = 0;
38 private bool customAnimPlaying =
false;
39 private Action customAnimAction;
41 private double gravityMagnitude
46 return _cachedGravityMagnitude;
50 private Vector gravityNormal
55 return _cachedGravityNormal;
65 get {
return _tolerance; }
66 set { _tolerance = value; }
74 get {
return _curDirection; }
75 set {
Turn( value ); }
83 get {
return _accel; }
84 set { _accel = value; }
92 get {
return _maxVel; }
93 set { _maxVel = value; }
105 get {
return _platform; }
142 get {
return weapon; }
146 if ( weapon == value )
return;
149 if ( weapon != null )
153 if ( !IsWeaponFacingRight() )
228 : this(width, height,
Shape.Circle)
236 : base( width, height, shape )
251 private void SetAnimation(
Animation anim,
bool loop =
true )
266 customAnimPlaying =
true;
267 customAnimAction = onPlayed;
269 anim.
Played += AnimationPlayed;
273 private void AnimationPlayed()
276 customAnimPlaying =
false;
278 if ( customAnimAction != null )
282 private void updateGravity()
285 if ( physGame == null )
return;
287 if ( physGame.
Gravity != _cachedGravity )
289 _cachedGravity = physGame.
Gravity;
290 _cachedGravityMagnitude = _cachedGravity.
Magnitude;
291 _cachedGravityNormal = _cachedGravity / _cachedGravityMagnitude;
299 private void AddCollisionHandler()
302 if ( physicsGame == null )
throw new InvalidOperationException(
"Cannot have a platform character in non-physics game" );
304 this.
Body.Colliding += delegate(
object sender, CollisionEventArgs args )
307 Vector normal =
new Vector( args.Contact.Points[0].Normal.X, args.Contact.Points[0].Normal.Y );
308 OnColliding(
this, other, normal );
324 if ( state == PlatformCharacterState.Idle ||
WalkOnAir )
337 if ( state == PlatformCharacterState.Idle ||
WalkOnAir )
360 _curDirection = direction;
362 if ( DirectionChanged != null )
374 if ( state == PlatformCharacterState.Idle )
378 private bool IsWeaponFacingRight()
388 public void Jump(
double speed )
390 if (
Platform == null || state == PlatformCharacterState.Jumping )
return;
401 this.
Hit(
Mass * speed * -gravityNormal );
404 state = PlatformCharacterState.Jumping;
414 state = PlatformCharacterState.Falling;
426 obj.
Hit(
Vector.FromLengthAndAngle( force, throwAngle ) );
435 if ( Math.Abs( dot ) < 0.5 )
444 collisionDetected =
true;
445 noCollisionCount = 0;
448 if ( state == PlatformCharacterState.Falling )
449 state = PlatformCharacterState.Idle;
457 [EditorBrowsable(EditorBrowsableState.Never)]
460 if (
Platform != null && !collisionDetected )
466 if ( state != PlatformCharacterState.Jumping )
468 state = PlatformCharacterState.Falling;
474 collisionDetected =
false;
489 if ( state == PlatformCharacterState.Idle )
495 if ( state == PlatformCharacterState.Idle )
516 if ( movement.
Y > 0 )
Jump( movement.
Y );
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
Color Color
Väri, jonka värisenä olio piirretään, jos tekstuuria ei ole määritelty.
static readonly Vector UnitX
Vaakasuuntainen yksikkövektori (pituus 1, suunta oikealle).
double Magnitude
Vektorin pituus.
Angle Angle
Kulma radiaaneina.
double X
Olion paikan X-koordinaatti.
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Action Timeout
Tapahtuu väliajoin.
virtual void Push(Vector force)
Työntää oliota.
Action Played
Tapahtuma, joka tapahtuu kun animaatio on suoritettu.
override Angle Angle
Olion kulma tai rintamasuunta. Nolla = osoittaa oikealle.
PhysicsObject(double width, double height)
Luo uuden fysiikkaolion.
static readonly Color Red
Punainen.
GameObject(double width, double height)
Alustaa uuden peliolion.
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
double LinearDamping
Olion hidastuminen. Hidastaa olion vauhtia, vaikka se ei osuisi mihinkään. Vähän kuin väliaineen (esi...
bool IgnoresCollisionResponse
Jättääkö olio törmäyksen huomioimatta. Jos tosi, törmäyksestä tulee tapahtuma, mutta itse törmäystä e...
static Direction Left
Suunta vasemmalle.
Vector Velocity
Olion nopeus.
static readonly Rectangle Rectangle
Suorakulmio.
bool IgnoresGravity
Jättääkö olio painovoiman huomioimatta.
bool CanRotate
Jos false, olio ei voi pyöriä.
void Remove(IGameObject childObject)
Poistaa lapsiolion. Jos haluat tuhota olion, kutsu mielummin olion Destroy-metodia.
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Vector Gravity
Painovoima. Voimavektori, joka vaikuttaa kaikkiin ei-staattisiin kappaleisiin.
static readonly Vector Zero
Nollavektori.
double Mass
Olion massa. Mitä suurempi massa, sitä suurempi voima tarvitaan olion liikuttamiseksi.
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
bool IsUpdated
Tarvitseeko olio päivittämistä. Kun perit oman luokkasi tästä luokasta, aseta tämä arvoon true...
void Add(IGameObject o)
Lisää olion peliin. Tavalliset oliot tulevat automaattisesti kerrokselle 0 ja ruutuoliot päällimmäise...
static readonly Angle StraightAngle
Oikokulma (180 astetta).
virtual void Hit(Vector impulse)
Kohdistaa kappaleeseen impulssin. Tällä kappaleen saa nopeasti liikkeeseen.
double Restitution
Olion kimmoisuus. Arvo välillä 0.0-1.0. Arvolla 1.0 olio säilyttää kaiken vauhtinsa törmäyksessä...
Peliluokka reaaliaikaisille peleille.
void Start()
Käynnistää animaation alusta.
Vector LeftNormal
Vasen normaali.
static readonly Angle Zero
Nollakulma.
static double DotProduct(Vector left, Vector right)
Pistetulo.
int FrameCount
Ruutujen määrä.
double Height
Kentän korkeus.
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Level Level
Aktiivinen kenttä.
Action AddedToGame
Tapahtuu, kun olio lisätään peliin.
Vector TextureWrapSize
Määrittää kuinka moneen kertaan kuva piirretään. Esimerkiksi (3.0, 2.0) piirtää kuvan 3 kertaa vaakas...
static readonly Color Blue
Sininen.
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Body Body
Fysiikkamoottorin käyttämä tietorakenne.
Kantaluokka fysiikkapeleille.
double Width
Kentän leveys.
static Angle Supplement(Angle a)
Laskee suplementtikulman (180 asteen kulman toinen puoli)
Sarja kuvia, jotka vaihtuvat halutulla nopeudella. Yksi animaatio koostuu yhdestä tai useammasta kuva...
override Vector Position
Olion paikka koordinaatistossa. Käsittää sekä X- että Y-koordinaatin.
void Add(IGameObject childObject)
Lisää annetun peliolion tämän olion lapseksi. Lapsiolio liikkuu tämän olion mukana, ja sen paikka ja koko ilmaistaan suhteessa tähän olioon.
double KineticFriction
Liikekitka. Liikettä vastustava voima joka ilmenee kun kaksi oliota liikkuu toisiaan vasten (esim...
void Start()
Käynnistää ajastimen.
static Direction Right
Suunta oikealle.
double Width
Olion leveys (X-suunnassa, leveimmässä kohdassa).
Peli, jossa on fysiikan laskenta mukana. Peliin lisätyt
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.
Vector AbsolutePosition
Olion absoluuttinen paikka pelimaailmassa. Jos olio ei ole minkään toisen peliolion lapsiolio...
virtual Vector Position
Olion paikka. Jos olio on jonkun toisen peliolion lapsi, paikka on suhteessa tämän vanhempaan (Parent...
object Tag
Vapaasti asetettava muuttuja.
double Height
Olion korkeus (Y-suunnassa, korkeimmassa kohdassa).