-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlofi.h
More file actions
133 lines (108 loc) · 6.2 KB
/
lofi.h
File metadata and controls
133 lines (108 loc) · 6.2 KB
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
#pragma once
#include <stdint.h>
#include <stdbool.h>
#ifdef __wasm__
#define EXPORT(name) __attribute__((export_name(#name)))
#define IMPORT(name) __attribute__((import_module("env"), import_name(#name)))
#else
#define EXPORT(name)
#define IMPORT(name)
#endif
#define ANIM_PLAY (1 << 0)
#define ANIM_LOOP (1 << 1)
#define SOUND_PLAY (1U << 1)
#define SOUND_LOOP (1U << 2)
#define SOUND_SPATIAL (1U << 3)
typedef struct lo_Texture { uint32_t id; } lo_Texture;
IMPORT(lo_load_texture) lo_Texture lo_load_texture(const char* path);
IMPORT(lo_release_texture) void lo_release_texture(lo_Texture tex);
typedef struct lo_Model { uint32_t id; } lo_Model;
IMPORT(lo_load_model) lo_Model lo_load_model(const char* path);
IMPORT(lo_release_model) void lo_release_model(lo_Model model);
typedef struct lo_AnimSet { uint32_t id; } lo_AnimSet;
IMPORT(lo_load_anims) lo_AnimSet lo_load_anims(const char* path);
IMPORT(lo_release_anims) void lo_release_anims(void);
typedef struct lo_Sound { uint32_t id; } lo_Sound;
IMPORT(lo_load_sound) lo_Sound lo_load_sound(const char* path);
IMPORT(lo_release_sound) void lo_release_sound(lo_Sound sound);
typedef struct lo_Entity { uint32_t id; } lo_Entity;
IMPORT(lo_create) lo_Entity lo_create();
IMPORT(lo_valid) bool lo_valid(lo_Entity entity);
IMPORT(lo_destroy) void lo_destroy(lo_Entity entity);
IMPORT(lo_set_position) void lo_set_position(lo_Entity e, float pos[3]);
IMPORT(lo_get_position) void lo_get_position(lo_Entity e, float out[3]);
IMPORT(lo_set_rotation) void lo_set_rotation(lo_Entity e, float rot[4]);
IMPORT(lo_get_rotation) void lo_get_rotation(lo_Entity e, float out[4]);
IMPORT(lo_set_scale) void lo_set_scale(lo_Entity e, float scale[3]);
IMPORT(lo_get_scale) void lo_get_scale(lo_Entity e, float out[3]);
IMPORT(lo_set_parent) void lo_set_parent(lo_Entity entity, lo_Entity parent);
IMPORT(lo_remove_parent) void lo_remove_parent(lo_Entity entity);
IMPORT(lo_add_child) void lo_add_child(lo_Entity entity, lo_Entity child);
IMPORT(lo_set_children) void lo_set_children(lo_Entity e, lo_Entity* children);
IMPORT(lo_clear_children) void lo_clear_children(lo_Entity e);
IMPORT(lo_set_model) void lo_set_model(lo_Entity entity, lo_Model model);
IMPORT(lo_clear_model) void lo_clear_model(lo_Entity entity);
IMPORT(lo_set_texture) void lo_set_texture(lo_Entity entity, lo_Texture handle, int slot);
IMPORT(lo_clear_textures) void lo_clear_textures(lo_Entity entity);
typedef struct lo_AnimDesc { lo_AnimSet set; int32_t flags; int32_t anim; } lo_AnimDesc;
IMPORT(lo_set_anims) void lo_set_anims(lo_Entity entity, lo_AnimDesc* desc);
IMPORT(lo_clear_anims) void lo_clear_anims(lo_Entity entity);
typedef struct lo_SoundDesc { lo_Sound sound; float vol; float min_range; float max_range; uint32_t flags; } lo_SoundDesc;
IMPORT(lo_set_sound) void lo_set_sound(lo_Entity e, lo_SoundDesc* desc);
IMPORT(lo_play_sound) void lo_play_sound(lo_Entity e);
IMPORT(lo_stop_sound) void lo_stop_sound(lo_Entity e);
IMPORT(lo_clear_sound) void lo_clear_sound(lo_Entity e);
typedef struct { uint64_t ptr; } lo_RigidBody;
typedef struct { uint64_t ptr; } lo_AnimBody;
IMPORT(lo_create_rigid_body) lo_RigidBody lo_create_rigid_body(void);
IMPORT(lo_free_rigid_body) void lo_free_rigid_body(lo_RigidBody body);
IMPORT(lo_set_rigid_body) void lo_set_rigid_body(lo_Entity e, lo_RigidBody body);
IMPORT(lo_clear_rigid_body) void lo_clear_rigid_body(lo_Entity e);
IMPORT(lo_create_anim_body) lo_AnimBody lo_create_anim_body(void);
IMPORT(lo_free_anim_body) void lo_free_anim_body(lo_AnimBody body);
IMPORT(lo_set_anim_body) void lo_set_anim_body(lo_Entity e, lo_AnimBody body);
IMPORT(lo_clear_anim_body) void lo_clear_anim_body(lo_Entity e);
#define LO_GEOM_BOX 0
#define LO_GEOM_SPHERE 1
#define LO_GEOM_CYLINDER 2
typedef struct {
int32_t type;
float pos[3];
float rot[4];
float size[3]; // box: w,h,d; sphere: diameter; cylinder: diameter, height
} lo_GeomDesc;
IMPORT(lo_rb_add_geom) void lo_rb_add_geom(lo_RigidBody body, lo_GeomDesc* desc);
IMPORT(lo_ab_add_geom) void lo_ab_add_geom(lo_AnimBody body, lo_GeomDesc* desc);
IMPORT(lo_rb_set_pos) void lo_rb_set_pos(lo_RigidBody body, float pos[3]);
IMPORT(lo_rb_set_rot) void lo_rb_set_rot(lo_RigidBody body, float rot[4]);
IMPORT(lo_ab_set_pos) void lo_ab_set_pos(lo_AnimBody body, float pos[3]);
IMPORT(lo_ab_set_rot) void lo_ab_set_rot(lo_AnimBody body, float rot[4]);
IMPORT(lo_rb_set_mass) void lo_rb_set_mass(lo_RigidBody body, float mass);
IMPORT(lo_set_campos) void lo_set_campos(float pos[3]);
IMPORT(lo_set_cam_target) void lo_set_cam_target(float target[3]);
IMPORT(lo_lock_mouse) void lo_lock_mouse(bool lock);
IMPORT(lo_dtx_layer) void lo_dtx_layer(int layer_id);
IMPORT(lo_dtx_font) void lo_dtx_font(int font_index);
IMPORT(lo_dtx_canvas) void lo_dtx_canvas(float w, float h);
IMPORT(lo_dtx_origin) void lo_dtx_origin(float x, float y);
IMPORT(lo_dtx_home) void lo_dtx_home(void);
IMPORT(lo_dtx_pos) void lo_dtx_pos(float x, float y);
IMPORT(lo_dtx_pos_x) void lo_dtx_pos_x(float x);
IMPORT(lo_dtx_pos_y) void lo_dtx_pos_y(float y);
IMPORT(lo_dtx_move) void lo_dtx_move(float dx, float dy);
IMPORT(lo_dtx_move_x) void lo_dtx_move_x(float dx);
IMPORT(lo_dtx_move_y) void lo_dtx_move_y(float dy);
IMPORT(lo_dtx_crlf) void lo_dtx_crlf(void);
IMPORT(lo_dtx_color3b) void lo_dtx_color3b(uint8_t r, uint8_t g, uint8_t b);
IMPORT(lo_dtx_color3f) void lo_dtx_color3f(float r, float g, float b);
IMPORT(lo_dtx_color4f) void lo_dtx_color4f(float rgba[4]);
IMPORT(lo_dtx_color1i) void lo_dtx_color1i(uint32_t rgba);
IMPORT(lo_dtx_putc) void lo_dtx_putc(char c);
IMPORT(lo_dtx_puts) void lo_dtx_puts(const char* str);
IMPORT(lo_dtx_putr) void lo_dtx_putr(const char* str, int len);
EXPORT(lo_init) void lo_init();
EXPORT(lo_frame) void lo_frame(float dt);
EXPORT(lo_cleanup) void lo_cleanup();
EXPORT(lo_mouse_pos) void lo_mouse_pos(float x, float y);
EXPORT(lo_mouse_button) void lo_mouse_button(int button, bool down);
EXPORT(lo_key) void lo_key(int keycode, bool down, bool repeat);