#include #include "engine.h" #include "game_engine.h" #include "game_manager_i.h" #include "level_i.h" #include "entity_i.h" static void frame_cb(GameEngine *engine, Canvas *canvas, InputState input, void *context) { UNUSED(engine); GameManager *game_manager = context; game_manager_input_set(game_manager, input); game_manager_update(game_manager); game_manager_render(game_manager, canvas); } int32_t game_app(void *p) { UNUSED(p); GameManager *game_manager = game_manager_alloc(); GameEngineSettings settings = game_engine_settings_init(); settings.target_fps = game.target_fps; settings.show_fps = game.show_fps; settings.always_backlight = game.always_backlight; settings.frame_callback = frame_cb; settings.context = game_manager; GameEngine *engine = game_engine_alloc(settings); game_manager_engine_set(game_manager, engine); void *game_context = NULL; if (game.context_size > 0) { game_context = malloc(game.context_size); game_manager_game_context_set(game_manager, game_context); } game.start(game_manager, game_context); game_engine_run(engine); game_engine_free(engine); game_manager_free(game_manager); game.stop(game_context); if (game_context) { free(game_context); } int32_t entities = entities_get_count(); if (entities != 0) { FURI_LOG_E("Game", "Memory leak detected: %ld entities still allocated", entities); return -1; } return 0; }