Files
school_stm32/game_engine/ge_core.c
ZZY 89bede93a9 feat(engine): 重构游戏引擎核心逻辑
- 重新设计了引擎的初始化和运行流程
- 引入了实体组件系统(ECS)和物理系统
- 优化了渲染系统和输入系统
- 移除了不必要的资源管理系统
- 调整了日志系统的实现
2025-06-29 18:46:36 +08:00

55 lines
1.5 KiB
C

#define __PYNIC_LOG_IMPLIMENT__
#include <ge_core.h>
void ge_engine_init(ge_core_t *core) {
// TOOD init all data
ge_u8_t* ptr = (ge_u8_t*)core;
for (int i = 0; i < (int)sizeof(ge_core_t); i++) {
*(ptr + i) = 0;
}
core->configs.fps = 120;
}
static inline void ge_init(ge_core_t* core) {
/**
* check render
*/
ge_render_t* render_ctx = &core->_render;
if (render_ctx->context) {
GE_SAFE_CALL(render_ctx->init_func, render_ctx, NULL);
}
Assert(core->_timer.func_sleepms != NULL);
/**
* init ecs
*/
for (int i = 0; i < GE_ECS_MAX; ++i) {
core->ecs.storage.entities[i].component_mask = 0;
}
ge_render_system_init(&core->_systems.render, &core->_render);
// TODO using other storage system
core->_systems.render.ecs = &core->ecs.storage;
core->ecs.storage.count = 0;
core->_systems.physics.ecs = &core->ecs.storage;
}
void ge_engine_run(ge_core_t *core) {
ge_init(core);
GE_SAFE_CALL(core->callbacks.init, core);
core->state = GE_ENGINE_STATE_RUNNING;
while (core->state == GE_ENGINE_STATE_RUNNING) {
GE_SAFE_CALL(core->_inner_run, core);
ge_physics_system_run_all(&core->_systems.physics);
GE_SAFE_CALL(core->callbacks.process, core);
ge_render_system_draw_all(&core->_systems.render);
GE_SAFE_CALL(core->_render.func_flush, &core->_render);
core->_timer.func_sleepms(&core->_timer, 1000 / core->configs.fps);
}
GE_SAFE_CALL(core->callbacks.exit, core);
}