예제 #1
0
        /// <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();
            }
        }