diff --git a/headers/enduro2d/high/components/behaviour.hpp b/headers/enduro2d/high/components/behaviour.hpp index f97b8e6a..10b7728a 100644 --- a/headers/enduro2d/high/components/behaviour.hpp +++ b/headers/enduro2d/high/components/behaviour.hpp @@ -14,13 +14,24 @@ namespace e2d { class behaviour final { + public: + class started final {}; + class destroy final {}; + class disabled final {}; public: behaviour() = default; behaviour(const script_asset::ptr& script); + behaviour& meta(sol::table&& value) noexcept; + behaviour& meta(const sol::table& value); + + [[nodiscard]] sol::table& meta() noexcept; + [[nodiscard]] const sol::table& meta() const noexcept; + behaviour& script(const script_asset::ptr& value) noexcept; [[nodiscard]] const script_asset::ptr& script() const noexcept; private: + sol::table meta_; script_asset::ptr script_; }; @@ -37,6 +48,48 @@ namespace e2d asset_dependencies& dependencies, const collect_context& ctx) const; }; + + template <> + class factory_loader final : factory_loader<> { + public: + static const char* schema_source; + + bool operator()( + behaviour::started& component, + const fill_context& ctx) const; + + bool operator()( + asset_dependencies& dependencies, + const collect_context& ctx) const; + }; + + template <> + class factory_loader final : factory_loader<> { + public: + static const char* schema_source; + + bool operator()( + behaviour::destroy& component, + const fill_context& ctx) const; + + bool operator()( + asset_dependencies& dependencies, + const collect_context& ctx) const; + }; + + template <> + class factory_loader final : factory_loader<> { + public: + static const char* schema_source; + + bool operator()( + behaviour::disabled& component, + const fill_context& ctx) const; + + bool operator()( + asset_dependencies& dependencies, + const collect_context& ctx) const; + }; } namespace e2d @@ -44,6 +97,24 @@ namespace e2d inline behaviour::behaviour(const script_asset::ptr& value) : script_(value) {} + inline behaviour& behaviour::meta(sol::table&& value) noexcept { + meta_ = std::move(value); + return *this; + } + + inline behaviour& behaviour::meta(const sol::table& value) { + meta_ = value; + return *this; + } + + inline sol::table& behaviour::meta() noexcept { + return meta_; + } + + inline const sol::table& behaviour::meta() const noexcept { + return meta_; + } + inline behaviour& behaviour::script(const script_asset::ptr& value) noexcept { script_ = value; return *this; diff --git a/sources/enduro2d/high/components/behaviour.cpp b/sources/enduro2d/high/components/behaviour.cpp index 94678ef8..225250e1 100644 --- a/sources/enduro2d/high/components/behaviour.cpp +++ b/sources/enduro2d/high/components/behaviour.cpp @@ -50,3 +50,81 @@ namespace e2d return true; } } + +namespace e2d +{ + const char* factory_loader::schema_source = R"json({ + "type" : "object", + "required" : [], + "additionalProperties" : false, + "properties" : {} + })json"; + + bool factory_loader::operator()( + behaviour::started& component, + const fill_context& ctx) const + { + E2D_UNUSED(component, ctx); + return true; + } + + bool factory_loader::operator()( + asset_dependencies& dependencies, + const collect_context& ctx) const + { + E2D_UNUSED(dependencies, ctx); + return true; + } +} + +namespace e2d +{ + const char* factory_loader::schema_source = R"json({ + "type" : "object", + "required" : [], + "additionalProperties" : false, + "properties" : {} + })json"; + + bool factory_loader::operator()( + behaviour::destroy& component, + const fill_context& ctx) const + { + E2D_UNUSED(component, ctx); + return true; + } + + bool factory_loader::operator()( + asset_dependencies& dependencies, + const collect_context& ctx) const + { + E2D_UNUSED(dependencies, ctx); + return true; + } +} + +namespace e2d +{ + const char* factory_loader::schema_source = R"json({ + "type" : "object", + "required" : [], + "additionalProperties" : false, + "properties" : {} + })json"; + + bool factory_loader::operator()( + behaviour::disabled& component, + const fill_context& ctx) const + { + E2D_UNUSED(component, ctx); + return true; + } + + bool factory_loader::operator()( + asset_dependencies& dependencies, + const collect_context& ctx) const + { + E2D_UNUSED(dependencies, ctx); + return true; + } +} diff --git a/sources/enduro2d/high/starter.cpp b/sources/enduro2d/high/starter.cpp index 3a444669..2c2ac555 100644 --- a/sources/enduro2d/high/starter.cpp +++ b/sources/enduro2d/high/starter.cpp @@ -139,6 +139,9 @@ namespace e2d safe_module_initialize() .register_component("actor") .register_component("behaviour") + .register_component("behaviour.started") + .register_component("behaviour.destroy") + .register_component("behaviour.disabled") .register_component("camera") .register_component("flipbook_player") .register_component