整合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

@@ -19,7 +19,7 @@ namespace Cielonos.MainGame.Characters
Neutral = 20
}
public partial class CharacterBase : SerializedMonoBehaviour
public partial class CharacterBase : SerializedMonoBehaviour, IFuncAnimExecutor
{
public Fraction fraction;
public Transform flexibleCenterPoint => bodyPartsSc.flexibleCenterPoint;

View File

@@ -88,7 +88,7 @@ namespace Cielonos.MainGame.Characters
return;
}
gravitationalMovement += (40f * Vector3.down * DeltaTime) * DeltaTime;
gravitationalMovement += (40f * Vector3.down * DeltaTime) * gravityMultiplier * DeltaTime;
}
protected virtual void UpdateFinalMovement()
@@ -96,7 +96,10 @@ namespace Cielonos.MainGame.Characters
horizontalMovement.y = 0;
initiativeMovementVelocity = horizontalMovement + new Vector3(0, verticalMovement, 0);
if (!isApplyingGravity)
{
jumpVelocity = Mathf.Max(jumpVelocity, 0);
}
Vector3 jumpMove = new Vector3(0, jumpVelocity * DeltaTime, 0);
owner.additionalForceSm.Update(owner.attributeSm["ImpactResistance"]);
@@ -104,7 +107,6 @@ namespace Cielonos.MainGame.Characters
finalMovementVelocity = initiativeMovementVelocity + forceMove + jumpMove + gravitationalMovement;
bool isHorizontalMoving = horizontalMovement.magnitude > 0.1f * DeltaTime;
animator.SetBool(Animator.StringToHash("IsHorizontalMoving"), isHorizontalMoving);
}

View File

@@ -14,7 +14,13 @@ namespace Cielonos.MainGame.Characters
public OrderedDictionary<string, PrioritizedAction<AttackAreaBase, AttackResult>> onFinishAttack; //完成攻击时,参数为被攻击目标和对应的攻击结果
public OrderedDictionary<string, PrioritizedAction<AttackAreaBase>> onBeforeGetAttacked; //被攻击前,参数为攻击者和攻击结果
public OrderedDictionary<string, PrioritizedAction<AttackAreaBase, AttackResult>> onAfterGetAttacked; //被攻击后,参数为攻击者和攻击结果
public OrderedDictionary<string, PrioritizedAction<CharacterBase, float>> onUseEnergy; //使用能量时,参数为使用能量的使用者和能量
public OrderedDictionary<string, PrioritizedAction<CharacterBase, float>> onHealthChanged; //生命变化时,参数为生命变化的角色和变化的数
public OrderedDictionary<string, PrioritizedAction<CharacterBase, float>> onEnergyChanged; //能量变化时,参数为能量变化的角色和变化的数值
public OrderedDictionary<string, PrioritizedAction> onFirstJump; //第一次跳跃时
public OrderedDictionary<string, PrioritizedAction> onJumpLand; //落地时
public EventSubmodule(CharacterBase owner) : base(owner)
{
onCombatStart = new OrderedDictionary<string, PrioritizedAction>();
@@ -24,7 +30,11 @@ namespace Cielonos.MainGame.Characters
onFinishAttack = new OrderedDictionary<string, PrioritizedAction<AttackAreaBase, AttackResult>>();
onBeforeGetAttacked = new OrderedDictionary<string, PrioritizedAction<AttackAreaBase>>();
onAfterGetAttacked = new OrderedDictionary<string, PrioritizedAction<AttackAreaBase, AttackResult>>();
onUseEnergy = new OrderedDictionary<string, PrioritizedAction<CharacterBase, float>>();
onHealthChanged = new OrderedDictionary<string, PrioritizedAction<CharacterBase, float>>();
onEnergyChanged = new OrderedDictionary<string, PrioritizedAction<CharacterBase, float>>();
onFirstJump = new OrderedDictionary<string, PrioritizedAction>();
onJumpLand = new OrderedDictionary<string, PrioritizedAction>();
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Cielonos.MainGame.Characters;
using Sirenix.OdinInspector;
using SLSUtilities.FunctionalAnimation;
@@ -68,6 +69,31 @@ namespace Cielonos.MainGame
{
private static readonly int ActionSpeed = Animator.StringToHash("ActionSpeed");
public bool CheckPlayability(RuntimeFuncAnim oldFuncAnim, RuntimeFuncAnim newFuncAnim)
{
if (oldFuncAnim != null)
{
var oldData = oldFuncAnim.funcAnimData;
var newData = newFuncAnim.funcAnimData;
FuncAnimInterval specifiedInterval = oldData.intervals.FirstOrDefault(interval =>
interval.intervalType == IntervalType.Custom && interval.intervalName == "SpecifiedActionDisruption");
if (specifiedInterval != null)
{
if (oldData.interactions.TryGetValue("SpecifiedActionDisruption", out List<string> interactions))
{
if (interactions.Contains(newData.animInfo.animationName))
{
return animationSc.currentIntervals.Any(interval => interval == specifiedInterval);
}
}
}
}
return CheckPlayability(newFuncAnim.funcAnimData.animInfo.disruptionType);
}
public bool CheckPlayability(DisruptionType disruptionType = DisruptionType.NormalAction)
{
if (character.statusSm.isDead)
@@ -130,7 +156,7 @@ namespace Cielonos.MainGame
var newRtFuncAnim = new RuntimeFuncAnim(funcAnimData, character);
if (!CheckPlayability(newRtFuncAnim.funcAnimData.animInfo.disruptionType))
if (!CheckPlayability(currentRuntimeFuncAnim, newRtFuncAnim))
{
return false;
}