30 lines
1.0 KiB
C#
30 lines
1.0 KiB
C#
using UnityEngine;
|
|
|
|
public class ZoneEffect : MonoBehaviour, ISkillEffect
|
|
{
|
|
public void Execute(SkillInstance skill, Transform caster, float chargeRatio)
|
|
{
|
|
Vector3 center = caster.position + caster.forward * skill.CurrentLevelData.Range;
|
|
SpawnZone(skill, center);
|
|
}
|
|
|
|
public void ExecuteAtPosition(SkillInstance skill, Transform caster, Vector3 targetPos, float chargeRatio)
|
|
{
|
|
SpawnZone(skill, targetPos);
|
|
}
|
|
|
|
private void SpawnZone(SkillInstance skill, Vector3 position)
|
|
{
|
|
if (skill.Data.ZonePrefab == null) return;
|
|
|
|
GameObject zoneObj = Instantiate(skill.Data.ZonePrefab, position, Quaternion.identity);
|
|
ZoneEntity entity = zoneObj.GetComponent<ZoneEntity>();
|
|
if (entity != null)
|
|
{
|
|
SkillLevelData data = skill.CurrentLevelData;
|
|
float tickDmg = data.TickDamage > 0 ? data.TickDamage : data.Damage;
|
|
entity.Init(tickDmg, data.Range, data.Duration, data.TickInterval, skill.Data.AppliedDebuffs);
|
|
}
|
|
}
|
|
}
|