159 lines
5.8 KiB
C#
159 lines
5.8 KiB
C#
using System;
|
|
using Framework;
|
|
using Gameplay.Common;
|
|
using Gameplay.Unit;
|
|
using Gameplay.Level;
|
|
|
|
namespace Gameplay.Area
|
|
{
|
|
public class AreaEventHandler : IEventHandler
|
|
{
|
|
private readonly AreaManager _areaManager;
|
|
|
|
public AreaEventHandler(AreaManager areaManager)
|
|
{
|
|
_areaManager = areaManager;
|
|
}
|
|
|
|
public void RegisterEvents()
|
|
{
|
|
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UNIT_READY, (Action<GameUnit>)OnUnitReady);
|
|
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UNIT_REMOVE, (Action<GameUnit>)OnUnitRemove);
|
|
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UNIT_CELLINDEX_CHANGE, (Action<GameUnit>)OnUnitCellChange);
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.LevelUnitSelect, (Action<GameUnit>)OnSelectCharacter);
|
|
EventManager.Instance.Register(EventManager.EventName.LevelUnitUnSelect, (Action<GameUnit>)OnUnSelectCharacter);
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UP_VEHICLE, (Action<GameUnit>)OnUpVehicle);
|
|
EventManager.Instance.Register(EventManager.EventName.INFIGHT_DOWN_VEHICLE, (Action<EDDownVehicle>)OnDownVehicle);
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.INFIGHT_SKILL_END_PAUSE, OnSkillPauseEnd);
|
|
}
|
|
|
|
public void UnregisterEvents()
|
|
{
|
|
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UNIT_READY, (Action<GameUnit>)OnUnitReady);
|
|
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UNIT_REMOVE, (Action<GameUnit>)OnUnitRemove);
|
|
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UNIT_CELLINDEX_CHANGE, (Action<GameUnit>)OnUnitCellChange);
|
|
|
|
EventManager.Instance.Unregister(EventManager.EventName.LevelUnitSelect, (Action<GameUnit>)OnSelectCharacter);
|
|
EventManager.Instance.Unregister(EventManager.EventName.LevelUnitUnSelect, (Action<GameUnit>)OnUnSelectCharacter);
|
|
|
|
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UP_VEHICLE, (Action<GameUnit>)OnUpVehicle);
|
|
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_DOWN_VEHICLE, (Action<EDDownVehicle>)OnDownVehicle);
|
|
|
|
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_SKILL_END_PAUSE, OnSkillPauseEnd);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
UnregisterEvents();
|
|
}
|
|
|
|
private void OnUnitReady(GameUnit unit)
|
|
{
|
|
var bornCellIndex = unit.transData.cellIndex;
|
|
if (AreaManager.ENABLE_LOG)
|
|
Log($"Unit: {unit.GetID()} Ready at: {bornCellIndex}");
|
|
|
|
var getUnits = _areaManager.GetUnitsByCellIndex(bornCellIndex);
|
|
if (getUnits.Contains(unit))
|
|
{
|
|
return;
|
|
}
|
|
|
|
_areaManager._AddUnitToCellIndex(bornCellIndex, unit);
|
|
}
|
|
|
|
private void OnUnitRemove(GameUnit unit)
|
|
{
|
|
var cellIndex = unit.transData.cellIndex;
|
|
if (AreaManager.ENABLE_LOG)
|
|
Log($"Unit: {unit.GetID()} Remove at: {cellIndex}");
|
|
|
|
_areaManager._OnUnitRemove(unit);
|
|
}
|
|
|
|
private void OnUnitCellChange(GameUnit unit)
|
|
{
|
|
var lastCellIndex = unit.transData.lastCellIndex;
|
|
var newCellIndex = unit.transData.cellIndex;
|
|
|
|
if (lastCellIndex != -1)
|
|
{
|
|
if (_areaManager._cellIndex2Units.TryGetValue(lastCellIndex, out var unitList))
|
|
{
|
|
unitList.Remove(unit);
|
|
}
|
|
}
|
|
|
|
_areaManager._AddUnitToCellIndex(newCellIndex, unit);
|
|
if (AreaManager.ENABLE_LOG)
|
|
Log($"Unit CellIndexChange:{unit.GetID()} from:{lastCellIndex} to {newCellIndex}");
|
|
}
|
|
|
|
private void OnSelectCharacter(GameUnit c)
|
|
{
|
|
if (!LevelManager.Instance.CurrentLevel.IsInBattle())
|
|
{
|
|
return;
|
|
}
|
|
|
|
_areaManager.attackArea.SetOwner(c);
|
|
_areaManager.moveAreaView.Show(c);
|
|
}
|
|
|
|
private void OnUnSelectCharacter(GameUnit c)
|
|
{
|
|
if (!LevelManager.Instance.CurrentLevel.IsInBattle())
|
|
{
|
|
return;
|
|
}
|
|
|
|
_areaManager.attackArea.HideArea();
|
|
_areaManager.moveAreaView.Hide();
|
|
}
|
|
|
|
private void OnUpVehicle(GameUnit unit)
|
|
{
|
|
var cellIndex = unit.transData.cellIndex;
|
|
var unitList = _areaManager._cellIndex2Units[cellIndex];
|
|
unitList.Remove(unit);
|
|
if (AreaManager.ENABLE_LOG)
|
|
Log($"Unit: {unit.GetID()} Up Vehicle at:{cellIndex}");
|
|
}
|
|
|
|
private void OnDownVehicle(EDDownVehicle ed)
|
|
{
|
|
var unit = ed.unit;
|
|
var bornCellIndex = unit.transData.cellIndex;
|
|
if (AreaManager.ENABLE_LOG)
|
|
Log($"Unit: {unit.GetID()} Down Vehicle at:{bornCellIndex}");
|
|
|
|
var getUnits = _areaManager.GetUnitsByCellIndex(bornCellIndex);
|
|
if (getUnits.Contains(unit))
|
|
{
|
|
return;
|
|
}
|
|
|
|
_areaManager._AddUnitToCellIndex(bornCellIndex, unit);
|
|
}
|
|
|
|
private void OnSkillPauseEnd()
|
|
{
|
|
if (_areaManager.attackArea == null)
|
|
{
|
|
DebugUtil.LogError("AttackArea为空");
|
|
return;
|
|
}
|
|
_areaManager.attackArea.CancelForce();
|
|
}
|
|
|
|
private void Log(string str)
|
|
{
|
|
if (!AreaManager.ENABLE_LOG) return;
|
|
DebugUtil.Log($"[AreaManager] {str}");
|
|
}
|
|
}
|
|
}
|