129 lines
4.0 KiB
C#
129 lines
4.0 KiB
C#
/*
|
|
* @Author: 白哉
|
|
* @Description:
|
|
* @Date: 2025年10月12日 星期六 10:10:12
|
|
* @Modify:
|
|
*/
|
|
|
|
|
|
using RuntimeData;
|
|
using TH1_Logic.Core;
|
|
using System.Linq;
|
|
|
|
|
|
namespace Logic.Skill
|
|
{
|
|
public partial class MeilingRestSkill : SkillBase
|
|
{
|
|
public bool AroundGiant;
|
|
public bool Sleeping => !AroundGiant;
|
|
|
|
|
|
public MeilingRestSkill()
|
|
{
|
|
IsPermanent = true;
|
|
TurnsLimit = 0;
|
|
Score = 2;
|
|
AroundGiant = false;
|
|
}
|
|
|
|
public override SkillType GetSkillType()
|
|
{
|
|
return SkillType.MEILINGREST;
|
|
}
|
|
|
|
public override void OnSkillAdd(MapData mapData, uint originId)
|
|
{
|
|
var self = mapData.GetIdentifierBase(originId);
|
|
if (self != null && self is UnitData unitData) RefreshAroundGiant(mapData, unitData);
|
|
}
|
|
|
|
public override void OnTurnStart(IdentifierBase identifier, MapData mapData)
|
|
{
|
|
var self = identifier as UnitData;
|
|
if (self == null) return;
|
|
RefreshAroundGiant(mapData, self);
|
|
}
|
|
|
|
public override void OnAnyUnitMove(MapData map, UnitData self, UnitData moveUnit, GridData target, MoveType moveType)
|
|
{
|
|
RefreshAroundGiant(map, self);
|
|
}
|
|
|
|
public override void OnAnyUnitDie(MapData map, UnitData self, UnitData dieUnit)
|
|
{
|
|
RefreshAroundGiant(map, self);
|
|
}
|
|
|
|
public override void OnAnyUnitCreate(MapData map, UnitData self, UnitData newUnit)
|
|
{
|
|
RefreshAroundGiant(map, self);
|
|
}
|
|
|
|
public override void OnTurnEnd(IdentifierBase identifier, MapData mapData)
|
|
{
|
|
var self = identifier as UnitData;
|
|
if (self == null) return;
|
|
if(AroundGiant) return;
|
|
Main.UnitLogic.RecoverHealth(mapData, self, self, 2);
|
|
}
|
|
|
|
public override float GetAttackAdditionParam(MapData mapData, UnitData self, UnitData target = null)
|
|
{
|
|
if (AroundGiant) return 0.5f;
|
|
return 0;
|
|
}
|
|
|
|
public override float GetDefenseAdditionParam(MapData mapData, UnitData self, UnitData target = null)
|
|
{
|
|
if (!AroundGiant) return 1;
|
|
return 0;
|
|
}
|
|
|
|
public override int GetExtraMoveRange(MapData map,UnitData self)
|
|
{
|
|
if (AroundGiant) return 1;
|
|
return 0;
|
|
}
|
|
|
|
private void RefreshAroundGiant(MapData mapData, UnitData self)
|
|
{
|
|
var selfPlayer = self.Player(mapData);
|
|
if (selfPlayer == null) return;
|
|
|
|
if (!mapData.GetGridDataByUnitId(self.Id, out var targetGrid)) return;
|
|
var roundGrid = mapData.GridMap.GetAroundGridData(1, 1, targetGrid);
|
|
foreach (var gridData in roundGrid)
|
|
{
|
|
if (gridData == targetGrid) continue;
|
|
var unit = gridData.Unit(mapData);
|
|
if (unit == null) continue;
|
|
if (!unit.TreatedAsHero(mapData,self)) continue;
|
|
var unitPlayer = unit.Player(mapData);
|
|
if (unitPlayer == null || unitPlayer.Id != selfPlayer.Id) continue;
|
|
|
|
AroundGiant = true;
|
|
if(self.InMainSight())
|
|
self.Renderer(mapData)?.RenderUpdateUnitSprite();
|
|
return;
|
|
}
|
|
|
|
AroundGiant = false;
|
|
if(self.InMainSight())
|
|
self.Renderer(mapData)?.RenderUpdateUnitSprite();
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|