feat(game): 添加基础游戏引擎和渲染模块
- 新增游戏引擎核心模块,包括初始化和运行逻辑 - 实现基本的渲染功能,支持控制台输出 - 添加物理引擎基础,包括碰撞检测 - 集成日志系统,用于调试和信息输出 - 创建窗口和输入管理模块
This commit is contained in:
54
game_engine/ge_core.c
Normal file
54
game_engine/ge_core.c
Normal file
@@ -0,0 +1,54 @@
|
||||
#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 = 60;
|
||||
}
|
||||
|
||||
static inline void ge_init(ge_core_t* core) {
|
||||
/**
|
||||
* check render
|
||||
*/
|
||||
ge_render_t* render_ctx = &core->render;
|
||||
if (render_ctx->content) {
|
||||
Assert(render_ctx->clear && render_ctx->draw
|
||||
&& render_ctx->getsize);
|
||||
GE_SAFE_CALL(render_ctx->init, render_ctx);
|
||||
render_ctx->getsize(render_ctx, &render_ctx->screen_size);
|
||||
}
|
||||
|
||||
Assert(core->timer.sleep_ms != NULL);
|
||||
Assert(core->configs.fps != 0);
|
||||
|
||||
core->timer.fps_ctl.target_fps = 0;
|
||||
if (core->timer.get_ms != NULL) {
|
||||
ge_fps_init(&core->timer.fps_ctl, core->configs.fps,
|
||||
core->timer.get_ms, core->timer.sleep_ms);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void ge_render(ge_render_t* ctx) {
|
||||
// ctx->clear(ctx);
|
||||
}
|
||||
|
||||
void ge_engine_run(ge_core_t *core) {
|
||||
GE_SAFE_CALL(core->callbacks.init, core);
|
||||
ge_init(core);
|
||||
|
||||
core->state = GE_ENGINE_STATE_RUNNING;
|
||||
while (core->state == GE_ENGINE_STATE_RUNNING) {
|
||||
if (core->timer.fps_ctl.target_fps) ge_fps_begin_frame(&core->timer.fps_ctl);
|
||||
|
||||
GE_SAFE_CALL(core->callbacks.run, core);
|
||||
if (core->render.content) ge_render(&core->render);
|
||||
|
||||
if (core->timer.fps_ctl.target_fps) ge_fps_end_frame(&core->timer.fps_ctl);
|
||||
else core->timer.sleep_ms(1000 / core->configs.fps);
|
||||
}
|
||||
GE_SAFE_CALL(core->callbacks.exit, core);
|
||||
}
|
||||
Reference in New Issue
Block a user