public void Collide(float s, PhysicsGroupType groupType, ICollide other) { if (groupType == PhysicsGroupType.Physical) { for (int i = bullets.Count - 1; i >= 0; i--) { Circle bullet = bullets[i]; CollisionResult bulletCollision = other.Collide(s, groupType, bullet, bulletIdentity); if (bulletCollision) { bullets.RemoveAt(i); //bullet.Position = bulletCollision.PositionB; //bullet.Velocity = bulletCollision.VelocityB; } } CollisionResult result = other.Collide(s, groupType, collision, null); if (result) { if (collisionResult) { collisionResult.PositionA = collision.Position; collisionResult.VelocityA = Vector2.Zero; } else { collisionResult = result; } takeDamage(result.Identity); } } }
private void CollideBulletsSimple(float s, ICollide other, PhysicsGroupType groupType, List <Circle> list, CollisionIdentity identity, List <Circle> removalList) { for (int i = list.Count - 1; i >= 0; i--) { Circle c = list[i]; CollisionResult collisionResult = other.Collide(s, groupType, c, identity); if (collisionResult) { removalList.Add(c); } } }
public void Collide(float s, PhysicsGroupType groupType, ICollide other) { if (groupType == PhysicsGroupType.Physical) { Weapon.Collide(s, groupType, other); CollisionResult playerCollision = other.Collide(s, groupType, this.collision, null); 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; } TakeDamage(playerCollision.Identity); } } }