文件迁移

This commit is contained in:
SepComet 2026-03-07 18:26:28 +08:00
parent ab7c7172b8
commit 3badbe9212
31 changed files with 54 additions and 29 deletions

View File

@ -237,7 +237,6 @@ namespace GeometryTD.CustomComponent
LastGainedCoin = _combatScheduler.GainedCoin; LastGainedCoin = _combatScheduler.GainedCoin;
LastGainedGold = _combatScheduler.GainedGold; LastGainedGold = _combatScheduler.GainedGold;
CurrentLevel = null; CurrentLevel = null;
GameEntry.Event.Fire(this, NodeCompleteEventArgs.Create());
} }
public bool TryEndCombatByPlayer() public bool TryEndCombatByPlayer()

View File

@ -387,7 +387,7 @@ namespace GeometryTD.CustomComponent
GameEntry.UIRouter.CloseUI(UIFormType.RewardSelectForm); GameEntry.UIRouter.CloseUI(UIFormType.RewardSelectForm);
} }
private void CompleteCombatAndNotify(bool succeeded) private void CompleteCombat(bool succeeded)
{ {
_isCompleted = true; _isCompleted = true;
_currentState = null; _currentState = null;
@ -395,6 +395,12 @@ namespace GeometryTD.CustomComponent
GameEntry.CombatNode?.OnCombatEndedByScheduler(succeeded); GameEntry.CombatNode?.OnCombatEndedByScheduler(succeeded);
} }
private void CompleteNormalCombatAndNotify(bool succeeded)
{
CompleteCombat(succeeded);
GameEntry.Event.Fire(this, NodeCompleteEventArgs.Create());
}
private bool HandleStartFailure(string errorMessage) private bool HandleStartFailure(string errorMessage)
{ {
Log.Warning("{0}", errorMessage); Log.Warning("{0}", errorMessage);
@ -497,7 +503,7 @@ namespace GeometryTD.CustomComponent
private void GameOverByFailure() private void GameOverByFailure()
{ {
CompleteCombatAndNotify(false); CompleteCombat(false);
} }
} }

View File

