Toast Engine
Loading...
Searching...
No Matches
lua_signal.hpp
1#pragma once
2
5
6#include <memory>
7#include <string>
8#include <vector>
9
10namespace scripting {
11
12class LuaSignal {
13public:
14 LuaSignal();
15
16 void owner(toast::Box<toast::Node> node);
17
18 [[nodiscard]]
19 auto connect(NodeProxy target, std::string_view function, signals::ConnectionSource source, bool forwards_args = true) -> bool;
20
21 [[nodiscard]]
22 auto disconnect(NodeProxy target, std::string_view function, signals::ConnectionSource source) -> bool;
23
24 [[nodiscard]]
25 auto connectSelf(std::string_view function, signals::ConnectionSource source, bool forwards_args = true) -> bool;
26
27 [[nodiscard]]
28 auto disconnectSelf(std::string_view function, signals::ConnectionSource source) -> bool;
29
30 void clear(signals::ConnectionSource source) { m_state->signal.clear(source); }
31
32 void fire(const signals::DynamicArgs& args = {}) { m_state->signal.fire(args); }
33
34 void argTypes(std::vector<std::string> types) { m_state->arg_types = std::move(types); }
35
36 [[nodiscard]]
37 auto argTypes() const -> const std::vector<std::string>& {
38 return m_state->arg_types;
39 }
40
41 [[nodiscard]]
42 auto connections() const -> std::vector<signals::ConnectionInfo> {
43 return m_state->signal.connections();
44 }
45
46private:
47 struct State {
49 signals::Signal<signals::DynamicArgs> signal;
50 std::vector<std::string> arg_types;
51 };
52
53 std::shared_ptr<State> m_state;
54};
55
56}
Definition node_proxy.hpp:55
Intrusive reference-counted handle to a Node.
Definition box.hpp:35
Lua-side proxy for a toast::Node.
Definition signal_types.hpp:18