VoltMod
C++23 framework for CS2 server plugins
Loading...
Searching...
No Matches
MenuRouter.cpp
Go to the documentation of this file.
2#include <utility>
3
4namespace VoltMod
5{
6
8
10{
11 _preferred = &surface;
12 return Subscription([this, &surface] {
13 // A later Prefer replaced this one; leave that in place.
14 if (_preferred == &surface)
15 {
16 _preferred = nullptr;
17 }
18 });
19}
20
21bool MenuRouter::OpenSession(int slot, std::shared_ptr<Menu> menu, MenuOptions options)
22{
23 // One session per player: a menu left on the other surface would stay open and frozen.
24 if (_preferred)
25 {
26 _preferred->CloseAll(slot);
27 }
28 _fallback.CloseAll(slot);
29
30 if (_preferred && _preferred->OpenSession(slot, menu, options))
31 {
32 return true;
33 }
34 return _fallback.OpenSession(slot, std::move(menu), options);
35}
36
37void MenuRouter::Open(int slot, std::shared_ptr<Menu> menu)
38{
39 if (!IsOpen(slot))
40 {
41 OpenSession(slot, std::move(menu), {});
42 return;
43 }
44
45 SessionOf(slot).Open(slot, std::move(menu));
46}
47
48bool MenuRouter::IsOpen(int slot) const
49{
50 return (_preferred && _preferred->IsOpen(slot)) || _fallback.IsOpen(slot);
51}
52
54{
55 SessionOf(slot).Close(slot);
56}
57
59{
60 SessionOf(slot).CloseAll(slot);
61}
62
63void MenuRouter::CloseAll(int slot, std::string_view replyKey)
64{
65 SessionOf(slot).CloseAll(slot, replyKey);
66}
67
68void MenuRouter::Prompt(int slot, std::string prompt, std::function<bool(int, std::string_view)> callback)
69{
70 SessionOf(slot).Prompt(slot, std::move(prompt), std::move(callback));
71}
72
73std::string MenuRouter::Translate(int slot, std::string_view key, std::string_view fallback) const
74{
75 return SessionOf(slot).Translate(slot, key, fallback);
76}
77
78MenuSurface& MenuRouter::SessionOf(int slot) const
79{
80 return _preferred && _preferred->IsOpen(slot) ? *_preferred : _fallback;
81}
82
83} // namespace VoltMod
bool OpenSession(int slot, std::shared_ptr< Menu > menu, MenuOptions options) override
void CloseAll(int slot) override
void Close(int slot) override
Subscription Prefer(MenuSurface &surface)
Definition MenuRouter.cpp:9
bool IsOpen(int slot) const override
void Open(int slot, std::shared_ptr< Menu > menu) override
void Prompt(int slot, std::string prompt, std::function< bool(int slot, std::string_view text)> callback) override
MenuRouter(MenuSurface &fallback)
Definition MenuRouter.cpp:7
std::string Translate(int slot, std::string_view key, std::string_view fallback) const override
virtual void Close(int slot)=0
virtual void Open(int slot, std::shared_ptr< Menu > menu)=0
virtual bool OpenSession(int slot, std::shared_ptr< Menu > menu, MenuOptions options)=0
virtual void Prompt(int slot, std::string prompt, std::function< bool(int slot, std::string_view text)> callback)=0
virtual std::string Translate(int slot, std::string_view key, std::string_view fallback) const =0
virtual bool IsOpen(int slot) const =0
virtual void CloseAll(int slot)=0
Owns one registration and releases it on destruction.
static std::string ReadFile(const std::filesystem::path &path)
Definition Loader.cpp:56