#pragma once #include #include #include "mesh.h" #define LOG(level, ...) \ do { \ printf("%s", level); \ printf(__VA_ARGS__); \ printf("\n"); \ } while (0) #define INFO(...) LOG("INFO ", __VA_ARGS__) #define WARN(...) LOG("WARN ", __VA_ARGS__) #define ERROR(...) LOG("ERROR ", __VA_ARGS__) typedef enum : char { POS_X = 0, NEG_X = 1, POS_Y = 2, NEG_Y = 3, POS_Z = 4, NEG_Z = 5, } Face; typedef enum : char { AIR = 0, DIRT } Block; #define CHUNK_SIZE 32 typedef struct { int x; int y; int z; Block blocks[CHUNK_SIZE * CHUNK_SIZE * CHUNK_SIZE]; } Chunk; Chunk *chunk_init(int x, int y, int z); void chunk_free(Chunk *chunk); void chunk_generate(Chunk *chunk); Mesh chunk_mesh(Chunk *chunk); Block chunk_at(Chunk *chunk, int x, int y, int z); typedef struct { vec3 position; vec3 rotation; int fov; float near; float far; float look_speed; float move_speed; } Camera; Camera camera_init(void); void camera_proj(Camera *camera, mat4 proj); void camera_view(Camera *camera, mat4 view); void camera_proj_view(Camera *camera, mat4 proj_view); void camera_update(Camera *camera);