#define __PYNIC_LOG_IMPLIMENT__ #include 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); }