summaryrefslogtreecommitdiff
path: root/include/engine/engine.h
blob: 02b5703ecdc7c08f628faf96255c2f6f93dc88cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#ifndef ENGINE_H
#define ENGINE_H

#include <stdbool.h>

#include <engine/types.h>
#include <engine/logging.h>
#include <engine/stack.h>
#include <engine/vector.h>
#include <engine/memory.h>
#include <engine/input.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;

#define NUM_GLOBAL_BINDINGS 1
typedef struct {
  void    *data; /* Contains textures and such */
  u64 data_len;

  Window *window;
  bool    quit;

  u64 frame;
  f32 fps_target;

	/* TODO: Move mouse data to input ctx */
  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;

  i_ctx **bindings;
  usize bindings_sz;
  usize bindings_len;

  binding_t bindings_global[NUM_GLOBAL_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 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