void ISimulatedBody.CheckCollision(ISimulatedBody other) { var otherBody = (SimulatedBodyPrediction)other; if (Intersects(position, colliderRadius, otherBody.position, otherBody.colliderRadius)) { CollideWith(otherBody); } }
private void ApplyGravityForces(ISimulatedBody bodyA, ISimulatedBody bodyB) { var forceDirection = bodyB.Position - bodyA.Position; var distance2 = Vector3.SqrMagnitude(forceDirection); if (!Mathf.Approximately(distance2, 0.0f)) { forceDirection /= Mathf.Sqrt(distance2); // normalize forceDirection var F = G * (bodyA.Mass * bodyB.Mass) / distance2; bodyA.AddForce(F * forceDirection); bodyB.AddForce(-F * forceDirection); } }
public void Remove(ISimulatedBody body) { allBodies.Remove(body); }
public void Add(ISimulatedBody body) { allBodies.Add(body); }