/** * limbo_debugger.h * ============================================================================= * Copyright 2021-2024 Serhii Snitsaruk * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ #ifndef LIMBO_DEBUGGER_H #define LIMBO_DEBUGGER_H #include "../../bt/bt_instance.h" #include "../../bt/tasks/bt_task.h" #ifdef LIMBOAI_MODULE #include "core/object/class_db.h" #include "core/object/object.h" #include "core/string/node_path.h" #endif // LIMBOAI_MODULE #ifdef LIMBOAI_GDEXTENSION #include #include #include #include #endif // LIMBOAI_GDEXTENSION class LimboDebugger : public Object { GDCLASS(LimboDebugger, Object); private: static LimboDebugger *singleton; LimboDebugger(); public: static void initialize(); static void deinitialize(); _FORCE_INLINE_ static LimboDebugger *get_singleton() { return singleton; } ~LimboDebugger(); protected: static void _bind_methods(); #ifdef DEBUG_ENABLED private: HashSet active_bt_instances; uint64_t tracked_instance_id; bool session_active = false; void _track_tree(uint64_t p_instance_id); void _untrack_tree(); void _send_active_bt_players(); void _on_bt_instance_updated(int status, uint64_t p_instance_id); public: static Error parse_message(void *p_user, const String &p_msg, const Array &p_args, bool &r_captured); #ifdef LIMBOAI_GDEXTENSION bool parse_message_gdext(const String &p_msg, const Array &p_args); #endif void register_bt_instance(uint64_t p_instance_id); void unregister_bt_instance(uint64_t p_instance_id); bool is_active() const; #endif // ! DEBUG_ENABLED }; #endif // LIMBO_DEBUGGER_H