74 lines
2.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|