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); } } }
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); } }
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)); }