Ivan Barsukov 1 rok pred
rodič
commit
8c5d2799df
34 zmenil súbory, kde vykonal 191 pridanie a 162 odobranie
  1. 1 1
      src/game.h
  2. 2 6
      src/gui_bridge/input_converter.c
  3. 1 1
      src/gui_bridge/input_converter.h
  4. 22 15
      src/gui_bridge/view_module_entity.c
  5. 3 1
      src/gui_bridge/view_module_entity.h
  6. 2 2
      src/levels/level_about/about_entity.c
  7. 1 1
      src/levels/level_about/about_entity.h
  8. 5 5
      src/levels/level_about/level_about.c
  9. 1 1
      src/levels/level_about/level_about.h
  10. 11 2
      src/levels/level_game/context_menu.c
  11. 4 4
      src/levels/level_game/enemy_entity.c
  12. 1 1
      src/levels/level_game/enemy_entity.h
  13. 1 1
      src/levels/level_game/level_game.c
  14. 1 0
      src/levels/level_game/level_game.h
  15. 2 2
      src/levels/level_game/player_entity.c
  16. 1 0
      src/levels/level_game/player_entity.h
  17. 2 2
      src/levels/level_game/target_entity.c
  18. 1 1
      src/levels/level_game/target_entity.h
  19. 9 6
      src/levels/level_game_over/game_over_entity.c
  20. 1 1
      src/levels/level_game_over/game_over_entity.h
  21. 2 2
      src/levels/level_game_over/level_game_over.c
  22. 1 1
      src/levels/level_game_over/level_game_over.h
  23. 13 11
      src/levels/level_menu/blinking_sprite.c
  24. 9 9
      src/levels/level_menu/blinking_sprite.h
  25. 11 9
      src/levels/level_menu/delayed_sprite.c
  26. 7 7
      src/levels/level_menu/delayed_sprite.h
  27. 30 34
      src/levels/level_menu/level_menu.c
  28. 1 1
      src/levels/level_menu/level_menu.h
  29. 9 7
      src/levels/level_menu/menu_entity.c
  30. 1 1
      src/levels/level_menu/menu_entity.h
  31. 14 11
      src/levels/level_menu/moving_sprite.c
  32. 9 9
      src/levels/level_menu/moving_sprite.h
  33. 11 6
      src/levels/level_settings/level_settings.c
  34. 1 1
      src/levels/level_settings/level_settings.h

+ 1 - 1
src/game.h

@@ -27,7 +27,7 @@ typedef enum
 
 typedef enum
 {
-    GameEventStopAnimation,
+    GameEventSkipAnimation,
 } GameEvent;
 
 typedef struct

+ 2 - 6
src/gui_bridge/input_converter.c

@@ -2,7 +2,7 @@
 
 #include <furi/core/message_queue.h>
 
-#include "../game.h"
+#include "src/game.h"
 
 // #define FRAME_IN_MS (1000 / 30)
 // #define CHECK_PERIOD_IN_MS 150
@@ -10,10 +10,6 @@
 #define CHECK_PERIOD_IN_FRAMES 5 // (int)(CHECK_PERIOD_IN_MS / FRAME_IN_MS)
 #define LONG_PRESS_IN_FRAMES 10  // (int)(CHECK_PERIOD_IN_MS * 2 / FRAME_IN_MS)
 
-const InputKey input_keys[InputKeyMAX] = { InputKeyUp,    InputKeyDown,
-                                           InputKeyRight, InputKeyLeft,
-                                           InputKeyOk,    InputKeyBack };
-
 const GameKey game_keys[InputKeyMAX] = {
     GameKeyUp, GameKeyDown, GameKeyRight, GameKeyLeft, GameKeyOk, GameKeyBack
 };
