init
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user