]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/client/debug_menu.c
352222fe2bc733ec93be7e17ac5f622d79e92cc2
[dragonblocks_alpha.git] / src / client / debug_menu.c
1 #include <stdio.h>
2 #include <GL/glew.h>
3 #include <GL/gl.h>
4 #include "client/client_player.h"
5 #include "client/debug_menu.h"
6 #include "client/gui.h"
7 #include "client/window.h"
8 #include "day.h"
9 #include "environment.h"
10 #include "perlin.h"
11 #include "util.h"
12 #include "version.h"
13
14 typedef enum
15 {
16         DME_VERSION,
17         DME_FPS,
18         DME_POS,
19         DME_YAW,
20         DME_PITCH,
21         DME_TIME,
22         DME_DAYLIGHT,
23         DME_SUN_ANGLE,
24         DME_HUMIDITY,
25         DME_TEMPERATURE,
26         DME_SEED,
27         DME_FLIGHT,
28         DME_COLLISION,
29         DME_TIMELAPSE,
30         DME_FULLSCREEN,
31         DME_OPENGL,
32         DME_GPU,
33         DME_COUNT,
34 } DebugMenuEntry;
35
36 static GUIElement *gui_elements[DME_COUNT] = {NULL};
37
38 static bool debug_menu_enabled = true;
39 static DebugMenuEntry last_always_visible = DME_POS;
40
41 void debug_menu_init()
42 {
43         s32 offset = -16;
44
45         for (DebugMenuEntry i = 0; i < DME_COUNT; i++) {
46                 gui_elements[i] = gui_add(&gui_root, (GUIElementDefinition) {
47                         .pos = {0.0f, 0.0f},
48                         .z_index = 0.1f,
49                         .offset = {2, offset += 18},
50                         .margin = {2, 2},
51                         .align = {0.0f, 0.0f},
52                         .scale = {1.0f, 1.0f},
53                         .scale_type = GST_TEXT,
54                         .affect_parent_scale = false,
55                         .text = strdup(""),
56                         .image = NULL,
57                         .text_color = (v4f32) {1.0f, 1.0f, 1.0f, 1.0f},
58                         .bg_color = (v4f32) {0.0f, 0.0f, 0.0f, 0.0f},
59                 });
60         }
61 }
62
63 void debug_menu_toggle()
64 {
65         debug_menu_enabled = ! debug_menu_enabled;
66
67         for (DebugMenuEntry i = 0; i < DME_COUNT; i++) {
68                 gui_elements[i]->visible = debug_menu_enabled || i <= last_always_visible;
69                 gui_elements[i]->def.bg_color.w = debug_menu_enabled ? 0.5f : 0.0f;
70         }
71 }
72
73 void debug_menu_update_version()
74 {
75         gui_set_text(gui_elements[DME_VERSION], format_string("Dragonblocks Alpha %s", VERSION));
76 }
77
78 void debug_menu_update_fps(int fps)
79 {
80         gui_set_text(gui_elements[DME_FPS], format_string("%d FPS", fps));
81 }
82
83 void debug_menu_update_pos()
84 {
85         gui_set_text(gui_elements[DME_POS], format_string("(%.1f %.1f %.1f)", client_player.pos.x, client_player.pos.y, client_player.pos.z));
86 }
87
88 void debug_menu_update_yaw()
89 {
90         gui_set_text(gui_elements[DME_YAW], format_string("yaw = %.1f", client_player.yaw / M_PI * 180.0));
91 }
92
93 void debug_menu_update_pitch()
94 {
95         gui_set_text(gui_elements[DME_PITCH], format_string("pitch = %.1f", client_player.pitch / M_PI * 180.0));
96 }
97
98 void debug_menu_update_time()
99 {
100         int hours, minutes;
101         split_time_of_day(&hours, &minutes);
102         gui_set_text(gui_elements[DME_TIME], format_string("%02d:%02d", hours, minutes));
103 }
104
105 void debug_menu_update_daylight()
106 {
107         gui_set_text(gui_elements[DME_DAYLIGHT], format_string("daylight = %.2f", get_daylight()));
108 }
109
110 void debug_menu_update_sun_angle()
111 {
112         gui_set_text(gui_elements[DME_SUN_ANGLE], format_string("sun angle = %.1f", fmod(get_sun_angle() / M_PI * 180.0, 360.0)));
113 }
114
115 void debug_menu_update_humidity()
116 {
117         gui_set_text(gui_elements[DME_HUMIDITY], format_string("humidity = %.2f", get_humidity((v3s32) {client_player.pos.x, client_player.pos.y, client_player.pos.z})));
118 }
119
120 void debug_menu_update_temperature()
121 {
122         gui_set_text(gui_elements[DME_TEMPERATURE], format_string("temperature = %.2f", get_temperature((v3s32) {client_player.pos.x, client_player.pos.y, client_player.pos.z})));
123 }
124
125 void debug_menu_update_seed()
126 {
127         gui_set_text(gui_elements[DME_SEED], format_string("seed = %d", seed));
128 }
129
130 void debug_menu_update_flight()
131 {
132         gui_set_text(gui_elements[DME_FLIGHT], format_string("flight: %s", client_player.fly ? "enabled" : "disabled"));
133 }
134
135 void debug_menu_update_collision()
136 {
137         gui_set_text(gui_elements[DME_COLLISION], format_string("collision: %s", client_player.collision ? "enabled" : "disabled"));
138 }
139
140 void debug_menu_update_timelapse()
141 {
142         gui_set_text(gui_elements[DME_TIMELAPSE], format_string("timelapse: %s", timelapse ? "enabled" : "disabled"));
143 }
144
145 void debug_menu_update_fullscreen()
146 {
147         gui_set_text(gui_elements[DME_FULLSCREEN], format_string("fullscreen: %s", window.fullscreen ? "enabled" : "disabled"));
148 }
149
150 void debug_menu_update_opengl()
151 {
152         gui_set_text(gui_elements[DME_OPENGL], format_string("OpenGL %s", glGetString(GL_VERSION)));
153 }
154
155 void debug_menu_update_gpu()
156 {
157         gui_set_text(gui_elements[DME_GPU], format_string("%s", glGetString(GL_RENDERER)));
158 }