#pragma once #include #include #include #include namespace extra2d { // 前向声明 class CameraComponent; /** * @brief 导演类 * * 管理场景的生命周期和切换 */ class Director : public RefCounted { public: /** * @brief 构造函数 */ Director(); /** * @brief 析构函数 */ ~Director() override; // 禁止拷贝 Director(const Director&) = delete; Director& operator=(const Director&) = delete; // ======================================== // 生命周期 // ======================================== /** * @brief 初始化导演 * @return 是否成功 */ bool init(); /** * @brief 关闭导演 */ void shutdown(); // ======================================== // 场景管理 // ======================================== /** * @brief 运行场景 * @param scene 场景 */ void runScene(Ptr scene); /** * @brief 替换当前场景 * @param scene 新场景 */ void replaceScene(Ptr scene); /** * @brief 压入场景(场景栈) * @param scene 场景 */ void pushScene(Ptr scene); /** * @brief 弹出场景(场景栈) */ void popScene(); /** * @brief 结束当前场景 */ void end(); // ======================================== // 属性获取 // ======================================== /** * @brief 获取当前运行的场景 * @return 场景指针 */ Scene* getRunningScene() const; /** * @brief 获取主相机 * @return 相机组件指针 */ CameraComponent* getMainCamera() const; /** * @brief 是否正在运行场景 * @return 是否运行中 */ bool isRunning() const { return running_; } // ======================================== // 生命周期 // ======================================== /** * @brief 更新当前场景 * @param dt 帧间隔时间 */ void update(float dt); /** * @brief 渲染当前场景 */ void render(); /** * @brief 设置主相机 * @param camera 相机组件 */ void setMainCamera(CameraComponent* camera) { mainCamera_ = camera; } private: Ptr runningScene_; std::stack> sceneStack_; CameraComponent* mainCamera_ = nullptr; bool running_ = false; bool needEnd_ = false; }; } // namespace extra2d