diff options
Diffstat (limited to 'src/voxel.h')
| -rw-r--r-- | src/voxel.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/voxel.h b/src/voxel.h new file mode 100644 index 0000000..9a3b237 --- /dev/null +++ b/src/voxel.h @@ -0,0 +1,59 @@ +#pragma once + +#include <cglm/cglm.h> +#include <stdio.h> + +#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); |