@ -4,10 +4,18 @@ namespace GeometryTD.CustomComponent
{ {
internal sealed class CombatSettlementContext internal sealed class CombatSettlementContext
{ {
public bool IsVictory;
public int FinalCoin;
public int FinalBaseHp;
public int MaxBaseHp;
public int DefeatedEnemyCount; public int DefeatedEnemyCount;
public int GainedGold; public int GainedGold;
public BackpackInventoryData RewardInventory; public BackpackInventoryData RewardInventory;
public bool ShouldOpenRewardSelection; public bool ShouldOpenRewardSelection;
public bool DidEnterRewardSelection;
public bool ShouldApplyLowBaseHpPenalty;
public float LowBaseHpEndurancePenaltyValue;
public int AffectedTowerCount;
public bool IsCommitted; public bool IsCommitted;
public string Reason; public string Reason;
} }

View File

@ -39,12 +39,20 @@ namespace GeometryTD.CustomComponent
CombatSettlementContext settlementContext = new CombatSettlementContext CombatSettlementContext settlementContext = new CombatSettlementContext
{ {
IsVictory = isVictory,
FinalCoin = Mathf.Max(0, resourceManager != null ? resourceManager.CurrentCoin : 0),
FinalBaseHp = currentBaseHp,
MaxBaseHp = maxBaseHp,
DefeatedEnemyCount = Mathf.Max(0, defeatedEnemyCount), DefeatedEnemyCount = Mathf.Max(0, defeatedEnemyCount),
GainedGold = Mathf.Max(0, resourceManager != null ? resourceManager.GainedGold : 0), GainedGold = Mathf.Max(0, resourceManager != null ? resourceManager.GainedGold : 0),
RewardInventory = resourceManager != null RewardInventory = resourceManager != null
? resourceManager.GetRewardInventorySnapshot() ? resourceManager.GetRewardInventorySnapshot()
: new BackpackInventoryData(), : new BackpackInventoryData(),
ShouldOpenRewardSelection = shouldOpenFullBaseHpRewardSelect, ShouldOpenRewardSelection = shouldOpenFullBaseHpRewardSelect,
DidEnterRewardSelection = false,
ShouldApplyLowBaseHpPenalty = appliedLowBaseHpPenalty,
LowBaseHpEndurancePenaltyValue = appliedLowBaseHpPenalty ? LowBaseHpTowerEndurancePenalty : 0f,
AffectedTowerCount = 0,
Reason = reason Reason = reason
}; };
@ -72,6 +80,7 @@ namespace GeometryTD.CustomComponent
BackpackInventoryData rewardInventory = settlementContext.RewardInventory ?? new BackpackInventoryData(); BackpackInventoryData rewardInventory = settlementContext.RewardInventory ?? new BackpackInventoryData();
GameEntry.PlayerInventory?.MergeInventory(rewardInventory); GameEntry.PlayerInventory?.MergeInventory(rewardInventory);
settlementContext.RewardInventory = rewardInventory; settlementContext.RewardInventory = rewardInventory;
settlementContext.AffectedTowerCount = ApplyDeferredSettlementPenalty(settlementContext);
settlementContext.IsCommitted = true; settlementContext.IsCommitted = true;
} }
@ -133,6 +142,7 @@ namespace GeometryTD.CustomComponent
return false; return false;
} }
settlementContext.DidEnterRewardSelection = true;
GameEntry.UIRouter.OpenUI(UIFormType.RewardSelectForm, rawData); GameEntry.UIRouter.OpenUI(UIFormType.RewardSelectForm, rawData);
return true; return true;
} }
@ -149,7 +159,6 @@ namespace GeometryTD.CustomComponent
public void OpenCombatFinishForm( public void OpenCombatFinishForm(
CombatSettlementContext settlementContext, CombatSettlementContext settlementContext,
CombatInRunResourceManager resourceManager,
CombatFinishFormUseCase combatFinishFormUseCase) CombatFinishFormUseCase combatFinishFormUseCase)
{ {
if (settlementContext == null || combatFinishFormUseCase == null) if (settlementContext == null || combatFinishFormUseCase == null)
@ -157,11 +166,7 @@ namespace GeometryTD.CustomComponent
return; return;
} }
settlementContext.GainedGold = Mathf.Max(0, resourceManager != null ? resourceManager.GainedGold : settlementContext.GainedGold); combatFinishFormUseCase.SetSummary(settlementContext);
combatFinishFormUseCase.SetSummary(
settlementContext.DefeatedEnemyCount,
settlementContext.GainedGold,
settlementContext.RewardInventory);
GameEntry.UIRouter.OpenUI(UIFormType.CombatFinishForm); GameEntry.UIRouter.OpenUI(UIFormType.CombatFinishForm);
} }
@ -209,7 +214,7 @@ namespace GeometryTD.CustomComponent
} }
else if (hpRate < MidBaseHpThreshold) else if (hpRate < MidBaseHpThreshold)
{ {
appliedLowBaseHpPenalty = ApplyLowBaseHpPenalty(); appliedLowBaseHpPenalty = true;
} }
} }
@ -219,16 +224,22 @@ namespace GeometryTD.CustomComponent
resourceManager.AddSettlementGold(settlementGold); resourceManager.AddSettlementGold(settlementGold);
} }
private static bool ApplyLowBaseHpPenalty() private static int ApplyDeferredSettlementPenalty(CombatSettlementContext settlementContext)
{ {
if (settlementContext == null ||
!settlementContext.ShouldApplyLowBaseHpPenalty ||
settlementContext.LowBaseHpEndurancePenaltyValue <= 0f)
{
return 0;
}
PlayerInventoryComponent inventory = GameEntry.PlayerInventory; PlayerInventoryComponent inventory = GameEntry.PlayerInventory;
if (inventory == null) if (inventory == null)
{ {
return false; return 0;
} }
int affectedTowerCount = inventory.ReduceAllTowerEndurance(LowBaseHpTowerEndurancePenalty); return inventory.ReduceAllTowerEndurance(settlementContext.LowBaseHpEndurancePenaltyValue);
return affectedTowerCount > 0;
} }
private static bool TryAppendRewardComponent(BackpackInventoryData rewardInventory, TowerCompItemData selectedItem) private static bool TryAppendRewardComponent(BackpackInventoryData rewardInventory, TowerCompItemData selectedItem)

