using IntoTheAbyss.Events; using IntoTheAbyss.Runtime.Scripts; using RPGCore.Core.Objects; using RPGCore.ObjectModules.EventObjectModule; using RPGCore.StatusEffect.ObjectModules.StatusObjectModule; using RPGCoreCommon.Settings; namespace IntoTheAbyss.ObjectExtensions { public static class BaseObjectExtensions { /// Try to kill this object. public static void Death(this BaseObject obj) { var deathStatusDefinitionSO = SettingsManager.Get().deathStatusDefinitionSO; if (obj.GetComponent().Check(deathStatusDefinitionSO)) return; var deathEvent = new DeathEvent { target = obj }; obj.events.InvokeBefore(deathEvent); if (deathEvent.isPrevented) return; obj.GetComponent().Apply(deathStatusDefinitionSO); obj.events.InvokeAfter(deathEvent); } /// Try to revive this object. public static void Revive(this BaseObject obj) { var deathStatusDefinitionSO = SettingsManager.Get().deathStatusDefinitionSO; if (obj.GetComponent().Check(deathStatusDefinitionSO) == false) return; var reviveEvent = new ReviveEvent { target = obj }; obj.events.InvokeBefore(reviveEvent); if (reviveEvent.isPrevented) return; obj.GetComponent().Remove(deathStatusDefinitionSO); obj.events.InvokeAfter(reviveEvent); } } }