main.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <furi.h>
  2. #include "engine.h"
  3. #include "game_engine.h"
  4. #include "game_manager_i.h"
  5. #include "level_i.h"
  6. #include "entity_i.h"
  7. static void frame_cb(GameEngine* engine, Canvas* canvas, InputState input, void* context) {
  8. UNUSED(engine);
  9. GameManager* game_manager = context;
  10. game_manager_input_set(game_manager, input);
  11. game_manager_update(game_manager);
  12. game_manager_render(game_manager, canvas);
  13. }
  14. int32_t game_app(void* p) {
  15. UNUSED(p);
  16. GameManager* game_manager = game_manager_alloc();
  17. GameEngineSettings settings = game_engine_settings_init();
  18. settings.target_fps = game.target_fps;
  19. settings.show_fps = game.show_fps;
  20. settings.always_backlight = game.always_backlight;
  21. settings.frame_callback = frame_cb;
  22. settings.context = game_manager;
  23. GameEngine* engine = game_engine_alloc(settings);
  24. game_manager_engine_set(game_manager, engine);
  25. void* game_context = NULL;
  26. if(game.context_size > 0) {
  27. game_context = malloc(game.context_size);
  28. game_manager_game_context_set(game_manager, game_context);
  29. }
  30. game.start(game_manager, game_context);
  31. game_engine_run(engine);
  32. game_engine_free(engine);
  33. game_manager_free(game_manager);
  34. game.stop(game_context);
  35. if(game_context) {
  36. free(game_context);
  37. }
  38. int32_t entities = entities_get_count();
  39. if(entities != 0) {
  40. FURI_LOG_E("Game", "Memory leak detected: %ld entities still allocated", entities);
  41. return -1;
  42. }
  43. return 0;
  44. }