规范类命名

This commit is contained in:
SepComet
2026-03-08 17:00:21 +08:00
parent 47ed27bebb
commit 548bc77ba6
35 changed files with 417 additions and 384 deletions
@@ -7,9 +7,9 @@ namespace GeometryTD.CustomComponent
private readonly string _errorMessage;
public CombatFailedState(
CombatSchedulerRuntimeContext context,
CombatSchedulerFlowCoordinator flow,
string errorMessage) : base(context, flow)
CombatSchedulerRuntime runtime,
CombatSchedulerCoordinator coordinator,
string errorMessage) : base(runtime, coordinator)
{
_errorMessage = errorMessage;
}
@@ -18,17 +18,17 @@ namespace GeometryTD.CustomComponent
{
Log.Error(
"CombatScheduler failed. LevelId={0}, {1}",
Context.CurrentLevel != null ? Context.CurrentLevel.Id : 0,
Runtime.CurrentLevel != null ? Runtime.CurrentLevel.Id : 0,
_errorMessage);
Context.EnemyManager.EndPhase();
Flow.CloseCombatFinishForm();
Flow.CloseRewardSelectForm();
Flow.OpenCombatFailureDialog(_errorMessage);
Runtime.EnemyManager.EndPhase();
Coordinator.CloseCombatFinishForm();
Coordinator.CloseRewardSelectForm();
Coordinator.OpenCombatFailureDialog(_errorMessage);
}
public override void OnExit()
{
Flow.CloseDialogForm();
Coordinator.CloseDialogForm();
}
}
}
@@ -2,24 +2,24 @@ namespace GeometryTD.CustomComponent
{
internal sealed class CombatFinishFormState : CombatStateBase
{
public CombatFinishFormState(CombatSchedulerRuntimeContext context, CombatSchedulerFlowCoordinator flow)
: base(context, flow)
public CombatFinishFormState(CombatSchedulerRuntime runtime, CombatSchedulerCoordinator coordinator)
: base(runtime, coordinator)
{
}
public override void OnEnter()
{
if (Context.SettlementContext == null)
if (Runtime.SettlementContext == null)
{
Flow.EnterFailureFallback("Combat finish form failed. Settlement context is missing.");
Coordinator.EnterFailureFallback("Combat finish form failed. Settlement context is missing.");
return;
}
Flow.EnsureCombatFinishFormUseCaseBound();
Context.SettlementFlowService.OpenCombatFinishForm(
Context.SettlementContext,
Context.CombatFinishFormUseCase);
Flow.ChangeState(new CombatWaitingForReturnState(Context, Flow));
Coordinator.EnsureCombatFinishFormUseCaseBound();
Runtime.CombatSettlementService.OpenCombatFinishForm(
Runtime.SettlementContext,
Runtime.CombatFinishFormUseCase);
Coordinator.ChangeState(new CombatWaitingForReturnState(Runtime, Coordinator));
}
}
}
@@ -8,23 +8,23 @@ namespace GeometryTD.CustomComponent
{
internal sealed class CombatLoadingState : CombatStateBase
{
public CombatLoadingState(CombatSchedulerRuntimeContext context, CombatSchedulerFlowCoordinator flow)
: base(context, flow)
public CombatLoadingState(CombatSchedulerRuntime runtime, CombatSchedulerCoordinator coordinator)
: base(runtime, coordinator)
{
}
public override void OnEnter()
{
if (Context.CurrentLevel == null)
if (Runtime.CurrentLevel == null)
{
Flow.EnterFailureFallback("Combat loading failed. Current level is null.");
Coordinator.EnterFailureFallback("Combat loading failed. Current level is null.");
return;
}
MapEntityLoadContext mapLoadContext = BuildMapLoadContext();
if (!Context.LoadSession.StartLoading(Context.CurrentLevel, mapLoadContext, Flow.Host, out string errorMessage))
if (!Runtime.LoadSession.StartLoading(Runtime.CurrentLevel, mapLoadContext, Coordinator.Port, out string errorMessage))
{
Flow.EnterFailureFallback($"Combat loading failed. {errorMessage}");
Coordinator.EnterFailureFallback($"Combat loading failed. {errorMessage}");
}
}
@@ -33,20 +33,20 @@ namespace GeometryTD.CustomComponent
_ = elapseSeconds;
_ = realElapseSeconds;
if (!Context.LoadSession.IsReady)
if (!Runtime.LoadSession.IsReady)
{
return;
}
Flow.TryBeginNextPhase();
Coordinator.TryBeginNextPhase();
}
private MapEntityLoadContext BuildMapLoadContext()
{
List<TowerStatsData> buildTowerStatsSnapshot = new();
for (int i = 0; i < Context.CombatInRunResourceManager.CurrentBuildTowerCount; i++)
for (int i = 0; i < Runtime.CombatRunResourceStore.CurrentBuildTowerCount; i++)
{
if (Context.CombatInRunResourceManager.TryGetBuildTowerStats(i, out TowerStatsData stats) &&
if (Runtime.CombatRunResourceStore.TryGetBuildTowerStats(i, out TowerStatsData stats) &&
stats != null)
{
buildTowerStatsSnapshot.Add(stats);
@@ -56,16 +56,16 @@ namespace GeometryTD.CustomComponent
MapData mapData = new MapData(
entityId: 0,
typeId: 0,
levelId: Context.CurrentLevel.Id,
levelId: Runtime.CurrentLevel.Id,
position: Vector3.zero,
initialCoin: Context.CombatInRunResourceManager.CurrentCoin,
initialCoin: Runtime.CombatRunResourceStore.CurrentCoin,
buildTowerStatsSnapshot: buildTowerStatsSnapshot,
inventorySnapshot: Context.CombatInRunResourceManager.GetCombatInventorySnapshot(),
participantTowerSnapshot: Context.CombatInRunResourceManager.GetParticipantTowerSnapshot());
inventorySnapshot: Runtime.CombatRunResourceStore.GetCombatInventorySnapshot(),
participantTowerSnapshot: Runtime.CombatRunResourceStore.GetParticipantTowerSnapshot());
return new MapEntityLoadContext(
mapData,
Context.CombatInRunResourceManager.TryConsumeCoin,
Context.CombatInRunResourceManager.AddCoin);
Runtime.CombatRunResourceStore.TryConsumeCoin,
Runtime.CombatRunResourceStore.AddCoin);
}
}
}
@@ -2,36 +2,36 @@ namespace GeometryTD.CustomComponent
{
internal sealed class CombatRewardSelectionState : CombatStateBase
{
public CombatRewardSelectionState(CombatSchedulerRuntimeContext context, CombatSchedulerFlowCoordinator flow)
: base(context, flow)
public CombatRewardSelectionState(CombatSchedulerRuntime runtime, CombatSchedulerCoordinator coordinator)
: base(runtime, coordinator)
{
}
public override void OnEnter()
{
if (Context.SettlementContext == null)
if (Runtime.SettlementContext == null)
{
Flow.EnterFailureFallback("Combat reward selection failed. Settlement context is missing.");
Coordinator.EnterFailureFallback("Combat reward selection failed. Settlement context is missing.");
return;
}
Flow.EnsureRewardSelectFormUseCaseBound();
if (!Context.SettlementFlowService.TryPrepareRewardSelection(
Context.SettlementContext,
Context.EnemyDropResolver,
Context.PhaseLoopRuntime.DisplayPhaseIndex,
Flow.ResolveCurrentThemeType(),
Context.RewardSelectFormUseCase,
Flow.OnFullBaseHpRewardSelected,
Flow.OnFullBaseHpRewardGiveUp))
Coordinator.EnsureRewardSelectFormUseCaseBound();
if (!Runtime.CombatSettlementService.TryPrepareRewardSelection(
Runtime.SettlementContext,
Runtime.EnemyDropResolver,
Runtime.PhaseLoopRuntime.DisplayPhaseIndex,
Coordinator.ResolveCurrentThemeType(),
Runtime.RewardSelectFormUseCase,
Coordinator.OnFullBaseHpRewardSelected,
Coordinator.OnFullBaseHpRewardGiveUp))
{
Flow.ChangeState(new CombatFinishFormState(Context, Flow));
Coordinator.ChangeState(new CombatFinishFormState(Runtime, Coordinator));
}
}
public override void OnExit()
{
Flow.CloseRewardSelectForm();
Coordinator.CloseRewardSelectForm();
}
}
}
@@ -11,10 +11,10 @@ namespace GeometryTD.CustomComponent
private readonly IReadOnlyList<DRLevelSpawnEntry> _spawnEntries;
public CombatRunningPhaseState(
CombatSchedulerRuntimeContext context,
CombatSchedulerFlowCoordinator flow,
CombatSchedulerRuntime runtime,
CombatSchedulerCoordinator coordinator,
DRLevelPhase phase,
IReadOnlyList<DRLevelSpawnEntry> spawnEntries) : base(context, flow)
IReadOnlyList<DRLevelSpawnEntry> spawnEntries) : base(runtime, coordinator)
{
_phase = phase;
_spawnEntries = spawnEntries;
@@ -22,59 +22,59 @@ namespace GeometryTD.CustomComponent
public override void OnEnter()
{
Context.EnemyManager.BeginPhase(_phase, _spawnEntries);
Runtime.EnemyManager.BeginPhase(_phase, _spawnEntries);
GameEntry.Event.Fire(
Flow,
Coordinator,
CombatProcessEventArgs.Create(
Context.PhaseLoopRuntime.DisplayPhaseIndex,
Context.PhaseLoopRuntime.PhaseCount));
Runtime.PhaseLoopRuntime.DisplayPhaseIndex,
Runtime.PhaseLoopRuntime.PhaseCount));
GameEntry.Event.Fire(
Flow,
Coordinator,
CombatEnemyHpRateChangedEventArgs.Create(
Flow.ResolveEnemyHpRateMultiplier(
Context.PhaseLoopRuntime.DisplayPhaseIndex,
Context.PhaseLoopRuntime.PhaseCount)));
Coordinator.ResolveEnemyHpRateMultiplier(
Runtime.PhaseLoopRuntime.DisplayPhaseIndex,
Runtime.PhaseLoopRuntime.PhaseCount)));
if (!Context.NodeEnterFired)
if (!Runtime.NodeEnterFired)
{
Context.NodeEnterFired = true;
Runtime.NodeEnterFired = true;
GameEntry.Event.Fire(
Flow,
Coordinator,
NodeEnterEventArgs.Create(
Context.RunId,
Context.NodeId,
Context.NodeType,
Context.SequenceIndex));
Runtime.RunId,
Runtime.NodeId,
Runtime.NodeType,
Runtime.SequenceIndex));
}
Log.Info(
"CombatScheduler phase started. Level={0}, Phase={1}, EndType={2}, Entries={3}.",
Context.CurrentLevel != null ? Context.CurrentLevel.Id : 0,
Context.PhaseLoopRuntime.DisplayPhaseIndex,
Runtime.CurrentLevel != null ? Runtime.CurrentLevel.Id : 0,
Runtime.PhaseLoopRuntime.DisplayPhaseIndex,
_phase.EndType,
_spawnEntries != null ? _spawnEntries.Count : 0);
}
public override void OnUpdate(float elapseSeconds, float realElapseSeconds)
{
if (Context.PhaseLoopRuntime.CurrentPhase == null)
if (Runtime.PhaseLoopRuntime.CurrentPhase == null)
{
Flow.EnterFailureFallback("CombatScheduler update failed. Current phase is null.");
Coordinator.EnterFailureFallback("CombatScheduler update failed. Current phase is null.");
return;
}
Context.PhaseLoopRuntime.AdvancePhaseElapsed(elapseSeconds);
Context.EnemyManager.OnUpdate(elapseSeconds, realElapseSeconds);
Runtime.PhaseLoopRuntime.AdvancePhaseElapsed(elapseSeconds);
Runtime.EnemyManager.OnUpdate(elapseSeconds, realElapseSeconds);
if (Flow.ShouldEnterSettlementFromActiveState(out bool isVictory))
if (Coordinator.ShouldEnterSettlementFromActiveState(out bool isVictory))
{
Flow.ChangeState(new CombatSettlementState(Context, Flow, isVictory));
Coordinator.ChangeState(new CombatSettlementState(Runtime, Coordinator, isVictory));
return;
}
if (Context.EnemyManager.IsPhaseSpawnCompleted)
if (Runtime.EnemyManager.IsPhaseSpawnCompleted)
{
Flow.EnterWaitingForPhaseEnd();
Coordinator.EnterWaitingForPhaseEnd();
}
}
}
@@ -5,30 +5,30 @@ namespace GeometryTD.CustomComponent
private readonly bool _isVictory;
public CombatSettlementState(
CombatSchedulerRuntimeContext context,
CombatSchedulerFlowCoordinator flow,
bool isVictory) : base(context, flow)
CombatSchedulerRuntime runtime,
CombatSchedulerCoordinator coordinator,
bool isVictory) : base(runtime, coordinator)
{
_isVictory = isVictory;
}
public override void OnEnter()
{
Context.EnemyManager.EndPhase();
Context.EnemyManager.CleanupTrackedEnemies();
Context.IsFinishAsVictory = _isVictory;
Context.SettlementContext = Context.SettlementFlowService.BuildSettlementContext(
Runtime.EnemyManager.EndPhase();
Runtime.EnemyManager.CleanupTrackedEnemies();
Runtime.IsFinishAsVictory = _isVictory;
Runtime.SettlementContext = Runtime.CombatSettlementService.BuildSettlementContext(
_isVictory,
Context.CurrentLevel,
Context.EnemyManager.DefeatedEnemyCount,
Context.CombatInRunResourceManager);
if (Context.SettlementContext.Flow.ShouldOpenRewardSelection)
Runtime.CurrentLevel,
Runtime.EnemyManager.DefeatedEnemyCount,
Runtime.CombatRunResourceStore);
if (Runtime.SettlementContext.Flags.ShouldOpenRewardSelection)
{
Flow.ChangeState(new CombatRewardSelectionState(Context, Flow));
Coordinator.ChangeState(new CombatRewardSelectionState(Runtime, Coordinator));
return;
}
Flow.ChangeState(new CombatFinishFormState(Context, Flow));
Coordinator.ChangeState(new CombatFinishFormState(Runtime, Coordinator));
}
}
}
@@ -2,13 +2,13 @@ namespace GeometryTD.CustomComponent
{
internal abstract class CombatStateBase
{
protected CombatSchedulerRuntimeContext Context { get; }
protected CombatSchedulerFlowCoordinator Flow { get; }
protected CombatSchedulerRuntime Runtime { get; }
protected CombatSchedulerCoordinator Coordinator { get; }
protected CombatStateBase(CombatSchedulerRuntimeContext context, CombatSchedulerFlowCoordinator flow)
protected CombatStateBase(CombatSchedulerRuntime runtime, CombatSchedulerCoordinator coordinator)
{
Context = context;
Flow = flow;
Runtime = runtime;
Coordinator = coordinator;
}
public virtual void OnInit()
@@ -4,8 +4,8 @@ namespace GeometryTD.CustomComponent
{
internal sealed class CombatWaitingForPhaseEndState : CombatStateBase
{
public CombatWaitingForPhaseEndState(CombatSchedulerRuntimeContext context, CombatSchedulerFlowCoordinator flow)
: base(context, flow)
public CombatWaitingForPhaseEndState(CombatSchedulerRuntime runtime, CombatSchedulerCoordinator coordinator)
: base(runtime, coordinator)
{
}
@@ -13,34 +13,34 @@ namespace GeometryTD.CustomComponent
{
_ = realElapseSeconds;
DRLevelPhase currentPhase = Context.PhaseLoopRuntime.CurrentPhase;
DRLevelPhase currentPhase = Runtime.PhaseLoopRuntime.CurrentPhase;
if (currentPhase == null)
{
Flow.EnterFailureFallback("CombatScheduler waiting phase failed. Current phase is null.");
Coordinator.EnterFailureFallback("CombatScheduler waiting phase failed. Current phase is null.");
return;
}
Context.PhaseLoopRuntime.AdvancePhaseElapsed(elapseSeconds);
Runtime.PhaseLoopRuntime.AdvancePhaseElapsed(elapseSeconds);
if (Flow.ShouldEnterSettlementFromActiveState(out bool isVictory))
if (Coordinator.ShouldEnterSettlementFromActiveState(out bool isVictory))
{
Flow.ChangeState(new CombatSettlementState(Context, Flow, isVictory));
Coordinator.ChangeState(new CombatSettlementState(Runtime, Coordinator, isVictory));
return;
}
PhaseEndConditionContext conditionContext = new(
currentPhase,
Context.PhaseLoopRuntime.CurrentPhaseElapsed,
Context.EnemyManager.IsPhaseSpawnCompleted,
Context.EnemyManager.AliveEnemyCount,
Context.EnemyManager.HasAliveBoss);
Runtime.PhaseLoopRuntime.CurrentPhaseElapsed,
Runtime.EnemyManager.IsPhaseSpawnCompleted,
Runtime.EnemyManager.AliveEnemyCount,
Runtime.EnemyManager.HasAliveBoss);
IPhaseEndCondition endCondition = PhaseEndConditionFactory.Create(currentPhase.EndType);
if (!endCondition.ShouldExit(conditionContext))
{
return;
}
Flow.CompleteCurrentPhase();
Coordinator.CompleteCurrentPhase();
}
}
}
@@ -4,8 +4,8 @@ namespace GeometryTD.CustomComponent
{
private bool _returnRequested;
public CombatWaitingForReturnState(CombatSchedulerRuntimeContext context, CombatSchedulerFlowCoordinator flow)
: base(context, flow)
public CombatWaitingForReturnState(CombatSchedulerRuntime runtime, CombatSchedulerCoordinator coordinator)
: base(runtime, coordinator)
{
}
@@ -24,17 +24,17 @@ namespace GeometryTD.CustomComponent
return;
}
if (Context.SettlementContext == null)
if (Runtime.SettlementContext == null)
{
Flow.EnterFailureFallback("Combat return failed. Settlement context is missing.");
Coordinator.EnterFailureFallback("Combat return failed. Settlement context is missing.");
return;
}
Context.SettlementFlowService.CommitSettlementInventory(Context.SettlementContext);
Context.LoadSession.Cleanup();
Flow.CloseCombatFinishForm();
Flow.CloseRewardSelectForm();
Flow.CompleteNormalCombatAndNotify(Context.IsFinishAsVictory);
Runtime.CombatSettlementService.CommitSettlementInventory(Runtime.SettlementContext);
Runtime.LoadSession.Cleanup();
Coordinator.CloseCombatFinishForm();
Coordinator.CloseRewardSelectForm();
Coordinator.CompleteNormalCombatAndNotify(Runtime.IsFinishAsVictory);
}
}
}