aboutsummaryrefslogtreecommitdiff
path: root/main.c
blob: e497e7381996f9d4846ec509195e3f5a7c17b9a6 (plain)
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
#define _POSIX_C_SOURCE 200809L
#define NONSTD_IMPLEMENTATION
#define VFS_IMPLEMENTATION
#include "all.h"
#include <getopt.h>
#include <string.h>

int main(int argc, char *argv[]) {
    char map_path[256] = "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':
                strncpy(map_path, optarg, sizeof(map_path) - 1);
                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("data.pak");
    InitGame();
    SetMap(map_path);

    if (skip_title) {
        if (LoadMap(game.map_path)) {
            game.mode = STATE_PLAYING;
            game.cursor_captured = true;
            DisableCursor();
        }
    }

    game.vsync = true;

    while (!WindowShouldClose()) {
        UpdateGame();
        DrawGame();
    }

    vfs_shutdown();
    CloseWindow();

    return 0;
}