public void SetInitial(string heading, int min, int max, int initial, bool allowCancel, string tag, QuantityModalCallback callback) { if (IsSet) { CDebug.LogEx("QuantityModal was set more than once!", LogLevel.Warning, this); } if (!string.IsNullOrEmpty(heading)) { HeadingText.text = Sub.Macro(heading); } Min = min; Max = max; QuantityField.text = initial.ToString(); if (!allowCancel) { CancelButton.gameObject.SetActive(false); } ResultTag = tag; if (callback == null) { CDebug.LogEx("QuantityModal was passed null callback!", LogLevel.Warning, this); } else { Callback = callback; } IsSet = true; }
/// <summary> /// Pushes a quantity modal and allows it to be awaited /// </summary> public static async Task <QuantityModalResult> PushQuantityModalAsync(string heading, int min, int max, int initial, bool allowCancel, bool ephemeral, CancellationToken?token) { bool finished = false; ModalStatusCode status = ModalStatusCode.Undefined; int quantity = initial; QuantityModalCallback callback = (s, t, q) => { finished = true; status = s; quantity = q; }; var go = GameObject.Instantiate <GameObject>(CoreUtils.LoadResource <GameObject>(QuantityModalPrefab), ephemeral ? GetEphemeralOrUIRoot() : CoreUtils.GetUIRoot()); go.GetComponent <QuantityModalController>().SetInitial(heading, min, max, initial, allowCancel, null, callback); while (!(finished || go == null)) { if (token != null && token.Value.IsCancellationRequested) { if (go != null) { UnityEngine.Object.Destroy(go); } break; } await Task.Yield(); } await Task.Yield(); //let the callback run, hopefully if (status == ModalStatusCode.Undefined) { status = ModalStatusCode.Aborted; } return(new QuantityModalResult(status, quantity)); }
/// <summary> /// Pushes a quantity modal and invokes the callback when dismissed /// </summary> public static void PushQuantityModal(string heading, int min, int max, int initial, bool allowCancel, string tag, QuantityModalCallback callback, bool ephemeral) { var go = GameObject.Instantiate <GameObject>(CoreUtils.LoadResource <GameObject>(QuantityModalPrefab), ephemeral ? GetEphemeralOrUIRoot() : CoreUtils.GetUIRoot()); go.GetComponent <QuantityModalController>().SetInitial(heading, min, max, initial, allowCancel, tag, callback); }
/// <summary> /// Pushes a quantity modal and invokes the callback when dismissed /// </summary> public static void PushQuantityModal(string heading, int min, int max, int initial, bool allowCancel, string tag, QuantityModalCallback callback) { PushQuantityModal(heading, min, max, initial, allowCancel, tag, callback, false); }