/// <summary> /// Updates the Physics of the entity. /// </summary> /// <param name="gameTime"></param> public override void Update(GameTime gameTime) { //ITEM: c) Implementou corretamente o cálculo de deslocamento da bala, levando em conta a inércia e fazendo uso de vetores; Vector2 forces = Vector2.Zero; Vector2 instantForces = Vector2.Zero; float secs = (float)gameTime.ElapsedGameTime.TotalSeconds; #region Calculate Forces //Constant forces foreach (Vector2 force in ConstantForces.Values) { forces += force; } //Forces applied once while (Forces.Count > 0) { instantForces += (Forces.Pop() / Mass); //Since it will be applied only once, must do a BIG BOOM. } #endregion Calculate Forces Vector2 acceleration = (forces / Mass) + Gravity; Vector2 accelSecs = acceleration * secs; Entity.Position += GlobalForces.MetersToPixels((Momentum + accelSecs / 2) * secs); Momentum += (accelSecs + instantForces); Momentum *= (Vector2.One - Friction); if (Rotate) { Entity.Rotation = Momentum.GetAngle(); } }