文件迁移

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;
LastGainedGold = _combatScheduler.GainedGold;
CurrentLevel = null;
GameEntry.Event.Fire(this, NodeCompleteEventArgs.Create());
}
public bool TryEndCombatByPlayer()

View File

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

View File

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

View File

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

View File

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

View File

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