54 lines
3.3 KiB
C#
54 lines
3.3 KiB
C#
#if UNITY_EDITOR
|
|
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
namespace BlockOutReplica.Gameplay
|
|
{
|
|
public sealed partial class BlockOutGameController
|
|
{
|
|
public IEnumerator ReviewPaidBoosterFlow()
|
|
{
|
|
if(IsFullLoopSandbox)throw new InvalidOperationException("Restore manual sandbox before paid-booster review.");
|
|
int checks=0;
|
|
Action<bool,string> check=(condition,name)=>{if(!condition)throw new InvalidOperationException(name);checks++;};
|
|
BeginFullLoopSandbox();
|
|
try
|
|
{
|
|
RequestEnterLevel();EnterPreparedLevel();IsInputReviewRunning=true;yield return null;
|
|
while(Player.SpendBooster(BoosterType.Rocket)){}
|
|
check(Player.Amount(BoosterType.Rocket)==0&&Player.Coins==1000,"zero rocket fixture");
|
|
System.IO.Directory.CreateDirectory("Docs/iterations");
|
|
ScreenCapture.CaptureScreenshot("Docs/iterations/2026-10-20-paid-rocket-600.png");yield return null;
|
|
ClickBooster(BoosterType.Rocket);
|
|
check(SelectedBooster==BoosterType.Rocket&&Modal==GameModal.None&&Player.Coins==1000,"600 tap selects without charge or purchase modal");
|
|
BeginDrag(new Vector2(-100,-100),gameCamera);
|
|
check(Player.Coins==1000&&Player.Amount(BoosterType.Rocket)==0,"invalid target is free");
|
|
CancelBoosterSelection();
|
|
check(SelectedBooster==BoosterType.None&&Player.Coins==1000,"cancel is free");
|
|
ClickBooster(BoosterType.Rocket);ClickBooster(BoosterType.Rocket);
|
|
check(SelectedBooster==BoosterType.None&&Player.Coins==1000,"repeat tap cancels for free");
|
|
ClickBooster(BoosterType.Rocket);
|
|
var target=pieces[0];int before=pieces.Count;
|
|
BeginDrag(gameCamera.WorldToScreenPoint(target.transform.position),gameCamera);
|
|
check(Player.Coins==400&&Player.Amount(BoosterType.Rocket)==0&&pieces.Count==before-1,"valid target pays exactly 600 for this use, no inventory grant");
|
|
ClickBooster(BoosterType.Rocket);
|
|
check(Player.Coins==400,"busy duplicate tap cannot charge twice");
|
|
yield return WaitReviewCondition(()=>!InputLocked,"paid rocket ends");
|
|
check(target==null&&activeExits==0,"paid rocket effect retires target");
|
|
ClickBooster(BoosterType.Rocket);
|
|
check(Modal==GameModal.Info&&Player.Coins==400&&SelectedBooster==BoosterType.None,"underfunded purchase does not select, spend or pretend billing is connected");
|
|
CloseModal();
|
|
while(Player.SpendBooster(BoosterType.Freeze)){}
|
|
ClickBooster(BoosterType.Freeze);
|
|
check(Player.Coins==100&&Player.Amount(BoosterType.Freeze)==0&&FreezeRemaining==10,"zero inventory freeze buys immediate one use");
|
|
ClickBooster(BoosterType.Freeze);
|
|
check(Player.Coins==100,"active freeze cannot be paid twice");
|
|
Debug.Log($"BLOCKOUT_PAID_BOOSTER_REVIEW: passed=True, checks={checks}, rocketPrice=600, inventoryGranted=False, persistentPlayerDataUntouched=True, originalFundedRuntimeNotObserved=True");
|
|
}
|
|
finally{RestoreFullLoopSandbox();}
|
|
}
|
|
}
|
|
}
|
|
#endif
|