Files
TheVVaS-Assets/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs
T
2026-04-25 23:37:10 +02:00

46 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
{
public sealed class Status
{
public StatusDefinitionSO definition { get; private set; }
public StatusModule statusModule { get; private set; }
public float timeRemaining { get; private set; }
public List<Effect> effects { get; private set; }
internal Status(StatusDefinitionSO definition, StatusModule statusModule)
{
this.definition = definition;
this.statusModule = statusModule;
timeRemaining = definition.time;
effects = definition.effects.Select(e =>
{
var copy = JsonUtility.FromJson<Effect>(JsonUtility.ToJson(e));
copy.obj = statusModule.parent;
copy.status = this;
return copy;
}).ToList();
}
internal void UpdateTime_Internal(float deltaTime)
{
if (definition.permanent) return;
timeRemaining -= deltaTime;
if (timeRemaining <= 0) statusModule.End(this);
}
internal void OnApply_Internal() => effects.ForEach(effect => effect.OnApply_Internal());
internal void OnEnd_Internal() => effects.ForEach(effect => effect.OnEnd_Internal());
internal void OnRemove_Internal() => effects.ForEach(effect => effect.OnRemove_Internal());
}
}