@@ -166,7 +162,7 @@ input_converter_process_state(InputConverter* input_converter,
     // Process new state
     for (size_t key_index = 0; key_index < sizeof(game_keys); ++key_index) {
         GameKey game_key = game_keys[key_index];
-        InputKey input_key = input_keys[key_index];
+        InputKey input_key = (InputKey)key_index;
         process_pressed(input_converter, input_state, game_key, input_key);
         process_holded(input_converter, input_state, game_key, input_key);
         process_released(input_converter, input_state, game_key, input_key);

+ 1 - 1
src/gui_bridge/input_converter.h

@@ -4,7 +4,7 @@
 
 #include <input/input.h>
 
-#include "../engine/game_engine.h"
+#include "src/engine/game_engine.h"
 
 typedef struct InputConverter InputConverter;
 

+ 22 - 15
src/gui_bridge/view_module_entity.c

@@ -1,6 +1,6 @@
 #include "view_module_entity.h"
 
-#include "../engine/game_manager.h"
+#include "src/engine/game_manager.h"
 
 #include "input_converter.h"
 #include "view_i.h" // IWYU pragma: keep
@@ -22,11 +22,20 @@ view_module_stop(Entity* self, GameManager* manager, void* _entity_context)
 {
     UNUSED(self);
     UNUSED(manager);
+
     ViewModuleContext* view_module_context = _entity_context;
     view_module_context->description->free(view_module_context->view_module);
     input_converter_free(view_module_context->input_converter);
 }
 
+static bool
+need_call_back_callback(ViewModuleContext* entity_context, InputEvent* event)
+{
+    return event->key == InputKeyBack &&
+           (event->type == InputTypeShort || event->type == InputTypeLong) &&
+           entity_context->back_callback != NULL;
+}
+
 static void
 view_module_update(Entity* self, GameManager* manager, void* _entity_context)
 {
@@ -42,16 +51,14 @@ view_module_update(Entity* self, GameManager* manager, void* _entity_context)
     InputEvent event;
     while (input_converter_get_event(entity_context->input_converter, &event) ==
            FuriStatusOk) {
-        if (event.key == InputKeyBack &&
-            (event.type == InputTypeShort || event.type == InputTypeLong) &&
-            entity_context->back_callback != NULL) {
+        if (need_call_back_callback(entity_context, &event)) {
             bool is_consumed = entity_context->back_callback(
               entity_context->back_callback_context);
-
             if (is_consumed) {
                 continue;
             }
         }
+
         view->input_callback(&event, view->context);
     }
 }
@@ -71,16 +78,6 @@ view_module_render(Entity* self,
     view->draw_callback(canvas, view_get_model(view));
 }
 
-const EntityDescription view_module_description = {
-    .start = NULL,
-    .stop = view_module_stop,
-    .update = view_module_update,
-    .render = view_module_render,
-    .collision = NULL,
-    .event = NULL,
-    .context_size = sizeof(ViewModuleContext),
-};
-
 Entity*
 view_module_add_to_level(Level* level,
                          GameManager* manager,
@@ -123,3 +120,13 @@ view_module_set_back_callback(Entity* entity,
     view_module_context->back_callback = back_callback;
     view_module_context->back_callback_context = context;
 }
+
+const EntityDescription view_module_description = {
+    .start = NULL,
+    .stop = view_module_stop,
+    .update = view_module_update,
+    .render = view_module_render,
+    .collision = NULL,
+    .event = NULL,
+    .context_size = sizeof(ViewModuleContext),
+};

+ 3 - 1
src/gui_bridge/view_module_entity.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include "../engine/entity.h"
+#include "src/engine/entity.h"
 
 #include "view_module_descriptions.h"
 
@@ -19,3 +19,5 @@ void
 view_module_set_back_callback(Entity* entity,
                               ViewModuleBackCallback back_callback,
                               void* context);
+
+extern const EntityDescription view_module_description;

+ 2 - 2
src/levels/level_about/about_entity.c

@@ -4,7 +4,7 @@
 
 #include <furi.h>
 
-#include "../../game.h"
+#include "src/game.h"
 
 static void
 about_update(Entity* self, GameManager* manager, void* _entity_context)
@@ -37,7 +37,7 @@ about_render(Entity* self,
     const size_t space = 3;
     size_t title_width =
       logo_size + space + canvas_string_width(canvas, GAME_NAME);
-    int32_t logo_x = canvas_width(canvas) / 2 - title_width / 2;
+    int32_t logo_x = SCREEN_WIDTH / 2 - title_width / 2;
     int32_t title_x = logo_x + logo_size + space;
     int32_t font_height = canvas_current_font_height(canvas);
     int32_t first_line_y = 17;

+ 1 - 1
src/levels/level_about/about_entity.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include "../../engine/entity.h"
+#include "src/engine/entity.h"
 
 typedef struct Sprite Sprite;
 

+ 5 - 5
src/levels/level_about/level_about.c

@@ -2,15 +2,15 @@
 
 #include <stddef.h>
 
-#include "../../game.h"
+#include "src/game.h"
 
 #include "about_entity.h"
 
 static void
-level_about_alloc(Level* level, GameManager* manager, void* context)
+level_about_alloc(Level* level, GameManager* manager, void* _level_context)
 {
     UNUSED(manager);
-    UNUSED(context);
+    UNUSED(_level_context);
 
     Entity* entity = level_add_entity(level, &about_description);
     AboutContext* entity_context = entity_context_get(entity);
@@ -21,11 +21,11 @@ level_about_alloc(Level* level, GameManager* manager, void* context)
 }
 
 static void
-level_about_start(Level* level, GameManager* manager, void* context)
+level_about_start(Level* level, GameManager* manager, void* _level_context)
 {
     UNUSED(level);
     UNUSED(manager);
-    UNUSED(context);
+    UNUSED(_level_context);
 
     FURI_LOG_D(GAME_NAME, "About level started");
 }

+ 1 - 1
src/levels/level_about/level_about.h

@@ -1,5 +1,5 @@
 #pragma once
 
-#include "../../engine/level.h"
+#include "src/engine/level.h"
 
 extern const LevelBehaviour level_about;

+ 11 - 2
src/levels/level_game/context_menu.c

@@ -264,11 +264,19 @@ context_menu_input_process(ContextMenuContext* context_menu, InputEvent* event)
     return consumed;
 }
 
+static bool
+need_call_back_callback(ContextMenuContext* entity_context, InputEvent* event)
+{
+    return event->key == InputKeyBack && event->type == InputTypeShort &&
+           entity_context->back_callback != NULL;
+}
+
 static void
 context_menu_update(Entity* self, GameManager* manager, void* _entity_context)
 {
     UNUSED(self);
 
+    // Check pause
     Level* level = game_manager_current_level_get(manager);
     GameLevelContext* level_context = level_context_get(level);
     if (!level_context->is_paused) {
@@ -277,14 +285,15 @@ context_menu_update(Entity* self, GameManager* manager, void* _entity_context)
 
     ContextMenuContext* entity_context = _entity_context;
 
+    // Get input state and convert to input events
     InputState input = game_manager_input_get(manager);
     input_converter_process_state(entity_context->input_converter, &input);
 
+    // Process events
     InputEvent event;
     while (input_converter_get_event(entity_context->input_converter, &event) ==
            FuriStatusOk) {
-        if (event.key == InputKeyBack && event.type == InputTypeShort &&
-            entity_context->back_callback != NULL) {
+        if (need_call_back_callback(entity_context, &event)) {
             entity_context->back_callback(
               entity_context->back_callback_context);
             return;

+ 4 - 4
src/levels/level_game/enemy_entity.c

@@ -1,7 +1,7 @@
 #include "enemy_entity.h"
 
-#include "../../engine/game_manager.h"
-#include "../../game.h"
+#include "src/engine/game_manager.h"
+#include "src/game.h"
 
 #include "level_game.h"
 #include "player_entity.h"
@@ -45,7 +45,7 @@ random_direction(Vector enemy_pos, Entity* player_entity)
 }
 
 void
-spawn_enemy(GameManager* manager)
+enemy_spawn(GameManager* manager)
 {
     GameContext* game_context = game_manager_game_context_get(manager);
     Level* level = game_manager_current_level_get(manager);
@@ -79,7 +79,7 @@ spawn_enemy(GameManager* manager)
             speed = 1.0f;
             break;
         case DifficultyInsane:
-            speed = 0.5f * (1 + rand() % 3);
+            speed = 0.25f * (4 + rand() % 4);
             break;
         default:
             speed = 0.5f;

+ 1 - 1
src/levels/level_game/enemy_entity.h

@@ -23,6 +23,6 @@ typedef struct
 } EnemyContext;
 
 void
-spawn_enemy(GameManager* manager);
+enemy_spawn(GameManager* manager);
 
 extern const EntityDescription enemy_description;

+ 1 - 1
src/levels/level_game/level_game.c

@@ -44,7 +44,7 @@ level_game_alloc(Level* level, GameManager* manager, void* _level_context)
 
     // Add entities to the level
     level_context->player = player_spawn(level, manager);
-    level_context->target = create_target(level, manager);
+    level_context->target = target_create(level, manager);
     EntityList_init(level_context->enemies);
 
     // Pause menu initialization

+ 1 - 0
src/levels/level_game/level_game.h

@@ -20,6 +20,7 @@ typedef struct
 
 void
 pause_game(Level* level);
+
 void
 resume_game(Level* level);
 

+ 2 - 2
src/levels/level_game/player_entity.c

@@ -1,7 +1,7 @@
 #include "player_entity.h"
 
-#include "../../engine/game_manager.h"
-#include "../../game.h"
+#include "src/engine/game_manager.h"
+#include "src/game.h"
 
 #include "level_game.h"
 

+ 1 - 0
src/levels/level_game/player_entity.h

@@ -12,6 +12,7 @@ typedef struct
 
 Entity*
 player_spawn(Level* level, GameManager* manager);
+
 void
 player_respawn(Entity* player);
 

+ 2 - 2
src/levels/level_game/target_entity.c

@@ -35,7 +35,7 @@ random_pos(Entity* player_entity)
 }
 
 Entity*
-create_target(Level* level, GameManager* manager)
+target_create(Level* level, GameManager* manager)
 {
     Entity* target = level_add_entity(level, &target_description);
 
@@ -130,7 +130,7 @@ target_collision(Entity* self,
 
     // Move target to new random position
     target_reset(self, manager);
-    spawn_enemy(manager);
+    enemy_spawn(manager);
 
     // Notify
     game_notify(game_context, &sequence_earn_point);

+ 1 - 1
src/levels/level_game/target_entity.h

@@ -11,7 +11,7 @@ typedef struct
 } TargetContext;
 
 Entity*
-create_target(Level* level, GameManager* manager);
+target_create(Level* level, GameManager* manager);
 
 void
 target_reset(Entity* self, GameManager* manager);

+ 9 - 6
src/levels/level_game_over/game_over_entity.c

@@ -29,12 +29,10 @@ game_over_render(Entity* self,
 
     furi_check(entity_context->logo_sprite);
 
-    const uint32_t screen_height = 64;
-    const uint32_t screen_width = 128;
     const uint32_t text_height = 7;
     uint32_t x =
-      screen_width / 2.0 - sprite_get_width(entity_context->logo_sprite) / 2.0;
-    uint32_t y = (screen_height - text_height) / 2.0 -
+      SCREEN_WIDTH / 2.0 - sprite_get_width(entity_context->logo_sprite) / 2.0;
+    uint32_t y = (SCREEN_HEIGHT - text_height) / 2.0 -
                  sprite_get_height(entity_context->logo_sprite) / 2.0;
 
     canvas_draw_sprite(canvas, entity_context->logo_sprite, x, y);
@@ -50,9 +48,14 @@ game_over_render(Entity* self,
 
     canvas_set_color(canvas, ColorBlack);
     canvas_set_font(canvas, FontSecondary);
-    canvas_draw_str_aligned(canvas, 0, 64, AlignLeft, AlignBottom, score_str);
     canvas_draw_str_aligned(
-      canvas, 128, 64, AlignRight, AlignBottom, best_score_str);
+      canvas, 0, SCREEN_HEIGHT, AlignLeft, AlignBottom, score_str);
+    canvas_draw_str_aligned(canvas,
+                            SCREEN_WIDTH,
+                            SCREEN_HEIGHT,
+                            AlignRight,
+                            AlignBottom,
+                            best_score_str);
 }
 
 const EntityDescription game_over_description = {

+ 1 - 1
src/levels/level_game_over/game_over_entity.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include "../../engine/entity.h"
+#include "src/engine/entity.h"
 
 typedef struct Sprite Sprite;
 

+ 2 - 2
src/levels/level_game_over/level_game_over.c

@@ -4,8 +4,8 @@
 
 #include <furi.h>
 
-#include "../../game.h"
-#include "../../game_settings.h"
+#include "src/game.h"
+#include "src/game_settings.h"
 
 #include "game_over_entity.h"
 

+ 1 - 1
src/levels/level_game_over/level_game_over.h

@@ -1,5 +1,5 @@
 #pragma once
 
-#include "../../engine/level.h"
+#include "src/engine/level.h"
 
 extern const LevelBehaviour level_game_over;

+ 13 - 11
src/levels/level_menu/blinking_sprite.c

@@ -1,18 +1,19 @@
 #include "blinking_sprite.h"
 
-#include "../../engine/game_manager.h"
+#include "src/engine/game_manager.h"
 
-#include "../../game.h"
+#include "src/game.h"
 
-void
-blinking_sprite_init(Entity* entity,
-                     GameManager* manager,
-                     Vector pos,
-                     float delay,
-                     float show_duration,
-                     float hide_duration,
-                     const char* sprite_name)
+Entity*
+blinking_sprite_add_to_level(Level* level,
+                             GameManager* manager,
+                             Vector pos,
+                             float delay,
+                             float show_duration,
+                             float hide_duration,
+                             const char* sprite_name)
 {
+    Entity* entity = level_add_entity(level, &blinking_sprite_description);
     BlinkingSpriteContext* entity_context = entity_context_get(entity);
     entity_pos_set(entity, pos);
     entity_context->delay = delay;
@@ -20,6 +21,7 @@ blinking_sprite_init(Entity* entity,
     entity_context->hide_duration = hide_duration;
     entity_context->time = 0;
     entity_context->sprite = game_manager_sprite_load(manager, sprite_name);
+    return entity;
 }
 
 static void
@@ -69,7 +71,7 @@ blinking_sprite_event(Entity* self,
     UNUSED(manager);
 
     BlinkingSpriteContext* entity_context = _entity_context;
-    if (event.type == GameEventStopAnimation) {
+    if (event.type == GameEventSkipAnimation) {
         entity_context->time = entity_context->delay;
     }
 }

+ 9 - 9
src/levels/level_menu/blinking_sprite.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include "../../engine/entity.h"
+#include "src/engine/entity.h"
 
 typedef struct Sprite Sprite;
 
@@ -13,13 +13,13 @@ typedef struct
     float time;
 } BlinkingSpriteContext;
 
-void
-blinking_sprite_init(Entity* entity,
-                     GameManager* manager,
-                     Vector pos,
-                     float delay,
-                     float show_duration,
-                     float hide_duration,
-                     const char* sprite_name);
+Entity*
+blinking_sprite_add_to_level(Level* level,
+                             GameManager* manager,
+                             Vector pos,
+                             float delay,
+                             float show_duration,
+                             float hide_duration,
+                             const char* sprite_name);
 
 extern const EntityDescription blinking_sprite_description;

+ 11 - 9
src/levels/level_menu/delayed_sprite.c

@@ -1,21 +1,23 @@
 #include "delayed_sprite.h"
 
-#include "../../engine/game_manager.h"
+#include "src/engine/game_manager.h"
 
-#include "../../game.h"
+#include "src/game.h"
 
-void
-delayed_sprite_init(Entity* entity,
-                    GameManager* manager,
-                    Vector pos,
-                    float delay,
-                    const char* sprite_name)
+Entity*
+delayed_sprite_add_to_level(Level* level,
+                            GameManager* manager,
+                            Vector pos,
+                            float delay,
+                            const char* sprite_name)
 {
+    Entity* entity = level_add_entity(level, &delayed_sprite_description);
     DelayedSpriteContext* entity_context = entity_context_get(entity);
     entity_pos_set(entity, pos);
     entity_context->delay = delay;
     entity_context->time = 0;
     entity_context->sprite = game_manager_sprite_load(manager, sprite_name);
+    return entity;
 }
 
 static void
@@ -55,7 +57,7 @@ delayed_sprite_event(Entity* self,
     UNUSED(manager);
 
     DelayedSpriteContext* entity_context = _entity_context;
-    if (event.type == GameEventStopAnimation) {
+    if (event.type == GameEventSkipAnimation) {
         entity_context->time = entity_context->delay;
     }
 }

+ 7 - 7
src/levels/level_menu/delayed_sprite.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include "../../engine/entity.h"
+#include "src/engine/entity.h"
 
 typedef struct Sprite Sprite;
 
@@ -11,11 +11,11 @@ typedef struct
     float time;
 } DelayedSpriteContext;
 
-void
-delayed_sprite_init(Entity* entity,
-                    GameManager* manager,
-                    Vector pos,
-                    float delay,
-                    const char* sprite_name);
+Entity*
+delayed_sprite_add_to_level(Level* level,
+                            GameManager* manager,
+                            Vector pos,
+                            float delay,
+                            const char* sprite_name);
 
 extern const EntityDescription delayed_sprite_description;

+ 30 - 34
src/levels/level_menu/level_menu.c

@@ -2,9 +2,9 @@
 
 #include <stddef.h>
 
-#include "../../engine/vector.h"
+#include "src/engine/vector.h"
 
-#include "../../game.h"
+#include "src/game.h"
 
 #include "blinking_sprite.h"
 #include "delayed_sprite.h"
@@ -21,61 +21,57 @@ typedef struct
 } LevelMenuContext;
 
 static void
-level_menu_alloc(Level* level, GameManager* manager, void* context)
+level_menu_alloc(Level* level, GameManager* manager, void* _level_context)
 {
-    LevelMenuContext* menu_context = context;
+    LevelMenuContext* menu_context = _level_context;
 
-    static const float initial_amimation_duration = 45.0f;
+    const float initial_amimation_duration = 45.0f;
 
     // Quadrastic logo
     menu_context->quadrastic_logo =
-      level_add_entity(level, &moving_sprite_description);
-    moving_sprite_init(menu_context->quadrastic_logo,
-                       manager,
-                       (Vector){ .x = 9, .y = 64 },
-                       (Vector){ .x = 9, .y = 2 },
-                       initial_amimation_duration,
-                       "quadrastic.fxbm");
+      moving_sprite_add_to_level(level,
+                                 manager,
+                                 (Vector){ .x = 9, .y = 64 },
+                                 (Vector){ .x = 9, .y = 2 },
+                                 initial_amimation_duration,
+                                 "quadrastic.fxbm");
 
     // Press ok logo
     menu_context->press_ok =
-      level_add_entity(level, &blinking_sprite_description);
-    blinking_sprite_init(menu_context->press_ok,
-                         manager,
-                         (Vector){ .x = 31, .y = 33 },
-                         initial_amimation_duration,
-                         15.0f,
-                         7.0f,
-                         "press_ok.fxbm");
+      blinking_sprite_add_to_level(level,
+                                   manager,
+                                   (Vector){ .x = 31, .y = 33 },
+                                   initial_amimation_duration,
+                                   15.0f,
+                                   7.0f,
+                                   "press_ok.fxbm");
 
     // Settings button
     menu_context->left_button =
-      level_add_entity(level, &delayed_sprite_description);
-    delayed_sprite_init(menu_context->left_button,
-                        manager,
-                        (Vector){ .x = 0, .y = 57 },
-                        initial_amimation_duration,
-                        "left_button.fxbm");
+      delayed_sprite_add_to_level(level,
+                                  manager,
+                                  (Vector){ .x = 0, .y = 57 },
+                                  initial_amimation_duration,
+                                  "left_button.fxbm");
 
     // About button
     menu_context->right_button =
-      level_add_entity(level, &delayed_sprite_description);
-    delayed_sprite_init(menu_context->right_button,
-                        manager,
-                        (Vector){ .x = 115, .y = 57 },
-                        initial_amimation_duration,
-                        "right_button.fxbm");
+      delayed_sprite_add_to_level(level,
+                                  manager,
+                                  (Vector){ .x = 115, .y = 57 },
+                                  initial_amimation_duration,
+                                  "right_button.fxbm");
 
     // Menu
     level_add_entity(level, &menu_description);
 }
 
 static void
-level_menu_start(Level* level, GameManager* manager, void* context)
+level_menu_start(Level* level, GameManager* manager, void* _level_context)
 {
     UNUSED(level);
     UNUSED(manager);
-    UNUSED(context);
+    UNUSED(_level_context);
 
     FURI_LOG_D(GAME_NAME, "Menu level started");
 }

+ 1 - 1
src/levels/level_menu/level_menu.h

@@ -1,5 +1,5 @@
 #pragma once
 
-#include "../../engine/level.h"
+#include "src/engine/level.h"
 
 extern const LevelBehaviour level_menu;

+ 9 - 7
src/levels/level_menu/menu_entity.c

@@ -1,8 +1,10 @@
-#include "../../engine/entity.h"
-#include "../../engine/game_manager.h"
-#include "../../engine/level.h"
+#include "menu_entity.h"
 
-#include "../../game.h"
+#include "src/engine/entity.h"
+#include "src/engine/game_manager.h"
+#include "src/engine/level.h"
+
+#include "src/game.h"
 
 static void
 menu_update(Entity* self, GameManager* manager, void* _entity_context)
@@ -19,15 +21,15 @@ menu_update(Entity* self, GameManager* manager, void* _entity_context)
     } else if (input.pressed & GameKeyOk) {
         game_manager_next_level_set(manager, game_context->levels.game);
         level_send_event(
-          level, self, NULL, GameEventStopAnimation, (EntityEventValue){ 0 });
+          level, self, NULL, GameEventSkipAnimation, (EntityEventValue){ 0 });
     } else if (input.pressed & GameKeyLeft) {
         game_manager_next_level_set(manager, game_context->levels.settings);
         level_send_event(
-          level, self, NULL, GameEventStopAnimation, (EntityEventValue){ 0 });
+          level, self, NULL, GameEventSkipAnimation, (EntityEventValue){ 0 });
     } else if (input.pressed & GameKeyRight) {
         game_manager_next_level_set(manager, game_context->levels.about);
         level_send_event(
-          level, self, NULL, GameEventStopAnimation, (EntityEventValue){ 0 });
+          level, self, NULL, GameEventSkipAnimation, (EntityEventValue){ 0 });
     }
 }
 

+ 1 - 1
src/levels/level_menu/menu_entity.h

@@ -1,5 +1,5 @@
 #pragma once
 
-#include "../../engine/entity.h"
+#include "src/engine/entity.h"
 
 extern const EntityDescription menu_description;

+ 14 - 11
src/levels/level_menu/moving_sprite.c

@@ -1,24 +1,27 @@
 #include "moving_sprite.h"
 
-#include "../../engine/entity.h"
-#include "../../engine/game_manager.h"
+#include "src/engine/entity.h"
+#include "src/engine/game_manager.h"
 
-#include "../../game.h"
+#include "src/game.h"
 
-void
-moving_sprite_init(Entity* entity,
-                   GameManager* manager,
-                   Vector pos_start,
-                   Vector pos_end,
-                   float duration,
-                   const char* sprite_name)
+Entity*
+moving_sprite_add_to_level(Level* level,
+                           GameManager* manager,
+                           Vector pos_start,
+                           Vector pos_end,
+                           float duration,
+                           const char* sprite_name)
 {
+
+    Entity* entity = level_add_entity(level, &moving_sprite_description);
     MovingSpriteContext* entity_context = entity_context_get(entity);
     entity_context->pos_start = pos_start;
     entity_context->pos_end = pos_end;
     entity_context->duration = duration;
     entity_context->time = 0;
     entity_context->sprite = game_manager_sprite_load(manager, sprite_name);
+    return entity;
 }
 
 static void
@@ -68,7 +71,7 @@ moving_sprite_event(Entity* self,
     UNUSED(event);
 
     MovingSpriteContext* entity_context = _entity_context;
-    if (event.type == GameEventStopAnimation) {
+    if (event.type == GameEventSkipAnimation) {
         entity_context->time = entity_context->duration;
     }
 }

+ 9 - 9
src/levels/level_menu/moving_sprite.h

@@ -1,7 +1,7 @@
 #pragma once
 
-#include "../../engine/entity.h"
-#include "../../engine/vector.h"
+#include "src/engine/entity.h"
+#include "src/engine/vector.h"
 
 typedef struct Sprite Sprite;
 
@@ -14,12 +14,12 @@ typedef struct
     float time;
 } MovingSpriteContext;
 
-void
-moving_sprite_init(Entity* entity,
-                   GameManager* manager,
-                   Vector pos_start,
-                   Vector pos_end,
-                   float duration,
-                   const char* sprite_name);
+Entity*
+moving_sprite_add_to_level(Level* level,
+                           GameManager* manager,
+                           Vector pos_start,
+                           Vector pos_end,
+                           float duration,
+                           const char* sprite_name);
 
 extern const EntityDescription moving_sprite_description;

+ 11 - 6
src/levels/level_settings/level_settings.c

@@ -1,14 +1,14 @@
+#include "level_settings.h"
+
 #include <stddef.h>
 
 #include <gui/modules/variable_item_list.h>
 
-#include "../../game.h"
-#include "../../game_settings.h"
+#include "src/game.h"
+#include "src/game_settings.h"
 
-#include "../../gui_bridge/view_module_descriptions.h"
-#include "../../gui_bridge/view_module_entity.h"
-
-#include "level_settings.h"
+#include "src/gui_bridge/view_module_descriptions.h"
+#include "src/gui_bridge/view_module_entity.h"
 
 const char* const difficulty_text[DifficultyCount] = {
     "Easy",
@@ -113,6 +113,11 @@ level_settings_start(Level* level, GameManager* manager, void* context)
     UNUSED(manager);
     UNUSED(context);
 
+    Entity* entity = level_entity_get(level, &view_module_description, 0);
+
+    VariableItemList* variable_item_list = view_module_get_module(entity);
+    variable_item_list_set_selected_item(variable_item_list, 0);
+
     FURI_LOG_D(GAME_NAME, "Settings level started");
 }
 

+ 1 - 1
src/levels/level_settings/level_settings.h

@@ -1,5 +1,5 @@
 #pragma once
 
-#include "../../engine/level.h"
+#include "src/engine/level.h"
 
 extern const LevelBehaviour level_settings;