@dayme/bunraylib 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +60 -11
  2. package/package.json +11 -3
  3. package/src/Raylib.ts +58 -3678
  4. package/src/c/common.h +0 -2
  5. package/src/constants.ts +2 -2
  6. package/src/index.ts +6 -6
  7. package/src/main.c +0 -1
  8. package/src/main.d.ts +1 -1
  9. package/src/modules/audio/AudioModule.ts +197 -0
  10. package/src/modules/audio/symbols.ts +70 -0
  11. package/src/{c/audio.c → modules/audio/wrapper.c} +40 -80
  12. package/src/modules/camera/CameraModule.ts +239 -0
  13. package/src/modules/camera/symbols.ts +49 -0
  14. package/src/modules/camera/wrapper.c +141 -0
  15. package/src/modules/collision/CollisionModule.ts +363 -0
  16. package/src/modules/collision/symbols.ts +149 -0
  17. package/src/modules/collision/wrapper.c +176 -0
  18. package/src/modules/color/ColorModule.ts +65 -0
  19. package/src/modules/color/symbols.ts +26 -0
  20. package/src/modules/color/wrapper.c +16 -0
  21. package/src/modules/draw3d/Draw3DModule.ts +441 -0
  22. package/src/modules/draw3d/symbols.ts +199 -0
  23. package/src/modules/draw3d/wrapper.c +202 -0
  24. package/src/modules/font/FontModule.ts +250 -0
  25. package/src/modules/font/symbols.ts +46 -0
  26. package/src/{c/font.c → modules/font/wrapper.c} +50 -70
  27. package/src/modules/image/ImageModule.ts +451 -0
  28. package/src/{symbols/image.ts → modules/image/symbols.ts} +15 -12
  29. package/src/{c/image.c → modules/image/wrapper.c} +23 -45
  30. package/src/modules/input/InputModule.ts +160 -0
  31. package/src/modules/input/symbols.ts +54 -0
  32. package/src/modules/input/wrapper.c +31 -0
  33. package/src/modules/model/ModelModule.ts +228 -0
  34. package/src/{symbols/model.ts → modules/model/symbols.ts} +17 -14
  35. package/src/{c/model.c → modules/model/wrapper.c} +30 -30
  36. package/src/modules/shader/ShaderModule.ts +78 -0
  37. package/src/{symbols/shader.ts → modules/shader/symbols.ts} +3 -1
  38. package/src/{c/shader.c → modules/shader/wrapper.c} +11 -1
  39. package/src/modules/shapes/ShapesModule.ts +687 -0
  40. package/src/modules/shapes/symbols.ts +161 -0
  41. package/src/modules/shapes/wrapper.c +183 -0
  42. package/src/modules/texture/TextureModule.ts +190 -0
  43. package/src/{symbols/texture.ts → modules/texture/symbols.ts} +15 -9
  44. package/src/{c/texture.c → modules/texture/wrapper.c} +7 -22
  45. package/src/modules/window/WindowModule.ts +248 -0
  46. package/src/modules/window/symbols.ts +85 -0
  47. package/src/modules/window/wrapper.c +39 -0
  48. package/src/symbols.ts +87 -47
  49. package/src/utils.ts +63 -15
  50. package/src/c/camera.c +0 -161
  51. package/src/c/collision.c +0 -176
  52. package/src/c/color.c +0 -100
  53. package/src/c/draw3d.c +0 -222
  54. package/src/c/filesystem.c +0 -36
  55. package/src/c/input.c +0 -85
  56. package/src/c/shapes.c +0 -283
  57. package/src/c/window.c +0 -150
  58. package/src/symbols/audio.ts +0 -64
  59. package/src/symbols/camera.ts +0 -46
  60. package/src/symbols/collision.ts +0 -116
  61. package/src/symbols/color.ts +0 -22
  62. package/src/symbols/draw3d.ts +0 -137
  63. package/src/symbols/filesystem.ts +0 -30
  64. package/src/symbols/font.ts +0 -40
  65. package/src/symbols/input.ts +0 -51
  66. package/src/symbols/shapes.ts +0 -92
  67. package/src/symbols/window.ts +0 -83
