[#13] poprawki i wyrzucenie predefiniowanych statusów
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using RPGCore.Core.Objects;
|
||||
|
||||
namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
|
||||
{
|
||||
@@ -9,16 +8,15 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
|
||||
[Serializable]
|
||||
public abstract class BaseEffect
|
||||
{
|
||||
public BaseObject obj { get; internal set; }
|
||||
public Status status { get; internal set; }
|
||||
|
||||
internal void OnApply_Internal() => OnApply();
|
||||
internal void OnEnd_Internal() => OnEnd();
|
||||
internal void OnRemove_Internal() => OnRemove();
|
||||
|
||||
protected virtual void OnApply() {}
|
||||
protected virtual void OnEnd() {}
|
||||
protected virtual void OnRemove() {}
|
||||
protected abstract void OnApply();
|
||||
protected abstract void OnEnd();
|
||||
protected virtual void OnRemove() => OnEnd();
|
||||
|
||||
protected void EndStatus()
|
||||
{
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3c6b215386e14a38afa090853d1e7e84
|
||||
timeCreated: 1772974553
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Effects
|
||||
{
|
||||
public class NotControllableEffect : BaseEffect
|
||||
{
|
||||
}
|
||||
}
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dccc3743dc3e4a67b738d8ac3c8e8347
|
||||
timeCreated: 1773175390
|
||||
@@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events
|
||||
public class StatusEndEvent : BaseEvent<BaseObject>
|
||||
{
|
||||
public BaseObject target;
|
||||
public BaseObject source;
|
||||
public Status status;
|
||||
}
|
||||
}
|
||||
+1
@@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events
|
||||
public class StatusRemoveEvent : BaseEvent<BaseObject>
|
||||
{
|
||||
public BaseObject target;
|
||||
public BaseObject source;
|
||||
public Status status;
|
||||
}
|
||||
}
|
||||
+1
@@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events
|
||||
public class StatusStartEvent : BaseEvent<BaseObject>
|
||||
{
|
||||
public BaseObject target;
|
||||
public BaseObject source;
|
||||
public Status status;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using RPGCore.Core.Objects;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
|
||||
@@ -10,19 +11,24 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
|
||||
public StatusDefinitionSO definition { get; private set; }
|
||||
public StatusModule statusModule { get; private set; }
|
||||
|
||||
public BaseObject target { get; private set; }
|
||||
public BaseObject source { get; private set; }
|
||||
|
||||
public float timeRemaining { get; private set; }
|
||||
public List<BaseEffect> effects { get; private set; }
|
||||
|
||||
internal Status(StatusDefinitionSO definition, StatusModule statusModule)
|
||||
internal Status(StatusDefinitionSO definition, StatusModule statusModule, BaseObject source = null)
|
||||
{
|
||||
this.definition = definition;
|
||||
this.statusModule = statusModule;
|
||||
|
||||
target = statusModule.parent;
|
||||
this.source = source;
|
||||
|
||||
timeRemaining = definition.time;
|
||||
effects = definition.effects.Select(e =>
|
||||
{
|
||||
var copy = JsonUtility.FromJson<BaseEffect>(JsonUtility.ToJson(e));
|
||||
copy.obj = statusModule.parent;
|
||||
copy.status = this;
|
||||
return copy;
|
||||
}).ToList();
|
||||
|
||||
@@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using RPGCore.Core;
|
||||
using RPGCore.Core.Objects;
|
||||
using RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Effects;
|
||||
using RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events;
|
||||
using UnityEngine;
|
||||
|
||||
@@ -21,12 +20,6 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
|
||||
internal List<Status> statuses { get; private set; } = new();
|
||||
[SerializeField] internal StatusUpdateType updateType;
|
||||
|
||||
/// <summary>Checks if any <see cref="Status"/> has <see cref="NotControllableEffect"/>.</summary>
|
||||
public virtual bool IsControllable()
|
||||
{
|
||||
return !statuses.Any(status => status.definition.effects.Any(effect => effect is NotControllableEffect));
|
||||
}
|
||||
|
||||
/// <summary>Checks if any active <see cref="Status"/> that uses <see cref="StatusDefinitionSO"/> is present.</summary>
|
||||
public bool Check(StatusDefinitionSO definition)
|
||||
{
|
||||
@@ -34,12 +27,12 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
|
||||
}
|
||||
|
||||
/// <summary>Adds new <see cref="Status"/>.</summary>
|
||||
public Status Apply(StatusDefinitionSO definition)
|
||||
public Status Apply(StatusDefinitionSO definition, BaseObject source = null)
|
||||
{
|
||||
var status = new Status(definition, this);
|
||||
var status = new Status(definition, this, source);
|
||||
statuses.Add(status);
|
||||
status.OnApply_Internal();
|
||||
parent.events.Invoke(new StatusStartEvent { status = status, target = parent });
|
||||
parent.events.Invoke(new StatusStartEvent { status = status, target = parent, source = source });
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user