diff options
| author | 0scar <qgt268@alumni.ku.dk> | 2020-09-29 06:51:02 +0000 |
|---|---|---|
| committer | 0scar <qgt268@alumni.ku.dk> | 2023-07-28 09:48:17 +0000 |
| commit | 6c16f339224a4736f4ed57d15bb3e5f968a635ab (patch) | |
| tree | ab13afea4b6f9acfb4a139a3125f265c90bc9d80 /include/engine/engine.h | |
Initial independent commit
Diffstat (limited to 'include/engine/engine.h')
| -rw-r--r-- | include/engine/engine.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/include/engine/engine.h b/include/engine/engine.h new file mode 100644 index 0000000..bd961a6 --- /dev/null +++ b/include/engine/engine.h @@ -0,0 +1,138 @@ +#ifndef ENGINE_H +#define ENGINE_H + +#include <stdbool.h> + +#include <engine/types.h> +#include <engine/stack.h> +#include <engine/vector.h> +#include <engine/memory.h> +#include <engine/logging.h> +#include <engine/state.h> + +typedef struct { + u32 texture_id; + i32 x, y, + w, h; +} RenderUnit; + +typedef struct { + const char *font_path; + i32 ptsize; +} FontSpec; + +typedef struct { + i32 width; + i32 height; + const char *path; +} TextureSpec; + +typedef struct Window Window; + +typedef struct Keybinding { + i32 keycode; + i32 modifiers; + void (*action)(void*); +} Keybinding; + +typedef struct { + void *data; /* Contains textures and such */ + u64 data_len; + + Window *window; + bool quit; + + u64 frame; + f32 fps_target; + + v2_i32 mouse_pos; + + v2_i32 mousedown; + v2_i32 mouseup; + + bool mouse_lclick; + bool mouse_rclick; + + i32 camera_x; + i32 camera_y; + + /* Text input/editing is currently not used/implemented */ + char *edit_text; + usize edit_pos; + + memory *mem; + + void *bindings; +} Platform; + +/* Essential functions */ +Platform *engine_init( + const char *windowtitle, + v2_i32 windowsize, + const f32 render_scale, + const u32 flags, + const usize initial_memory, + const FontSpec *fonts[], + const TextureSpec *textures[]); + +i32 engine_run(Platform *p, StateType initial_state); + +void engine_stop(Platform *p); + +/* Utility functions */ +void engine_fps_max(u64 cap); +void engine_bindkey(i32 key, void (*action)(void*)); + +void render_set_zoom(f32 new_zoom); +void render_adjust_zoom(f32 diff); +void render_add_unit(RenderUnit *u); + +u32 get_time(void); +v2_i32 get_windowsize(void); +v2_i32 *get_mousepos(void); + +#include "rendering.h" + +#ifdef ENGINE_INTERNALS + +#define MAX(a,b) (a > b ? a : b) + +/* Window */ +struct Window { + SDL_Window *window; + SDL_Renderer *renderer; + f32 render_scale; + + v2_i32 windowsize; + + i32* game_w; + i32* game_h; +}; + +typedef struct { + SDL_Texture *texture; + const i32 tilesize; + const i32 width; + const i32 height; +} Texture; + +struct Resources { + usize textures_len; + usize textures_size; + usize fonts_len; + + usize texturepaths_len; + usize fontpaths_len; + + /* Paths for our sources, kept in case the user wants to reload them */ + TextureSpec **texture_paths; + FontSpec **font_paths; + + /* Our actual sources */ + Texture **textures; + TTF_Font **fonts; +}; + + +#endif +#endif |
