diff options
Diffstat (limited to 'GameCode/DeathEffect.cs')
-rw-r--r-- | GameCode/DeathEffect.cs | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/GameCode/DeathEffect.cs b/GameCode/DeathEffect.cs new file mode 100644 index 0000000..5819e64 --- /dev/null +++ b/GameCode/DeathEffect.cs @@ -0,0 +1,101 @@ +using System.Collections; +using Sonigon; +using UnityEngine; + +public class DeathEffect : MonoBehaviour +{ + [Header("Sounds")] + public SoundEvent soundPhoenixActivate; + + public SoundEvent soundPhoenixChargeLoop; + + public SoundEvent soundPhoenixRespawn; + + private SoundParameterIntensity soundParameterChargeLoopIntensity = new SoundParameterIntensity(0f, UpdateMode.Continuous); + + [Header("Settings")] + public float forceMulti = 1f; + + public float minScale = 0.9f; + + public float maxScale = 1.1f; + + public float minDrag = 0.9f; + + public float maxDrag = 1.1f; + + public float minForce = 0.9f; + + public float maxForce = 1.1f; + + public float spread = 0.5f; + + private Rigidbody2D[] rigs; + + private Color baseColor; + + private ParticleSystem[] parts; + + public ParticleSystem partToColor; + + public ParticleSystem[] partsToColor; + + private float respawnTimeCurrent; + + private float respawnTime = 2.53f; + + private void Update() + { + } + + public void PlayDeath(Color color, PlayerVelocity playerRig, Vector2 vel, int playerIDToRevive = -1) + { + if (vel.magnitude < 30f) + { + vel = vel.normalized * 30f; + } + vel *= 1f; + parts = GetComponentsInChildren<ParticleSystem>(); + for (int i = 0; i < parts.Length; i++) + { + _ = parts[i].main; + if (parts[i].name.Contains("ROT")) + { + parts[i].transform.rotation = Quaternion.LookRotation(vel); + } + } + ParticleSystem.MainModule main = partToColor.main; + main.startColor = PlayerSkinBank.GetPlayerSkinColors(playerRig.GetComponent<Player>().playerID).color; + for (int j = 0; j < partsToColor.Length; j++) + { + ParticleSystem.MainModule main2 = partsToColor[j].main; + main2.startColor = PlayerSkinBank.GetPlayerSkinColors(playerRig.GetComponent<Player>().playerID).color; + } + if (playerIDToRevive != -1) + { + SoundManager.Instance.Play(soundPhoenixActivate, base.transform); + SoundManager.Instance.Play(soundPhoenixChargeLoop, base.transform, soundParameterChargeLoopIntensity); + StartCoroutine(RespawnPlayer(playerIDToRevive)); + } + } + + private IEnumerator RespawnPlayer(int playerIDToRevive = -1) + { + while (respawnTimeCurrent < respawnTime) + { + soundParameterChargeLoopIntensity.intensity = respawnTimeCurrent / respawnTime; + respawnTimeCurrent += 0.1f; + yield return new WaitForSeconds(0.1f); + } + SoundManager.Instance.Play(soundPhoenixRespawn, base.transform); + SoundManager.Instance.Stop(soundPhoenixChargeLoop, base.transform); + PlayerManager.instance.players[playerIDToRevive].data.healthHandler.Revive(isFullRevive: false); + PlayerManager.instance.players[playerIDToRevive].data.block.RPCA_DoBlock(firstBlock: true); + } + + private IEnumerator DoEffect(Rigidbody2D rig) + { + yield return new WaitForSeconds(Random.Range(0.05f, 0.15f)); + rig.GetComponent<SpriteRenderer>().color = baseColor; + } +} |