5 #include <GLFW/glfw3.h>
6 #include "client/camera.h"
7 #include "client/client.h"
8 #include "client/client_map.h"
9 #include "client/client_node.h"
10 #include "client/client_player.h"
11 #include "client/debug_menu.h"
12 #include "client/font.h"
13 #include "client/gui.h"
14 #include "client/input.h"
15 #include "client/sky.h"
16 #include "client/window.h"
18 #include "signal_handlers.h"
20 static void crosshair_init()
22 gui_add(&gui_root, (GUIElementDefinition) {
27 .align = {0.5f, 0.5f},
28 .scale = {1.0f, 1.0f},
29 .scale_type = GST_IMAGE,
30 .affect_parent_scale = false,
32 .image = texture_get(RESSOURCEPATH "textures/crosshair.png"),
33 .text_color = (v4f32) {0.0f, 0.0f, 0.0f, 0.0f},
34 .bg_color = (v4f32) {0.0f, 0.0f, 0.0f, 0.0f},
38 static void game_loop(Client *client)
40 f64 fps_update_timer = 1.0f;
43 struct timespec ts, ts_old;
44 clock_gettime(CLOCK_REALTIME, &ts_old);
46 while (! glfwWindowShouldClose(window.handle) && client->state != CS_DISCONNECTED && ! interrupted) {
47 clock_gettime(CLOCK_REALTIME, &ts);
48 f64 dtime = (f64) (ts.tv_sec - ts_old.tv_sec) + (f64) (ts.tv_nsec - ts_old.tv_nsec) / 1.0e9;
51 if ((fps_update_timer -= dtime) <= 0.0) {
52 debug_menu_update_fps(frames);
53 fps_update_timer += 1.0;
59 debug_menu_update_time();
60 debug_menu_update_daylight();
61 debug_menu_update_sun_angle();
63 glEnable(GL_DEPTH_TEST);
64 glEnable(GL_ALPHA_TEST);
66 glEnable(GL_MULTISAMPLE);
67 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
68 glAlphaFunc(GL_GREATER, 0.0f);
69 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
72 client_player_tick(dtime);
78 glfwSwapBuffers(window.handle);
83 bool game(Client *client)
89 if (! window_init(width, height))
98 scene_on_resize(width, height);
106 camera_set_position((v3f32) {0.0f, 0.0f, 0.0f});
107 camera_set_angle(0.0f, 0.0f);
112 gui_on_resize(width, height);
116 debug_menu_update_fps(0);
117 debug_menu_update_version();
118 debug_menu_update_seed();
119 debug_menu_update_flight();
120 debug_menu_update_collision();
121 debug_menu_update_timelapse();
122 debug_menu_update_fullscreen();
123 debug_menu_update_opengl();
124 debug_menu_update_gpu();
130 client_player_add_to_scene();