2using System.Collections.Generic;
32 protected Dictionary<CollisionRecord, CollisionHandler<IPhysicsObject, IPhysicsObject>>
collisionHandlers =
33 new Dictionary<CollisionRecord, CollisionHandler<IPhysicsObject, IPhysicsObject>>();
35 new Dictionary<CollisionRecord, CollisionHandler<IPhysicsObject, IPhysicsObject>>();
62 if (
Game.
Instance ==
null )
throw new InvalidOperationException(
"Game class is not initialized" );
122 base.OnObjectAdded( obj );
137 base.OnObjectRemoved( obj );
145 foreach ( var layer
in Layers )
147 foreach ( var obj
in layer.Objects )
212 #region Collision handlers
225 if ( obj ==
null )
throw new NullReferenceException(
"Colliding object must not be null" );
226 if ( handler ==
null )
throw new NullReferenceException(
"Handler must not be null" );
228 CollisionHandler<IPhysicsObject, IPhysicsObject> targetHandler =
232 handler( (
O)collider, (
T)collidee );
235 obj.Collided += targetHandler;
247 [EditorBrowsable( EditorBrowsableState.Never )]
252 if ( obj ==
null )
throw new NullReferenceException(
"Colliding object must not be null" );
253 if ( handler ==
null )
throw new NullReferenceException(
"Handler must not be null" );
255 CollisionHandler<IPhysicsObject, IPhysicsObject> targetHandler =
259 handler( (
O)collider, (
T)collidee );
262 obj.Collided += targetHandler;
274 AddCollisionHandler<IPhysicsObject, IPhysicsObject>( obj, handler );
284 AddCollisionHandler<PhysicsObject, PhysicsObject>( obj, handler );
294 AddCollisionHandler<PhysicsObject, PhysicsStructure>( obj, handler );
304 AddCollisionHandler<PhysicsStructure, PhysicsObject>( obj, handler );
314 AddCollisionHandler<PhysicsStructure, PhysicsStructure>( obj, handler );
328 if ( obj ==
null )
throw new NullReferenceException(
"Colliding object must not be null" );
329 if ( target ==
null )
throw new NullReferenceException(
"Collision target must not be null" );
330 if ( handler ==
null )
throw new NullReferenceException(
"Handler must not be null" );
332 CollisionHandler<IPhysicsObject, IPhysicsObject> targetHandler =
335 if (
object.ReferenceEquals( collidee, target ) )
336 handler( (
O)collider, (
T)collidee );
339 obj.Collided += targetHandler;
354 if ( obj ==
null )
throw new NullReferenceException(
"Colliding object must not be null" );
355 if ( tag ==
null )
throw new NullReferenceException(
"Tag must not be null" );
356 if ( handler ==
null )
throw new NullReferenceException(
"Handler must not be null" );
358 CollisionHandler<IPhysicsObject, IPhysicsObject> targetHandler =
362 handler( (
O)collider, (
T)collidee );
365 obj.Collided += targetHandler;
381 AddCollisionHandlerByRef( obj, (
T)target, handler );
383 AddCollisionHandlerByTag( obj, target, handler );
395 AddCollisionHandler<IPhysicsObject, IPhysicsObject>( obj, tag, handler );
407 AddCollisionHandler<PhysicsObject, PhysicsObject>( obj, tag, handler );
419 Predicate<CollisionRecord> pred = rec =>
420 ( obj ==
null ||
object.ReferenceEquals( obj, rec.obj ) ) &&
421 ( target ==
null || target == rec.target ) &&
423 ( handler ==
null ||
object.ReferenceEquals( handler, rec.handler ) );
425 List<CollisionRecord>
remove =
new List<CollisionRecord>();
429 if (pred(key))
remove.Add(key);
432 foreach (var key
in remove)
447 [EditorBrowsable( EditorBrowsableState.Never )]
450 Predicate<CollisionRecord> pred = rec =>
451 ( obj ==
null ||
object.ReferenceEquals( obj, rec.obj ) ) &&
452 ( target ==
null || target == rec.target ) &&
453 ( tag ==
null || tag.Equals( rec.targetTag ) ) &&
454 ( handler ==
null ||
object.ReferenceEquals( handler, rec.handler ) );
456 List<CollisionRecord>
remove =
new List<CollisionRecord>();
460 if ( pred( key ) )
remove.Add( key );
463 foreach ( var key
in remove )
bool FarseerGame
Onko käytössä Farseer-fysiikkamoottori HUOM: Tämä saattaa poistua tulevaisuudessa jos/kun siitä tehdä...
SynchronousList< Layer > Layers
Kerrokset, joilla pelioliot viihtyvät.
static Game Instance
Käynnissä olevan pelin pääolio.
bool IsAddedToGame
Onko olio lisätty peliin.
Action AddedToGame
Tapahtuu, kun olio lisätään peliin.
Kantaluokka fysiikkapeleille.
override void ClearAll()
Tuhoaa kaikki pelioliot, ajastimet, törmäyksenkuuntelijat ja näppäinkuuntelijat, sekä resetoi kameran...
void AddCollisionHandlerByTag< O, T >(O obj, object tag, CollisionHandler< O, T > handler)
Määrää, mihin aliohjelmaan siirrytään kun olio
Vector Gravity
Painovoima. Voimavektori, joka vaikuttaa kaikkiin ei-staattisiin kappaleisiin.
void OnJointAdded(IAxleJoint j)
void AddCollisionHandlerByRef< O, T >(O obj, T target, CollisionHandler< O, T > handler)
Määrää, mihin aliohjelmaan siirrytään kun olio
override void Update(Time time)
Ajetaan kun pelin tilannetta päivitetään. Päivittämisen voi toteuttaa perityssä luokassa toteuttamall...
void RemoveCollisionHandlers(PhysicsObject obj=null, PhysicsObject target=null, object tag=null, Delegate handler=null)
Poistaa kaikki ehdot täyttävät törmäyksenkäsittelijät.
override void OnObjectRemoved(IGameObject obj)
Kun olio poistetaan pelistä
static new PhysicsGameBase Instance
Käynnissä olevan fysiikkapelin pääolio.
void AddCollisionHandler(PhysicsObject obj, CollisionHandler< PhysicsObject, PhysicsStructure > handler)
Määrää, mihin aliohjelmaan siirrytään kun fysiikkaolio
Dictionary< CollisionRecord, CollisionHandler< IPhysicsObject, IPhysicsObject > > collisionHandlers
void AddCollisionHandler< O, T >(O obj, CollisionHandler< O, T > handler)
Määrää, mihin aliohjelmaan siirrytään kun olio
void AddCollisionHandler(IPhysicsObject obj, object tag, CollisionHandler< IPhysicsObject, IPhysicsObject > handler)
Määrää, mihin aliohjelmaan siirrytään kun yleinen fysiikkaolio
void AddProtectedCollisionHandler< O, T >(O obj, CollisionHandler< O, T > handler)
Määrää, mihin aliohjelmaan siirrytään kun olio
void AddCollisionHandler(PhysicsObject obj, object tag, CollisionHandler< PhysicsObject, PhysicsObject > handler)
Määrää, mihin aliohjelmaan siirrytään kun fysiikkaolio
void AddCollisionHandler(PhysicsStructure obj, CollisionHandler< PhysicsStructure, PhysicsObject > handler)
Määrää, mihin aliohjelmaan siirrytään kun fysiikkarakenne
void StopAll()
Pysäyttää kaiken liikkeen.
void AddCollisionHandler(IPhysicsObject obj, CollisionHandler< IPhysicsObject, IPhysicsObject > handler)
Määrää, mihin aliohjelmaan siirrytään kun yleinen fysiikkaolio
SynchronousList< IAxleJoint > Joints
Dictionary< CollisionRecord, CollisionHandler< IPhysicsObject, IPhysicsObject > > protectedCollisionHandlers
void OnJointRemoved(IAxleJoint j)
void Remove(IAxleJoint j)
Poistaa liitoksen pelistä.
void AddCollisionHandler(PhysicsObject obj, CollisionHandler< PhysicsObject, PhysicsObject > handler)
Määrää, mihin aliohjelmaan siirrytään kun fysiikkaolio
PhysicsGameBase(IPhysicsEngine engine)
Alustaa uuden fysiikkapelin.
bool PhysicsEnabled
Onko fysiikan laskenta käytössä vai ei.
override void OnObjectAdded(IGameObject obj)
Kun olio lisätään peliin
void Add(IAxleJoint j)
Lisää liitoksen peliin.
void AddCollisionHandler(PhysicsStructure obj, CollisionHandler< PhysicsStructure, PhysicsStructure > handler)
Määrää, mihin aliohjelmaan siirrytään kun fysiikkarakenne
void ClearPhysics()
Nollaa fysiikkamoottorin.
void RemoveProtectedCollisionHandlers(PhysicsObject obj=null, PhysicsObject target=null, object tag=null, Delegate handler=null)
Poistaa kaikki ehdot täyttävät törmäyksenkäsittelijät. Jypelin sisäiseen käyttöön!
Kappale joka noudattaa fysiikan lakeja, johon voi törmätä. Vaatii että käytössä on fysiikkapeli.
IPhysicsBody Body
Fysiikkamoottorin käsittelemä fysiikkakappale.
Rakenne, joka pitää fysiikkaoliot kiinteän matkan päässä toisistaan.
Sisältää avustusmetodeja merkkijonojen käsittelyyn.
static bool StringEquals(object o1, object o2)
Vertaa kahta oliota, jotka ovat joko merkkijonoja tai StringBuildereita, merkki kerrallaan.
Synkroninen lista, eli lista joka päivittyy vasta kun sen Update-metodia kutsutaan....
void SetEngine(Jypeli.Physics.IPhysicsEngine engine)
Asettaa liitokselle fysiikkamoottorin
PhysicsObject Object2
Toinen olio (null jos ensimmäinen olio on sidottu pisteeseen)
void AddToEngine()
Lisää liitoksen fysiikkamoottorille
PhysicsObject Object1
Ensimmäinen olio.
Yhteinen rajapinta kaikille peliolioille.
Yhteinen rajapinta kaikille fysiikkaolioille.
Rajapinta fysiikkamoottorille.
void RemoveJoint(IAxleJoint joint)
void RemoveBody(IPhysicsBody body)
void AddJoint(IAxleJoint joint)
void AddBody(IPhysicsBody body)
object Tag
Olion tagi, voi olla mitä tahansa
delegate void CollisionHandler< O, T >(O collidingObject, T otherObject)
Törmäystapahtumiin liitettävän metodin tyyppi. Törmäyksen käsittelevällä metodilla ei ole pa...
CollisionRecord(IPhysicsObject obj, IPhysicsObject target, object targetTag, Delegate handler)
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
static readonly Vector Zero
Nollavektori.