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