This commit is contained in:
daixiawu 2025-05-16 18:47:16 +08:00
commit 4fde5ed80c
3 changed files with 59 additions and 7 deletions

View File

@ -109,6 +109,25 @@ namespace Logic.AI
{
MaxScoreAction.Param.MapData = _mapData;
MaxScoreAction.Param.RefreshParams();
if (MaxScoreAction.ActionLogic is UnitAttackAction)
{
_mapData.GetGridDataByUnitId(MaxScoreAction.Param.UnitData.Id, out var grid);
_mapData.GetGridDataByUnitId(MaxScoreAction.Param.TargetUnitData.Id, out var target);
Debug.Log($"小兵攻击 {MaxScoreAction.Param.UnitData.Id}, " +
$"位置{grid.Pos.X}, {grid.Pos.Y}, " +
$"目标 {MaxScoreAction.Param.TargetUnitData.Id}, " +
$"目标位置{target.Pos.X}, {target.Pos.Y}");
}
if (MaxScoreAction.ActionLogic is UnitMoveAction)
{
_mapData.GetGridDataByUnitId(MaxScoreAction.Param.UnitData.Id, out var grid);
Debug.Log($"小兵移动 {MaxScoreAction.Param.UnitData.Id}, " +
$"位置{grid.Pos.X}, {grid.Pos.Y}, " +
$"目标 {MaxScoreAction.Param.GridData.Pos.X}, {MaxScoreAction.Param.GridData.Pos.Y}");
}
MaxScoreAction.ActionLogic.Execute(MaxScoreAction.Param);
MaxScoreAction = null;
AILogicState = AILogicState.Pausing;

View File

@ -49,7 +49,12 @@ namespace Logic.Action
public UnitData TargetUnitData { get; set; }
public MainObjectType MainObjectType { get; set; }
public uint PlayerId;
public uint UnitId;
public uint CityId;
public uint GridId;
public uint TargetUnitId;
public CommonActionParams(MapData mapData=null, PlayerData playerData=null,
UnitData unitData=null, CityData cityData=null, GridData gridData=null, UnitData targetUnit=null, MainObjectType mainObjectType=MainObjectType.None)
{
@ -60,27 +65,38 @@ namespace Logic.Action
GridData = gridData;
TargetUnitData = targetUnit;
MainObjectType = mainObjectType;
PlayerId = 0;
UnitId = 0;
CityId = 0;
GridId = 0;
TargetUnitId = 0;
if (PlayerData != null) PlayerId = PlayerData.Id;
if (UnitData != null) UnitId = UnitData.Id;
if (CityData != null) CityId = CityData.Id;
if (GridData != null) GridId = GridData.Id;
if (TargetUnitData != null) TargetUnitId = TargetUnitData.Id;
}
public void RefreshParams()
{
if (PlayerData != null && MapData.PlayerMap.GetPlayerDataByPlayerID(PlayerData.Id, out var player))
if (PlayerId != 0 && MapData.PlayerMap.GetPlayerDataByPlayerID(PlayerId, out var player))
{
PlayerData = player;
}
if (UnitData != null && MapData.UnitMap.GetUnitDataByUnitId(UnitData.Id, out var unit))
if (UnitId != 0 && MapData.UnitMap.GetUnitDataByUnitId(UnitId, out var unit))
{
UnitData = unit;
}
if (CityData != null && MapData.CityMap.GetCityDataByTerritoryGridId(CityData.Id, out var city))
if (CityId != 0 && MapData.CityMap.GetCityDataByTerritoryGridId(CityId, out var city))
{
CityData = city;
}
if (GridData != null && MapData.GridMap.GetGridDataByGid(GridData.Id, out var grid))
if (GridId != 0 && MapData.GridMap.GetGridDataByGid(GridId, out var grid))
{
GridData = grid;
}
if (TargetUnitData != null && MapData.UnitMap.GetUnitDataByUnitId(TargetUnitData.Id, out var target))
if (TargetUnitId != 0 && MapData.UnitMap.GetUnitDataByUnitId(TargetUnitId, out var target))
{
TargetUnitData = target;
}
@ -457,12 +473,22 @@ namespace Logic.Action
{
var result = Main.UnitLogic.CheckUnitCanMoveOrAttack(map, unit, grid);
if (result == MoveAttackType.None) continue;
if (result == MoveAttackType.Attack)
{
if (unit.AP <= 0 || !map.GetUnitDataByGid(grid.Id, out var targetUnit)) continue;
var param = new CommonActionParams(map, unitData:unit, targetUnit:targetUnit);
param.RefreshParams();
actionList.Add(new AIActionBase(param, attackAction));
if (map.GetGridDataByUnitId(unit.Id, out var unitGrid))
{
Debug.Log($"生成Action 小兵攻击 {unit.Id}, 攻击范围{unit.GetAttackRange()}" +
$"位置{unitGrid.Pos.X}, {unitGrid.Pos.Y}, " +
$"目标 {targetUnit.Id}, " +
$"目标位置{grid.Pos.X}, {grid.Pos.Y}");
}
continue;
}
@ -1583,6 +1609,14 @@ namespace Logic.Action
public override bool Execute(CommonActionParams actionParams)
{
if (actionParams.MapData.GetGridDataByUnitId(actionParams.UnitData.Id, out var unitGrid))
{
var distance = actionParams.MapData.GridMap.CalcDistance(unitGrid, actionParams.GridData);
if (distance > 3)
{
Debug.LogError($"!!!");
}
}
Main.UnitLogic.MoveTo(actionParams.MapData, actionParams.UnitData, actionParams.GridData);
return true;
}

View File

@ -78,7 +78,6 @@ namespace Logic
public bool Attack(MapData mapData, UnitData unit1, UnitData unit2)
{
if (!mapData.GetPlayerDataByUnitId(unit1.Id, out var player1)) return false;
if (!mapData.GetPlayerDataByUnitId(unit2.Id, out var player2)) return false;
if (!mapData.GetCityDataByUnitId(unit1.Id, out var city1)) return false;