summaryrefslogtreecommitdiff
path: root/GameCode/DamageOverTime.cs
blob: c1c6a17710eb4967dd9a1da105f31beeeaa66ad8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System.Collections;
using Sonigon;
using UnityEngine;

public class DamageOverTime : MonoBehaviour
{
	private HealthHandler health;

	private CharacterData data;

	private void Start()
	{
		health = GetComponent<HealthHandler>();
		data = GetComponent<CharacterData>();
	}

	public void TakeDamageOverTime(Vector2 damage, Vector2 position, float time, float interval, Color color, SoundEvent soundDamageOverTime, GameObject damagingWeapon = null, Player damagingPlayer = null, bool lethal = true)
	{
		StartCoroutine(DoDamageOverTime(damage, position, time, interval, color, soundDamageOverTime, damagingWeapon, damagingPlayer, lethal));
	}

	private IEnumerator DoDamageOverTime(Vector2 damage, Vector2 position, float time, float interval, Color color, SoundEvent soundDamageOverTime, GameObject damagingWeapon = null, Player damagingPlayer = null, bool lethal = true)
	{
		float damageDealt = 0f;
		float damageToDeal = damage.magnitude;
		float dpt = damageToDeal / time * interval;
		while (damageDealt < damageToDeal)
		{
			if (soundDamageOverTime != null && data.isPlaying && !data.dead)
			{
				SoundManager.Instance.Play(soundDamageOverTime, base.transform);
			}
			damageDealt += dpt;
			health.DoDamage(damage.normalized * dpt, position, color, damagingWeapon, damagingPlayer, healthRemoval: true, lethal);
			yield return new WaitForSeconds(interval / TimeHandler.timeScale);
		}
	}
}