137 lines
4.2 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: 2025年04月23日 星期三 21:04:18
* @Modify:
*/
using RuntimeData;
using System;
using System.Linq;
using MemoryPack;
using TH1_Anim.Fragments;
using TH1_Core.Managers;
using TH1_Logic.Core;
using TH1Renderer;
namespace Logic.Skill
{
public partial class EscapeProSkill : SkillBase
{
public bool IsTrigger = false;
public EscapeProSkill()
{
IsPermanent = true;
TurnsLimit = 0;
Score = 4;
IsTrigger = false;
}
public override void OnTurnStart(IdentifierBase identifier, MapData mapData)
{
IsTrigger = false;
}
public override SkillType GetSkillType()
{
return SkillType.ESCAPEPRO;
}
public override void OnDamageOther(MapData mapData, SettlementInfo info)
{
//if (IsTrigger) return;
if (info == null) return;
if (info.DamageType != DamageType.ActiveAttack) return;
if (info.DamageOrigin == null || info.DamageTarget == null) return;
info.DamageOrigin.AddActionPoint(ActionPointType.Move);
IsTrigger = true;
// 视觉更新刷新攻击方单位显示显示AP点变化
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))
{
scope.Add(new FragmentStep
{
Phase = phase,
Duration = 0.1f,
Execute = () => { unitRenderer.InstantUpdateUnit(false); }
});
}
}
else
{
if (MapRenderer.Instance != null &&
MapRenderer.Instance.ROUnitMap.TryGetValue(info.DamageOrigin.Id, out var unitRenderer))
{
unitRenderer.RenderUpdateUnitImage();
}
}
}
public override void OnHealOther(MapData mapData, UnitData origin,UnitData target,HealType healType)
{
//if (IsTrigger) return;
if (origin == null) return;
if (healType != HealType.AttackAllyHeal) return;
origin.AddActionPoint(ActionPointType.Move);
IsTrigger = true;
// 视觉更新刷新来源单位显示显示AP点变化
if (mapData != Main.MapData) return;
var scope = PresentationManager.CurrentScope;
if (scope != null)
{
if (MapRenderer.Instance != null &&
MapRenderer.Instance.ROUnitMap.TryGetValue(origin.Id, out var unitRenderer))
{
scope.Add(new FragmentStep
{
Phase = AnimPhase.AttackImpact + 50,
Duration = 0.1f,
Execute = () => { unitRenderer.InstantUpdateUnit(false); }
});
}
}
else
{
if (MapRenderer.Instance != null &&
MapRenderer.Instance.ROUnitMap.TryGetValue(origin.Id, out var unitRenderer))
{
unitRenderer.RenderUpdateUnitImage();
}
}
}
public override bool ReservedOnTransform(UnitData self, UnitFullType fullType)
{
Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(self.UnitFullType, out var originInfo);
Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(fullType, out var targetInfo);
//如果变形情况是carry相关的
if (originInfo.Skills.Contains(SkillType.CARRY) != targetInfo.Skills.Contains(SkillType.CARRY))
{
return false;
}
return true;
}
public override int GetExtraMoveRange(MapData mapData, UnitData self)
{
if (IsTrigger) return 1;
return 0;
}
}
}