#include #include #include #include #include #include namespace extra2d { Context::Context() : moduleRegistry_(std::make_unique()) , pluginLoader_(std::make_unique()) , timerModule_(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(); // 注册核心模块 moduleRegistry_->registerModule(timerModule_.get()); // 初始化所有模块 if (!moduleRegistry_->initAll()) { return false; } // 初始化所有插件 if (!pluginLoader_->initAll()) { return false; } inited_ = true; running_ = true; return true; } void Context::shutdown() { if (!inited_) { return; } running_ = false; // 关闭所有插件 pluginLoader_->shutdownAll(); // 关闭所有模块 moduleRegistry_->shutdownAll(); // 发送引擎关闭事件 events::OnShutdown::emit(); inited_ = false; } void Context::tick(float dt) { if (!running_) { return; } // 更新时间和帧数 totalTime_ += dt; frameCount_++; // 更新定时器模块 timerModule_->update(dt); // 发送更新事件 events::OnUpdate::emit(dt); // 发送延迟更新事件 events::OnLateUpdate::emit(dt); } ModuleRegistry& Context::modules() { return *moduleRegistry_; } PluginLoader& Context::plugins() { return *pluginLoader_; } TimerModule& Context::timer() { return *timerModule_; } } // namespace extra2d