View File

@ -20,7 +20,6 @@ namespace GeometryTD.CustomComponent
Scheduler.EnsureCombatFinishFormUseCaseBound(); Scheduler.EnsureCombatFinishFormUseCaseBound();
Scheduler._settlementFlowService.OpenCombatFinishForm( Scheduler._settlementFlowService.OpenCombatFinishForm(
Scheduler._settlementContext, Scheduler._settlementContext,
Scheduler._combatInRunResourceManager,
Scheduler._combatFinishFormUseCase); Scheduler._combatFinishFormUseCase);
Scheduler.ChangeState(new CombatWaitingForReturnState(Scheduler)); Scheduler.ChangeState(new CombatWaitingForReturnState(Scheduler));
} }

View File

@ -28,7 +28,7 @@ namespace GeometryTD.CustomComponent
Scheduler._loadSession.Cleanup(); Scheduler._loadSession.Cleanup();
Scheduler.CloseCombatFinishForm(); Scheduler.CloseCombatFinishForm();
Scheduler.CloseRewardSelectForm(); Scheduler.CloseRewardSelectForm();
Scheduler.CompleteCombatAndNotify(Scheduler._isFinishAsVictory); Scheduler.CompleteNormalCombatAndNotify(Scheduler._isFinishAsVictory);
} }
} }
} }

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5f2ff98d705436042b48a4c56d982411
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -8,9 +8,7 @@ namespace GeometryTD.UI
public class CombatFinishFormUseCase : IUIUseCase public class CombatFinishFormUseCase : IUIUseCase
{ {
private CombatScheduler _combatScheduler; private CombatScheduler _combatScheduler;
private int _defeatedEnemyCount; private CombatSettlementContext _settlementContext;
private int _gainedGold;
private BackpackInventoryData _rewardInventory;
private bool _isSummaryPrepared; private bool _isSummaryPrepared;
public CombatFinishFormRawData CreateInitialModel() public CombatFinishFormRawData CreateInitialModel()
@ -23,11 +21,9 @@ namespace GeometryTD.UI
return BuildModel(); return BuildModel();
} }
public void SetSummary(int defeatedEnemyCount, int gainedGold, BackpackInventoryData rewardInventory = null) internal void SetSummary(CombatSettlementContext settlementContext)
{ {
_defeatedEnemyCount = Mathf.Max(0, defeatedEnemyCount); _settlementContext = settlementContext;
_gainedGold = Mathf.Max(0, gainedGold);
_rewardInventory = rewardInventory;
_isSummaryPrepared = true; _isSummaryPrepared = true;
} }
@ -45,12 +41,10 @@ namespace GeometryTD.UI
{ {
if (!_isSummaryPrepared) if (!_isSummaryPrepared)
{ {
_defeatedEnemyCount = 0; _settlementContext = null;
_gainedGold = 0;
_rewardInventory = null;
} }
BackpackInventoryData rewardInventory = _rewardInventory; BackpackInventoryData rewardInventory = _settlementContext?.RewardInventory;
if (rewardInventory == null) if (rewardInventory == null)
{ {
rewardInventory = InventorySeedUtility.CreateSampleInventory(); rewardInventory = InventorySeedUtility.CreateSampleInventory();
@ -58,8 +52,8 @@ namespace GeometryTD.UI
return new CombatFinishFormRawData return new CombatFinishFormRawData
{ {
DefeatedEnemyCount = _defeatedEnemyCount, DefeatedEnemyCount = Mathf.Max(0, _settlementContext?.DefeatedEnemyCount ?? 0),
GainedGold = _gainedGold, GainedGold = Mathf.Max(0, _settlementContext?.GainedGold ?? 0),
RewardInventory = rewardInventory, RewardInventory = rewardInventory,
CanReturn = true CanReturn = true
}; };