Esempio n. 1
0
 /// <summary>
 /// Resetting all additional layers' weights to zero (lerp but reaching value)
 /// </summary>
 public static void ResetLayersWeights(Animator animator, float speed = 10f)
 {
     for (int i = 1; i < animator.layerCount; i++)
     {
         animator.SetLayerWeight(i, FLogicMethods.FLerp(animator.GetLayerWeight(i), 0f, Time.deltaTime * speed));
     }
 }
Esempio n. 2
0
    /// <summary>
    /// Transitioning value of animator layer's weight to target with smooth effect
    /// </summary>
    public static void LerpLayerWeight(Animator animator, int layer = 0, float newValue = 1f, float speed = 8f)
    {
        float newWeight = animator.GetLayerWeight(layer);

        newWeight = FLogicMethods.FLerp(newWeight, newValue, Time.deltaTime * speed);
        animator.SetLayerWeight(layer, newWeight);
    }
Esempio n. 3
0
        /// <summary>
        /// Changing float parameter value smoothly (when speed value about 10, 60 is instant)
        /// </summary>
        public void SetFloat(string parameter, float value = 0f, float deltaSpeed = 60f)
        {
            float newValue = Animator.GetFloat(parameter);

            newValue = FLogicMethods.FLerp(newValue, value, Time.deltaTime * deltaSpeed);
            Animator.SetFloat(parameter, newValue);
        }
Esempio n. 4
0
    /// <summary>
    /// Sets animator's float value with lerp
    /// </summary>
    public static void LerpFloatValue(Animator animator, string name = "RunWalk", float value = 0f, float deltaSpeed = 8f)
    {
        float newValue = animator.GetFloat(name);

        newValue = FLogicMethods.FLerp(newValue, value, Time.deltaTime * deltaSpeed);
        animator.SetFloat(name, newValue);
    }
Esempio n. 5
0
 protected override Quaternion CalculateTargetRotation(Vector3 startLookPos, Vector3 currentPos, FTail_Point previousTailPoint = null, FTail_Point currentTailPoint = null, int lookDirectionFixIndex = 0)
 {
     if (Lock2D)
     {
         return(FLogicMethods.TopDownAnglePosition2D(startLookPos, currentPos));
     }
     else
     {
         return(base.CalculateTargetRotation(startLookPos, currentPos, previousTailPoint, currentTailPoint, lookDirectionFixIndex));
     }
 }
Esempio n. 6
0
        /// <summary>
        /// Changing float parameter value smoothly (when speed value about 10, 60 is instant)
        /// </summary>
        public void SetFloatUnscaledDelta(string parameter, float value = 0f, float deltaSpeed = 60f)
        {
            float newValue = Animator.GetFloat(parameter);

            if (deltaSpeed >= 60f)
            {
                newValue = value;
            }
            else
            {
                newValue = FLogicMethods.FLerp(newValue, value, Time.unscaledDeltaTime * deltaSpeed);
            }
            Animator.SetFloat(parameter, newValue);
        }
Esempio n. 7
0
        internal virtual void RotationCalculations()
        {
            // Then we can rotate object to target look in y axis
            Quaternion targetRotation = helperRotation;

            targetRotation = Quaternion.Euler(Mathf.Clamp(FLogicMethods.WrapAngle(targetRotation.eulerAngles.x), -MaxForwardRotation, MaxForwardRotation) * (1 - MildForwardValue), targetRotation.eulerAngles.y, Mathf.Clamp(FLogicMethods.WrapAngle(targetRotation.eulerAngles.z), -MaxHorizontalRotation, MaxHorizontalRotation) * (1 - MildHorizontalValue));

            if (TotalSmoother == 0f)
            {
                TransformToRotate.rotation = targetRotation * Quaternion.AngleAxis(UpAxisRotation, Vector3.up);
            }
            else
            {
                Quaternion yRotation = Quaternion.AngleAxis(UpAxisRotation, Vector3.up);
                TransformToRotate.rotation *= Quaternion.Inverse(yRotation);
                TransformToRotate.rotation  = Quaternion.Slerp(TransformToRotate.rotation, targetRotation, deltaTime * Mathf.Lerp(50f, 1f, TotalSmoother));
                TransformToRotate.rotation *= yRotation;
            }

            LastRotation = TransformToRotate.rotation;
        }
 /// <summary>
 /// Wrapping angles vector to be always  between -180 to 180 degrees
 /// </summary>
 private Vector3 WrapVector(Vector3 v)
 {
     return(new Vector3(FLogicMethods.WrapAngle(v.x), FLogicMethods.WrapAngle(v.y), FLogicMethods.WrapAngle(v.z)));
 }
