diff --git a/My project/Assets/Resources/DataAssets/AiConfig.asset b/My project/Assets/Resources/DataAssets/AiConfig.asset index 0a32e8fe6..3d7ed3940 100644 --- a/My project/Assets/Resources/DataAssets/AiConfig.asset +++ b/My project/Assets/Resources/DataAssets/AiConfig.asset @@ -25,6 +25,7 @@ MonoBehaviour: UnitExploreTreasureScore: 10 UnitExploreStarfishScore: 5 FutureScoreTransformValue: 0.5 + MilitaryConstructionRatioValue: 0 TechInfoList: - TechType: 1 Ratio: 1 diff --git a/My project/Assets/Scripts/Logic/AI/AIActionScoreCalculator.cs b/My project/Assets/Scripts/Logic/AI/AIActionScoreCalculator.cs index e16c6e084..7ce5d1670 100644 --- a/My project/Assets/Scripts/Logic/AI/AIActionScoreCalculator.cs +++ b/My project/Assets/Scripts/Logic/AI/AIActionScoreCalculator.cs @@ -82,7 +82,9 @@ namespace Logic.AI private HashSet _unitOnCity; private UnitTargetMap _unitTargetMap; private List _actionList; - + private AITechScoreCalculator _techCalculator; + + public AITechScoreCalculator TechScoreCalculator => _techCalculator; public HashSet CanMoveGrid => _canMoveGrid; public Dictionary UnitScore => _unitScore; public Dictionary CityScore => _cityScore; @@ -536,8 +538,15 @@ namespace Logic.AI public void CalculateTechScore(MapData mapData, PlayerData playerData, CalculateResult result, TechType techType) { - var ratio = _cfg.GetTechInfo(techType).Ratio; - result.ScoreDict[AICalculatorType.TechScore] = AITechScoreCalculator.CalculateTechScore(mapData, playerData, techType) * ratio; + _techCalculator ??= new AITechScoreCalculator(); + var techInfo = _cfg.GetTechInfo(techType); + if (techInfo == null) + { + Debug.LogWarning($"找不到科技信息,科技类型:{techType}"); + return; + } + + result.ScoreDict[AICalculatorType.TechScore] = _techCalculator.CalculateTechScorePro(mapData, playerData, techType, _cfg) * techInfo.Ratio; } } diff --git a/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs b/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs index 225c2de1d..20c52b7bc 100644 --- a/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs +++ b/My project/Assets/Scripts/Logic/Achievement/AchievementDataManager.cs @@ -16,7 +16,7 @@ namespace RuntimeData { public class AchievementDataManager { - public static AchievementDataManager Instance; + public static AchievementDataManager Instance = new AchievementDataManager(); public AchievementAsset Achievement; public List FinishedCache; diff --git a/My project/Assets/Scripts/Logic/Editor/AIConfigEditowWindow.cs b/My project/Assets/Scripts/Logic/Editor/AIConfigEditowWindow.cs index 842984c34..3f1211da2 100644 --- a/My project/Assets/Scripts/Logic/Editor/AIConfigEditowWindow.cs +++ b/My project/Assets/Scripts/Logic/Editor/AIConfigEditowWindow.cs @@ -35,9 +35,12 @@ namespace Logic.Editor 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; [MenuItem("Tools/AI 编辑器")] @@ -232,6 +235,7 @@ namespace Logic.Editor { _curPlayerId = player.Id; _result = _calculator.CalculateScore(_main.MapData, player, _asset); + _player = player; } } else @@ -240,6 +244,7 @@ namespace Logic.Editor { _curPlayerId = player.Id; _result = _calculator.CalculateScore(_main.MapData, player, _asset); + _player = player; } } } @@ -288,6 +293,24 @@ namespace Logic.Editor EditorGUILayout.BeginHorizontal(); InspectorUtils.InspectorTextWidthRich($"策略总评分: {_result.GetAllScore()}"); EditorGUILayout.EndHorizontal(); + + _isShowTechScore = EditorGUILayout.Toggle(_isShowTechScore, GUILayout.Width(16)); + if (_isShowTechScore) OnGUITechScore(); + } + + private void OnGUITechScore() + { + InspectorUtils.InspectorTextWidthRich($"----------------------------------------------------"); + InspectorUtils.InspectorTextWidthRich($"----------------------------------------------------"); + _techCalculator ??= new AITechScoreCalculator(); + foreach (TechType t in System.Enum.GetValues(typeof(TechType))) + { + 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(); + } } } } \ No newline at end of file