using UnityEngine; public class DamageEffect : MonoBehaviour, ISkillEffect { public void Execute(SkillInstance skill, Transform caster, float chargeRatio) { Vector3 center = caster.position + caster.forward * skill.CurrentLevelData.Range * 0.5f; ApplyDamage(skill, caster, center, chargeRatio); } public void ExecuteAtPosition(SkillInstance skill, Transform caster, Vector3 targetPos, float chargeRatio) { ApplyDamage(skill, caster, targetPos, chargeRatio); } private void ApplyDamage(SkillInstance skill, Transform caster, Vector3 center, float chargeRatio) { SkillLevelData levelData = skill.CurrentLevelData; int damage = Mathf.RoundToInt(levelData.Damage * chargeRatio); Collider[] hits = Physics.OverlapSphere(center, levelData.Range); foreach (Collider hit in hits) { if (hit.transform == caster) continue; IDamageable target = hit.GetComponent(); if (target != null) { target.TakeDamage(damage, caster); if (skill.Data.AppliedDebuffs != null) { StatusEffectReceiver receiver = hit.GetComponent(); if (receiver != null) { foreach (var debuff in skill.Data.AppliedDebuffs) receiver.ApplyDebuff(debuff); } } } } } }