public CollisionResult Collide(float s, PhysicsGroupType groupType, PhysicsObject physicsObject, CollisionIdentity identity) { CollisionResult response = CollisionResult.None; if (groupType == PhysicsGroupType.Physical) { response = Weapon.Collide(s, groupType, physicsObject, identity); CollisionResult playerCollision = physicsObject.Collide(s, collision); if (playerCollision) { if (collisionResult) { //Not sure if necessary, but if we have multiple collisions in a single frame, stop all movement. collisionResult.PositionA = collision.Position; collisionResult.VelocityA = Vector2.Zero; } else { collisionResult = playerCollision.Switch(); } response = playerCollision; TakeDamage(identity); } } return(response); }
public CollisionResult Collide(float s, PhysicsGroupType groupType, PhysicsObject physicsObject, CollisionIdentity identity) { CollisionResult response = CollisionResult.None; if (groupType == PhysicsGroupType.Physical) { for (int i = bullets.Count - 1; i >= 0; i--) { Circle bullet = bullets[i]; CollisionResult bulletCollision = physicsObject.Collide(s, bullet); if (bulletCollision) { bullets.RemoveAt(i); //bullet.Position = bulletCollision.PositionB; //bullet.Velocity = bulletCollision.VelocityB; bulletCollision.Identity = bulletIdentity; response = bulletCollision; } } CollisionResult result = physicsObject.Collide(s, collision); if (result) { if (collisionResult) { collisionResult.PositionA = collision.Position; collisionResult.VelocityA = Vector2.Zero; } else { collisionResult = result.Switch(); } takeDamage(identity); response = result; } } return(response); }