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;
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
 /// <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);
 }