整合SLSUtilities
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Cielonos.MainGame.Characters;
|
||||
using Sirenix.OdinInspector;
|
||||
using SLSFramework.General;
|
||||
using UnityEngine;
|
||||
@@ -24,45 +23,49 @@ namespace SLSUtilities.FunctionalAnimation
|
||||
{
|
||||
public static bool EditorWantsRepaint = false;
|
||||
|
||||
[ReadOnly, ShowInInspector]
|
||||
public FuncAnimDataCollection parentCollection;
|
||||
|
||||
[Title("编辑器设置")]
|
||||
[EnumToggleButtons]
|
||||
[OnValueChanged("RequestRepaint")] // <-- 修改
|
||||
[OnValueChanged("RequestRepaint")]
|
||||
public TimeDisplayMode timeMode;
|
||||
|
||||
[Title("核心动画")]
|
||||
[Required("必须指定一个动画片段")]
|
||||
[OnValueChanged("RequestRepaint")] // <-- 修改
|
||||
[OnValueChanged("RequestRepaint")]
|
||||
public AnimationClip animationClip;
|
||||
|
||||
[Title("编辑时信息")]
|
||||
public FuncAnimInfo animInfo = new FuncAnimInfo("AnimationName", "StateName", true, new List<string>(),
|
||||
DisruptionType.NormalAction, 1.0f, 0, true, new Dictionary<string, List<string>>());
|
||||
[Title("编辑时信息")] public FuncAnimInfo animInfo = new FuncAnimInfo("AnimationName", "StateName",
|
||||
true, new List<string>(), DisruptionType.NormalAction, 1.0f, 0, true);
|
||||
|
||||
[Title("技能区间")]
|
||||
[ListDrawerSettings(
|
||||
ListElementLabelName = "@this.GetIntervalLabel()", // <-- 修改为调用方法
|
||||
ListElementLabelName = "@this.GetIntervalLabel()",
|
||||
AddCopiesLastElement = true)]
|
||||
public List<FuncAnimInterval> intervals = new List<FuncAnimInterval>()
|
||||
{
|
||||
new FuncAnimInterval(IntervalType.Cancellable),
|
||||
new FuncAnimInterval(IntervalType.Startup),
|
||||
new FuncAnimInterval(IntervalType.ExternalDisruption),
|
||||
new FuncAnimInterval(IntervalType.Active),
|
||||
new FuncAnimInterval(IntervalType.Invincible),
|
||||
new FuncAnimInterval(IntervalType.Preinput),
|
||||
new FuncAnimInterval(IntervalType.ActionDisruption),
|
||||
new FuncAnimInterval(IntervalType.MovementDisruption),
|
||||
new FuncAnimInterval(IntervalType.RootMotion)
|
||||
};
|
||||
|
||||
[Title("交互处理")]
|
||||
[Tooltip("技能交互标签,用于标记技能与其他系统的交互关系,例如可以用来标记哪些技能可以被特定状态打断等")]
|
||||
public Dictionary<string, List<string>> interactions = new Dictionary<string, List<string>>();
|
||||
|
||||
[Title("动画事件")]
|
||||
public EventCollection eventCollection;
|
||||
public EventCollection eventCollection = new EventCollection();
|
||||
|
||||
[Title("变量存储")]
|
||||
public VariableCollection variableCollection;
|
||||
public VariableCollection variableCollection = new VariableCollection();
|
||||
|
||||
// (新增) 核心方法:将父级引用传递给子级
|
||||
// 这让子对象 (Event/Interval) 能够访问 animationClip 来计算帧
|
||||
[OnInspectorInit("UpdateChildReferences")]
|
||||
[OnInspectorGUI("UpdateChildReferences")] // 在绘制其他所有内容之前运行
|
||||
private void UpdateChildReferences()
|
||||
{
|
||||
@@ -73,11 +76,32 @@ namespace SLSUtilities.FunctionalAnimation
|
||||
if (interval != null) interval.parentData = this;
|
||||
}
|
||||
}
|
||||
|
||||
if (eventCollection.animEvents != null)
|
||||
{
|
||||
foreach (var evt in eventCollection.animEvents)
|
||||
foreach (var animEvent in eventCollection.animEvents)
|
||||
{
|
||||
if (evt != null) evt.parentData = this;
|
||||
if (animEvent is { payload: not null }) animEvent.payload.parentData = this;
|
||||
}
|
||||
|
||||
foreach (var payload in eventCollection.startEvents)
|
||||
{
|
||||
if (payload != null) payload.parentData = this;
|
||||
}
|
||||
|
||||
foreach (var payload in eventCollection.disruptionEvents)
|
||||
{
|
||||
if (payload != null) payload.parentData = this;
|
||||
}
|
||||
|
||||
foreach (var payload in eventCollection.updateEvents)
|
||||
{
|
||||
if (payload != null) payload.parentData = this;
|
||||
}
|
||||
|
||||
foreach (var payload in eventCollection.updateUntilEvents)
|
||||
{
|
||||
if (payload != null) payload.parentData = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -286,8 +310,7 @@ namespace SLSUtilities.FunctionalAnimation
|
||||
public class FuncAnimEvent
|
||||
{
|
||||
// (新增) 非序列化的父级引用
|
||||
[NonSerialized]
|
||||
public FuncAnimData parentData;
|
||||
private FuncAnimData parentData => payload?.parentData;
|
||||
|
||||
// (新增) 辅助方法
|
||||
private bool ShowSeconds() => parentData == null || parentData.timeMode == TimeDisplayMode.Seconds || parentData.animationClip == null;
|
||||
@@ -341,9 +364,8 @@ namespace SLSUtilities.FunctionalAnimation
|
||||
[PropertyOrder(2)]
|
||||
public FuncAnimPayloadBase payload;
|
||||
|
||||
public FuncAnimEvent(FuncAnimData parentData, float triggerTime, FuncAnimPayloadBase payload, bool isEnd)
|
||||
public FuncAnimEvent(float triggerTime, FuncAnimPayloadBase payload, bool isEnd)
|
||||
{
|
||||
this.parentData = parentData;
|
||||
this.triggerTime = triggerTime;
|
||||
this.isEnd = isEnd;
|
||||
this.payload = payload;
|
||||
|
||||
Reference in New Issue
Block a user