Exemplo n.º 1
0
    void OnTriggerStay(Collider other)
    {
        PlayerPhysics physics     = other.GetComponent <PlayerPhysics>();
        PlayerAudio   playerAudio = other.GetComponent <PlayerAudio>();

        if (physics && gravityEnabled && parentNode.sunState == SunNode.SunState.ENABLED)
        {
            float sunTypeMultiplier = 1f;
            float timeMultiplier    = 1f;
            if (parentNode.sunType == SunNode.SunType.YELLOW)
            {
                sunTypeMultiplier = 1f;
            }
            else if (parentNode.sunType == SunNode.SunType.BLUE)
            {
                sunTypeMultiplier = 10;
            }
            else if (parentNode.sunType == SunNode.SunType.RED)
            {
                sunTypeMultiplier = 0.6f;
                timeMultiplier    = 2f;
            }


            Vector3 distanceVector = transform.position - other.transform.position;
            distanceVector.y = 0;
            float distance = distanceVector.magnitude;
            if (distance < innerRadius)
            {
                distance = innerRadius;
            }
            distance -= innerRadius;

            float force = 1 / Mathf.Pow(distance, 2);
            if (parentNode.sunState == SunNode.SunState.ENABLED)
            {
                force *= 1 + (((Time.time - enterTime) / 4) * timeMultiplier);
                force *= 1 + (parentNode.nodeRadius / 3);
                force *= 0.05f;
                force *= sunTypeMultiplier;
                force  = Mathf.Clamp(force, 0, mass);
                physics.AddSpeed(force * Time.deltaTime);
            }

            if (IsNodeDepleted())
            {
                if (playerAudio != null)
                {
                    playerAudio.PlayActivateSfx(this.gameObject);
                }

                PlayerMetrics.instance.MarkPoint(10, this.gameObject);
            }
        }
    }
Exemplo n.º 2
0
    void OnTriggerStay(Collider other)
    {
        PlayerPhysics physics     = other.GetComponent <PlayerPhysics>();
        PlayerAudio   playerAudio = other.GetComponent <PlayerAudio>();

        if (physics && gravityEnabled)
        {
            Vector3 distanceVector = transform.position - other.transform.position;
            distanceVector.y = 0;
            float distance = distanceVector.magnitude;
            if (distance < innerRadius)
            {
                distance = innerRadius;
            }
            distance -= innerRadius;

            float force = 1 / Mathf.Pow(distance, 2);
            parentNode.remainingEnergy -= Time.deltaTime;
            if (parentNode.remainingEnergy > 0)
            {
                force = Mathf.Clamp(force, 0, mass);
                physics.AddSpeed(force * Time.deltaTime * 3);
            }

            if (IsNodeDepleted())
            {
                if (playerAudio != null)
                {
                    playerAudio.PlayActivateSfx(this.gameObject);
                }

                PlayerMetrics.instance.MarkPoint(10, this.gameObject);
            }
        }


        if (playerAudio != null)
        {
            playerAudio.PlaySpinSfx(this.gameObject);
        }
    }
Exemplo n.º 3
0
    IEnumerator SetNodeEnabled()
    {
        PlayerAudio   audio   = GameController.instance.activePlayer.GetComponent <PlayerAudio> ();
        PlayerMetrics metrics = GameController.instance.activePlayer.GetComponent <PlayerMetrics> ();

        metrics.completedPlanets++;
        metrics.boostLeft += 1.0f;

        sunState = SunState.ENABLED;
        audio.PlayActivateSfx(gameObject);

        Renderer renderer = GetComponent <Renderer> ();
        float    c        = renderer.material.color.r;
        float    e        = renderer.material.GetColor("_EmissionColor").r;

        ParticleSystem.EmissionModule emission = system.emission;
        emission.rateOverTime = 25 * nodeRadius;

        while (e < 2 || c < 1f)
        {
            c = Mathf.Lerp(c, 1.01f, Time.deltaTime * 5f);
            e = Mathf.Lerp(e, 2.02f, Time.deltaTime * 5f);

            renderer.material.color = new Color(c, c, c);
            renderer.material.SetColor("_EmissionColor", new Color(e, e, e));
            yield return(null);
        }

        c = 1f;
        e = 2f;
        renderer.material.color = new Color(c, c, c);
        renderer.material.SetColor("_EmissionColor", new Color(e, e, e));

        float timeoutTime = 0;

        if (sunType == SunType.YELLOW)
        {
            timeoutTime = 1f * Mathf.Pow(nodeRadius, 0.72f);
        }
        else if (sunType == SunType.BLUE)
        {
            timeoutTime = 0.3f * Mathf.Pow(nodeRadius, 0.72f);
        }
        else if (sunType == SunType.RED)
        {
            timeoutTime = 3f * Mathf.Pow(nodeRadius, 0.72f);
        }

        yield return(new WaitForSeconds(timeoutTime));

        sunState = SunState.DORMANT;

        emission = system.emission;
        emission.rateOverTime = 5 * nodeRadius;

        while (e > 1 || c > 0.9f)
        {
            c = Mathf.Lerp(c, 0.89f, Time.deltaTime * 4f);
            e = Mathf.Lerp(e, 0.89f, Time.deltaTime * 4f);

            renderer.material.color = new Color(c, c, c);
            renderer.material.SetColor("_EmissionColor", new Color(e, e, e));
            yield return(null);
        }

        c = 0.9f;
        e = 1f;
        renderer.material.color = new Color(c, c, c);
        renderer.material.SetColor("_EmissionColor", new Color(e, e, e));
    }