summaryrefslogtreecommitdiff
path: root/include/engine/engine.h
blob: e8a5ace866e6408a2fdef7661a9c15f1acdd071f (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
#ifndef ENGINE_H
#define ENGINE_H

#include <stdbool.h>

#include <engine/input.h>
#include <engine/logging.h>
#include <engine/memory.h>
#include <engine/resources.h>
#include <engine/stack.h>
#include <engine/state.h>
#include <engine/types.h>
#include <engine/vector.h>

typedef struct {
  u32 texture_id;
  i32 x, y, w, h;
} RenderUnit;

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;

  struct RenderObject *testobject;

  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 Asset_FontSpec* fonts[],
                      const Asset_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);

f64 get_time(void);
v2_i32 get_windowsize(void);
v2_i32* get_mousepos(void);

/* Input handling */
void engine_input_ctx_push(i_ctx* ctx);
void engine_input_ctx_pop(void);
void engine_input_ctx_reset(void);

#include "rendering.h"

#ifdef ENGINE_INTERNALS

#include <glad/gl.h>
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>

/* Window */
struct Window {
  GLFWwindow* window;
  GladGLContext* context;
  f32 render_scale;

  v2_i32 windowsize;

  i32* game_w;
  i32* game_h;
};

typedef struct {
  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 */
  Asset_TextureSpec** texture_paths;
  Asset_FontSpec** font_paths;

  /* Our actual sources */
  Texture** textures;
  //TTF_Font** fonts;
};

#endif
#endif