[#13] poprawki i wyrzucenie predefiniowanych statusów
This commit is contained in:
@@ -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
|
|
||||||
-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 class StatusEndEvent : BaseEvent<BaseObject>
|
||||||
{
|
{
|
||||||
public BaseObject target;
|
public BaseObject target;
|
||||||
|
public BaseObject source;
|
||||||
public Status status;
|
public Status status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user