Files
Cielonos/Assets/Scripts/MainGame/Base/FunctionalAnimation/Payloads/SetBreakthroughResistance.cs
SoulliesOfficial 2a2aa728d5 切换主武器
2025-12-23 19:47:06 -05:00

79 lines
2.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using Cielonos.MainGame.Characters;
using Sirenix.OdinInspector;
using SLSUtilities.FunctionalAnimation;
using UnityEngine;
using UnityEngine.Serialization;
namespace Cielonos.MainGame.FunctionalAnimation
{
[Serializable]
public class SetBreakthroughResistance : FuncAnimPayloadBase
{
[InfoBox("设置角色的突破抗性状态,同时开启或关闭轮廓线效果。\n角色会被突破类型相同或更高的攻击打断不会被低于该突破类型的攻击打断。")]
[FormerlySerializedAs("outlineSwitch")]
[Tooltip("是否开启轮廓线")]
public bool isEnabling = true;
[Tooltip("是否从行为树参数获取突破类型")]
public bool getFromBehaviorTree = true;
[Tooltip("突破类型")]
[HideIf("getFromBehaviorTree")]
public BreakthroughType breakthroughableType = BreakthroughType.Heavy;
[Tooltip("是否使用详细设置")]
public bool detailedSettings = false;
[Tooltip("轮廓线宽度")]
[ShowIf("@this.detailedSettings && this.isEnabling")]
public float outlineWidth = 0.05f;
[Tooltip("轮廓线淡入淡出时间")]
[ShowIf("detailedSettings")]
public float outlineFadeDuration = 0.1f;
public override void Invoke()
{
var renderSc = character.renderSc;
if (getFromBehaviorTree)
{
string typeName = (character as Automata).behaviorTree.GetVariable<string>("BreakthroughableType").Value;
if (string.IsNullOrEmpty(typeName))
{
breakthroughableType = BreakthroughType.Heavy;
}
breakthroughableType = Enum.TryParse(typeName, out BreakthroughType parsedType) ? parsedType : BreakthroughType.Heavy;
}
if (isEnabling)
{
renderSc.OutlineOn(breakthroughableType, outlineWidth, outlineFadeDuration);
SetResistance(breakthroughableType);
}
else
{
renderSc.OutlineOff(outlineFadeDuration);
character.reactionSc.ResetBreakthroughResistances();
}
}
private void SetResistance(BreakthroughType type)
{
foreach (var lowerType in Breakthrough.GetLowerTypes(type))
{
character.reactionSc.breakthroughResistances[lowerType] = true;
}
character.reactionSc.breakthroughResistances[type] = false;
foreach (var higherType in Breakthrough.GetHigherTypes(type))
{
character.reactionSc.breakthroughResistances[higherType] = false;
}
}
}
}