#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; }