diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs index 5ec49ff..ae84698 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs @@ -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() { diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects.meta b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects.meta deleted file mode 100644 index fa53b89..0000000 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3c6b215386e14a38afa090853d1e7e84 -timeCreated: 1772974553 \ No newline at end of file diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs deleted file mode 100644 index be15661..0000000 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Effects -{ - public class NotControllableEffect : BaseEffect - { - } -} \ No newline at end of file diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs.meta b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs.meta deleted file mode 100644 index 82f6618..0000000 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: dccc3743dc3e4a67b738d8ac3c8e8347 -timeCreated: 1773175390 \ No newline at end of file diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusEndEvent.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusEndEvent.cs index 1753854..935882a 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusEndEvent.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusEndEvent.cs @@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events public class StatusEndEvent : BaseEvent { public BaseObject target; + public BaseObject source; public Status status; } } \ No newline at end of file diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusRemoveEvent.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusRemoveEvent.cs index 1d82d36..2dbe7f5 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusRemoveEvent.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusRemoveEvent.cs @@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events public class StatusRemoveEvent : BaseEvent { public BaseObject target; + public BaseObject source; public Status status; } } \ No newline at end of file diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusStartEvent.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusStartEvent.cs index ee1849d..575f877 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusStartEvent.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusStartEvent.cs @@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events public class StatusStartEvent : BaseEvent { public BaseObject target; + public BaseObject source; public Status status; } } \ No newline at end of file diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs index 44fed4f..65a4715 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs @@ -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 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(JsonUtility.ToJson(e)); - copy.obj = statusModule.parent; copy.status = this; return copy; }).ToList(); diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusModule.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusModule.cs index 2d3accd..3087785 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusModule.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusModule.cs @@ -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 statuses { get; private set; } = new(); [SerializeField] internal StatusUpdateType updateType; - /// Checks if any has . - public virtual bool IsControllable() - { - return !statuses.Any(status => status.definition.effects.Any(effect => effect is NotControllableEffect)); - } - /// Checks if any active that uses is present. public bool Check(StatusDefinitionSO definition) { @@ -34,12 +27,12 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule } /// Adds new . - 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; } diff --git a/RPGCoreCommon/Settings/Editor/SettingsEditorWindow.cs b/RPGCoreCommon/Settings/Editor/SettingsEditorWindow.cs index 7dc1737..6dfd259 100644 --- a/RPGCoreCommon/Settings/Editor/SettingsEditorWindow.cs +++ b/RPGCoreCommon/Settings/Editor/SettingsEditorWindow.cs @@ -134,7 +134,7 @@ public class ExampleCustomSettingsSO : CustomSettingsSO // Clicked foldout without settings attached - do nothing if (_settingsTypeMap[key] is not {} settingsType) return; - var settings = _mainSettings.settings.FirstOrDefault(s => s.GetType() == settingsType); + var settings = _mainSettings.settings.FirstOrDefault(s => s && s.GetType() == settingsType); _objectField.objectType = settingsType; _objectField.SetValueWithoutNotify(settings);