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