AI 优化
This commit is contained in:
parent
a53b2b54c0
commit
2a6a964465
@ -83,13 +83,15 @@ namespace Logic.AI
|
||||
private Dictionary<UnitData, float> _unitScore;
|
||||
private Dictionary<CityData, float> _cityScore;
|
||||
private Dictionary<CityData, float> _cityDefendScore;
|
||||
private HashSet<UnitData> _unitOnCity;
|
||||
private HashSet<UnitData> _unitOnCityCanMove;
|
||||
private HashSet<UnitData> _unitInCityTerritory;
|
||||
private HashSet<CityData> _defendCity;
|
||||
private UnitTargetMap _unitTargetMap;
|
||||
private List<CommonActionId> _actionList;
|
||||
private AITechScoreCalculator _techCalculator;
|
||||
private Dictionary<UnitData, float> _unitAttack;
|
||||
private Dictionary<UnitData, float> _unitDefend;
|
||||
private bool _hasUnitMoney;
|
||||
|
||||
|
||||
public AITechScoreCalculator TechScoreCalculator => _techCalculator;
|
||||
@ -97,13 +99,13 @@ namespace Logic.AI
|
||||
public Dictionary<UnitData, float> UnitScore => _unitScore;
|
||||
public Dictionary<CityData, float> CityScore => _cityScore;
|
||||
public Dictionary<CityData, float> CityDefendScore => _cityDefendScore;
|
||||
public HashSet<UnitData> UnitOnCity => _unitOnCity;
|
||||
public UnitTargetMap UnitTargetMap => _unitTargetMap;
|
||||
|
||||
|
||||
private bool IsTrueAction(AIActionBase aiAction)
|
||||
{
|
||||
if (aiAction.ActionLogic is UnitAttackAction && UnitOnCity.Contains(aiAction.Param.TargetUnitData)) return true;
|
||||
if (aiAction.ActionLogic is UnitMoveAction && _unitOnCityCanMove.Contains(aiAction.Param.UnitData)) return true;
|
||||
if (aiAction.ActionLogic is UnitAttackAction && _unitInCityTerritory.Contains(aiAction.Param.TargetUnitData)) return true;
|
||||
if (aiAction.ActionLogic.ActionId == null) return false;
|
||||
if (aiAction.ActionLogic.ActionId.UnitActionType == UnitActionType.Capture) return true;
|
||||
if (aiAction.ActionLogic.ActionId.UnitActionType == UnitActionType.Gather) return true;
|
||||
@ -152,13 +154,15 @@ namespace Logic.AI
|
||||
_unitScore ??= new Dictionary<UnitData, float>();
|
||||
_cityScore ??= new Dictionary<CityData, float>();
|
||||
_cityDefendScore ??= new Dictionary<CityData, float>();
|
||||
_unitOnCity ??= new HashSet<UnitData>();
|
||||
_unitOnCityCanMove ??= new HashSet<UnitData>();
|
||||
_unitInCityTerritory ??= new HashSet<UnitData>();
|
||||
_defendCity ??= new HashSet<CityData>();
|
||||
_canMoveGrid ??= new HashSet<GridData>();
|
||||
_unitTargetMap ??= new UnitTargetMap();
|
||||
_unitScore.Clear();
|
||||
_cityScore.Clear();
|
||||
_unitOnCity.Clear();
|
||||
_unitOnCityCanMove.Clear();
|
||||
_unitInCityTerritory.Clear();
|
||||
_defendCity.Clear();
|
||||
_canMoveGrid.Clear();
|
||||
UnitTargetMap.Clear();
|
||||
@ -319,10 +323,12 @@ namespace Logic.AI
|
||||
foreach (var unit in mapData.UnitMap.UnitList)
|
||||
{
|
||||
if (selfUnits.Contains(unit)) continue;
|
||||
if (!mapData.GetGridDataByUnitId(unit.Id, out var gridData)) continue;
|
||||
if (!city.Territory.TerritoryArea.Contains(gridData.Id)) continue;
|
||||
_unitOnCity.Add(unit);
|
||||
if (!mapData.GetGridDataByUnitId(unit.Id, out var unitData)) continue;
|
||||
if (!city.Territory.TerritoryArea.Contains(unitData.Id)) continue;
|
||||
_unitInCityTerritory.Add(unit);
|
||||
_defendCity.Add(city);
|
||||
if (!mapData.GetGridDataByCityId(city.Id, out var cityGrid)) continue;
|
||||
if (cityGrid == unitData && !mapData.CheckIfCityFullPopulation(city)) _unitOnCityCanMove.Add(unit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user