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