60 lines
1.7 KiB
C#
60 lines
1.7 KiB
C#
/*
|
|
* @Author: 白哉
|
|
* @Description:
|
|
* @Date: 2026年06月05日 星期五
|
|
* @Modify:
|
|
*/
|
|
|
|
using RuntimeData;
|
|
|
|
namespace Logic.Skill
|
|
{
|
|
public partial class QueenTerritoryMoveSkill : SkillBase
|
|
{
|
|
public QueenTerritoryMoveSkill()
|
|
{
|
|
IsPermanent = true;
|
|
TurnsLimit = 0;
|
|
Score = 2;
|
|
}
|
|
|
|
public override SkillType GetSkillType()
|
|
{
|
|
return SkillType.QueenTerritoryMove;
|
|
}
|
|
|
|
public override int GetExtraMoveRange(MapData mapData, UnitData self)
|
|
{
|
|
if (mapData == null || self == null) return 0;
|
|
if (!mapData.GetPlayerIdByUnitId(self.Id, out var ownerId)) return 0;
|
|
if (!mapData.GetGridDataByUnitId(self.Id, out var selfGrid)) return 0;
|
|
|
|
if (IsFriendlyTerritory(mapData, selfGrid, ownerId)) return 1;
|
|
|
|
var aroundBuf = RentAroundBuf();
|
|
mapData.GridMap.GetAroundGridData(1, 1, selfGrid, aroundBuf);
|
|
foreach (var grid in aroundBuf)
|
|
{
|
|
if (!IsFriendlyTerritory(mapData, grid, ownerId)) continue;
|
|
ReturnAroundBuf();
|
|
return 1;
|
|
}
|
|
|
|
ReturnAroundBuf();
|
|
return 0;
|
|
}
|
|
|
|
private static bool IsFriendlyTerritory(MapData mapData, GridData grid, uint ownerId)
|
|
{
|
|
return grid != null
|
|
&& mapData.GetPlayerDataByTerritoryGridId(grid.Id, out var territoryPlayer)
|
|
&& mapData.SameUnion(ownerId, territoryPlayer.Id);
|
|
}
|
|
|
|
public override bool ReservedOnTransform(UnitData self, UnitFullType fullType)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|