1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#define NONSTD_IMPLEMENTATION
#define VFS_IMPLEMENTATION
#include "all.h"
#include <getopt.h>
int main(int argc, char *argv[]) {
stringb map_path;
sb_init(&map_path, 256);
sb_append_cstr(&map_path, "maps/demo3.map");
bool skip_title = false;
static struct option long_options[] = {
{"map", required_argument, 0, 'm'},
{0, 0, 0, 0}
};
int opt;
int option_index = 0;
while ((opt = getopt_long_only(argc, argv, "m:", long_options, &option_index)) != -1) {
switch (opt) {
case 'm':
sb_free(&map_path);
sb_init(&map_path, 256);
sb_append_cstr(&map_path, optarg);
skip_title = true;
break;
}
}
SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI);
InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE);
int monitor = GetCurrentMonitor();
SetWindowPosition((GetMonitorWidth(monitor) - GetScreenWidth()) / 2, (GetMonitorHeight(monitor) - GetScreenHeight()) / 2);
SetTargetFPS(GetMonitorRefreshRate(monitor));
vfs_init(VFS_DATA_PAK);
InitGame();
SetMap(map_path.data);
if (skip_title) {
if (LoadMap(game.map_path)) {
game.mode = STATE_PLAYING;
game.cursor_captured = true;
DisableCursor();
}
}
game.vsync = true;
while (!WindowShouldClose()) {
// Global Map Switching (Debug/Demo)
if (IsKeyPressed(KEY_ONE)) {
if (LoadMap("maps/demo1.map")) {
game.mode = STATE_PLAYING;
game.cursor_captured = true;
DisableCursor();
}
}
if (IsKeyPressed(KEY_TWO)) {
if (LoadMap("maps/demo2.map")) {
game.mode = STATE_PLAYING;
game.cursor_captured = true;
DisableCursor();
}
}
if (IsKeyPressed(KEY_THREE)) {
if (LoadMap("maps/demo3.map")) {
game.mode = STATE_PLAYING;
game.cursor_captured = true;
DisableCursor();
}
}
// Game State Switcher
switch (game.mode) {
case STATE_MENU:
UpdateMenu();
DrawMenu();
break;
case STATE_PLAYING:
UpdateGame();
DrawGame();
break;
}
}
UnloadMap();
UnloadAssets();
vfs_shutdown();
CloseWindow();
sb_free(&map_path);
return 0;
}
|