summaryrefslogtreecommitdiff
path: root/types.h
diff options
context:
space:
mode:
Diffstat (limited to 'types.h')
-rw-r--r--types.h231
1 files changed, 231 insertions, 0 deletions
diff --git a/types.h b/types.h
new file mode 100644
index 0000000..6fd5799
--- /dev/null
+++ b/types.h
@@ -0,0 +1,231 @@
+#define WINDOW_DEPTH_TEST 0x1
+#define WINDOW_MULTISAMPLE 0x10
+
+typedef struct {
+ i32 width;
+ i32 height;
+ const char *name;
+ u32 flags;
+} prge_window_t;
+
+typedef enum {
+ key_state_release = 0,
+ key_state_press = 1
+} key_state_enum;
+
+typedef struct {
+ key_state_enum last;
+ key_state_enum state;
+} prge_key_t;
+
+typedef struct {
+ v2 pos;
+ v2 last;
+ v2 offset;
+ i32 first;
+ i32 capture;
+ prge_key_t left;
+ prge_key_t right;
+} mouse_t;
+
+typedef struct {
+ mouse_t mouse;
+
+ prge_key_t move_right;
+ prge_key_t move_forward;
+ prge_key_t move_left;
+ prge_key_t move_backward;
+ prge_key_t move_up;
+ prge_key_t move_down;
+
+ prge_key_t jump;
+ prge_key_t action_right;
+ prge_key_t action_up;
+ prge_key_t action_left;
+ prge_key_t action_down;
+ prge_key_t exit;
+
+ f32 dt;
+} input_t;
+
+typedef enum {
+ texture_type_r = 1,
+ texture_type_rgb = 3,
+ texture_type_rgba = 4
+} texture_type_enum;
+
+typedef struct {
+ u32 id;
+ const char *name;
+ texture_type_enum type;
+ i32 width;
+ i32 height;
+ u8 *data;
+} texture_t;
+
+#define SHADER_POSITION_LOCATION 0
+#define SHADER_NORMAL_LOCATION 1
+#define SHADER_TEXCOORDS_LOCATION 2
+
+#define SHADER_PROJECTION_MATRIX "projection"
+#define SHADER_VIEW_MATRIX "view"
+#define SHADER_MODEL_MATRIX "model"
+
+#define MAX_SHADER_LOG 512
+
+typedef struct {
+ u32 id;
+ char log[MAX_SHADER_LOG];
+} shader_t;
+
+typedef struct {
+ v3 position;
+ v3 normal;
+ v2 texcoords;
+} vertex_t;
+
+#define DEFAULT_TRANSFORM (transform_t){V3_ZERO, V3_ZERO, V3_ONE}
+
+typedef struct {
+ v3 position;
+ v3 rotation;
+ v3 scale;
+} transform_t;
+
+#define MAX_TEXTURE_PER_MESH 2
+
+typedef struct {
+ transform_t transform;
+
+ i32 nvertices;
+ vertex_t *vertices;
+
+ i32 nindices;
+ u32 *indices;
+
+ i32 ntextures;
+ texture_t textures[MAX_TEXTURE_PER_MESH];
+
+ u32 vao;
+ u32 vbo;
+ u32 ebo;
+} mesh_t;
+
+typedef struct {
+ transform_t transform;
+ i32 nmeshes;
+ mesh_t *meshes;
+} model_t;
+
+#define BBOX_UNIT (bbox_t){{-0.5f, -0.5f, -0.5f}, {0.5f, 0.5f, 0.5f}}
+#define BBOX_ZERO (bbox_t){V3_ZERO, V3_ZERO}
+
+typedef struct {
+ v3 start;
+ v3 end;
+} bbox_t;
+
+#define ENTITY_COLLIDE (1)
+#define ENTITY_MOVE (1 << 1)
+#define ENTITY_ALPHA (1 << 2)
+
+typedef struct {
+ u32 flags;
+
+ model_t model;
+
+ v3 position;
+ v3 velocity;
+ bbox_t bbox;
+} entity_t;
+
+#define MAX_ENTITIES 4
+
+typedef struct enode_t {
+ i32 id;
+ entity_t entity;
+ struct enode_t *next;
+ struct enode_t *prev;
+} enode_t;
+
+typedef struct {
+ i32 count;
+ enode_t nodes[MAX_ENTITIES];
+ struct enode_t *first;
+ struct enode_t *last;
+} elist_t;
+
+#define DEFAULT_CAMERA (camera_t){v3_ZERO, 90.0f, 0.1f, 1000.0f, V3_ZERO}
+
+typedef struct {
+ v3 position;
+
+ f32 fov;
+
+ f32 near;
+ f32 far;
+
+ v3 angles;
+} camera_t;
+
+typedef struct {
+ i32 channels;
+ i32 freq;
+ i32 bps;
+
+ i32 size;
+ unsigned char *data;
+
+ const char *name;
+} sound_t;
+
+typedef struct sound_queue_node_t {
+ sound_t *sound;
+ struct sound_queue_node_t *next;
+ struct sound_queue_node_t *prev;
+} sound_queue_node_t;
+
+typedef struct {
+ i32 count;
+ struct sound_queue_node_t *first;
+ struct sound_queue_node_t *last;
+} sound_queue_t;
+
+#define ARENA_SIZE megabytes(64)
+#define FRAME_ARENA_SIZE megabytes(16)
+
+#define MAX_SOUNDS_LOADED 8
+#define MAX_SOUNDS_PLAYING 4
+
+typedef struct {
+ i32 should_close;
+
+ arena_t arena;
+ arena_t frame_arena;
+
+ input_t input;
+
+ /* TODO(pryazha): Probably a bad idea to have only one window 🙃*/
+ prge_window_t window;
+
+ sound_t sounds[MAX_SOUNDS_LOADED];
+ sound_queue_node_t sound_queue_nodes[MAX_SOUNDS_PLAYING];
+ sound_queue_t sound_queue;
+
+ elist_t entities;
+
+ const char *dir;
+} prge_context_t;
+
+typedef enum {ui_list, ui_stack} ui_layout_enum;
+
+typedef struct {
+ prge_window_t window;
+ input_t input;
+ shader_t shader;
+ rect_t rect;
+ ui_layout_enum layout;
+ v2 last;
+ arena_t *arena;
+ f32 padding;
+} ui_t;