]> git.lizzy.rs Git - nothing.git/commitdiff
(#1071) Introduce Settings game state
authorrexim <reximkut@gmail.com>
Sat, 2 Nov 2019 19:53:10 +0000 (02:53 +0700)
committerrexim <reximkut@gmail.com>
Sat, 2 Nov 2019 19:53:10 +0000 (02:53 +0700)
CMakeLists.txt
src/game.c
src/game/settings.c [new file with mode: 0644]
src/game/settings.h [new file with mode: 0644]

index 7adc915a3c899678010928ddf29ba77dcd6fb4fe..67ae02388a981d0f261791df7ab0cb1bd1516688 100644 (file)
@@ -97,6 +97,8 @@ add_executable(nothing
   src/game/level/action.h
   src/game/level_picker.c
   src/game/level_picker.h
+  src/game/settings.c
+  src/game/settings.h
   src/game/level_folder.h
   src/game/level_folder.c
   src/game/sound_samples.c
index 6920a6147f70af6238000824c0c435126a86a3ae..2c8c2345170b170835bf05b4bf23dc0b7e3f1202 100644 (file)
@@ -15,6 +15,7 @@
 #include "sdl/texture.h"
 #include "game/level/level_editor/background_layer.h"
 #include "game/level/level_editor.h"
+#include "game/settings.h"
 
 static int game_render_cursor(const Game *game);
 
@@ -22,6 +23,7 @@ typedef enum Game_state {
     GAME_STATE_LEVEL = 0,
     GAME_STATE_LEVEL_PICKER,
     GAME_STATE_LEVEL_EDITOR,
+    GAME_STATE_SETTINGS,
     GAME_STATE_QUIT
 } Game_state;
 
@@ -33,6 +35,7 @@ typedef struct Game {
     LevelPicker *level_picker;
     LevelEditor *level_editor;
     Level *level;
+    Settings settings;
     Sound_samples *sound_samples;
     Camera camera;
     SDL_Renderer *renderer;
@@ -159,6 +162,10 @@ int game_render(const Game *game)
         }
     } break;
 
+    case GAME_STATE_SETTINGS: {
+        settings_render(&game->settings, &game->camera);
+    } break;
+
     case GAME_STATE_QUIT: break;
     }
 
@@ -170,11 +177,11 @@ int game_sound(Game *game)
     switch (game->state) {
     case GAME_STATE_LEVEL:
         return level_sound(game->level, game->sound_samples);
-    case GAME_STATE_LEVEL_PICKER:
-        return 0;
     case GAME_STATE_LEVEL_EDITOR:
         level_editor_sound(game->level_editor, game->sound_samples);
         return 0;
+    case GAME_STATE_LEVEL_PICKER:
+    case GAME_STATE_SETTINGS:
     case GAME_STATE_QUIT:
         return 0;
     }
@@ -262,6 +269,10 @@ int game_update(Game *game, float delta_time)
         level_editor_update(game->level_editor, delta_time);
     } break;
 
+    case GAME_STATE_SETTINGS: {
+        settings_update(&game->settings, delta_time);
+    } break;
+
     case GAME_STATE_QUIT:
         break;
     }
@@ -415,6 +426,10 @@ int game_event(Game *game, const SDL_Event *event)
     case GAME_STATE_LEVEL_EDITOR:
         return game_event_level_editor(game, event);
 
+    case GAME_STATE_SETTINGS: {
+        settings_event(&game->settings, event);
+    } break;
+
     case GAME_STATE_QUIT:
         return 0;
     }
@@ -423,6 +438,8 @@ int game_event(Game *game, const SDL_Event *event)
 }
 
 
+// TODO: get rid of keyboard_state (because it's a global var and can
+// be check anywhere anyway). And introduce *_joystick methods.
 int game_input(Game *game,
                const Uint8 *const keyboard_state,
                SDL_Joystick *the_stick_of_joy)
@@ -431,6 +448,7 @@ int game_input(Game *game,
     trace_assert(keyboard_state);
 
     switch (game->state) {
+    case GAME_STATE_SETTINGS:
     case GAME_STATE_QUIT:
     case GAME_STATE_LEVEL_EDITOR:
         return 0;
diff --git a/src/game/settings.c b/src/game/settings.c
new file mode 100644 (file)
index 0000000..3d3aedc
--- /dev/null
@@ -0,0 +1,20 @@
+#include "system/stacktrace.h"
+#include "settings.h"
+
+void settings_render(const Settings *settings, const Camera *camera)
+{
+    trace_assert(settings);
+    trace_assert(camera);
+}
+
+void settings_event(Settings *settings, const SDL_Event *event)
+{
+    trace_assert(settings);
+    trace_assert(event);
+}
+
+void settings_update(Settings *settings, float dt)
+{
+    trace_assert(settings);
+    (void) dt;
+}
diff --git a/src/game/settings.h b/src/game/settings.h
new file mode 100644 (file)
index 0000000..c4ad10b
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef SETTINGS_H_
+#define SETTINGS_H_
+
+#include "game/camera.h"
+#include "ui/slider.h"
+
+typedef struct {
+    Slider volume_slider;
+    Vec2f volume_slider_scale;
+} Settings;
+
+void settings_render(const Settings *settings, const Camera *camera);
+void settings_event(Settings *settings, const SDL_Event *event);
+void settings_update(Settings *settings, float dt);
+
+#endif  // SETTINGS_H_