2026-04-19 16:02:59 +08:00

81 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.

/*
* @Author: 白哉
* @Description: 恐惧制造者技能
* @Date: 2026年03月09日
* @Modify: 视觉更新改为走PendingAnimScope在攻击Fragment命中后播放
*/
using RuntimeData;
using MemoryPack;
using TH1_Anim.Fragments;
using TH1_Core.Managers;
using TH1_Logic.Core;
using TH1Renderer;
namespace Logic.Skill
{
public partial class FearMakerSkill : SkillBase
{
public FearMakerSkill()
{
IsPermanent = true;
TurnsLimit = 0;
Score = 4;
}
public override SkillType GetSkillType()
{
return SkillType.FearMaker;
}
public override void OnDamageOther(MapData mapData, SettlementInfo info)
{
if (info.DamageTarget == null || info.DamageOrigin == null) return;
if (info.DamageType != DamageType.ActiveAttack && info.DamageType != DamageType.CounterAttack) return;
// 如果对方拥有KomeijiFearImmune则免疫恐惧
if (info.DamageTarget.GetSkill(SkillType.KomeijiFearImmune, out _)) return;
info.DamageTarget.AddOrOverrideSkill(SkillType.KomeijiFear, mapData, info.DamageOrigin.Id);
// 视觉更新刷新目标单位显示显示debuff图标+ 播放KomeijiFear VFX
if (mapData != Main.MapData) return;
if (!info.DamageTarget.IsAlive()) return;
int phase = info.DamageType == DamageType.ActiveAttack
? AnimPhase.AttackImpact + 50
: AnimPhase.CounterImpact + 50;
var scope = PresentationManager.CurrentScope;
if (scope != null)
{
if (MapRenderer.Instance != null &&
MapRenderer.Instance.ROUnitMap.TryGetValue(info.DamageTarget.Id, out var unitRenderer))
{
var targetGrid = info.DamageTarget.Grid(mapData);
scope.Add(new FragmentStep
{
Phase = phase,
Duration = 0.1f,
Execute = () =>
{
unitRenderer.InstantUpdateUnit(false);
targetGrid?.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.KomeijiFear));
}
});
}
}
else
{
if (MapRenderer.Instance != null &&
MapRenderer.Instance.ROUnitMap.TryGetValue(info.DamageTarget.Id, out var unitRenderer))
{
unitRenderer.RenderUpdateUnitImage();
var targetGrid = info.DamageTarget.Grid(mapData);
targetGrid?.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.KomeijiFear));
}
}
}
}
}