Exemplo n.º 1
0
    public bool IsOpposite(NeckDirection.Dir a, NeckDirection.Dir b)
    {
        if (a == b)
        {
            return(false);
        }



        if (a == NeckDirection.Dir.down && b == NeckDirection.Dir.up)
        {
            return(true);
        }
        if (a == NeckDirection.Dir.left && b == NeckDirection.Dir.right)
        {
            return(true);
        }

        var tmp = b;

        b = a;
        a = tmp;

        if (a == NeckDirection.Dir.down && b == NeckDirection.Dir.up)
        {
            return(true);
        }
        if (a == NeckDirection.Dir.left && b == NeckDirection.Dir.right)
        {
            return(true);
        }

        return(false);
    }
Exemplo n.º 2
0
    public Vector2 Dir2V(NeckDirection.Dir dir)
    {
        switch (dir)
        {
        case NeckDirection.Dir.up: return(Vector2.up);

        case NeckDirection.Dir.down: return(Vector2.down);

        case NeckDirection.Dir.left: return(Vector2.left);

        case NeckDirection.Dir.right: return(Vector2.right);

        default: return(Vector2.zero);
        }
    }
Exemplo n.º 3
0
    void DoNeckMovement()
    {
        Vector2 input     = new Vector2(Input.GetAxis("Neck Horizontal"), Input.GetAxis("Neck Vertical"));
        var     direction = V2Dir(input);

        audioSource.volume = (direction.distance < 2) ? 0 : 0.5f;

        if (direction.distance == 0)
        {
            return;
        }



        if (neckMovement.Count == 0)
        {
            neckMovement.Add(direction);
        }

        // Snap the neck back when is in the error margin
        if (neckMovement.Last().distance < 2 && neckMovement.Last().direction != direction.direction)
        {
            neckMovement.Remove(neckMovement.Last());
        }

        if (neckMovement.Count == 0)
        {
            return;
        }
        if (neckMovement.Last().distance < 40 && neckMovement.Count > 1)
        {
            if (IsOpposite(neckMovement[neckMovement.Count - 2].direction, direction.direction))
            {
                neckMovement.Remove(neckMovement.Last());
            }
        }
        if (neckMovement.Last().distance < 10 && neckMovement.Count > 1)
        {
            if (neckMovement[neckMovement.Count - 2].direction == direction.direction)
            {
                neckMovement.Remove(neckMovement.Last());
            }
        }

        if (neckMovement.Last().direction == NeckDirection.Dir.right || neckMovement.Count == 1)
        {
            destHeadRotation = Quaternion.Euler(-90, 0, -90);
            lastDir          = NeckDirection.Dir.right;
        }
        else if (neckMovement.Last().direction == NeckDirection.Dir.left)
        {
            destHeadRotation = Quaternion.Euler(-90, 180, -90);
            lastDir          = NeckDirection.Dir.left;
        }

        currentLength = CalculateNeckLength(neckMovement);
        if (neckMovement.Last().direction == direction.direction && currentLength < maxLength && CanMove(neckMovement, direction, Time.fixedDeltaTime))
        {
            neckMovement.Last().distance += direction.distance;
        }
        else if (IsOpposite(neckMovement.Last().direction, direction.direction) && CanMove(neckMovement, direction, Time.fixedDeltaTime))
        {
            neckMovement.Last().distance -= direction.distance;
        }
        else if (currentLength < maxLength && CanMove(neckMovement, direction, Time.fixedDeltaTime))
        {
            neckMovement.Add(direction);
        }
    }