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

92 lines
3.0 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月06日
* @Modify: 视觉更新改为走PendingAnimScope在攻击Fragment命中后播放
*/
using RuntimeData;
using System;
using System.Collections.Generic;
using System.Linq;
using Logic.CrashSight;
using MemoryPack;
using TH1_Anim.Fragments;
using TH1_Core.Managers;
using TH1_Logic.Core;
using TH1Renderer;
using UnityEngine;
namespace Logic.Skill
{
public partial class SatoriSeeSkill : SkillBase
{
public SatoriSeeSkill()
{
IsPermanent = true;
TurnsLimit = 0;
Score = 4;
}
public override SkillType GetSkillType()
{
return SkillType.SatoriSee;
}
public override void BeforeUnitDamaged(UnitData self, MapData mapData, SettlementInfo info)
{
if (info.DamageType != DamageType.ActiveAttack || info.DamageOrigin == null) return;
if (mapData.IsLeagueUnitByUnit(self.Id, info.DamageOrigin.Id)) return;
var selfGrid = self.Grid(mapData);
var targetGrid = info.DamageOrigin.Grid(mapData);
if (selfGrid == null || targetGrid == null)
{
LogSystem.LogError($"BeforeUnitDamaged Error selfGrid : {selfGrid}, targetGrid : {targetGrid}");
return;
}
var dis = mapData.GridMap.CalcDistance(selfGrid, targetGrid);
if (dis > 2) return;
// 给目标添加 KomeijiFear
info.DamageOrigin.AddOrOverrideSkill(SkillType.KomeijiFear, mapData, self.Id);
// 视觉更新刷新目标单位显示显示debuff图标
if (mapData != Main.MapData) return;
int phase = AnimPhase.AttackImpact + 50;
var scope = PresentationManager.CurrentScope;
if (scope != null)
{
if (MapRenderer.Instance != null &&
MapRenderer.Instance.ROUnitMap.TryGetValue(info.DamageOrigin.Id, out var unitRenderer))
{
var targetGrid = info.DamageOrigin.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.DamageOrigin.Id, out var unitRenderer))
{
unitRenderer.RenderUpdateUnitImage();
var targetGrid = info.DamageOrigin.Grid(mapData);
targetGrid?.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.KomeijiFear));
}
}
}
}
}