// ============================================================================ // engine.c - 引擎核心实现 // ============================================================================ #include "engine.h" #include "logger.h" #include "timer.h" #include "../Window/window.h" #include "../include/engine_api.h" #include #include // 引擎实例 (单例) static Engine g_engine = {0}; // 回调 static EngineUpdateCallback g_update_callback = NULL; static EngineRenderCallback g_render_callback = NULL; static EngineKeyCallback g_key_callback = NULL; static EngineResizeCallback g_resize_callback = NULL; // 内部函数 static void on_key(int key) { if (g_key_callback) { g_key_callback(&g_engine, key); } if (key == VK_ESCAPE) { engine_request_quit(&g_engine); } } static void on_resize(int width, int height) { if (g_resize_callback) { g_resize_callback(&g_engine, width, height); } } Engine* engine_create(void) { return &g_engine; } void engine_destroy(Engine* engine) { if (engine) { engine_shutdown(engine); } } int engine_init(Engine* engine, const EngineConfig* config) { if (engine->initialized) return 1; engine->config = *config; // 初始化日志 logger_init("engine.log"); LOG_INFO("Initializing MiMo Engine ASM..."); // 初始化计时器 timer_init(); // 创建窗口 engine->window = window_create( config->app_name, config->window_width, config->window_height, config->fullscreen ); if (!engine->window) { LOG_ERROR("Failed to create window!"); return 0; } // 设置回调 window_set_key_callback(engine->window, on_key); window_set_resize_callback(engine->window, on_resize); LOG_INFO("Window created: %dx%d", config->window_width, config->window_height); engine->initialized = 1; engine->running = 1; engine->frame_count = 0; LOG_INFO("MiMo Engine ASM initialized successfully."); return 1; } void engine_run(Engine* engine) { if (!engine->initialized) { LOG_ERROR("Engine not initialized!"); return; } while (engine->running) { // 处理窗口消息 if (!window_process_messages(engine->window)) { engine->running = 0; break; } // 更新计时 timer_tick(); engine->delta_time = timer_get_delta(); engine->total_time = timer_get_total(); engine->frame_count++; // 用户更新 if (g_update_callback) { g_update_callback(engine, engine->delta_time); } // 用户渲染 if (g_render_callback) { g_render_callback(engine); } } } void engine_shutdown(Engine* engine) { if (!engine->initialized) return; LOG_INFO("Shutting down MiMo Engine ASM..."); if (engine->renderer) { // renderer_destroy(engine->renderer); engine->renderer = NULL; } if (engine->window) { window_destroy(engine->window); engine->window = NULL; } logger_shutdown(); engine->initialized = 0; engine->running = 0; } void engine_request_quit(Engine* engine) { engine->running = 0; } // 回调设置 void engine_set_update_callback(Engine* engine, EngineUpdateCallback callback) { g_update_callback = callback; } void engine_set_render_callback(Engine* engine, EngineRenderCallback callback) { g_render_callback = callback; } void engine_set_key_callback(Engine* engine, EngineKeyCallback callback) { g_key_callback = callback; } void engine_set_resize_callback(Engine* engine, EngineResizeCallback callback) { g_resize_callback = callback; }