136 lines
4.3 KiB
C#
136 lines
4.3 KiB
C#
/*
|
||
* @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 EscapeSkill : SkillBase
|
||
{
|
||
public bool IsTrigger = false;
|
||
|
||
|
||
public EscapeSkill()
|
||
{
|
||
IsPermanent = true;
|
||
TurnsLimit = 0;
|
||
Score = 4;
|
||
IsTrigger = false;
|
||
}
|
||
|
||
public override void OnTurnStart(IdentifierBase identifier, MapData mapData)
|
||
{
|
||
IsTrigger = false;
|
||
}
|
||
|
||
public override SkillType GetSkillType()
|
||
{
|
||
return SkillType.ESCAPE;
|
||
}
|
||
|
||
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)
|
||
{
|
||
return false;
|
||
//TODO ESCAPE 真的需要继承吗?
|
||
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;
|
||
}
|
||
//如果变形情况是Hebi相关的
|
||
if (originInfo.UnitType == UnitType.MoriyaHebi)
|
||
return false;
|
||
return true;
|
||
}
|
||
}
|
||
} |