Ejemplo n.º 1
0
 private void Rotate(RotationParameter param, float deltaTime)
 {
     if (Math.Abs(param.AngularVelocity) >= VelThrehold)
     {
         var upperBound = AmplitudeLimit(param.AngularVelocity, param);
         var lowerBound = -upperBound;
         param.Shift = Mathf.Clamp(param.Shift + param.GetAverageVel() * deltaTime, lowerBound, upperBound);
     }
     else
     {
         if (param.Shift != 0)
         {
             // Restore
             var restoreVel = param.Shift > 0 ? -param.RestoreVel : param.RestoreVel;
             var newShift   = param.Shift + restoreVel * deltaTime;
             if (newShift * param.Shift < 0)
             {
                 param.Shift = 0;
             }
             else
             {
                 param.Shift = newShift;
             }
         }
     }
 }
Ejemplo n.º 2
0
            /// <summary>
            /// 返回幅度的最大值
            /// </summary>
            /// <param name="vel"></param>
            /// <param name="param"></param>
            /// <returns></returns>
            private float AmplitudeLimit(float vel, RotationParameter param)
            {
                float baseAmplitude = Mathf.Abs(vel / 10);

                return(Mathf.Min(baseAmplitude, param.UpperLimit));
            }
Ejemplo n.º 3
0
 public async UniTask Rotation(RotationParameter rotationParameter) => await movementHub.RotateAsync(rotationParameter);
Ejemplo n.º 4
0
 public Task RotateAsync(RotationParameter rotationParams)
 {
     BroadcastExceptSelf(room).Rotate(rotationParams);
     return(Task.CompletedTask);
 }
Ejemplo n.º 5
0
        void IMovementReceiver.Rotate(RotationParameter rotationParams)
        {
            var index = rotationParams.Index;

            Parameters[index].Rotation = rotationParams.Rotation;
        }