#pragma once #include #include #include #include namespace extra2d { // 前向声明 struct RenderCommand; // ============================================================================ // 场景类 - 节点容器,管理整个场景图 // ============================================================================ class Scene : public Node { public: Scene(); ~Scene() override = default; // ------------------------------------------------------------------------ // 场景属性 // ------------------------------------------------------------------------ void setBackgroundColor(const Color &color) { backgroundColor_ = color; } Color getBackgroundColor() const { return backgroundColor_; } // ------------------------------------------------------------------------ // 摄像机 // ------------------------------------------------------------------------ void setCamera(IntrusivePtr camera); IntrusivePtr getCamera() const { return camera_; } Camera *getActiveCamera() const { return camera_ ? camera_.get() : defaultCamera_.get(); } // ------------------------------------------------------------------------ // 视口和尺寸 // ------------------------------------------------------------------------ void setViewportSize(float width, float height); void setViewportSize(const Size &size); Size getViewportSize() const { return viewportSize_; } float width() const { return viewportSize_.width; } float height() const { return viewportSize_.height; } // ------------------------------------------------------------------------ // 场景状态 // ------------------------------------------------------------------------ bool isPaused() const { return paused_; } void pause() { paused_ = true; } void resume() { paused_ = false; } // ------------------------------------------------------------------------ // 渲染和更新 // ------------------------------------------------------------------------ void renderScene(Renderer &renderer); virtual void renderContent(Renderer &renderer); void updateScene(float dt); void collectRenderCommands(std::vector &commands, int parentZOrder = 0) override; // ------------------------------------------------------------------------ // 静态创建方法 // ------------------------------------------------------------------------ static IntrusivePtr create(); protected: void onEnter() override; void onExit() override; friend class SceneManager; private: Color backgroundColor_ = Colors::Black; Size viewportSize_ = Size::Zero(); IntrusivePtr camera_; IntrusivePtr defaultCamera_; bool paused_ = false; }; } // namespace extra2d