32 lines
2.5 KiB
Plaintext
32 lines
2.5 KiB
Plaintext
using System;using System.Threading.Tasks;using game.PlayerDataStorage;
|
|
var panel=new ActualPanel();panel.Run();panel.Run();
|
|
if(panel.Applied!=1)throw new Exception("duplicate applies rewards");
|
|
if(panel.canvasGroup.alpha!=0)throw new Exception("pending reward already visible");
|
|
bool pendingBlocked=panel.canvasGroup.blocksRaycasts==false && panel.canvasGroup.interactable==false;
|
|
PlayerKVGameplayLoop.Pending.SetResult(true);await Task.Delay(25);
|
|
bool presented=panel.canvasGroup.alpha==1 && PlayerKVGameplayLoop.Shows==1;
|
|
bool interactRestored=panel.canvasGroup.blocksRaycasts && panel.canvasGroup.interactable;
|
|
var s2=new ActualPanel();s2.StartTail();bool kvListener=s2.playButton.onClick.Count==1 && !s2.NonKvOnly;
|
|
s2.playButton.onClick.Invoke();bool kvClick=s2.HomeClicks==1;
|
|
PlayerKVGameplayLoop.Enabled=false;var s3=new ActualPanel();s3.StartTail();bool pfListener=s3.playButton.onClick.Count==1 && s3.NonKvOnly;
|
|
bool ok=presented && interactRestored && kvListener && kvClick && pfListener && pendingBlocked;
|
|
Console.WriteLine($"{(ok?"PASS":"FAIL")} presentation restores interaction; KV listener registered; raycasts={panel.canvasGroup.blocksRaycasts}, kvListener={kvListener}, pfListener={pfListener}");return ok?0:1;
|
|
public class Canvas {public float alpha;public bool blocksRaycasts,interactable;}
|
|
public class ButtonEvent{System.Action h;public int Count=>h==null?0:1;public void AddListener(System.Action a)=>h+=a;public void Invoke()=>h?.Invoke();}
|
|
public class Button{public ButtonEvent onClick=new();}
|
|
public class Fish {public void SaveCaughtFishForKVLoop(int id){}}
|
|
public class Player {public PlayerKVEditResult SaveFishingRewardForKVLoop()=>new();}
|
|
namespace game.PlayerDataStorage {
|
|
public class PlayerKVEditResult{}
|
|
public static class PlayerKVGameplayLoop {
|
|
public class FishingRewardAction{}
|
|
public static bool Enabled=true;static FishingRewardAction action;public static int Shows;public static TaskCompletionSource<bool> Pending=new();
|
|
public static FishingRewardAction BindRewardPanel(object p) {if(action!=null)return null;return action=new();}
|
|
public static bool RewardPanelCurrent(FishingRewardAction a,object p)=>a!=null && ReferenceEquals(a,action);
|
|
public static IDisposable BeginRewardSegment(string name)=>new Scope();
|
|
public static Task ConfirmRewardAsync(FishingRewardAction a,PlayerKVEditResult p)=>Pending.Task;
|
|
public static void PresentReward(FishingRewardAction a,Action show){Shows++;show();}
|
|
public static void Fault(string message)=>throw new Exception(message);
|
|
class Scope:IDisposable{public void Dispose(){}}
|
|
}}
|