@@ -0,0 +1,239 @@
1
+ import { getSymbols } from '../../symbols';
2
+ import { bufs as b, f, i } from '../../utils';
3
+ import type { Vec2, Vec3, Camera2D, Camera3D, Ray } from '../../types';
4
+
5
+ const r = () => getSymbols();
6
+
7
+ export class CameraModule {
8
+ static beginMode2D(camera: Camera2D): void {
9
+ r().symbols.BeginMode2DW(
10
+ f(camera.offset.x),
11
+ f(camera.offset.y),
12
+ f(camera.target.x),
13
+ f(camera.target.y),
14
+ f(camera.rotation),
15
+ f(camera.zoom),
16
+ );
17
+ }
18
+ static endMode2D(): void {
19
+ r().symbols.EndMode2D();
20
+ }
21
+ static beginMode3D(camera: Camera3D): void {
22
+ r().symbols.BeginMode3DW(
23
+ f(camera.position.x),
24
+ f(camera.position.y),
25
+ f(camera.position.z),
26
+ f(camera.target.x),
27
+ f(camera.target.y),
28
+ f(camera.target.z),
29
+ f(camera.up.x),
30
+ f(camera.up.y),
31
+ f(camera.up.z),
32
+ f(camera.fovy),
33
+ i(camera.projection),
34
+ );
35
+ }
36
+ static endMode3D(): void {
37
+ r().symbols.EndMode3D();
38
+ }
39
+
40
+ static updateCamera(camera: Camera3D, mode: number): Camera3D {
41
+ const pos = new Float32Array([camera.position.x, camera.position.y, camera.position.z]);
42
+ const tar = new Float32Array([camera.target.x, camera.target.y, camera.target.z]);
43
+ const up = new Float32Array([camera.up.x, camera.up.y, camera.up.z]);
44
+ const fovy = new Float32Array([camera.fovy]);
45
+ const proj = new Int32Array([camera.projection]);
46
+ r().symbols.UpdateCameraW(pos, tar, up, fovy, proj, i(mode));
47
+ return {
48
+ position: { x: pos[0]!, y: pos[1]!, z: pos[2]! },
49
+ target: { x: tar[0]!, y: tar[1]!, z: tar[2]! },
50
+ up: { x: up[0]!, y: up[1]!, z: up[2]! },
51
+ fovy: fovy[0]!,
52
+ projection: proj[0]! as Camera3D['projection'],
53
+ };
54
+ }
55
+
56
+ static updateCameraPro(camera: Camera3D, movement: Vec3, rotation: Vec3, zoom: number): Camera3D {
57
+ const pos = new Float32Array([camera.position.x, camera.position.y, camera.position.z]);
58
+ const tar = new Float32Array([camera.target.x, camera.target.y, camera.target.z]);
59
+ const up = new Float32Array([camera.up.x, camera.up.y, camera.up.z]);
60
+ const fovy = new Float32Array([camera.fovy]);
61
+ const proj = new Int32Array([camera.projection]);
62
+ r().symbols.UpdateCameraProW(
63
+ pos,
64
+ tar,
65
+ up,
66
+ fovy,
67
+ proj,
68
+ f(movement.x),
69
+ f(movement.y),
70
+ f(movement.z),
71
+ f(rotation.x),
72
+ f(rotation.y),
73
+ f(rotation.z),
74
+ f(zoom),
75
+ );
76
+ return {
77
+ position: { x: pos[0]!, y: pos[1]!, z: pos[2]! },
78
+ target: { x: tar[0]!, y: tar[1]!, z: tar[2]! },
79
+ up: { x: up[0]!, y: up[1]!, z: up[2]! },
80
+ fovy: fovy[0]!,
81
+ projection: proj[0]! as Camera3D['projection'],
82
+ };
83
+ }
84
+
85
+ static getScreenToWorldRay(position: Vec2, camera: Camera3D): Ray {
86
+ const outPos = new Float32Array(3);
87
+ const outDir = new Float32Array(3);
88
+ r().symbols.GetScreenToWorldRayW(
89
+ outPos,
90
+ outDir,
91
+ i(position.x),
92
+ i(position.y),
93
+ f(camera.position.x),
94
+ f(camera.position.y),
95
+ f(camera.position.z),
96
+ f(camera.target.x),
97
+ f(camera.target.y),
98
+ f(camera.target.z),
99
+ f(camera.up.x),
100
+ f(camera.up.y),
101
+ f(camera.up.z),
102
+ f(camera.fovy),
103
+ i(camera.projection),
104
+ );
105
+ return {
106
+ position: { x: outPos[0]!, y: outPos[1]!, z: outPos[2]! },
107
+ direction: { x: outDir[0]!, y: outDir[1]!, z: outDir[2]! },
108
+ };
109
+ }
110
+ static getWorldToScreen(position: Vec3, camera: Camera3D): Vec2 {
111
+ r().symbols.GetWorldToScreenW(
112
+ b._vec2Buf,
113
+ f(position.x),
114
+ f(position.y),
115
+ f(position.z),
116
+ f(camera.position.x),
117
+ f(camera.position.y),
118
+ f(camera.position.z),
119
+ f(camera.target.x),
120
+ f(camera.target.y),
121
+ f(camera.target.z),
122
+ f(camera.up.x),
123
+ f(camera.up.y),
124
+ f(camera.up.z),
125
+ f(camera.fovy),
126
+ i(camera.projection),
127
+ );
128
+ return { x: b._vec2Buf[0]!, y: b._vec2Buf[1]! };
129
+ }
130
+ static getWorldToScreen2D(position: Vec2, camera: Camera2D): Vec2 {
131
+ r().symbols.GetWorldToScreen2DW(
132
+ b._vec2Buf,
133
+ f(position.x),
134
+ f(position.y),
135
+ f(camera.offset.x),
136
+ f(camera.offset.y),
137
+ f(camera.target.x),
138
+ f(camera.target.y),
139
+ f(camera.rotation),
140
+ f(camera.zoom),
141
+ );
142
+ return { x: b._vec2Buf[0]!, y: b._vec2Buf[1]! };
143
+ }
144
+ static getScreenToWorld2D(position: Vec2, camera: Camera2D): Vec2 {
145
+ r().symbols.GetScreenToWorld2DW(
146
+ b._vec2Buf,
147
+ f(position.x),
148
+ f(position.y),
149
+ f(camera.offset.x),
150
+ f(camera.offset.y),
151
+ f(camera.target.x),
152
+ f(camera.target.y),
153
+ f(camera.rotation),
154
+ f(camera.zoom),
155
+ );
156
+ return { x: b._vec2Buf[0]!, y: b._vec2Buf[1]! };
157
+ }
158
+ static getScreenToWorldRayEx(
159
+ position: Vec2,
160
+ camera: Camera3D,
161
+ width: number,
162
+ height: number,
163
+ ): Ray {
164
+ r().symbols.GetScreenToWorldRayExW(
165
+ b._rayPosBuf2,
166
+ b._rayDirBuf2,
167
+ i(position.x),
168
+ i(position.y),
169
+ i(width),
170
+ i(height),
171
+ f(camera.position.x),
172
+ f(camera.position.y),
173
+ f(camera.position.z),
174
+ f(camera.target.x),
175
+ f(camera.target.y),
176
+ f(camera.target.z),
177
+ f(camera.up.x),
178
+ f(camera.up.y),
179
+ f(camera.up.z),
180
+ f(camera.fovy),
181
+ i(camera.projection),
182
+ );
183
+ return {
184
+ position: { x: b._rayPosBuf2[0]!, y: b._rayPosBuf2[1]!, z: b._rayPosBuf2[2]! },
185
+ direction: { x: b._rayDirBuf2[0]!, y: b._rayDirBuf2[1]!, z: b._rayDirBuf2[2]! },
186
+ };
187
+ }
188
+ static getWorldToScreenEx(position: Vec3, camera: Camera3D, width: number, height: number): Vec2 {
189
+ r().symbols.GetWorldToScreenExW(
190
+ b._vec2Buf,
191
+ f(position.x),
192
+ f(position.y),
193
+ f(position.z),
194
+ f(camera.position.x),
195
+ f(camera.position.y),
196
+ f(camera.position.z),
197
+ f(camera.target.x),
198
+ f(camera.target.y),
199
+ f(camera.target.z),
200
+ f(camera.up.x),
201
+ f(camera.up.y),
202
+ f(camera.up.z),
203
+ f(camera.fovy),
204
+ i(camera.projection),
205
+ i(width),
206
+ i(height),
207
+ );
208
+ return { x: b._vec2Buf[0]!, y: b._vec2Buf[1]! };
209
+ }
210
+ static getCameraMatrix(camera: Camera3D): Float32Array {
211
+ r().symbols.GetCameraMatrixW(
212
+ b._matBuf,
213
+ f(camera.position.x),
214
+ f(camera.position.y),
215
+ f(camera.position.z),
216
+ f(camera.target.x),
217
+ f(camera.target.y),
218
+ f(camera.target.z),
219
+ f(camera.up.x),
220
+ f(camera.up.y),
221
+ f(camera.up.z),
222
+ f(camera.fovy),
223
+ i(camera.projection),
224
+ );
225
+ return new Float32Array(b._matBuf);
226
+ }
227
+ static getCameraMatrix2D(camera: Camera2D): Float32Array {
228
+ r().symbols.GetCameraMatrix2DW(
229
+ b._matBuf,
230
+ camera.offset.x,
231
+ camera.offset.y,
232
+ camera.target.x,
233
+ camera.target.y,
234
+ f(camera.rotation),
235
+ f(camera.zoom),
236
+ );
237
+ return new Float32Array(b._matBuf);
238
+ }
239
+ }
@@ -0,0 +1,49 @@
1
+ import { FFIType } from 'bun:ffi';
2
+ const { i32, ptr, f32 } = FFIType;
3
+
4
+ export const cameraWrapperSymbols = {
5
+ BeginMode2DW: { args: [f32, f32, f32, f32, f32, f32], returns: FFIType.void },
6
+ BeginMode3DW: {
7
+ args: [f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
8
+ returns: FFIType.void,
9
+ },
10
+ UpdateCameraW: { args: [ptr, ptr, ptr, ptr, ptr, i32], returns: FFIType.void },
11
+ UpdateCameraProW: {
12
+ args: [ptr, ptr, ptr, ptr, ptr, f32, f32, f32, f32, f32, f32, f32],
13
+ returns: FFIType.void,
14
+ },
15
+ GetScreenToWorldRayW: {
16
+ args: [ptr, ptr, i32, i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
17
+ returns: FFIType.void,
18
+ },
19
+ GetWorldToScreenW: {
20
+ args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
21
+ returns: FFIType.void,
22
+ },
23
+ GetWorldToScreen2DW: {
24
+ args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32],
25
+ returns: FFIType.void,
26
+ },
27
+ GetScreenToWorld2DW: {
28
+ args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32],
29
+ returns: FFIType.void,
30
+ },
31
+ GetScreenToWorldRayExW: {
32
+ args: [ptr, ptr, i32, i32, i32, i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
33
+ returns: FFIType.void,
34
+ },
35
+ GetWorldToScreenExW: {
36
+ args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32, i32, i32],
37
+ returns: FFIType.void,
38
+ },
39
+ GetCameraMatrixW: {
40
+ args: [ptr, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32],
41
+ returns: FFIType.void,
42
+ },
43
+ GetCameraMatrix2DW: { args: [ptr, f32, f32, f32, f32, f32, f32], returns: FFIType.void },
44
+ } as const;
45
+
46
+ export const cameraDirectSymbols = {
47
+ EndMode3D: { args: [], returns: FFIType.void },
48
+ EndMode2D: { args: [], returns: FFIType.void },
49
+ } as const;
@@ -0,0 +1,141 @@
1
+ #include "../../c/common.h"
2
+
3
+ void BeginMode2DW(float offX, float offY, float tarX, float tarY, float rotation, float zoom) {
4
+ Camera2D cam = { {offX, offY}, {tarX, tarY}, rotation, zoom };
5
+ BeginMode2D(cam);
6
+ }
7
+
8
+ void BeginMode3DW(float posX, float posY, float posZ, float tarX, float tarY, float tarZ, float upX, float upY, float upZ, float fovy, int projection) {
9
+ Camera3D cam = { {posX, posY, posZ}, {tarX, tarY, tarZ}, {upX, upY, upZ}, fovy, projection };
10
+ BeginMode3D(cam);
11
+ }
12
+
13
+ void UpdateCameraW(float* pos, float* tar, float* up, float* fovy, int* projection, int mode) {
14
+ Camera3D cam = {
15
+ {pos[0], pos[1], pos[2]},
16
+ {tar[0], tar[1], tar[2]},
17
+ {up[0], up[1], up[2]},
18
+ fovy[0],
19
+ projection[0]
20
+ };
21
+ UpdateCamera(&cam, mode);
22
+ pos[0] = cam.position.x; pos[1] = cam.position.y; pos[2] = cam.position.z;
23
+ tar[0] = cam.target.x; tar[1] = cam.target.y; tar[2] = cam.target.z;
24
+ up[0] = cam.up.x; up[1] = cam.up.y; up[2] = cam.up.z;
25
+ fovy[0] = cam.fovy;
26
+ projection[0] = cam.projection;
27
+ }
28
+
29
+ void UpdateCameraProW(float* pos, float* tar, float* up, float* fovy, int* projection,
30
+ float mx, float my, float mz, float rx, float ry, float rz, float zoom) {
31
+ Camera3D cam = {
32
+ {pos[0], pos[1], pos[2]},
33
+ {tar[0], tar[1], tar[2]},
34
+ {up[0], up[1], up[2]},
35
+ fovy[0],
36
+ projection[0]
37
+ };
38
+ UpdateCameraPro(&cam, (Vector3){mx, my, mz}, (Vector3){rx, ry, rz}, zoom);
39
+ pos[0] = cam.position.x; pos[1] = cam.position.y; pos[2] = cam.position.z;
40
+ tar[0] = cam.target.x; tar[1] = cam.target.y; tar[2] = cam.target.z;
41
+ up[0] = cam.up.x; up[1] = cam.up.y; up[2] = cam.up.z;
42
+ fovy[0] = cam.fovy;
43
+ projection[0] = cam.projection;
44
+ }
45
+
46
+ void GetScreenToWorldRayW(float* outPos, float* outDir, int screenX, int screenY,
47
+ float camPosX, float camPosY, float camPosZ, float camTarX, float camTarY, float camTarZ,
48
+ float camUpX, float camUpY, float camUpZ, float camFovy, int camProj) {
49
+ Camera3D cam = {
50
+ {camPosX, camPosY, camPosZ},
51
+ {camTarX, camTarY, camTarZ},
52
+ {camUpX, camUpY, camUpZ},
53
+ camFovy, camProj
54
+ };
55
+ Ray r = GetScreenToWorldRay((Vector2){screenX, screenY}, cam);
56
+ outPos[0] = r.position.x; outPos[1] = r.position.y; outPos[2] = r.position.z;
57
+ outDir[0] = r.direction.x; outDir[1] = r.direction.y; outDir[2] = r.direction.z;
58
+ }
59
+
60
+ void GetWorldToScreenW(float* out, float posX, float posY, float posZ,
61
+ float camPosX, float camPosY, float camPosZ, float camTarX, float camTarY, float camTarZ,
62
+ float camUpX, float camUpY, float camUpZ, float camFovy, int camProj) {
63
+ Camera3D cam = {
64
+ {camPosX, camPosY, camPosZ},
65
+ {camTarX, camTarY, camTarZ},
66
+ {camUpX, camUpY, camUpZ},
67
+ camFovy, camProj
68
+ };
69
+ Vector2 v = GetWorldToScreen((Vector3){posX, posY, posZ}, cam);
70
+ out[0] = v.x; out[1] = v.y;
71
+ }
72
+
73
+ void GetWorldToScreen2DW(float* out, float posX, float posY,
74
+ float offX, float offY, float tarX, float tarY, float rotation, float zoom) {
75
+ Camera2D cam = { {offX, offY}, {tarX, tarY}, rotation, zoom };
76
+ Vector2 v = GetWorldToScreen2D((Vector2){posX, posY}, cam);
77
+ out[0] = v.x; out[1] = v.y;
78
+ }
79
+
80
+ void GetScreenToWorld2DW(float* out, float posX, float posY,
81
+ float offX, float offY, float tarX, float tarY, float rotation, float zoom) {
82
+ Camera2D cam = { {offX, offY}, {tarX, tarY}, rotation, zoom };
83
+ Vector2 v = GetScreenToWorld2D((Vector2){posX, posY}, cam);
84
+ out[0] = v.x; out[1] = v.y;
85
+ }
86
+
87
+ void GetScreenToWorldRayExW(float* outPos, float* outDir,
88
+ int screenX, int screenY, int screenW, int screenH,
89
+ float camPosX, float camPosY, float camPosZ,
90
+ float camTarX, float camTarY, float camTarZ,
91
+ float camUpX, float camUpY, float camUpZ,
92
+ float camFovy, int camProj) {
93
+ Camera3D cam = {
94
+ {camPosX, camPosY, camPosZ},
95
+ {camTarX, camTarY, camTarZ},
96
+ {camUpX, camUpY, camUpZ},
97
+ camFovy, camProj
98
+ };
99
+ Ray r = GetScreenToWorldRayEx((Vector2){screenX, screenY}, cam, screenW, screenH);
100
+ outPos[0] = r.position.x; outPos[1] = r.position.y; outPos[2] = r.position.z;
101
+ outDir[0] = r.direction.x; outDir[1] = r.direction.y; outDir[2] = r.direction.z;
102
+ }
103
+
104
+ void GetWorldToScreenExW(float* out,
105
+ float posX, float posY, float posZ,
106
+ float camPosX, float camPosY, float camPosZ,
107
+ float camTarX, float camTarY, float camTarZ,
108
+ float camUpX, float camUpY, float camUpZ,
109
+ float camFovy, int camProj,
110
+ int screenW, int screenH) {
111
+ Camera3D cam = {
112
+ {camPosX, camPosY, camPosZ},
113
+ {camTarX, camTarY, camTarZ},
114
+ {camUpX, camUpY, camUpZ},
115
+ camFovy, camProj
116
+ };
117
+ Vector2 v = GetWorldToScreenEx((Vector3){posX, posY, posZ}, cam, screenW, screenH);
118
+ out[0] = v.x; out[1] = v.y;
119
+ }
120
+
121
+ void GetCameraMatrixW(float* out,
122
+ float camPosX, float camPosY, float camPosZ,
123
+ float camTarX, float camTarY, float camTarZ,
124
+ float camUpX, float camUpY, float camUpZ,
125
+ float camFovy, int camProj) {
126
+ Camera3D cam = {
127
+ {camPosX, camPosY, camPosZ},
128
+ {camTarX, camTarY, camTarZ},
129
+ {camUpX, camUpY, camUpZ},
130
+ camFovy, camProj
131
+ };
132
+ Matrix m = GetCameraMatrix(cam);
133
+ memcpy(out, &m, sizeof(Matrix));
134
+ }
135
+
136
+ void GetCameraMatrix2DW(float* out,
137
+ float offX, float offY, float tarX, float tarY, float rotation, float zoom) {
138
+ Camera2D cam = { {offX, offY}, {tarX, tarY}, rotation, zoom };
139
+ Matrix m = GetCameraMatrix2D(cam);
140
+ memcpy(out, &m, sizeof(Matrix));
141
+ }