[#13] poprawki i wyrzucenie predefiniowanych statusów

This commit is contained in:
2026-06-30 20:31:06 +02:00
parent 8326c4b279
commit 62f99868b9
10 changed files with 18 additions and 30 deletions
@@ -1,5 +1,4 @@
using System; using System;
using RPGCore.Core.Objects;
namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
{ {
@@ -9,16 +8,15 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
[Serializable] [Serializable]
public abstract class BaseEffect public abstract class BaseEffect
{ {
public BaseObject obj { get; internal set; }
public Status status { get; internal set; } public Status status { get; internal set; }
internal void OnApply_Internal() => OnApply(); internal void OnApply_Internal() => OnApply();
internal void OnEnd_Internal() => OnEnd(); internal void OnEnd_Internal() => OnEnd();
internal void OnRemove_Internal() => OnRemove(); internal void OnRemove_Internal() => OnRemove();
protected virtual void OnApply() {} protected abstract void OnApply();
protected virtual void OnEnd() {} protected abstract void OnEnd();
protected virtual void OnRemove() {} protected virtual void OnRemove() => OnEnd();
protected void EndStatus() protected void EndStatus()
{ {
@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 3c6b215386e14a38afa090853d1e7e84
timeCreated: 1772974553
@@ -1,6 +0,0 @@
namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Effects
{
public class NotControllableEffect : BaseEffect
{
}
}
@@ -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 class StatusEndEvent : BaseEvent<BaseObject>
{ {
public BaseObject target; public BaseObject target;
public BaseObject source;
public Status status; public Status status;
} }
} }
@@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events
public class StatusRemoveEvent : BaseEvent<BaseObject> public class StatusRemoveEvent : BaseEvent<BaseObject>
{ {
public BaseObject target; public BaseObject target;
public BaseObject source;
public Status status; public Status status;
} }
} }
@@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events
public class StatusStartEvent : BaseEvent<BaseObject> public class StatusStartEvent : BaseEvent<BaseObject>
{ {
public BaseObject target; public BaseObject target;
public BaseObject source;
public Status status; public Status status;
} }
} }
@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using RPGCore.Core.Objects;
using UnityEngine; using UnityEngine;
namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
@@ -10,19 +11,24 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
public StatusDefinitionSO definition { get; private set; } public StatusDefinitionSO definition { get; private set; }
public StatusModule statusModule { 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 float timeRemaining { get; private set; }
public List<BaseEffect> effects { 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.definition = definition;
this.statusModule = statusModule; this.statusModule = statusModule;
target = statusModule.parent;
this.source = source;
timeRemaining = definition.time; timeRemaining = definition.time;
effects = definition.effects.Select(e => effects = definition.effects.Select(e =>
{ {
var copy = JsonUtility.FromJson<BaseEffect>(JsonUtility.ToJson(e)); var copy = JsonUtility.FromJson<BaseEffect>(JsonUtility.ToJson(e));
copy.obj = statusModule.parent;
copy.status = this; copy.status = this;
return copy; return copy;
}).ToList(); }).ToList();
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using RPGCore.Core; using RPGCore.Core;
using RPGCore.Core.Objects; using RPGCore.Core.Objects;
using RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Effects;
using RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events; using RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events;
using UnityEngine; using UnityEngine;
@@ -21,12 +20,6 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
internal List<Status> statuses { get; private set; } = new(); internal List<Status> statuses { get; private set; } = new();
[SerializeField] internal StatusUpdateType updateType; [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> /// <summary>Checks if any active <see cref="Status"/> that uses <see cref="StatusDefinitionSO"/> is present.</summary>
public bool Check(StatusDefinitionSO definition) public bool Check(StatusDefinitionSO definition)
{ {
@@ -34,12 +27,12 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule
} }
/// <summary>Adds new <see cref="Status"/>.</summary> /// <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); statuses.Add(status);
status.OnApply_Internal(); 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; return status;
} }
@@ -134,7 +134,7 @@ public class ExampleCustomSettingsSO : CustomSettingsSO
// Clicked foldout without settings attached - do nothing // Clicked foldout without settings attached - do nothing
if (_settingsTypeMap[key] is not {} settingsType) return; 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.objectType = settingsType;
_objectField.SetValueWithoutNotify(settings); _objectField.SetValueWithoutNotify(settings);