private void HandleEvent(ref IUpdateEvent ue) { evtText = ue.Text(); evtType = ue.Type(); evtActor = ue.Actor(); if (evtActor != null) { evtText = evtActor + ": " + evtText; } ue.RemoveKeys(Meta.TEXT, Meta.TYPE, Meta.ACTOR); switch (evtType) { case "Say": evtText = evtText + " " + ue.Data().Stringify(); break; case "Ask": DoPrompt(ue); // respond with 'new ChoiceEvent(choiceIdx);' break; case "Wait": evtText = ("(" + (evtType + " " + ue.Data().Stringify()).Trim() + ")"); break; default: evtText = ("(" + evtType + ": " + (evtText + " " + ue.Data().Stringify()).Trim() + ")"); break; } Display(evtText); if (evtType == "Ask") { // default is to reprompt on timeout int timeout = Util.ToMillis(ue.GetDouble(Meta.TIMEOUT)); while (!DoResponse(timeout)) { Display(evtText); } } ue = null; // dispose event }
private void SendRandomResponse(IUpdateEvent ue) { double timeout = ue.GetDouble(Meta.TIMEOUT, -1); if (timeout > -1) { var delay = Util.ToMillis(Util.Rand(timeout / 3, timeout)); Timers.SetTimeout(delay, () => { // choice a valid response, or -1 for no response int choice = Util.Rand(evtOpts.Length + 1) - 1; Console.WriteLine("\n<choice-index#" + choice + "> after " + delay + "ms\n"); gameEvent = new ChoiceEvent(choice); }); } }