/// <summary>
 /// Fixed update
 /// </summary>
 void FixedUpdate()
 {
     if (optimized)
     {
         _transform.Rotate(_speed, 0f, 0f, Space.Self);
     }
     else
     {
         TrainPhysics.ApplyBrakes(_rigidbody, _brake, 0f);
     }
 }
예제 #2
0
        /// <summary>
        /// Control speed base on max speed, acceleration and brakes
        /// </summary>
        /// <param name="rigidbody"></param>
        /// <param name="isGrounded"></param>
        /// <param name="maxSpeedKph"></param>
        /// <param name="speed_KPH"></param>
        /// <param name="acceleration"></param>
        /// <param name="brake"></param>
        /// <param name="targetVelocityIn"></param>
        /// <param name="targetVelocityOut"></param>
        /// <param name="currentSpeedIn"></param>
        /// <param name="currentSpeedOut"></param>
        /// <param name="targetSpeedIn"></param>
        /// <param name="targetSpeedOut"></param>
        public static void SpeedControl(Rigidbody rigidbody, bool isGrounded, float maxSpeedKph, float speed_KPH, float acceleration, float brake, Vector3 targetVelocityIn, out Vector3 targetVelocityOut, float currentSpeedIn, out float currentSpeedOut, float targetSpeedIn, out float targetSpeedOut)
        {
            currentSpeedOut = currentSpeedIn;
            targetSpeedOut = targetSpeedIn;
            targetVelocityOut = targetVelocityIn;

            if (isGrounded)
            {
                targetSpeedOut = TrainPhysics.GetTargetSpeed(acceleration, maxSpeedKph);
                targetSpeedOut = TrainPhysics.ApplyBrakes(rigidbody, brake, targetSpeedOut);
                currentSpeedOut = TrainPhysics.SoftAcceleration(currentSpeedOut, targetSpeedOut);

                //Apply velocity
                if (speed_KPH < maxSpeedKph)
                {
                    targetVelocityOut = currentSpeedOut == 0f ? Vector3.zero : rigidbody.velocity + (rigidbody.transform.forward * currentSpeedOut);
                    rigidbody.velocity = Vector3.MoveTowards(rigidbody.velocity, targetVelocityOut, Time.deltaTime * GeneralSettings.AccelerationRate);
                }
            }
        }