#include #include #include #include #include #include namespace extra2d { Context::Context() : pluginLoader_(std::make_unique()) {} Context::~Context() { if (inited_) { shutdown(); } } Context::Context(Context &&) noexcept = default; Context &Context::operator=(Context &&) noexcept = default; std::unique_ptr Context::create() { return std::make_unique(); } bool Context::init() { if (inited_) { return true; } // 发送引擎初始化事件 events::OnInit::emit(); // 初始化所有插件 if (!pluginLoader_->initAll()) { return false; } inited_ = true; running_ = true; return true; } void Context::shutdown() { if (!inited_) { return; } running_ = false; // 关闭所有插件 pluginLoader_->shutdownAll(); // 发送引擎关闭事件 events::OnShutdown::emit(); inited_ = false; } void Context::tick(float dt) { if (!running_) { return; } // 更新时间和帧数 totalTime_ += dt; frameCount_++; // 发送更新事件 events::OnUpdate::emit(dt); // 发送延迟更新事件 events::OnLateUpdate::emit(dt); // 渲染阶段 // 1. 渲染开始 events::OnRenderBegin::emit(); // 2. 场景图提交渲染命令(通过 OnRenderSubmit 事件) // 3. 渲染结束并执行绘制 events::OnRenderEnd::emit(); // 4. 呈现渲染结果(交换缓冲区) events::OnRenderPresent::emit(); } ModuleRegistry &Context::modules() { return ModuleRegistry::instance(); } PluginLoader &Context::plugins() { return *pluginLoader_; } } // namespace extra2d