2025-08-25 20:17:27 +08:00

79 lines
2.7 KiB
C#

/*
* @Author: 白哉
* @Description:
* @Date: 2025年04月23日 星期三 21:04:18
* @Modify:
*/
using System.Collections.Generic;
using RuntimeData;
using System;
using TH1_Logic.Main;
using TH1Renderer;
using UnityEngine;
namespace Logic.Skill
{
[Serializable]
public class StompSkill : SkillBase
{
public StompSkill()
{
IsPermanent = true;
TurnsLimit = 0;
Score = 4;
}
public override SkillType GetSkillType()
{
return SkillType.STOMP;
}
public override void OnMove(UnitData self, GridData grid, MapData mapData, MoveType moveType)
{
var selfUnitList = new HashSet<UnitData>();
mapData.GetPlayerDataByUnitId(self.Id, out var selfPlayer);
mapData.GetUnitDataListByPlayerId(selfPlayer.Id, selfUnitList);
//遍历会溅射的所有格子
var roundGrids = mapData.GridMap.GetAroundGridData(1, 1, grid);
foreach (var roundGrid in roundGrids)
{
var ROgrid = MapRenderer.Instance.ROGridMap[roundGrid.Id];
//如果格子上没有单位,播放地震动画
if (!mapData.GetUnitDataByGid(roundGrid.Id, out var unit))
{
//TODO 下面的是不规范做法,后面要迭代
ROgrid.SetBounceAnim(NeedRandomWait:true);
}
//如果格子上有单位,播放地震动画,并且播放对方受伤动画
else
{
if (selfUnitList.Contains(unit)) continue;
// 计算攻击伤害,执行伤害逻辑
var damage = Table.Instance.CalcDamage(mapData, self, unit, damagePara:0.5f);
Main.UnitLogic.DamageSettlement(mapData, self, unit, damage, DamageType.Splash);
//播放伤害数字特效
var damageMark = new GridVFXRenderMark(GridVFXType.Damage);
damageMark.Damage = damage;
roundGrid.SetGridVFXRenderMark(damageMark);
//更新unit的显示
unit.RenderMark = true;
//TODO 下面的是不规范做法,后面要迭代
//播放受伤特效
roundGrid.VFXRenderMarkHurt = true;
// 执行相关动画,包括伤害特效、伤害数字、以及可能得死亡特效
ROgrid.SetBounceAnim(NeedRandomWait:true);
}
}
}
}
}