[#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 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
@@ -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 BaseObject target;
public BaseObject source;
public Status status;
}
}
@@ -9,6 +9,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events
public class StatusRemoveEvent : BaseEvent<BaseObject>
{
public BaseObject target;
public BaseObject source;
public Status status;
}
}
@@ -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;
}
@@ -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);