void Collide( CollisionEntityType toType, CollisionEntityType[] fromTypes ) { foreach(var a in typed_entries[(int)toType]) { var a_center = a.center(); var a_rad = a.radius(); for(int i=0; i<fromTypes.Length; i++) { foreach(var b in typed_entries[(int)fromTypes[i]]) { if( a.owner==b.owner ) { continue; } float r = a_rad + b.radius(); Vector2 offset = b.center() - a_center; float lensqr = offset.LengthSquared(); if (lensqr < r * r) { a.owner.CollideTo(b.owner, b.collider); b.owner.CollideFrom(a.owner, a.collider); } } } } }
public void Add(CollisionEntityType type, GameEntity owner, GetCenterDelegate center, GetRadiusDelegate radius) { CollisionEntry entry = new CollisionEntry () { type = type, owner = owner, center = center, radius = radius }; List<CollisionEntry> entries = typed_entries [(int)type]; entries.Add (entry); }
public void Add(CollisionEntityType type, GameEntity owner, Node collider, GetCenterDelegate center, GetRadiusDelegate radius) { CollisionEntry entry = new CollisionEntry() { type = type, owner = owner, collider = collider, center = center, radius = radius }; Add (entry); }