Files
school_stm32/game_engine/ge_core.c
ZZY b5b2c90e75 feat(game_core): 重构游戏引擎并添加新功能
- 重构了游戏引擎的核心逻辑和架构
- 添加了新的实体组件系统(ECS)
- 实现了简单的碰撞检测和响应
- 新增了地图和子弹功能
- 优化了输入处理和渲染逻辑
- 调整了游戏控制方式
2025-07-02 12:14:57 +08:00

57 lines
1.6 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->ecs.storage.count = 0;
core->_systems.render.ecs = &core->ecs.storage;
core->_systems.physics.ecs = &core->ecs.storage;
core->_systems.collision.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_collision_system_run_all(&core->_systems.collision);
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);
}