#pragma once #include #include #include #include #include #include #include namespace extra2d { /** * @brief 服务基类 * * 所有子系统服务都继承此类,提供统一的生命周期管理 */ class IService : public RefCounted { public: virtual ~IService() = default; virtual bool init() { return true; } virtual void shutdown() {} virtual void update(float dt) {} virtual void lateUpdate(float dt) {} virtual void fixedUpdate(float dt) {} virtual const char* name() const = 0; virtual int pri() const { return Pri::Default; } bool isInited() const { return inited_; } bool isEnabled() const { return enabled_; } void setEnabled(bool v) { enabled_ = v; } protected: IService() = default; bool inited_ = false; bool enabled_ = true; friend class SvcMgr; }; /** * @brief 服务管理器 * * 管理所有服务的注册、初始化、更新和关闭 */ class SvcMgr { public: static SvcMgr& inst(); void reg(Ptr svc); void unreg(const char* name); Ptr get(const char* name); template Ptr getAs(const char* name) { return static_cast(get(name).get()); } bool initAll(); void shutdownAll(); void updateAll(float dt); void lateUpdateAll(float dt); void fixedUpdateAll(float dt); bool has(const char* name) const; size_t count() const; private: SvcMgr() = default; using SvcMap = tbb::concurrent_hash_map>; SvcMap svcMap_; std::vector> sortedSvcs_; void sortSvcs(); }; #define SVC_MGR extra2d::SvcMgr::inst() } // namespace extra2d