main.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <furi.h>
  2. #include "game_engine.h"
  3. #include "director_i.h"
  4. #include "level_manager_i.h"
  5. #include "level_i.h"
  6. #include "entity_i.h"
  7. void game_setup(Level* level);
  8. void game_destroy(void);
  9. static void frame_cb(RunningGameEngine* engine, Canvas* canvas, InputState input, void* context) {
  10. Director* director = context;
  11. director_input_set(director, input);
  12. director_engine_set(director, engine);
  13. LevelManager* level_manager = director_level_manager_get(director);
  14. level_manager_update(level_manager, director);
  15. level_manager_render(level_manager, director, canvas);
  16. }
  17. int32_t game_app(void* p) {
  18. UNUSED(p);
  19. Director* director = director_alloc();
  20. LevelManager* level_manager = level_manager_alloc();
  21. director_level_manager_set(director, level_manager);
  22. Level* level = level_manager_add_level(level_manager);
  23. game_setup(level);
  24. GameEngineSettings settings = game_engine_settings_init();
  25. settings.fps = 60.0f;
  26. settings.show_fps = true;
  27. settings.always_backlight = true;
  28. settings.frame_callback = frame_cb;
  29. settings.context = director;
  30. GameEngine* engine = game_engine_alloc(settings);
  31. game_engine_run(engine);
  32. game_engine_free(engine);
  33. game_destroy();
  34. level_manager_free(level_manager);
  35. director_free(director);
  36. int32_t entities = entities_get_count();
  37. if(entities != 0) {
  38. FURI_LOG_E("Game", "Memory leak detected: %ld entities still allocated", entities);
  39. return -1;
  40. }
  41. return 0;
  42. }