Esempio n. 9
0
        protected Quaternion CalculateFor2D(FTail_Point tailPoint)
        {
            Quaternion targetRotation;

            if (FullCorrection)
            {
                Vector3 startLookPos = tailPoint.BackPoint.Position;
                Vector3 lookingAt    = tailPoint.RotationTargetPos;

                targetRotation = Quaternion.identity;

                if (LookUpMethod != FELookUpMethod.Parental)
                {
                    startLookPos += tailPoint.BackPoint.TransformDirection(tailPoint.BackPoint.LookDirection) * tailPoint.InitBoneLength * tailPoint.ScaleFactor * sensitivityPower;
                    startLookPos -= (tailPoint.BackPoint.PreCollisionPosition - tailPoint.BackPoint.Position) * CollisionSwapping;

                    if (startLookPos - lookingAt != Vector3.zero)
                    {
                        targetRotation = FLogicMethods.TopDownAnglePosition2D(lookingAt, startLookPos);
                    }

                    targetRotation *= Quaternion.FromToRotation(tailPoint.BackPoint.LookDirection, ExtraToDirection);
                }
                else // Parental method
                {
                    startLookPos += tailPoint.BackPoint.TransformDirection(tailPoint.BackPoint.LookDirection) * tailPoint.InitBoneLength * tailPoint.ScaleFactor * sensitivityPower;

                    Vector3 targetPos = lookingAt - startLookPos;

                    Quaternion targetingRot = Quaternion.FromToRotation(tailPoint.BackPoint.TransformDirection(tailPoint.Transform.localPosition), targetPos);

                    targetRotation = targetingRot * tailPoint.BackPoint.Rotation;
                }

                if (Curving != Vector3.zero)
                {
                    float mul = 10 / ((float)tailPoint.index * 4.5f + 1f);
                    targetRotation *= Quaternion.Euler(Curving.y * mul, Curving.x * mul, 0f);
                }

                targetRotation *= tailPoint.Correction;
            }
            else
            {
                targetRotation = Quaternion.identity;
                Vector3 startLookPos = tailPoint.BackPoint.Position;
                Vector3 lookingAt    = tailPoint.RotationTargetPos;

                startLookPos += tailPoint.BackPoint.TransformDirection(tailPoint.BackPoint.LookDirection) * tailPoint.InitBoneLength * sensitivityPower;
                startLookPos -= (tailPoint.BackPoint.PreCollisionPosition - tailPoint.BackPoint.Position) * CollisionSwapping;

                if (startLookPos - lookingAt != Vector3.zero)
                {
                    targetRotation = FLogicMethods.TopDownAnglePosition2D(startLookPos, lookingAt);
                }
                //targetRotation = Quaternion.LookRotation(startLookPos - lookingAt, tailPoint.BackPoint.TransformDirection(AxisLookBack * Mathf.Sign(FVectorMethods.VectorSum(AxisCorrection))));

                if (Curving != Vector3.zero)
                {
                    float mul = 10f / ((float)tailPoint.index * 4.5f + 1f);
                    targetRotation *= Quaternion.Euler(Curving.y * mul, Curving.x * mul, 0f);
                }

                if (ExtraCorrectionOptions)
                {
                    targetRotation *= Quaternion.FromToRotation(ExtraFromDirection, ExtraToDirection);
                }
            }

            return(targetRotation);
        }