/** * @file EngineWin32.cpp * @brief Win32 运行模式下的引擎生命周期实现。 * @details * 该文件负责连接平台消息循环与引擎帧循环: * - 初始化阶段加载内容并创建主窗口; * - 更新阶段驱动脚本系统与帧间休眠; * - 关闭阶段销毁窗口并卸载内容资源。 */ #if !defined(SHIPPING) && defined(_WIN64) #include "..\Content\ContentLoader.h" #include "..\Components\Script.h" #include "..\Platform\PlatformTypes.h" #include "..\Platform\Platform.h" #include "..\Graphics\Renderer.h" #include using namespace XEngine; namespace { /** * @brief 游戏窗口渲染表面实例。 */ graphics::render_surface game_window{}; /** * @brief 主窗口消息回调。 * @param hwnd 窗口句柄。 * @param msg 消息类型。 * @param wparam 消息参数。 * @param lparam 消息参数。 * @return 消息处理结果。 */ LRESULT win_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_DESTROY: { if (game_window.window.is_closed()) { PostQuitMessage(0); return 0; } } case WM_SYSCHAR: if (wparam == VK_RETURN && (HIWORD(lparam) & KF_ALTDOWN)) { game_window.window.set_fullscreen(!game_window.window.is_fullscreen()); return 0; } default: break; } return DefWindowProc(hwnd, msg, wparam, lparam); } } /** * @brief 初始化引擎运行环境。 * @return 初始化成功返回 true。 */ bool engine_initialize() { if (!XEngine::content::load_games()) return false; platform::window_init_info info { &win_proc, nullptr, L"XGame" }; game_window.window = platform::create_window(&info); if (!game_window.window.is_valid()) return false; return true; } /** * @brief 执行单帧更新。 */ void engine_update() { XEngine::script::update(10.f); std::this_thread::sleep_for(std::chrono::milliseconds(10)); } /** * @brief 关闭引擎并释放运行时资源。 */ void engine_shutdown() { platform::remove_window(game_window.window.get_id()); XEngine::content::unload_game(); } #endif //!defined(SHIPPING)