From e02800f11a78458236e7d6b9dd0fa564ac3207c1 Mon Sep 17 00:00:00 2001 From: wuwenbo Date: Tue, 24 Mar 2026 15:02:23 +0800 Subject: [PATCH] =?UTF-8?q?oss=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/OssStatisticEditorWindow.cs | 130 ++++++++++++------ 1 file changed, 90 insertions(+), 40 deletions(-) diff --git a/Unity/Assets/Scripts/TH1_Logic/Editor/OssStatisticEditorWindow.cs b/Unity/Assets/Scripts/TH1_Logic/Editor/OssStatisticEditorWindow.cs index 792ce4df4..b9355bc31 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Editor/OssStatisticEditorWindow.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Editor/OssStatisticEditorWindow.cs @@ -52,9 +52,10 @@ namespace Logic.Editor public class UnitStatisticResult { + public float MatchCount; // 有效局数 + public float TurnCount; // 有效回合数 public float AppearCount; // 单局出战次数 public float EarliestAppearTurn; // 单局最早出战回合 - public float AppearMatchCount; // 出战局数 public float DeathCount; // 单局死亡次数 public float KillCount; // 单局击杀次数 public float TotalDamageDealt; // 单局总造成伤害 @@ -63,6 +64,22 @@ namespace Logic.Editor public float AverageDamageTaken; // 单局平均承受伤害 public float TransformFromCount; // 单局被转化次数(作为来源) public float TransformToCount; // 单局转化成此单位次数 + + public void Clear() + { + MatchCount = 0; + TurnCount = 0; + AppearCount = 0; + EarliestAppearTurn = 0; + DeathCount = 0; + KillCount = 0; + TotalDamageDealt = 0; + TotalDamageTaken = 0; + AverageDamageDealt = 0; + AverageDamageTaken = 0; + TransformFromCount = 0; + TransformToCount = 0; + } } @@ -77,8 +94,16 @@ namespace Logic.Editor public class TechStatisticResult { + public float LearnMatchCount; // 学习局数 public float LearnCount; // 单局平均学习次数 public float LearnTurn; // 单局平均首次学习时间 + + public void Clear() + { + LearnMatchCount = 0; + LearnCount = 0; + LearnTurn = 0; + } } @@ -92,12 +117,24 @@ namespace Logic.Editor public class EmpireStatisticResult { public int MatchCount; + public int TurnCount; public float CoinPerTurn; // 单局回合金币 public float TechPointPerTurn; // 单局回合科技点 public float CityCount; // 单局城市数量 public float MaxCityLevel; // 单局最高城市等级 public float CityLevel; // 单局城市等级 public float TechCount; // 单局科技数量 + + public void Clear() + { + MatchCount = 0; + CoinPerTurn = 0; + TechPointPerTurn = 0; + CityCount = 0; + MaxCityLevel = 0; + CityLevel = 0; + TechCount = 0; + } } @@ -138,6 +175,10 @@ namespace Logic.Editor { _unitLimit ??= new UnitStatisticLimit(); _unitResult ??= new UnitStatisticResult(); + _techLimit ??= new TechStatisticLimit(); + _techResult ??= new TechStatisticResult(); + _empireLimit ??= new EmpireStatisticLimit(); + _empireResult ??= new EmpireStatisticResult(); if (_redBoxStyle == null) { @@ -215,20 +256,21 @@ namespace Logic.Editor EditorGUILayout.BeginVertical(_redBoxStyle); - if (_unitResult != null && _unitResult.AppearMatchCount > 0) + if (_unitResult != null) { EditorGUILayout.BeginVertical(_redBoxStyle); InspectorUtils.InspectorTextWidthRich($"===== 统计结果 ====="); InspectorUtils.InspectorTextWidthRich( $"扫描文件数: {_totalFileCount} 有效文件数: {_validFileCount}"); - InspectorUtils.InspectorTextWidthRich($"平均单局出战次数: {_unitResult.AppearCount}"); - InspectorUtils.InspectorTextWidthRich($"平均单局最早出战回合: Turn {_unitResult.EarliestAppearTurn}"); - InspectorUtils.InspectorTextWidthRich($"平均单局击杀次数: {_unitResult.KillCount}"); - InspectorUtils.InspectorTextWidthRich($"平均单局死亡次数: {_unitResult.DeathCount}"); - InspectorUtils.InspectorTextWidthRich($"平均单局总造成伤害: {_unitResult.TotalDamageDealt}"); - InspectorUtils.InspectorTextWidthRich($"平均单局总承受伤害: {_unitResult.TotalDamageTaken}"); - InspectorUtils.InspectorTextWidthRich($"平均单局平均造成伤害: {_unitResult.AverageDamageDealt}"); - InspectorUtils.InspectorTextWidthRich($"平均单局平均承受伤害: {_unitResult.AverageDamageTaken}"); + InspectorUtils.InspectorTextWidthRich($"有效局数: {_unitResult.MatchCount}"); + InspectorUtils.InspectorTextWidthRich($"单局出战次数: {_unitResult.AppearCount}"); + InspectorUtils.InspectorTextWidthRich($"单局最早出战回合: Turn {_unitResult.EarliestAppearTurn}"); + InspectorUtils.InspectorTextWidthRich($"单局击杀次数: {_unitResult.KillCount}"); + InspectorUtils.InspectorTextWidthRich($"单局死亡次数: {_unitResult.DeathCount}"); + InspectorUtils.InspectorTextWidthRich($"单局总造成伤害: {_unitResult.TotalDamageDealt}"); + InspectorUtils.InspectorTextWidthRich($"单局总承受伤害: {_unitResult.TotalDamageTaken}"); + InspectorUtils.InspectorTextWidthRich($"单局每个单位造成伤害: {_unitResult.AverageDamageDealt}"); + InspectorUtils.InspectorTextWidthRich($"单局每个单位承受伤害: {_unitResult.AverageDamageTaken}"); EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); @@ -269,6 +311,7 @@ namespace Logic.Editor InspectorUtils.InspectorTextWidthRich($"===== 统计结果 ====="); InspectorUtils.InspectorTextWidthRich( $"扫描文件数: {_totalFileCount} 有效文件数: {_validFileCount}"); + InspectorUtils.InspectorTextWidthRich($"有效局数: {_techResult.LearnMatchCount}"); InspectorUtils.InspectorTextWidthRich($"平均学习次数(所有局): {_techResult.LearnCount}"); InspectorUtils.InspectorTextWidthRich($"单局平均首次学习时间(只统计学习局): Turn {_techResult.LearnTurn}"); EditorGUILayout.EndVertical(); @@ -291,7 +334,7 @@ namespace Logic.Editor if (InspectorUtils.InspectorButtonWithTextWidth($"计算!!!")) { - CalculateTechStatistic(); + CalculateEmpireStatistic(); } EditorGUILayout.EndVertical(); @@ -306,6 +349,7 @@ namespace Logic.Editor InspectorUtils.InspectorTextWidthRich($"===== 统计结果 ====="); InspectorUtils.InspectorTextWidthRich( $"扫描文件数: {_totalFileCount} 有效文件数: {_validFileCount}"); + InspectorUtils.InspectorTextWidthRich($"有效局数: {_empireResult.MatchCount}"); InspectorUtils.InspectorTextWidthRich($"单局回合金币(有效局): {_empireResult.CoinPerTurn}"); InspectorUtils.InspectorTextWidthRich($"单局回合科技点(有效局): {_empireResult.TechPointPerTurn}"); InspectorUtils.InspectorTextWidthRich($"单局城市数量(有效局): {_empireResult.CityCount}"); @@ -349,14 +393,14 @@ namespace Logic.Editor } } - _unitResult.AppearCount /= _unitResult.AppearMatchCount; - _unitResult.DeathCount /= _unitResult.AppearMatchCount; - _unitResult.KillCount /= _unitResult.AppearMatchCount; - _unitResult.TotalDamageDealt /= _unitResult.AppearMatchCount; - _unitResult.TotalDamageTaken /= _unitResult.AppearMatchCount; - _unitResult.AverageDamageDealt /= _unitResult.AppearMatchCount; - _unitResult.AverageDamageTaken /= _unitResult.AppearMatchCount; - _unitResult.EarliestAppearTurn /= _unitResult.AppearMatchCount; + _unitResult.AppearCount /= _unitResult.MatchCount; + _unitResult.DeathCount /= _unitResult.MatchCount; + _unitResult.KillCount /= _unitResult.MatchCount; + _unitResult.TotalDamageDealt /= _unitResult.MatchCount; + _unitResult.TotalDamageTaken /= _unitResult.MatchCount; + _unitResult.AverageDamageDealt /= _unitResult.MatchCount; + _unitResult.AverageDamageTaken /= _unitResult.MatchCount; + _unitResult.EarliestAppearTurn /= _unitResult.MatchCount; LogSystem.LogInfo($"统计完成: 共扫描 {_totalFileCount} 个文件,有效 {_validFileCount} 个"); } @@ -393,8 +437,8 @@ namespace Logic.Editor } } - _techResult.LearnCount /= _validFileCount; - _techResult.LearnTurn /= _techResult.LearnCount; + _techResult.LearnCount /= _techResult.LearnMatchCount; + _techResult.LearnTurn /= _techResult.LearnMatchCount; LogSystem.LogInfo($"统计完成: 共扫描 {_totalFileCount} 个文件,有效 {_validFileCount} 个"); } @@ -454,9 +498,9 @@ namespace Logic.Editor if (turn < 0 || addUnit.Turn < turn) turn = (int)addUnit.Turn; } - if (turn < 0 || appearCount == 0) return; + if (appearCount == 0) return; + result.MatchCount++; result.EarliestAppearTurn += turn; - result.AppearMatchCount++; result.AppearCount += appearCount; // 2. 伤害统计 & 击杀/死亡:从 Damages 统计 @@ -474,7 +518,7 @@ namespace Logic.Editor if (MatchUnitFullType(dmg.TargetUnitType)) { result.TotalDamageTaken += dmg.TargetDamage; - result.TotalDamageTaken += dmg.TargetDamage / (float)appearCount; + result.AverageDamageTaken += dmg.TargetDamage / (float)appearCount; if (dmg.IsKill) result.DeathCount++; } } @@ -491,34 +535,40 @@ namespace Logic.Editor if (learnTurn < 0 || learnTurn > techCollectData.Turn) learnTurn = (int)techCollectData.Turn; } - if (learnTurn > 0) result.LearnTurn += learnTurn; + if (learnTurn > 0) + { + result.LearnTurn += learnTurn; + result.LearnMatchCount++; + } + + LogSystem.LogInfo($"result.LearnCount {result.LearnCount} result.LearnMatchCount{result.LearnMatchCount}"); } private void ProcessCollectData(CollectData collectData, EmpireStatisticResult result) { - var count = 0; + var resultCache = new EmpireStatisticResult(); foreach (var turnStartData in collectData.OnTurnStarts) { if (!MatchEmpire(turnStartData.Empire)) continue; - result.CoinPerTurn += turnStartData.PlayerCoinPerTurn; - result.TechPointPerTurn += turnStartData.PlayerTechPointPerTurn; - result.CityCount += turnStartData.CityCount; - result.MaxCityLevel += turnStartData.MaxCityLevel; - result.CityLevel += turnStartData.AverageCityLevel; - result.TechCount += turnStartData.TechCount; - count++; + resultCache.CoinPerTurn += turnStartData.PlayerCoinPerTurn; + resultCache.TechPointPerTurn += turnStartData.PlayerTechPointPerTurn; + resultCache.CityCount += turnStartData.CityCount; + resultCache.MaxCityLevel += turnStartData.MaxCityLevel; + resultCache.CityLevel += turnStartData.AverageCityLevel; + resultCache.TechCount += turnStartData.TechCount; + resultCache.TurnCount++; } - if (count > 0) + if (resultCache.TurnCount > 0) { result.MatchCount++; - result.CoinPerTurn /= count; - result.TechPointPerTurn /= count; - result.CityCount /= count; - result.MaxCityLevel /= count; - result.CityLevel /= count; - result.TechCount /= count; + result.CoinPerTurn += resultCache.CoinPerTurn / resultCache.TurnCount; + result.TechPointPerTurn += resultCache.TechPointPerTurn / resultCache.TurnCount; + result.CityCount += resultCache.CityCount / resultCache.TurnCount; + result.MaxCityLevel += resultCache.MaxCityLevel / resultCache.TurnCount; + result.CityLevel += resultCache.CityLevel / resultCache.TurnCount; + result.TechCount += resultCache.TechCount / resultCache.TurnCount; } }