#include #include #include #include namespace extra2d { Director::Director() {} Director::~Director() { shutdown(); } bool Director::init() { return true; } void Director::shutdown() { // 结束当前场景 if (runningScene_) { runningScene_->onExit(); runningScene_.reset(); } // 清空场景栈 while (!sceneStack_.empty()) { sceneStack_.pop(); } running_ = false; } void Director::runScene(Ptr scene) { if (!scene) return; // 结束当前场景 if (runningScene_) { runningScene_->onExit(); } // 清空场景栈 while (!sceneStack_.empty()) { sceneStack_.pop(); } // 运行新场景 runningScene_ = scene; runningScene_->onEnter(); running_ = true; needEnd_ = false; } void Director::replaceScene(Ptr scene) { if (!scene) return; // 结束当前场景 if (runningScene_) { runningScene_->onExit(); } // 替换场景 runningScene_ = scene; runningScene_->onEnter(); } void Director::pushScene(Ptr scene) { if (!scene) return; // 暂停当前场景 if (runningScene_) { // 可以在这里添加暂停逻辑 sceneStack_.push(runningScene_); } // 运行新场景 runningScene_ = scene; runningScene_->onEnter(); } void Director::popScene() { if (sceneStack_.empty()) { // 没有场景可以弹出,结束运行 end(); return; } // 结束当前场景 if (runningScene_) { runningScene_->onExit(); } // 弹出栈顶场景 runningScene_ = sceneStack_.top(); sceneStack_.pop(); // 恢复场景 // 可以在这里添加恢复逻辑 } void Director::end() { needEnd_ = true; running_ = false; if (runningScene_) { runningScene_->onExit(); runningScene_.reset(); } } Scene *Director::getRunningScene() const { return runningScene_.get(); } CameraComponent *Director::getMainCamera() const { if (runningScene_) { return runningScene_->getMainCamera(); } return nullptr; } void Director::update(float dt) { if (!running_ || !runningScene_) return; runningScene_->update(dt); } void Director::render() { if (!running_ || !runningScene_) return; // 从场景获取相机并上传矩阵 CameraComponent *camera = runningScene_->getMainCamera(); if (camera) { Mat4 viewProj = camera->getViewProjectionMatrix(); events::OnRenderSetCamera::emit(viewProj); } else { E2D_LOG_WARN("Director::render: No main camera set!"); } runningScene_->render(); } } // namespace extra2d