コード例 #1
0
    void Update()
    {
        currentSpeed     = 0f;
        rawMovement      = Vector2.zero;
        currentDirection = Vector2.zero;

        if (resetOnPredicate.Any(pred => pred.Value))
        {
            Reactivate(false, true);
        }

        if (reactivateOnPredicate.Any(pred => pred.Value))
        {
            Reactivate(false, false);
        }

        if (deactivateOnPredicate.Any(pred => pred.Value))
        {
            this.Deactivate();
        }

        bool active = this.IsActive();

        if (abortOnPredicate.Any(pred => pred.Value) && active)
        {
            this.Abort();
        }

        if (!active)
        {
            return;
        }

        var   damp       = movementDampeners.Where(d => d.predicates.All(p => p.Value)).ToArray();
        float dampAmount = damp.Aggregate <FrostyMovementDampener, float>(1, (val, d) => val * d.dampAmount);

        dampAmount  = Mathf.SmoothDamp(currentDamp, dampAmount, ref currentDampSpeed, 0.15f);
        currentDamp = dampAmount;

        if (patterns == null)
        {
            return;
        }

        for (int i = 0; i < patterns.Length; i++)
        {
            FrostySingleMovementPattern pattern = patterns[i];
            float   speed;
            Vector2 dir = pattern.Evaluate(Toolbox.Instance.time.GetFixedDeltaTime(timeLayer), out speed);
            rawMovement += (dir.normalized * speed) * dampAmount;
        }

        currentDirection = rawMovement.normalized;
        currentSpeed     = rawMovement.magnitude;

        if (kinematics != null)
        {
            kinematics.ApplyMovement(currentDirection, currentSpeed);
        }
    }
コード例 #2
0
    public void SetDirection(Vector2 direction)
    {
        Vector2 sum = Vector2.zero;

        for (int i = 0; i < patterns.Length; i++)
        {
            FrostySingleMovementPattern pattern = patterns[i];
            pattern.direction = direction;
        }
    }
コード例 #3
0
    public void SetHorizontalAxisSign(int sign)
    {
        Vector2 sum = Vector2.zero;

        for (int i = 0; i < patterns.Length; i++)
        {
            FrostySingleMovementPattern pattern = patterns[i];
            pattern.direction = new Vector2(Mathf.Sign(sign) * Mathf.Sign(pattern.direction.x) * pattern.direction.x, pattern.direction.y);
        }
    }
コード例 #4
0
    public Vector2 GetDirection()
    {
        Vector2 sum = Vector2.zero;

        for (int i = 0; i < patterns.Length; i++)
        {
            FrostySingleMovementPattern pattern = patterns[i];
            sum += pattern.direction;
        }
        return(sum.normalized);
    }