diff options
Diffstat (limited to 'types.h')
-rw-r--r-- | types.h | 231 |
1 files changed, 231 insertions, 0 deletions
@@ -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; |