整合SLSUtilities
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user