예제 #1
0
    void Clear(PromptCallback callback)
    {
        string input = prompt.GetComponentInChildren <InputField>().text;

        prompt.GetComponent <Image>().CrossFadeAlpha(0f, 0.5f, false);
        prompt.GetComponentInChildren <Text>().CrossFadeAlpha(2f, 0.5f, false);
        GameObject.Destroy(prompt, 0.5f);
        prompt = null;

        callback(input);
    }
예제 #2
0
    public static GameObject CreatePrompt(PromptCallback _cb = null)
    {
        var        prefab        = Resources.Load("UI Prefabs/Name Prompt Panel");
        var        p_c           = GameObject.FindObjectOfType <Canvas>();
        GameObject prompt_object = (GameObject)Instantiate(prefab);

        prompt_object.transform.SetParent(p_c.transform, false);
        if (_cb != null)
        {
            prompt_object.GetComponent <TextPrompt>().AddCallback(_cb);
        }
        return(prompt_object);
    }
예제 #3
0
    public void Prompt(string message, PromptCallback callback)
    {
        if (prompt)
        {
            StartCoroutine(ProcrastinatePrompt(1, message, callback));
            return;
        }
        prompt = GameObject.Instantiate(promptPrefab, gameObject.transform.parent.transform);
        prompt.GetComponent <Image>().CrossFadeAlpha(0f, 0, true);
        prompt.GetComponentInChildren <Text>().CrossFadeAlpha(0f, 0, true);
        prompt.GetComponent <Image>().CrossFadeAlpha(2f, 0.5f, false);
        prompt.GetComponentInChildren <Text>().CrossFadeAlpha(2f, 0.5f, false);

        prompt.GetComponentInChildren <Text>().text = message;
        prompt.GetComponentInChildren <Button>().onClick.AddListener(() => Clear(callback));
    }
예제 #4
0
        private async Task <PromptResult> InternalPromptAsync(string controlID, List <CallMedia> play, CallCollect collect)
        {
            await API.API.SetupAsync();

            PromptResult resultPrompt = new PromptResult();
            TaskCompletionSource <bool> tcsCompletion = new TaskCompletionSource <bool>();

            // Hook callbacks temporarily to catch required events
            PlayErrorCallback errorCallback = (a, c, e, p) =>
            {
                resultPrompt.Event = new Event(e.EventType, JObject.FromObject(p));
                tcsCompletion.SetResult(false);
            };
            PromptCallback promptCallback = (a, c, e, p) =>
            {
                resultPrompt.Event = new Event(e.EventType, JObject.FromObject(p));
                resultPrompt.Type  = p.Result.Type;

                switch (resultPrompt.Type)
                {
                case CallCollectType.digit:
                {
                    CallingEventParams.CollectParams.ResultParams.DigitParams digitParams = p.Result.ParametersAs <CallingEventParams.CollectParams.ResultParams.DigitParams>();
                    resultPrompt.Result     = digitParams.Digits;
                    resultPrompt.Terminator = digitParams.Terminator;

                    tcsCompletion.SetResult(true);
                    break;
                }

                case CallCollectType.speech:
                {
                    CallingEventParams.CollectParams.ResultParams.SpeechParams speechParams = p.Result.ParametersAs <CallingEventParams.CollectParams.ResultParams.SpeechParams>();
                    resultPrompt.Result     = speechParams.Text;
                    resultPrompt.Confidence = speechParams.Confidence;

                    tcsCompletion.SetResult(true);
                    break;
                }

                default:
                {
                    tcsCompletion.SetResult(false);
                    break;
                }
                }
            };

            OnPlayError += errorCallback;
            OnPrompt    += promptCallback;

            try
            {
                Task <LL_PlayAndCollectResult> taskLLPlayAndCollect = mAPI.LL_PlayAndCollectAsync(new LL_PlayAndCollectParams()
                {
                    NodeID    = mNodeID,
                    CallID    = mID,
                    ControlID = controlID,
                    Play      = play,
                    Collect   = collect,
                });

                // The use of await rethrows exceptions from the task
                LL_PlayAndCollectResult resultLLPlayAndCollect = await taskLLPlayAndCollect;
                if (resultLLPlayAndCollect.Code == "200")
                {
                    mLogger.LogDebug("Prompt {0} for call {1} waiting for completion events", controlID, ID);

                    resultPrompt.Successful = await tcsCompletion.Task;

                    mLogger.LogDebug("Prompt {0} for call {1} {2}", controlID, ID, resultPrompt.Successful ? "successful" : "unsuccessful");
                }
            }
            catch (Exception exc)
            {
                mLogger.LogError(exc, "Prompt {0} for call {1} exception", controlID, ID);
            }

            // Unhook temporary callbacks
            OnPlayError -= errorCallback;
            OnPrompt    -= promptCallback;

            return(resultPrompt);
        }
예제 #5
0
 public SimplePrompt(PromptCallback callback, bool callbackHandlesCancel = false)
 {
     m_Callback = callback;
     m_CallbackHandlesCancel = callbackHandlesCancel;
 }
예제 #6
0
 public SimplePrompt(PromptCallback callback, PromptCallback cancelCallback)
 {
     m_Callback       = callback;
     m_CancelCallback = cancelCallback;
 }
예제 #7
0
 public void AddCallback(PromptCallback _cb)
 {
     callback += _cb;
 }
예제 #8
0
    IEnumerator ProcrastinatePrompt(int delaySeconds, string toastContent, PromptCallback callback)
    {
        yield return(new WaitForSeconds(delaySeconds));

        Prompt(toastContent, callback);
    }