geometry-tower-defense/Assets/GameMain/Scripts/UI/Combat/UseCase/CombatInfoFormUseCase.cs

74 lines
2.3 KiB
C#

using GeometryTD.Definition;
namespace GeometryTD.UI
{
public class CombatInfoFormUseCase : IUIUseCase
{
public CombatInfoFormRawData CreateInitialModel()
{
return BuildModel();
}
public CombatInfoFormRawData TryRefresh()
{
return BuildModel();
}
public bool TryEndCombat()
{
if (GameEntry.CombatNode == null || !GameEntry.CombatNode.CanEndCombat)
{
return false;
}
return GameEntry.CombatNode.TryEndCombatByPlayer();
}
private static CombatInfoFormRawData BuildModel()
{
if (GameEntry.CombatNode == null)
{
return null;
}
var level = GameEntry.CombatNode.CurrentLevel;
LevelThemeType themeType = level != null ? level.LevelThemeType : GameEntry.CombatNode.CurrentThemeType;
int levelId = level != null ? level.Id : 0;
int baseHpMax = level != null ? level.BaseHp : 0;
int enemyHpRateMultiplier = ResolveEnemyHpRateMultiplier(
GameEntry.CombatNode.CurrentPhaseIndex,
GameEntry.CombatNode.CurrentLevelPhaseCount);
return new CombatInfoFormRawData
{
LevelThemeType = themeType,
LevelId = levelId,
CurrentPhaseIndex = GameEntry.CombatNode.CurrentPhaseIndex,
TotalPhaseCount = GameEntry.CombatNode.CurrentLevelPhaseCount,
Coin = GameEntry.CombatNode.CurrentCoin,
BaseHp = GameEntry.CombatNode.CurrentBaseHp,
BaseHpMax = baseHpMax,
EnemyHpRateMultiplier = enemyHpRateMultiplier,
CanPause = true,
CanEnd = GameEntry.CombatNode.CanEndCombat
};
}
private static int ResolveEnemyHpRateMultiplier(int currentPhaseIndex, int totalPhaseCount)
{
if (currentPhaseIndex <= 0 || totalPhaseCount <= 0)
{
return 1;
}
int completedLoopCount = UnityEngine.Mathf.Max(0, (currentPhaseIndex - 1) / totalPhaseCount);
if (completedLoopCount >= 30)
{
return int.MaxValue;
}
return 1 << completedLoopCount;
}
}
}