using GeometryTD.Definition; using UnityEngine; namespace GeometryTD.UI { public partial class CombatInfoFormController { private static CombatInfoFormContext BuildContext(CombatInfoFormRawData rawData) { if (rawData == null) { return null; } return new CombatInfoFormContext { LevelMetaText = BuildLevelMetaText(rawData.LevelThemeType, rawData.LevelId), LevelPhaseText = BuildPhaseText(rawData.CurrentPhaseIndex, rawData.TotalPhaseCount), CoinText = BuildCoinText(rawData.Coin), BaseHpText = BuildBaseHpText(rawData.BaseHp, rawData.BaseHpMax), EnemyHpRateText = BuildEnemyHpRateText(rawData.EnemyHpRateMultiplier), CanPause = rawData.CanPause, CanEnd = rawData.CanEnd }; } private static string BuildLevelMetaText(LevelThemeType themeType, int levelId) { if (levelId <= 0) { return "Map -"; } return $"{themeType} Map.{levelId}"; } private static string BuildPhaseText(int currentPhaseIndex, int totalPhaseCount) { int phaseIndex = currentPhaseIndex < 0 ? 0 : currentPhaseIndex; if (totalPhaseCount <= 0) { return $"{phaseIndex}/?"; } return $"Wave: {phaseIndex}/{totalPhaseCount}"; } private static string BuildCoinText(int coin) { if (coin < 0) { return "Coin: -"; } return $"Coin: {coin}"; } private static string BuildBaseHpText(int baseHp, int baseHpMax) { if (baseHpMax <= 0) { return "\u57FA\u5730\uFF1A-"; } int clampedHp = Mathf.Clamp(baseHp, 0, baseHpMax); int percent = Mathf.RoundToInt((float)clampedHp / baseHpMax * 100f); return $"\u57FA\u5730\uFF1A{percent}%"; } private static string BuildEnemyHpRateText(int enemyHpRateMultiplier) { int resolvedMultiplier = enemyHpRateMultiplier > 0 ? enemyHpRateMultiplier : 1; return $"\u96BE\u5EA6\uFF1A{resolvedMultiplier}x"; } } }