2026-04-19 18:40:54 +08:00

105 lines
3.5 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年11月15日 星期五
* @Modify:
*/
using System;
using System.Collections.Generic;
using MemoryPack;
using RuntimeData;
using UnityEngine;
namespace Logic.Skill
{
public partial class SanaeWindSkill : SkillBase
{
public SanaeWindSkill()
{
IsPermanent = true;
TurnsLimit = 0;
Score = 2;
}
public override SkillType GetSkillType()
{
return SkillType.SANAEWIND;
}
public override void OnMove(UnitData self, GridData grid, MapData mapData, MoveType moveType, List<Vector2Int> path = null)
{
if (path == null || path.Count < 2) return;
int range = self.GetSkill(SkillType.SANAEMOVE,out var _) ? 1: 0 ;
if (!self.Player(mapData, out var player)) return;
var aroundBuf = RentAroundBuf();
mapData.GridMap.GetAroundGridData(range, range, grid, aroundBuf);
foreach (var around in aroundBuf)
{
//if (around == grid) continue;
around.VisibleUnit(mapData,player,out var unit);
if (unit == null || !unit.IsAlive()) continue;
if (!mapData.IsLeagueUnitByUnit(unit.Id, self.Id)) continue;
unit.AddSkill_Legacy(SkillType.SANAEWINDX, mapData,false,0,false,-1,false,SpecialAddSkillType.AddTurnLimit,0);
if(self.Player(mapData).PlayerHeroData.GetHeroTask(GiantType.GermanySanae, out var task))
task.OnAddSkillLevels(mapData,SkillType.SANAEWINDX,1);
unit.GetSkill(SkillType.SANAEWINDX, out var skill);
if (skill is SanaeWindXSkill sanaeWindX)
{
sanaeWindX.X = GetSanaeWindXValue(path[0], path[^1]);
sanaeWindX.SetTurnsLimit(1);
}
}
ReturnAroundBuf();
}
// 按照小键盘规律假设起始点位于5根据目标点方向返回12346789
private int GetSanaeWindXValue(Vector2Int origin, Vector2Int target)
{
var dx = target.x - origin.x;
var dy = target.y - origin.y;
if (dx == 0 && dy < 0) return 2; // 上
if (dx > 0 && dy < 0) return 3; // 右上
if (dx > 0 && dy == 0) return 6; // 右
if (dx > 0 && dy > 0) return 9; // 右下
if (dx == 0 && dy > 0) return 8; // 下
if (dx < 0 && dy > 0) return 7; // 左下
if (dx < 0 && dy == 0) return 4; // 左
if (dx < 0 && dy < 0) return 1; // 左上
return 5; // 原地不动
}
public override bool IsCanAttackAlly()
{
return true;
}
#region [------------------------------------------------------------------ AttackAlly ------------------------------------------------------------------]
// 具备 AttackAlly 能力
public override bool AttackAllyEnable(MapData mapData, UnitData self, UnitData target)
{
return true;
}
// 基础治疗量:固定 4
public override int AttackAllyBaseHeal(MapData mapData, UnitData self, UnitData target)
{
return 4;
}
// 治疗加成0
public override int AttackAllyHealAddition(MapData mapData, UnitData self, UnitData target)
{
return 0;
}
#endregion
}
}