86 return systemManager.has<
S>();
89 if constexpr(std::is_default_constructible_v<S>) {
90 systemManager.add<
S>();
94 systemManager.remove<
S>();
147#define CE_EDITOR_SYSTEM_TOKENPASTE(x, y) x##y
148#define CE_EDITOR_SYSTEM_TOKENPASTE2(x, y) CE_EDITOR_SYSTEM_TOKENPASTE(x, y)
149#define CE_EDITOR_SYSTEM(...) \
150 static const ::CeresEngine::Editor::UI::TSystemUI<__VA_ARGS__> CE_EDITOR_SYSTEM_TOKENPASTE2(systemUI, __COUNTER__) [[maybe_unused]] = [ \
151 ](::CeresEngine::Editor::UI::TSystemUI<__VA_ARGS__> & ui, ::CeresEngine::String & name, auto& supports, auto& add, auto& remove, auto& render) noexcept
152#define CE_EDITOR_SYSTEM_ADVANCED(EditorClass) static const EditorClass CE_EDITOR_SYSTEM_TOKENPASTE2(systemUI, EditorClass) [[maybe_unused]]{};
153#define CE_EDITOR_SYSTEM_ADVANCED2(Name, ClassName, ...) \
154 struct Name##SystemUI final : public ::CeresEngine::Editor::UI::BasicSystemUI<ClassName> { \
155 __VA_ARGS__ [[nodiscard]] ::CeresEngine::String getName() const override { return #Name; } \
157 CE_EDITOR_SYSTEM_ADVANCED(Name##SystemUI)
#define CE_EXPLICIT(EXPR)
Definition Macros.hpp:413
void addSystem(SystemManager &systemManager) override
Definition SystemUI.hpp:68
Definition SystemUI.hpp:46
void addSystem(SystemManager &systemManager) override
Definition SystemUI.hpp:59
bool supports(SystemManager &systemManager) const override
Definition SystemUI.hpp:49
void removeSystem(SystemManager &systemManager) override
Definition SystemUI.hpp:62
void render(SystemManager &systemManager) final
Definition SystemUI.hpp:52
virtual void render(S &system)=0
Renders a UI for the system of the given entity.
Definition SystemUI.hpp:19
SystemUI * previous
The previous system UI in the chain.
Definition SystemUI.hpp:27
virtual String getName() const =0
virtual void render(SystemManager &systemManager)=0
virtual ~SystemUI()
Destroys the SystemUI object.
virtual void addSystem(SystemManager &systemManager)=0
SystemUI * next
The next system UI in the chain.
Definition SystemUI.hpp:24
SystemUI()
Creates a new SystemUI object.
virtual void removeSystem(SystemManager &systemManager)=0
virtual bool supports(SystemManager &systemManager) const =0
Definition SystemUI.hpp:133
static void renderUI(SystemManager &systemManager)
static SystemUI * last
The last component UI in the linked list.
Definition SystemUI.hpp:141
static SystemUI * first
The first component UI in the linked list.
Definition SystemUI.hpp:138
Definition SystemUI.hpp:71
void removeSystem(SystemManager &systemManager) final
Definition SystemUI.hpp:123
std::function< bool(SystemManager &)> supports_
Definition SystemUI.hpp:74
void render(SystemManager &systemManager) final
Definition SystemUI.hpp:109
String getName() const final
Definition SystemUI.hpp:130
std::function< void(S &)> render_
Definition SystemUI.hpp:77
void addSystem(SystemManager &systemManager) final
Definition SystemUI.hpp:116
std::function< void(SystemManager &)> removeSystem_
Definition SystemUI.hpp:76
String name
Definition SystemUI.hpp:73
bool supports(SystemManager &systemManager) const final
Definition SystemUI.hpp:101
std::function< void(SystemManager &)> addSystem_
Definition SystemUI.hpp:75
The system manager is responsible for keeping track and dispatching updates to all attached systems.
Definition SystemManager.hpp:22
void remove()
Removes a system of type S.
bool has() noexcept
Checks if the manager contains a system of type S.
S & add(Args &&... args)
Adds a new system of type S.
Definition ComponentUI.hpp:14
@ Constructor
Indicates that the item is a constructor.
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25