slifer 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
package/src/ffi.ts CHANGED
@@ -3,240 +3,277 @@ import { dlopen, FFIType, suffix } from "bun:ffi";
3
3
  let libSDLImport;
4
4
  let libImageImport;
5
5
  let libTTFImport;
6
- let libGFXImport;
6
+ let libMixerImport;
7
7
 
8
8
  if (process.platform == "win32") {
9
- //@ts-expect-error
10
- libSDLImport = await import("../libs/libSDL2.dll");
11
- //@ts-expect-error
12
- libImageImport = await import("../libs/libSDL2_image.dll");
13
- //@ts-expect-error
14
- libTTFImport = await import("../libs/libSDL2_ttf.dll");
9
+ //@ts-expect-error
10
+ libSDLImport = await import("../libs/libSDL2.dll");
11
+ //@ts-expect-error
12
+ libImageImport = await import("../libs/libSDL2_image.dll");
13
+ //@ts-expect-error
14
+ libTTFImport = await import("../libs/libSDL2_ttf.dll");
15
15
  } else if (process.platform == "darwin") {
16
- //@ts-expect-error
17
- libSDLImport = await import("../libs/libSDL2.dylib");
18
- //@ts-expect-error
19
- libImageImport = await import("../libs/libSDL2_image.dylib");
20
- //@ts-expect-error
21
- libTTFImport = await import("../libs/libSDL2_ttf.dylib");
16
+ //@ts-expect-error
17
+ libSDLImport = await import("../libs/libSDL2.dylib");
18
+ //@ts-expect-error
19
+ libImageImport = await import("../libs/libSDL2_image.dylib");
20
+ //@ts-expect-error
21
+ libTTFImport = await import("../libs/libSDL2_ttf.dylib");
22
+ //@ts-expect-error
23
+ libMixerImport = await import("../libs/libSDL2_mixer.dylib");
22
24
  } else if (process.platform == "linux") {
23
- //@ts-expect-error
24
- libSDLImport = await import("../libs/libSDL2.so");
25
- //@ts-expect-error
26
- libImageImport = await import("../libs/libSDL2_image.so");
27
- //@ts-expect-error
28
- libTTFImport = await import("../libs/libSDL2_ttf.so");
25
+ //@ts-expect-error
26
+ libSDLImport = await import("../libs/libSDL2.so");
27
+ //@ts-expect-error
28
+ libImageImport = await import("../libs/libSDL2_image.so");
29
+ //@ts-expect-error
30
+ libTTFImport = await import("../libs/libSDL2_ttf.so");
31
+ //@ts-expect-error
32
+ libMixerImport = await import("../libs/libSDL2_mixer.so");
33
+
29
34
  }
30
35
 
31
36
  /** @internal */
