- 新增游戏引擎核心模块,包括初始化和运行逻辑 - 实现基本的渲染功能,支持控制台输出 - 添加物理引擎基础,包括碰撞检测 - 集成日志系统,用于调试和信息输出 - 创建窗口和输入管理模块
55 lines
1.6 KiB
C
55 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 = 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);
|
|
}
|