整合SLSUtilities

This commit is contained in:
SoulliesOfficial
2026-01-17 11:35:49 -05:00
parent d94241f36c
commit 7ee2894a63
1338 changed files with 3051541 additions and 507034 deletions

View File

@@ -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;