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