summaryrefslogtreecommitdiff
path: root/src/voxel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/voxel.h')
-rw-r--r--src/voxel.h59
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);