예제 #1
0
    // Use this for initialization
    void Start()
    {
        illusionMaterial.SetFloat("_Radius", 0.0f);
        illusionMaterial.SetFloat("_Feather", 0.0f);
        illusionMaterial.SetFloat("_AlphaMod", 1.0f);
        illusionMaterial.SetFloat("_Fade", 1.0f);

        illusionMaterial.SetTexture("_NoiseTex", noiseTexture);

        state = IllusionRevealerState.Faded;

        prevAngle    = primaryCamera.transform.forward;
        prevPosition = primaryCamera.transform.position;
    }
예제 #2
0
    // Use this for initialization
    void Start()
    {
        illusionMaterial.SetFloat("_Radius", 0.0f);
        illusionMaterial.SetFloat("_Feather", 0.0f);
        illusionMaterial.SetFloat("_AlphaMod", 1.0f);
        illusionMaterial.SetFloat("_Fade", 1.0f);

        illusionMaterial.SetTexture("_NoiseTex", noiseTexture);

        state = IllusionRevealerState.Faded;

        prevAngle = primaryCamera.transform.forward;
        prevPosition = primaryCamera.transform.position;
    }
예제 #3
0
    // Update is called once per frame
    void Update()
    {
        angleChangeRate = Vector3.Angle(primaryCamera.transform.forward, prevAngle) / Time.deltaTime;
        characterSpeed  = Vector3.Distance(primaryCamera.transform.position, prevPosition);

        switch (state)
        {
        case IllusionRevealerState.Faded:
            currentRadius = 0;
            currentFade   = 1;
            if (Input.GetMouseButtonDown(1))
            {
                timerStart = Time.time;
                state      = IllusionRevealerState.RevealDelay;
            }
            break;

        case IllusionRevealerState.RevealDelay:
            if (!Input.GetMouseButton(1))
            {
                state = IllusionRevealerState.Fading;
            }
            if (Time.time - timerStart >= delayTime)
            {
                state = IllusionRevealerState.Revealing;
            }
            break;

        case IllusionRevealerState.Revealing:
            if (Input.GetMouseButtonUp(1))
            {
                state = IllusionRevealerState.Fading;
            }
            else
            {
                currentRadius += (revealRadius / fadeInTime) * Time.deltaTime;
                currentFade   += (1 / fadeInTime) * Time.deltaTime;

                if (angleChangeRate > angleChangeDeadZone)
                {
                    state = IllusionRevealerState.Fading;
                }
                else
                {
                    currentFade -= (angleChangeRate / angleChangeFadeRate) * Time.deltaTime * 2;
                }

                if (characterSpeed > moveSpeedFadeTrigger * Time.deltaTime)
                {
                    state = IllusionRevealerState.Fading;
                }
                else
                {
                    currentFade -= (characterSpeed / (moveSpeedFadeTrigger * Time.deltaTime)) * Time.deltaTime * 1.25f;
                }

                currentRadius = Mathf.Clamp(currentRadius, 0, revealRadius);
                currentFade   = Mathf.Clamp(currentFade, -1, 1);

                if (currentFade == -1)
                {
                    state = IllusionRevealerState.Faded;
                }
            }
            break;

        case IllusionRevealerState.Fading:
            currentFade -= (1 / fadeOutTime) * Time.deltaTime;
            currentFade  = Mathf.Clamp(currentFade, -1, 1);
            if (currentFade == -1)
            {
                currentRadius = 0;
                state         = IllusionRevealerState.Faded;
            }
            break;
        }

        illusionMaterial.SetFloat("_Radius", currentRadius);
        illusionMaterial.SetFloat("_Feather", currentRadius * (featherRadius / revealRadius));
        illusionMaterial.SetFloat("_Fade", currentFade);

        prevAngle    = primaryCamera.transform.forward;
        prevPosition = primaryCamera.transform.position;
    }
예제 #4
0
    // Update is called once per frame
    void Update()
    {
        angleChangeRate = Vector3.Angle(primaryCamera.transform.forward, prevAngle) / Time.deltaTime;
        characterSpeed = Vector3.Distance(primaryCamera.transform.position, prevPosition);

        switch (state) {
            case IllusionRevealerState.Faded:
                currentRadius = 0;
                currentFade = 1;
                if (Input.GetMouseButtonDown(1)) {
                    timerStart = Time.time;
                    state = IllusionRevealerState.RevealDelay;
                }
                break;

            case IllusionRevealerState.RevealDelay:
                if (!Input.GetMouseButton(1)) {
                    state = IllusionRevealerState.Fading;
                }
                if (Time.time - timerStart >= delayTime) {
                    state = IllusionRevealerState.Revealing;
                }
                break;

            case IllusionRevealerState.Revealing:
                if (Input.GetMouseButtonUp(1)) {
                    state = IllusionRevealerState.Fading;
                }
                else {
                    currentRadius += (revealRadius / fadeInTime) * Time.deltaTime;
                    currentFade += (1 / fadeInTime) * Time.deltaTime;

                    if (angleChangeRate > angleChangeDeadZone) {
                        state = IllusionRevealerState.Fading;
                    }
                    else {
                        currentFade -= (angleChangeRate / angleChangeFadeRate) * Time.deltaTime * 2;
                    }

                    if (characterSpeed > moveSpeedFadeTrigger * Time.deltaTime) {
                        state = IllusionRevealerState.Fading;
                    }
                    else {
                        currentFade -= (characterSpeed / (moveSpeedFadeTrigger * Time.deltaTime)) * Time.deltaTime * 1.25f;
                    }

                    currentRadius = Mathf.Clamp(currentRadius, 0, revealRadius);
                    currentFade = Mathf.Clamp(currentFade, -1, 1);

                    if (currentFade == -1) {
                        state = IllusionRevealerState.Faded;
                    }
                }
                break;

            case IllusionRevealerState.Fading:
                currentFade -= (1 / fadeOutTime) * Time.deltaTime;
                currentFade = Mathf.Clamp(currentFade, -1, 1);
                if (currentFade == -1) {
                    currentRadius = 0;
                    state = IllusionRevealerState.Faded;
                }
                break;
        }

        illusionMaterial.SetFloat("_Radius", currentRadius);
        illusionMaterial.SetFloat("_Feather", currentRadius * (featherRadius / revealRadius));
        illusionMaterial.SetFloat("_Fade", currentFade);

        prevAngle = primaryCamera.transform.forward;
        prevPosition = primaryCamera.transform.position;
    }