]> git.lizzy.rs Git - nothing.git/blob - src/game/settings.c
Merge pull request #1163 from zhiayang/974
[nothing.git] / src / game / settings.c
1 #include "system/stacktrace.h"
2 #include "settings.h"
3 #include "config.h"
4
5 Settings create_settings(void)
6 {
7     Settings settings = {
8         .volume_slider = {
9             .drag = 0,
10             .value = SOUND_SAMPLES_DEFAULT_VOLUME,
11             .max_value = 100.0f,
12         },
13
14         .volume_slider_scale = {
15             0.25f, 0.10f
16         },
17
18         .background = {
19             .base_color = {0.5f, 0.8f, 0.5f, 1.0f}
20         },
21
22         .camera_position = {
23             0.0f, 0.0f
24         }
25     };
26
27     return settings;
28 }
29
30 void settings_render(const Settings *settings, const Camera *camera)
31 {
32     trace_assert(settings);
33     trace_assert(camera);
34
35     background_render(&settings->background, camera);
36
37     const Rect viewport = camera_view_port_screen(camera);
38
39     /* CSS volume */
40     const Rect position = {
41         .w = viewport.w * settings->volume_slider_scale.x,
42         .h = viewport.h * settings->volume_slider_scale.y,
43         .x = viewport.w - viewport.w * settings->volume_slider_scale.x - 5.0f,
44         .y = 5.0f,
45     };
46
47     /* HTML volume */
48     slider_render(&settings->volume_slider, camera, position);
49 }
50
51 void settings_event(Settings *settings, Camera *camera, const SDL_Event *event)
52 {
53     trace_assert(settings);
54     trace_assert(event);
55
56     const Rect viewport = camera_view_port_screen(camera);
57     const Rect position = {
58         .w = viewport.w * settings->volume_slider_scale.x,
59         .h = viewport.h * settings->volume_slider_scale.y,
60         .x = viewport.w - viewport.w * settings->volume_slider_scale.x - 5.0f,
61         .y = 5.0f,
62     };
63
64     if (slider_event(
65             &settings->volume_slider,
66             event,
67             position, NULL) < 0) {
68         return;
69     }
70 }
71
72 void settings_update(Settings *settings, Camera *camera, float dt)
73 {
74     trace_assert(settings);
75     trace_assert(camera);
76
77     vec_add(&settings->camera_position,
78             vec(50.0f * dt, 0.0f));
79     camera_center_at(camera, settings->camera_position);
80 }