32
37
  export const libsdl = dlopen(libSDLImport.default, {
33
- SDL_Init: {
34
- args: [FFIType.int],
35
- returns: FFIType.int,
36
- },
37
- SDL_GetRevision: {
38
- returns: "cstring",
39
- },
40
- SDL_CreateWindow: {
41
- args: ["cstring", "int", "int", "int", "int", "u32"],
42
- returns: "pointer",
43
- },
44
- SDL_CreateRenderer: {
45
- args: ["pointer", "int", "u32"],
46
- returns: "pointer",
47
- },
48
- SDL_GetDesktopDisplayMode: {
49
- args: ["int", "pointer"],
50
- returns: "int",
51
- },
52
- SDL_GetDisplayOrientation: {
53
- args: ["int"],
54
- returns: "int",
55
- },
56
- SDL_SetWindowFullscreen: {
57
- args: ["pointer", "u32"],
58
- returns: "int",
59
- },
60
- SDL_PollEvent: {
61
- args: ["pointer"],
62
- returns: "int",
63
- },
64
- SDL_RenderClear: {
65
- args: ["pointer"],
66
- returns: "int",
67
- },
68
- SDL_RenderCopy: {
69
- args: ["pointer", "pointer", "pointer", "pointer"],
70
- returns: "int",
71
- },
72
- SDL_RenderPresent: {
73
- args: ["pointer"],
74
- returns: "void",
75
- },
76
- SDL_CreateTextureFromSurface: {
77
- args: ["pointer", "pointer"],
78
- returns: "pointer",
79
- },
80
- SDL_DestroyRenderer: {
81
- args: ["pointer"],
82
- returns: "void",
83
- },
84
- SDL_DestroyWindow: {
85
- args: ["pointer"],
86
- returns: "void",
87
- },
88
- SDL_Quit: {
89
- returns: "void",
90
- },
91
- SDL_GetKeyName: {
92
- args: ["int"],
93
- returns: "cstring",
94
- },
95
- SDL_GetKeyFromScancode: {
96
- args: ["int"],
97
- returns: "int",
98
- },
99
- SDL_GetPerformanceCounter: {
100
- returns: "u64",
101
- },
102
- SDL_GetPerformanceFrequency: {
103
- returns: "u64",
104
- },
105
- SDL_QueryTexture: {
106
- args: ["pointer", "pointer", "pointer", "pointer", "pointer"],
107
- returns: "int",
108
- },
109
- SDL_GetMouseState: {
110
- args: ["pointer", "pointer"],
111
- returns: "u32",
112
- },
113
- SDL_CreateColorCursor: {
114
- args: ["pointer", "int", "int"],
115
- returns: "pointer",
116
- },
117
- SDL_SetCursor: {
118
- args: ["pointer"],
119
- returns: "void",
120
- },
121
- SDL_SetRenderDrawColor: {
122
- args: ["pointer", "int", "int", "int", "int"],
123
- returns: "void",
124
- },
125
- SDL_RenderFillRect: {
126
- args: ["pointer", "pointer"],
127
- returns: "bool",
128
- },
129
- SDL_GetWindowPosition: {
130
- args: ["pointer", "pointer", "pointer"],
131
- returns: "void",
132
- },
133
- SDL_SetWindowPosition: {
134
- args: ["pointer", "int", "int"],
135
- returns: "void",
136
- },
137
- SDL_SetWindowHitTest: {
138
- args: ["pointer", FFIType.function, "pointer"],
139
- returns: "int",
140
- },
141
- SDL_GetWindowSize: {
142
- args: ["pointer", "pointer", "pointer"],
143
- returns: "void",
144
- },
145
- SDL_CreateSystemCursor: {
146
- args: ["int"],
147
- returns: "pointer",
148
- },
149
- SDL_GetError: {
150
- returns: "cstring",
151
- },
152
- SDL_SetHint: {
153
- args: ["cstring", "cstring"],
154
- returns: "bool",
155
- },
156
- SDL_MinimizeWindow: {
157
- args: ["pointer"],
158
- returns: "void",
159
- },
160
- SDL_MaximizeWindow: {
161
- args: ["pointer"],
162
- returns: 'void'
163
- },
164
- SDL_GetShapedWindowMode: {
165
- args: ["pointer", "pointer"],
166
- returns: "int",
167
- },
168
- SDL_CreateShapedWindow: {
169
- args: ["cstring", "int", "int", "int", "int", "u32"],
170
- returns: "pointer",
171
- },
172
- SDL_SetWindowShape: {
173
- args: ["pointer", "pointer", "pointer"],
174
- returns: "int",
175
- },
176
- SDL_SetWindowIcon: {
177
- args: ["pointer", "pointer"],
178
- returns: "void",
179
- },
180
- SDL_RaiseWindow: {
181
- args: ["pointer"],
182
- returns: "void",
183
- },
184
- SDL_RenderCopyEx: {
185
- args: [
186
- "pointer",
187
- "pointer",
188
- "pointer",
189
- "pointer",
190
- "double",
191
- "pointer",
192
- "int",
193
- ],
194
- returns: "int",
195
- },
196
- SDL_SetWindowSize: {
197
- args: ['pointer', 'int', 'int'],
198
- returns: 'void'
199
- },
200
- SDL_SetWindowTitle: {
201
- args: ['pointer', 'cstring'],
202
- returns: 'void'
203
- }
38
+ SDL_Init: {
39
+ args: [FFIType.int],
40
+ returns: FFIType.int,
41
+ },
42
+ SDL_GetRevision: {
43
+ returns: "cstring",
44
+ },
45
+ SDL_CreateWindow: {
46
+ args: ["cstring", "int", "int", "int", "int", "u32"],
47
+ returns: "pointer",
48
+ },
49
+ SDL_CreateRenderer: {
50
+ args: ["pointer", "int", "u32"],
51
+ returns: "pointer",
52
+ },
53
+ SDL_GetDesktopDisplayMode: {
54
+ args: ["int", "pointer"],
55
+ returns: "int",
56
+ },
57
+ SDL_GetDisplayOrientation: {
58
+ args: ["int"],
59
+ returns: "int",
60
+ },
61
+ SDL_SetWindowFullscreen: {
62
+ args: ["pointer", "u32"],
63
+ returns: "int",
64
+ },
65
+ SDL_PollEvent: {
66
+ args: ["pointer"],
67
+ returns: "int",
68
+ },
69
+ SDL_RenderClear: {
70
+ args: ["pointer"],
71
+ returns: "int",
72
+ },
73
+ SDL_RenderCopy: {
74
+ args: ["pointer", "pointer", "pointer", "pointer"],
75
+ returns: "int",
76
+ },
77
+ SDL_RenderPresent: {
78
+ args: ["pointer"],
79
+ returns: "void",
80
+ },
81
+ SDL_CreateTextureFromSurface: {
82
+ args: ["pointer", "pointer"],
83
+ returns: "pointer",
84
+ },
85
+ SDL_DestroyRenderer: {
86
+ args: ["pointer"],
87
+ returns: "void",
88
+ },
89
+ SDL_DestroyWindow: {
90
+ args: ["pointer"],
91
+ returns: "void",
92
+ },
93
+ SDL_Quit: {
94
+ returns: "void",
95
+ },
96
+ SDL_GetKeyName: {
97
+ args: ["int"],
98
+ returns: "cstring",
99
+ },
100
+ SDL_GetKeyFromScancode: {
101
+ args: ["int"],
102
+ returns: "int",
103
+ },
104
+ SDL_GetPerformanceCounter: {
105
+ returns: "u64",
106
+ },
107
+ SDL_GetPerformanceFrequency: {
108
+ returns: "u64",
109
+ },
110
+ SDL_QueryTexture: {
111
+ args: ["pointer", "pointer", "pointer", "pointer", "pointer"],
112
+ returns: "int",
113
+ },
114
+ SDL_GetMouseState: {
115
+ args: ["pointer", "pointer"],
116
+ returns: "u32",
117
+ },
118
+ SDL_CreateColorCursor: {
119
+ args: ["pointer", "int", "int"],
120
+ returns: "pointer",
121
+ },
122
+ SDL_SetCursor: {
123
+ args: ["pointer"],
124
+ returns: "void",
125
+ },
126
+ SDL_SetRenderDrawColor: {
127
+ args: ["pointer", "int", "int", "int", "int"],
128
+ returns: "void",
129
+ },
130
+ SDL_RenderFillRect: {
131
+ args: ["pointer", "pointer"],
132
+ returns: "bool",
133
+ },
134
+ SDL_GetWindowPosition: {
135
+ args: ["pointer", "pointer", "pointer"],
136
+ returns: "void",
137
+ },
138
+ SDL_SetWindowPosition: {
139
+ args: ["pointer", "int", "int"],
140
+ returns: "void",
141
+ },
142
+ SDL_SetWindowHitTest: {
143
+ args: ["pointer", FFIType.function, "pointer"],
144
+ returns: "int",
145
+ },
146
+ SDL_GetWindowSize: {
147
+ args: ["pointer", "pointer", "pointer"],
148
+ returns: "void",
149
+ },
150
+ SDL_CreateSystemCursor: {
151
+ args: ["int"],
152
+ returns: "pointer",
153
+ },
154
+ SDL_GetError: {
155
+ returns: "cstring",
156
+ },
157
+ SDL_SetHint: {
158
+ args: ["cstring", "cstring"],
159
+ returns: "bool",
160
+ },
161
+ SDL_MinimizeWindow: {
162
+ args: ["pointer"],
163
+ returns: "void",
164
+ },
165
+ SDL_MaximizeWindow: {
166
+ args: ["pointer"],
167
+ returns: "void",
168
+ },
169
+ SDL_GetShapedWindowMode: {
170
+ args: ["pointer", "pointer"],
171
+ returns: "int",
172
+ },
173
+ SDL_CreateShapedWindow: {
174
+ args: ["cstring", "int", "int", "int", "int", "u32"],
175
+ returns: "pointer",
176
+ },
177
+ SDL_SetWindowShape: {
178
+ args: ["pointer", "pointer", "pointer"],
179
+ returns: "int",
180
+ },
181
+ SDL_SetWindowIcon: {
182
+ args: ["pointer", "pointer"],
183
+ returns: "void",
184
+ },
185
+ SDL_RaiseWindow: {
186
+ args: ["pointer"],
187
+ returns: "void",
188
+ },
189
+ SDL_RenderCopyEx: {
190
+ args: [
191
+ "pointer",
192
+ "pointer",
193
+ "pointer",
194
+ "pointer",
195
+ "double",
196
+ "pointer",
197
+ "int",
198
+ ],
199
+ returns: "int",
200
+ },
201
+ SDL_SetWindowSize: {
202
+ args: ["pointer", "int", "int"],
203
+ returns: "void",
204
+ },
205
+ SDL_SetWindowTitle: {
206
+ args: ["pointer", "cstring"],
207
+ returns: "void",
208
+ },
209
+ SDL_LoadWAV_RW: {
210
+ args: ["cstring", "pointer", "pointer", "pointer"],
211
+ returns: "pointer",
212
+ },
204
213
  });
