From e5a80257216d76f5033b4120f348f309ca7764f1 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 3 May 2024 18:42:09 +0200 Subject: a wip --- src/critter-script-empty.cpp | 70 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/critter-script-empty.cpp (limited to 'src/critter-script-empty.cpp') diff --git a/src/critter-script-empty.cpp b/src/critter-script-empty.cpp new file mode 100644 index 00000000..180189f8 --- /dev/null +++ b/src/critter-script-empty.cpp @@ -0,0 +1,70 @@ +#include "critter-script.inl" +#include "entity/name-of.hpp" + +namespace floormat { + +namespace { + +CORRADE_ALWAYS_INLINE +void touch_ptr(const std::shared_ptr& p) +{ + (void)p; +#if fm_ASAN + volatile char foo = *reinterpret_cast(&*p); + (void)foo; +//#else +// fm_debug_assert(p); +#endif +} + +struct empty_critter_script final : critter_script +{ + const void* type_id() const override; + void on_init(const std::shared_ptr& c) override; + void on_update(const std::shared_ptr& c, size_t& i, const Ns& dt) override; + void on_destroy(const std::shared_ptr& c, script_destroy_reason reason) override; + void delete_self() noexcept override; +}; + +constexpr StringView script_name = name_of; + +const void* empty_critter_script::type_id() const +{ + return &script_name; +} + +void empty_critter_script::on_init(const std::shared_ptr& p) +{ + DBG_nospace << "> init critter:" << (void*)&*p << " id:" << p->id << (p->name ? " name:" : "") << p->name; + touch_ptr(p); +} +void empty_critter_script::on_update(const std::shared_ptr& p, size_t&, const Ns&) +{ + //DBG_nospace << " update critter:" << (void*)&*p << " id:" << p->id << (p->name ? " name:" : "") << p->name; + touch_ptr(p); +} +void empty_critter_script::on_destroy(const std::shared_ptr& p, script_destroy_reason r) +{ + DBG_nospace << " destroy critter:" << (void*)&*p << " id:" << p->id << " reason:" << (int)r << (p->name ? " name:" : "") << p->name; + touch_ptr(p); +} +void empty_critter_script::delete_self() noexcept +{ + DBG_nospace << "< delete critter"; +} + +constinit empty_critter_script empty_script_ = {}; + +} // namespace + +template <> +critter_script* Script::make_empty() +{ + return &empty_script_; +} + +template class Script; + +critter_script::~critter_script() noexcept = default; + +} // namespace floormat -- cgit v1.2.3