Ejemplo n.º 1
0
    void Awake()
    {
        currentLookPoint  = player.position;
        circleStartRadius = circleRadius;

        if (!useTwoSmoothZones)
        {
            switch (smoothTypeInnerCircle)
            {
            case InnerSmoothingType.DontFollow:
                smoothTypeOuterCircle = OuterSmoothingType.Instant;
                break;

            case InnerSmoothingType.Exponential:
                smoothTypeOuterCircle = OuterSmoothingType.Exponential;
                break;

            case InnerSmoothingType.Spring:
                smoothTypeOuterCircle = OuterSmoothingType.Spring;
                break;

            case InnerSmoothingType.DampedSpring:
                smoothTypeOuterCircle = OuterSmoothingType.DampedSpring;
                break;

            case InnerSmoothingType.Instant:
                smoothTypeOuterCircle = OuterSmoothingType.Instant;
                break;
            }

            outerFollowSpeed = innerFollowSpeed;
            if (smoothTypeInnerCircle == InnerSmoothingType.DontFollow)
            {
                Debug.Log("CANT USE DONT FOLLOW WITH ONLY ONE SMOOTH ZONE");
            }
        }
    }
Ejemplo n.º 2
0
    private Vector3[] UpdateLookPoint(Vector3 playerPos, InnerSmoothingType it, OuterSmoothingType ot)
    {
        float lookPointToPlayerDist = Vector3.Distance(playerPos, currentLookPoint);
        float dt = Time.unscaledDeltaTime;

        Vector3[] outPut = new Vector3[2];

        switch (it)
        {
        case InnerSmoothingType.DontFollow:
            velocity = Vector3.zero;
            break;

        case InnerSmoothingType.Exponential:
            velocity = playerPos - currentLookPoint;
            break;

        case InnerSmoothingType.Spring:
            var n1 = velocity - (currentLookPoint - playerPos) * (innerFollowSpeed * dt * innerFollowSpeed);
            var n2 = 1 + dt;
            velocity = n1 / (n2 * n2);
            break;

        case InnerSmoothingType.DampedSpring:
            var n3 = velocity - (currentLookPoint - playerPos) * (innerFollowSpeed * innerFollowSpeed * dt * innerFollowSpeed);
            var n4 = 1 + innerFollowSpeed * dt * innerFollowSpeed;
            velocity = n3 / (n4 * n4);
            break;
        }

        if (smoothTypeInnerCircle != InnerSmoothingType.Instant)
        {
            if (velocity.magnitude * dt < Vector3.Distance(playerPos, currentLookPoint))
            {
                outPut[0] = currentLookPoint + velocity * dt * innerFollowSpeed;
            }
            else
            {
                outPut[0] = playerPos;
            }
        }
        else
        {
            outPut[0] = playerPos;
        }

        switch (smoothTypeOuterCircle)
        {
        case OuterSmoothingType.Exponential:
            velocity = playerPos - currentLookPoint;
            break;

        case OuterSmoothingType.Spring:
            var n1 = velocity - (currentLookPoint - playerPos) * (innerFollowSpeed * dt * outerFollowSpeed);
            var n2 = 1 + dt;
            velocity = n1 / (n2 * n2);
            break;

        case OuterSmoothingType.DampedSpring:
            var n3 = velocity - (currentLookPoint - playerPos) * (innerFollowSpeed * innerFollowSpeed * dt * outerFollowSpeed);
            var n4 = 1 + innerFollowSpeed * dt * outerFollowSpeed;
            velocity = n3 / (n4 * n4);
            break;
        }
        if (smoothTypeOuterCircle != OuterSmoothingType.Instant)
        {
            outPut[1] = currentLookPoint + velocity * dt * outerFollowSpeed;
        }
        else
        {
            outPut[1] = Vector3.Lerp(playerPos, currentLookPoint, circleRadius / lookPointToPlayerDist);
        }

        return(outPut);
    }