增加调试
This commit is contained in:
parent
b836ea4dbd
commit
3f7c4cc906
@ -28,6 +28,7 @@ namespace Logic.AI
|
||||
EmergencyDefend,
|
||||
Retreat,
|
||||
Common,
|
||||
None,
|
||||
}
|
||||
|
||||
|
||||
@ -327,19 +328,15 @@ namespace Logic.AI
|
||||
// 计算科技对国家的资源分
|
||||
public int CalCountryTechResourceScore(TechType techType)
|
||||
{
|
||||
HashSet<CityData> cityList = Map.GetCityDataSetByPlayerId(Player.Id);
|
||||
var gridSet = Map.GetPlayerTerritoryGridIdSet(Player.Id);
|
||||
int score = 0;
|
||||
foreach(var city in cityList)
|
||||
foreach(var gid in gridSet)
|
||||
{
|
||||
HashSet<uint> gridList = new HashSet<uint>();
|
||||
city.Territory.GetAllTerritoryArea(gridList);
|
||||
foreach(var gid in gridList)
|
||||
{
|
||||
if (!Map.GridMap.GetGridDataByGid(gid, out var grid)) continue;
|
||||
//计算每一种techActions在grid下的资源分
|
||||
score += CalcGridTechResourceScore(techType, grid);
|
||||
}
|
||||
if (!Map.GridMap.GetGridDataByGid(gid, out var grid)) continue;
|
||||
//计算每一种techActions在grid下的资源分
|
||||
score += CalcGridTechResourceScore(techType, grid);
|
||||
}
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
@ -358,7 +355,6 @@ namespace Logic.AI
|
||||
}
|
||||
if (t.ActionType == CommonActionType.Build)
|
||||
{
|
||||
|
||||
if (!Table.Instance.GridAndResourceDataAssets.GetResourceInfo(t.ResourceType, out var resourceInfo))
|
||||
continue;
|
||||
score += t.ResourceType switch
|
||||
@ -1232,24 +1228,6 @@ namespace Logic.AI
|
||||
|
||||
foreach (var city in selfCity) CityStrategy.TryAdd(city, CountryStrategy);
|
||||
}
|
||||
|
||||
public Strategy GetPlayerStrategy()
|
||||
{
|
||||
return CountryStrategy;
|
||||
}
|
||||
|
||||
public Strategy GetUnitStrategy(uint id)
|
||||
{
|
||||
if (!Map.UnitMap.GetUnitDataByUnitId(id, out var unit)) return Strategy.Common;
|
||||
if (FreeUnitStrategy.TryGetValue(unit, out var strategy)) return strategy;
|
||||
return LegionStrategy.GetValueOrDefault(unit.LegionId, Strategy.Common);
|
||||
}
|
||||
|
||||
public Strategy GetCityStrategy(uint id)
|
||||
{
|
||||
if (!Map.CityMap.GetCityById(id, out var city)) return Strategy.Common;
|
||||
return CityStrategy.GetValueOrDefault(city, Strategy.Common);
|
||||
}
|
||||
}
|
||||
|
||||
public class MatchResult
|
||||
|
||||
@ -31,16 +31,9 @@ namespace Logic.Editor
|
||||
// 背景
|
||||
private GUIStyle _redBoxStyle;
|
||||
private GUIStyle _whiteBoxStyle;
|
||||
|
||||
private AIConfigAsset _asset;
|
||||
private AIActionScoreCalculator _calculator;
|
||||
private Main _main;
|
||||
|
||||
private PlayerData _player;
|
||||
private CalculateResult _result;
|
||||
private uint _curPlayerId;
|
||||
private EditorType _editorType;
|
||||
private bool _isShowTechScore;
|
||||
private AITechScoreCalculator _techCalculator;
|
||||
private Main _main;
|
||||
|
||||
|
||||
[MenuItem("Tools/AI 编辑器")]
|
||||
@ -64,19 +57,6 @@ namespace Logic.Editor
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
if (_calculator == null) _calculator = new AIActionScoreCalculator();
|
||||
if (!_asset)
|
||||
{
|
||||
var path = $"Assets/Resources/DataAssets/AIConfig.asset";
|
||||
_asset = AssetDatabase.LoadAssetAtPath<AIConfigAsset>(path);
|
||||
if (!_asset)
|
||||
{
|
||||
_asset = CreateInstance<AIConfigAsset>();
|
||||
AssetDatabase.CreateAsset(_asset, path);
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
}
|
||||
if (_redBoxStyle == null)
|
||||
{
|
||||
_redBoxStyle = InspectorUtils.GetHelpBoxStyle();
|
||||
@ -90,130 +70,13 @@ namespace Logic.Editor
|
||||
|
||||
GUI.skin.button.wordWrap = true;
|
||||
_barPosition = EditorGUILayout.BeginScrollView(_barPosition);
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth("保存"))
|
||||
{
|
||||
EditorUtility.SetDirty(_asset);
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth("保存游戏进度"))
|
||||
{
|
||||
MapData.SaveMapData(_main.MapData);
|
||||
}
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth("评分系数编辑"))
|
||||
{
|
||||
_editorType = EditorType.Asset;
|
||||
}
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth("科技系数编辑"))
|
||||
{
|
||||
_editorType = EditorType.Tech;
|
||||
}
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth("评分得分展示"))
|
||||
{
|
||||
_editorType = EditorType.ScoreShow;
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
if(_editorType == EditorType.Asset) OnGUIEditorAsset();
|
||||
if(_editorType == EditorType.Tech) OnGUIEditorTechInfo();
|
||||
if(_editorType == EditorType.ScoreShow) OnGUIRunTime();
|
||||
|
||||
OnGUIRunTime();
|
||||
OnShowPlayerInfo();
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
}
|
||||
|
||||
private void OnGUIEditorTechInfo()
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth("初始化科技系数"))
|
||||
{
|
||||
_asset.TechInfoList.Clear();
|
||||
for (int i = (int)TechType.Climbing; i <= (int)TechType.EgyptSakuya; i++)
|
||||
{
|
||||
_asset.TechInfoList.Add(new AICalculatorTechInfo((TechType)i, 1));
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
foreach (var techInfo in _asset.TechInfoList)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>{techInfo.TechType} 系数</b>");
|
||||
techInfo.Ratio = EditorGUILayout.FloatField(techInfo.Ratio);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.Space();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGUIEditorAsset()
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>钱评分系数</b>");
|
||||
_asset.MoneyScore = EditorGUILayout.FloatField(_asset.MoneyScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>小兵评分系数</b>");
|
||||
_asset.UnitScore = EditorGUILayout.FloatField(_asset.UnitScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>城市评分系数</b>");
|
||||
_asset.CityScore = EditorGUILayout.FloatField(_asset.CityScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>城市防守评分系数</b>");
|
||||
_asset.CityDefendScore = EditorGUILayout.FloatField(_asset.CityDefendScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>每个可达地块的评分</b>");
|
||||
_asset.OneCanMoveGridMaxScore = EditorGUILayout.FloatField(_asset.OneCanMoveGridMaxScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>每个视野地块的评分</b>");
|
||||
_asset.OneSightGridMaxScore = EditorGUILayout.FloatField(_asset.OneSightGridMaxScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>小兵进攻评分系数</b>");
|
||||
_asset.UnitAttackScore = EditorGUILayout.FloatField(_asset.UnitAttackScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>小兵回防评分系数</b>");
|
||||
_asset.UnitDefendScore = EditorGUILayout.FloatField(_asset.UnitDefendScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>小兵探索未知区域评分</b>");
|
||||
_asset.UnitExploreScore = EditorGUILayout.FloatField(_asset.UnitExploreScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>探索村庄评分</b>");
|
||||
_asset.UnitExploreCityCenterScore = EditorGUILayout.FloatField(_asset.UnitExploreCityCenterScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>探索遗迹评分</b>");
|
||||
_asset.UnitExploreTreasureScore = EditorGUILayout.FloatField(_asset.UnitExploreTreasureScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>探索海星评分</b>");
|
||||
_asset.UnitExploreStarfishScore = EditorGUILayout.FloatField(_asset.UnitExploreStarfishScore);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>未来预期收益评分系数</b>");
|
||||
_asset.FutureScoreTransformValue = EditorGUILayout.FloatField(_asset.FutureScoreTransformValue);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
|
||||
private void OnGUIRunTime()
|
||||
{
|
||||
if (!Application.isPlaying) return;
|
||||
@ -224,94 +87,56 @@ namespace Logic.Editor
|
||||
_main = obj.GetComponent<Main>();
|
||||
if (!_main) return;
|
||||
}
|
||||
|
||||
if (_calculator == null) _calculator = new AIActionScoreCalculator();
|
||||
if (_main?.MapData == null) return;
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
foreach (var player in _main.MapData.PlayerMap.PlayerDataList)
|
||||
{
|
||||
if (player.Id == _main.MapData.PlayerMap.SelfPlayerId)
|
||||
{
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth($"主玩家{player.Id}"))
|
||||
{
|
||||
_curPlayerId = player.Id;
|
||||
_result = _calculator.CalculateScore(_main.MapData, player, _asset);
|
||||
_player = player;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth($"玩家{player.Id}"))
|
||||
{
|
||||
_curPlayerId = player.Id;
|
||||
_result = _calculator.CalculateScore(_main.MapData, player, _asset);
|
||||
_player = player;
|
||||
}
|
||||
}
|
||||
if (player.Id == _main.MapData.PlayerMap.SelfPlayerId) continue;
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth($"玩家{player.Id}")) _player = player;
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
if (_result == null) return;
|
||||
foreach (var kv in _calculator.UnitScore)
|
||||
{
|
||||
if (!_main.MapData.GetPlayerIdByUnitId(kv.Key.Id, out var owner)) continue;
|
||||
if (owner != _curPlayerId) continue;
|
||||
var target = _calculator.UnitTargetMap.GetUnitTargetByUnitId(kv.Key.Id);
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
var pos = _main.MapData.GetGridDataByUnitId(kv.Key.Id, out var grid);
|
||||
InspectorUtils.InspectorTextWidthRich($"小兵{kv.Key.Id}评分: {kv.Value}, 位置为 {grid.Pos.X}, {grid.Pos.Y}");
|
||||
if (target != null) InspectorUtils.InspectorTextWidthRich($" 目标为:{target.TargetType}, 位置为:{target.Grid.Pos.X}, {target.Grid.Pos.Y}");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
foreach (var kv in _calculator.CityScore)
|
||||
{
|
||||
if (!_main.MapData.GetPlayerIdByCityId(kv.Key.Id, out var owner)) continue;
|
||||
if (owner != _curPlayerId) continue;
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"城市{kv.Key.Id}评分: {kv.Value}");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
foreach (var kv in _calculator.CityDefendScore)
|
||||
{
|
||||
if (!_main.MapData.GetPlayerIdByCityId(kv.Key.Id, out var owner)) continue;
|
||||
if (owner != _curPlayerId) continue;
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"城市{kv.Key.Id}防御评分: {kv.Value}");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
InspectorUtils.InspectorTextWidthRich($"----------------------------------------------------");
|
||||
InspectorUtils.InspectorTextWidthRich($"----------------------------------------------------");
|
||||
|
||||
foreach (var kv in _result.ScoreDict)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"{kv.Key}策略评分: {kv.Value}");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"策略总评分: {_result.GetAllScore()}");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
_isShowTechScore = EditorGUILayout.Toggle(_isShowTechScore, GUILayout.Width(16));
|
||||
if (_isShowTechScore) OnGUITechScore();
|
||||
}
|
||||
|
||||
private void OnGUITechScore()
|
||||
private void OnShowPlayerInfo()
|
||||
{
|
||||
InspectorUtils.InspectorTextWidthRich($"----------------------------------------------------");
|
||||
InspectorUtils.InspectorTextWidthRich($"----------------------------------------------------");
|
||||
_techCalculator ??= new AITechScoreCalculator();
|
||||
foreach (TechType t in System.Enum.GetValues(typeof(TechType)))
|
||||
if (_main?.MapData == null || _player == null) return;
|
||||
|
||||
GUI.skin.button.wordWrap = true;
|
||||
_barPosition = EditorGUILayout.BeginScrollView(_barPosition);
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>玩家ID: {_player.Id}, 国家战略为: {MainEditor.Instance.GetPlayerStrategy(_player.Id)}</b>");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginVertical(_whiteBoxStyle);
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>城市信息</b>");
|
||||
var selfCity = new HashSet<CityData>();
|
||||
_main.MapData.GetCityDataListByPlayerId(_player.Id, selfCity);
|
||||
foreach (var city in selfCity)
|
||||
{
|
||||
if (t == TechType.None) continue;
|
||||
var score = _techCalculator.CalculateTechScorePro(_main.MapData, _player, t, _asset);
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"科技 {t} 学习后得分为: {score * _asset.GetTechInfo(t).Ratio}");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>ID: {city.Id}, 策略: {MainEditor.Instance.GetCityStrategy(city.Id)}</b>");
|
||||
}
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.Space();
|
||||
|
||||
EditorGUILayout.BeginVertical(_whiteBoxStyle);
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>小兵信息</b>");
|
||||
var selfUnits = new HashSet<UnitData>();
|
||||
_main.MapData.GetUnitDataListByPlayerId(_player.Id, selfUnits);
|
||||
foreach (var unit in selfUnits)
|
||||
{
|
||||
var strategy = MainEditor.Instance.GetUnitStrategy(unit.Id, unit.LegionId, _player.Id);
|
||||
InspectorUtils.InspectorTextWidthRich(unit.LegionId == 0
|
||||
? $"<b>ID: {unit.Id}, 自由人, 策略: {strategy}</b>"
|
||||
: $"<b>ID: {unit.Id}, 军团ID:{unit.LegionId}, 策略: {strategy}</b>");
|
||||
}
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using Logic.AI;
|
||||
using UnityEngine;
|
||||
|
||||
@ -15,9 +16,37 @@ namespace Logic
|
||||
public bool IsEditor = false;
|
||||
public bool IsGo = false;
|
||||
public AICalculatorData Data;
|
||||
private Dictionary<uint, Strategy> _playerStrategy;
|
||||
private Dictionary<uint, Strategy> _cityStrategy;
|
||||
private Dictionary<uint, Strategy> _unitStrategy;
|
||||
private Dictionary<uint, Strategy> _legionStrategy;
|
||||
|
||||
public static MainEditor Instance = new MainEditor();
|
||||
|
||||
public MainEditor()
|
||||
{
|
||||
_playerStrategy = new Dictionary<uint, Strategy>();
|
||||
_cityStrategy = new Dictionary<uint, Strategy>();
|
||||
_unitStrategy = new Dictionary<uint, Strategy>();
|
||||
_legionStrategy = new Dictionary<uint, Strategy>();
|
||||
}
|
||||
|
||||
public Strategy GetPlayerStrategy(uint pid)
|
||||
{
|
||||
return _playerStrategy.GetValueOrDefault(pid, Strategy.None);
|
||||
}
|
||||
|
||||
public Strategy GetUnitStrategy(uint uid, uint legion, uint playerId)
|
||||
{
|
||||
if (legion == 0) return _unitStrategy.GetValueOrDefault(uid, Strategy.None);
|
||||
return _legionStrategy.GetValueOrDefault(legion * 10000 + playerId, Strategy.None);
|
||||
}
|
||||
|
||||
public Strategy GetCityStrategy(uint cid)
|
||||
{
|
||||
return _cityStrategy.GetValueOrDefault(cid, Strategy.None);
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.F10))
|
||||
@ -35,6 +64,13 @@ namespace Logic
|
||||
IsGo = true;
|
||||
Debug.LogWarning("Space");
|
||||
}
|
||||
|
||||
if (Data == null) return;
|
||||
if (Data.Player == null) return;
|
||||
_playerStrategy[Data.Player.Id] = Data.CountryStrategy;
|
||||
foreach (var kv in Data.CityStrategy) _cityStrategy[kv.Key.Id] = kv.Value;
|
||||
foreach (var kv in Data.FreeUnitStrategy) _unitStrategy[kv.Key.Id] = kv.Value;
|
||||
foreach (var kv in Data.LegionStrategy) _legionStrategy[kv.Key * 10000 + Data.Player.Id] = kv.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user