46 lines
1.5 KiB
C#
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());
|
|
}
|
|
} |