92 lines
3.0 KiB
C#
92 lines
3.0 KiB
C#
/*
|
||
* @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));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|