9void ChatInputCapture::BeginCapture(
int slot, std::string prompt, Callback callback,
int timeoutMs)
11 if (slot < 0 || slot >= 64 || !callback)
17 .Prompt = std::move(prompt),
18 .Cb = std::move(callback),
24 p.TimeoutHandle = Core::Scheduler::Instance().Delay(timeoutMs, [slot]() {
25 ChatInputCapture::Instance().CancelCapture(slot);
29 _pending[slot] = std::move(p);
32bool ChatInputCapture::IsCapturing(
int slot)
const
34 if (slot < 0 || slot >= 64)
36 return _pending[slot].has_value();
39bool ChatInputCapture::TryConsume(
int slot, std::string_view text)
41 if (slot < 0 || slot >= 64)
44 auto& opt = _pending[slot];
49 auto timeoutHandle = opt->TimeoutHandle;
51 bool accepted = cb && cb(slot, text);
54 if (timeoutHandle != 0)
55 Core::Scheduler::Instance().Cancel(timeoutHandle);
62void ChatInputCapture::CancelCapture(
int slot)
64 if (slot < 0 || slot >= 64)
67 auto& opt = _pending[slot];
71 if (opt->TimeoutHandle != 0)
72 Core::Scheduler::Instance().Cancel(opt->TimeoutHandle);
77const std::string* ChatInputCapture::GetPrompt(
int slot)
const
79 if (slot < 0 || slot >= 64)
81 const auto& opt = _pending[slot];
82 return opt.has_value() ? &opt->Prompt :
nullptr;
85void ChatInputCapture::OnPlayerDisconnect(
int slot)