diff --git a/My project/Assets/Scripts/Logic/AI/AILogic.cs b/My project/Assets/Scripts/Logic/AI/AILogic.cs index 09e31d9d8..299009cac 100644 --- a/My project/Assets/Scripts/Logic/AI/AILogic.cs +++ b/My project/Assets/Scripts/Logic/AI/AILogic.cs @@ -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; diff --git a/My project/Assets/Scripts/Logic/Action/ActionLogic.cs b/My project/Assets/Scripts/Logic/Action/ActionLogic.cs index 38a5bc3c1..3204f73ee 100644 --- a/My project/Assets/Scripts/Logic/Action/ActionLogic.cs +++ b/My project/Assets/Scripts/Logic/Action/ActionLogic.cs @@ -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; } diff --git a/My project/Assets/Scripts/Logic/Unit/UnitLogic.cs b/My project/Assets/Scripts/Logic/Unit/UnitLogic.cs index 77bb6cf37..73a490a62 100644 --- a/My project/Assets/Scripts/Logic/Unit/UnitLogic.cs +++ b/My project/Assets/Scripts/Logic/Unit/UnitLogic.cs @@ -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;