public override void CheckCollisionBody(Body other) { //if (!active || !other.active) { return; } //if (exclusions.Contains(other)) return; if (invmass == 0 && other.invmass == 0) return; Manifold m = new Manifold(this, other); m.Solve(); if (m.contact_count > 0) { if (DoExclusionCheck(other)) return; if (HandlersEnabled) { //todo:add to handler list if (OnCollisionStay != null) { OnCollisionStay(parent, other.parent); } bool parentEnter = OnCollisionEnter != null; if (parentEnter || OnCollisionExit != null || OnCollisionFirstEnter != null || OnCollisionAllExit != null) { HashSet<Collider> lastframe = previousCollision; HashSet<Collider> thisframe = currentCollision; thisframe.Add(other); if (!lastframe.Contains(other) && parentEnter) { OnCollisionEnter(parent, other.parent); } } } if (other.HandlersEnabled) { if (other.OnCollisionStay != null) { other.OnCollisionStay(other.parent, parent); } bool otherEnter = other.OnCollisionEnter != null; if (otherEnter || other.OnCollisionExit != null || other.OnCollisionFirstEnter != null || other.OnCollisionAllExit != null) { //HashSet<Node> lastframe = other.collision.currentIsCol1 ? other.collision.collisions1 : other.collision.collisions2; //HashSet<Node> thisframe = !other.collision.currentIsCol1 ? other.collision.collisions1 : other.collision.collisions2; HashSet<Collider> lastframe = other.previousCollision; HashSet<Collider> thisframe = other.currentCollision; thisframe.Add(this); if (!lastframe.Contains(this) && otherEnter) { other.OnCollisionEnter(other.parent, parent); } } } if (DoExclusionCheckResolution(other)) return; if (isSolid && other.isSolid) room.collisionManager.AddManifold(m); } }
public virtual void CheckCollisionBody(Body other) { //if (!active || !other.active) { return; } //if (exclusions.Contains(other)) return; //Manifold m = new Manifold(this, other); //m.Solve(); bool iscolliding = Collision.CheckCollision(this, other); if (iscolliding) { if (DoExclusionCheck(other)) return; if (HandlersEnabled) { //todo:add to handler list InvokeOnCollisionStay(other.parent); bool parentEnter = OnCollisionEnter != null; if (parentEnter || OnCollisionExit != null || OnCollisionFirstEnter != null || OnCollisionAllExit != null) { HashSet<Collider> lastframe = previousCollision; HashSet<Collider> thisframe = currentCollision; thisframe.Add(other); if (!lastframe.Contains(other) && parentEnter) { OnCollisionEnter(parent, other.parent); } } } //other.InvokeOnCollisionStay(parent); // //bool otherEnter = other.OnCollisionEnter != null; //if (otherEnter || other.OnCollisionExit != null || other.OnCollisionFirstEnter != null || other.OnCollisionAllExit != null) //{ // //HashSet<Node> lastframe = other.collision.currentIsCol1 ? other.collision.collisions1 : other.collision.collisions2; // //HashSet<Node> thisframe = !other.collision.currentIsCol1 ? other.collision.collisions1 : other.collision.collisions2; // HashSet<Collider> lastframe = other.previousCollision; // HashSet<Collider> thisframe = other.currentCollision; // thisframe.Add(this); // if (!lastframe.Contains(this) && otherEnter) // { // other.OnCollisionEnter(other.parent, parent); // } //} } }
public double sf; // Mixed static friction #endregion Fields #region Constructors public Manifold(Body a, Body b) { this.a = a; this.b = b; }