205
214
 
206
215
  /** @internal */
207
216
  export const libimage = dlopen(libImageImport.default, {
208
- IMG_Init: {
209
- args: ["int"],
210
- returns: "int",
211
- },
212
- IMG_Load: {
213
- args: ["cstring"],
214
- returns: "pointer",
215
- },
217
+ IMG_Init: {
218
+ args: ["int"],
219
+ returns: "int",
220
+ },
221
+ IMG_Load: {
222
+ args: ["cstring"],
223
+ returns: "pointer",
224
+ },
216
225
  });
217
226
 
218
227
  /** @internal */
219
228
  export const libttf = dlopen(libTTFImport.default, {
220
- TTF_Init: {
221
- returns: "int",
222
- },
223
- TTF_OpenFont: {
224
- args: ["cstring", "int"],
225
- returns: "pointer",
226
- },
227
- TTF_RenderText_Solid: {
228
- args: ["pointer", "cstring", "u32"],
229
- returns: "pointer",
230
- },
231
- TTF_SizeText: {
232
- args: ["pointer", "cstring", "pointer", "pointer"],
233
- returns: "int",
234
- },
235
- TTF_Quit: {
236
- returns: "void",
237
- },
238
- TTF_CloseFont: {
239
- args: ["pointer"],
240
- returns: "void",
241
- },
229
+ TTF_Init: {
230
+ returns: "int",
231
+ },
232
+ TTF_OpenFont: {
233
+ args: ["cstring", "int"],
234
+ returns: "pointer",
235
+ },
236
+ TTF_RenderText_Solid: {
237
+ args: ["pointer", "cstring", "u32"],
238
+ returns: "pointer",
239
+ },
240
+ TTF_SizeText: {
241
+ args: ["pointer", "cstring", "pointer", "pointer"],
242
+ returns: "int",
243
+ },
244
+ TTF_Quit: {
245
+ returns: "void",
246
+ },
247
+ TTF_CloseFont: {
248
+ args: ["pointer"],
249
+ returns: "void",
250
+ },
251
+ });
252
+
253
+ /** @internal */
254
+ export const libmixer = dlopen(libMixerImport.default, {
255
+ Mix_OpenAudio: {
256
+ args: ["int", "pointer", "int", "int"],
257
+ returns: "int",
258
+ },
259
+ Mix_LoadMUS: {
260
+ args: ["cstring"],
261
+ returns: "pointer",
262
+ },
263
+ Mix_LoadWAV: {
264
+ args: ["cstring"],
265
+ returns: "pointer",
266
+ },
267
+ Mix_FreeMusic: {
268
+ args: ["pointer"],
269
+ returns: "void",
270
+ },
271
+ Mix_FreeChunk: {
272
+ args: ["pointer"],
273
+ returns: "void",
274
+ },
275
+ Mix_PlayChannel: {
276
+ args: ["int", "pointer", "int"],
277
+ returns: "int",
278
+ },
242
279
  });
@@ -0,0 +1,41 @@
1
+ import { ptr } from "bun:ffi";
2
+ import { libmixer } from "../ffi";
3
+
4
+ class Audio {
5
+ static #instance: Audio;
6
+
7
+ private constructor() {}
8
+
9
+ public static get instance() {
10
+ if (!Audio.#instance) Audio.#instance = new Audio();
11
+
12
+ return Audio.#instance;
13
+ }
14
+
15
+ public loadAudio(path: string): AudioSource {
16
+ return new AudioSource(path);
17
+ }
18
+ }
19
+
20
+ class AudioSource {
21
+ public readonly pointer;
22
+
23
+ constructor(path: string) {
24
+ const audiomix = libmixer.symbols.Mix_LoadWAV(
25
+ Buffer.from(path + "\x00")
26
+ );
27
+
28
+ if (audiomix == null) throw `Failed to open wav file`;
29
+ this.pointer = audiomix;
30
+ }
31
+
32
+ public play() {
33
+ libmixer.symbols.Mix_PlayChannel(-1, this.pointer, 0);
34
+ }
35
+
36
+ public destroy() {
37
+ libmixer.symbols.Mix_FreeChunk(this.pointer);
38
+ }
39
+ }
40
+
41
+ export default Audio;