1#include "all.h"
 2
 3#include <string.h>
 4
 5GameState game;
 6
 7void init_game(void) {
 8	memset(&game, 0, sizeof(game));
 9
10	game.font_ui = load_font_vfs(UI_FONT_PATH, UI_FONT_SIZE);
11	game.mode = STATE_MENU;
12	game.cursor_captured = false;
13	EnableCursor();
14
15	game.player.move_mode = MOVE_NORMAL;
16	game.player.pos = (Vector3){ 0, 0, 0 };
17	game.player.velocity = (Vector3){ 0, 0, 0 };
18	game.player.is_grounded = false;
19
20	// Camera setup
21	game.camera.up = (Vector3){ 0, 1, 0 };
22	game.camera.fovy = PLAYER_FOV;
23	game.camera.projection = CAMERA_PERSPECTIVE;
24}
25
26void set_map(const char *path) {
27	strncpy(game.map_path, path, sizeof(game.map_path) - 1);
28	game.map_path[sizeof(game.map_path) - 1] = '\0';
29}
30
31void update_game(void) {
32	if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) {
33		game.cursor_captured = !game.cursor_captured;
34		if (game.cursor_captured) DisableCursor();
35		else EnableCursor();
36	}
37
38	if (IsKeyPressed(KEY_V)) {
39		game.vsync = !game.vsync;
40		if (game.vsync) {
41			SetWindowState(FLAG_VSYNC_HINT);
42			SetTargetFPS(GetMonitorRefreshRate(GetCurrentMonitor()));
43		} else {
44			ClearWindowState(FLAG_VSYNC_HINT);
45			SetTargetFPS(game.target_fps);
46		}
47	}
48
49	update_player();
50}
51
52void draw_game(void) {
53	BeginDrawing();
54	ClearBackground(DARKGRAY);
55
56	BeginMode3D(game.camera);
57
58	rlEnableBackfaceCulling();
59	for (int i = 0; i < game.map.count; i++) {
60		DrawModel(game.map.models[i], (Vector3){ 0, 0, 0 }, 1.0f, WHITE);
61	}
62
63	EndMode3D();
64
65	draw_crosshair();
66	draw_debug_info();
67
68	EndDrawing();
69}