-
Notifications
You must be signed in to change notification settings - Fork 0
/
scene.h
43 lines (38 loc) · 1.49 KB
/
scene.h
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
#ifndef SCENE_H
#define SCENE_H
typedef int (scene_init_fn)(void);
typedef void (scene_deinit_fn)(void);
typedef void (scene_update_fn)(float dt);
typedef void (scene_render_fn)(void);
typedef void (scene_resize_fn)(float width, float height);
struct game_scene {
const char *name;
scene_init_fn *init;
scene_deinit_fn *deinit;
scene_update_fn *update;
scene_render_fn *render;
scene_resize_fn *resize;
};
void scene_set(struct game_scene *scene);
void scene_update(float dt);
void scene_render();
void scene_resize(float width, float height);
void scene_reload();
#define SCENE_FUNCS(name) \
int name##_scene_init(); \
void name##_scene_deinit(); \
void name##_scene_update(float dt); \
void name##_scene_render(); \
void name##_scene_resize(float width, float height);
#define SCENE_VTABLE(name) struct game_scene name##_scene = { \
#name, \
name##_scene_init, \
name##_scene_deinit, \
name##_scene_update, \
name##_scene_render, \
name##_scene_resize \
};
#define SCENE_IMPLEMENT(name) \
SCENE_FUNCS(name) \
SCENE_VTABLE(name)
#endif