public override void Update() { base.Update(); // Static bodies need not update any of their physics, as they are immune to all forces if (!flagBodyType.HasFlag(PhysicsEngine.BodyType.STATIC)) { velocity_last = velocity; position_last = transform.parent.Position; // If a body has been established to operate according to world forces if (flagBodyType.HasFlag(PhysicsEngine.BodyType.WORLDFORCE)) { force += PhysicsEngine.PhysicsSettings.WORLD_FORCE; } // Simple bodies do not have no rotational motion if (!flagBodyType.HasFlag(PhysicsEngine.BodyType.SIMPLE)) { // TODO Implement Rotational Motion } // Use of mass_i saves having to do the more expensive / operator, in favour of doing it once whenever mass is set/changed acceleration = force * mass_i; // TODO Implement Verlet Integration technique for motion (mabs) velocity = velocity + 0.5f * acceleration * Time.DeltaTime * Time.DeltaTime; transform.parent.Position += velocity; force = Vector3.Zero; PhysicsEngine.AddPhysicsBody(this); } List <PhysicsBody2D> collisionTests = PhysicsEngine.GetCollisionPass(this); List <PhysicsBody2D> checkedAlready = new List <PhysicsBody2D>(); foreach (PhysicsBody2D collider in collisionTests) { if (!checkedAlready.Contains(collider) && collider != this) { Collision2D possibleCollision = Collision2D.Evaluate(this, collider); if (possibleCollision != null && !collisions.Contains(possibleCollision)) { collisions.Add(possibleCollision); collider.collisions.Add(possibleCollision); } checkedAlready.Add(collider); } } foreach (Collision2D collision in collisions) { if (collision.BodyA == this) { collision.Resolve(); } } foreach (Collision2D collision in collisions_dead) { collisions.Remove(collision); } collisions_dead = new List <Collision2D>(); }