NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Summon/State/BulletBoxStateIdle.cs

110 lines
3.0 KiB
C#

using Gameplay.Area;
using Gameplay.Common;
using Gameplay.Unit;
using Gameplay.Unit.Data;
using LTGame;
namespace Gameplay.Summon
{
public class BulletBoxStateIdle : BaseSummonState
{
public SummonBulletBox bulletBox;
// 站在格子上的单位
private GameUnit _standUnit;
public BulletBoxStateIdle(SummonBulletBox bulletBox) : base(bulletBox, ESummonState.Idle)
{
this.bulletBox = bulletBox;
}
protected override void _OnEnter(NBaseState exitState,
object param)
{
base._OnEnter(exitState, param);
_standUnit = null;
}
protected override void _OnRunning()
{
base._OnRunning();
var selfCellIndex = bulletBox.transData.cellIndex;
if (_standUnit == null)
{
// 判断是否有单位站在格子上
var units = AreaManager.instance.GetUnitsByCellIndex(selfCellIndex);
for (int i = 0; i < units.Count; i++)
{
var unit = units[i];
if (unit.commonData.troopId != bulletBox.commonData.troopId)
{
// 敌方不生效
continue;
}
if (unit.gameunitType != EGameUnitType.Character)
{
// 只对角色生效
continue;
}
_standUnit = unit;
break;
}
if (_standUnit != null)
{
// 添加buff
_AddBuffToUnit();
}
}
else
{
// 判断当前单位是否离开格子
var targetCellIndex = _standUnit.transData.cellIndex;
if (targetCellIndex != selfCellIndex)
{
// 移除buff
_RemoveBuffFromUnit();
// 置空
_standUnit = null;
}
}
}
protected override void _OnExit(NBaseState exitState,
object param)
{
base._OnExit(exitState, param);
if (_standUnit != null)
{
// 移除buff
_RemoveBuffFromUnit();
// 置空
_standUnit = null;
}
}
private void _AddBuffToUnit()
{
for (int i = 0; i < bulletBox.buffIds.Count; i++)
{
var buffId = bulletBox.buffIds[i];
_standUnit.buffManager.AddBuffById(buffId, owner);
}
}
private void _RemoveBuffFromUnit()
{
for (var i = 0; i < bulletBox.buffIds.Count; ++i)
{
var buffId = bulletBox.buffIds[i];
_standUnit.buffManager.RemoveBuffById(buffId);
}
}
}
}