slifer 0.2.1 → 0.2.3

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,288 @@ 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
+ //@ts-expect-error
16
+ libMixerImport = await import("../libs/libSDL2_mixer.dll");
15
17
  } 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");
18
+ //@ts-expect-error
19
+ libSDLImport = await import("../libs/libSDL2.dylib");
20
+ //@ts-expect-error
21
+ libImageImport = await import("../libs/libSDL2_image.dylib");
22
+ //@ts-expect-error
23
+ libTTFImport = await import("../libs/libSDL2_ttf.dylib");
24
+ //@ts-expect-error
25
+ libMixerImport = await import("../libs/libSDL2_mixer.dylib");
22
26
  } 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");
27
+ //@ts-expect-error
28
+ libSDLImport = await import("../libs/libSDL2.so");
29
+ //@ts-expect-error
30
+ libImageImport = await import("../libs/libSDL2_image.so");
31
+ //@ts-expect-error
32
+ libTTFImport = await import("../libs/libSDL2_ttf.so");
33
+ //@ts-expect-error
34
+ libMixerImport = await import("../libs/libSDL2_mixer.so");
29
35
  }
30
36
 
31
37
  /** @internal */
32
38
  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
- }
39
+ SDL_Init: {
40
+ args: [FFIType.int],
41
+ returns: FFIType.int,
42
+ },
43
+ SDL_GetRevision: {
44
+ returns: "cstring",
45
+ },
46
+ SDL_CreateWindow: {
47
+ args: ["cstring", "int", "int", "int", "int", "u32"],
48
+ returns: "pointer",
49
+ },
50
+ SDL_CreateRenderer: {
51
+ args: ["pointer", "int", "u32"],
52
+ returns: "pointer",
53
+ },
54
+ SDL_GetDesktopDisplayMode: {
55
+ args: ["int", "pointer"],
56
+ returns: "int",
57
+ },
58
+ SDL_GetDisplayOrientation: {
59
+ args: ["int"],
60
+ returns: "int",
61
+ },
62
+ SDL_SetWindowFullscreen: {
63
+ args: ["pointer", "u32"],
64
+ returns: "int",
65
+ },
66
+ SDL_PollEvent: {
67
+ args: ["pointer"],
68
+ returns: "int",
69
+ },
70
+ SDL_RenderClear: {
71
+ args: ["pointer"],
72
+ returns: "int",
73
+ },
74
+ SDL_RenderCopy: {
75
+ args: ["pointer", "pointer", "pointer", "pointer"],
76
+ returns: "int",
77
+ },
78
+ SDL_RenderPresent: {
79
+ args: ["pointer"],
80
+ returns: "void",
81
+ },
82
+ SDL_CreateTextureFromSurface: {
83
+ args: ["pointer", "pointer"],
84
+ returns: "pointer",
85
+ },
86
+ SDL_DestroyRenderer: {
87
+ args: ["pointer"],
88
+ returns: "void",
89
+ },
90
+ SDL_DestroyWindow: {
91
+ args: ["pointer"],
92
+ returns: "void",
93
+ },
94
+ SDL_Quit: {
95
+ returns: "void",
96
+ },
97
+ SDL_GetKeyName: {
98
+ args: ["int"],
99
+ returns: "cstring",
100
+ },
101
+ SDL_GetKeyFromScancode: {
102
+ args: ["int"],
103
+ returns: "int",
104
+ },
105
+ SDL_GetPerformanceCounter: {
106
+ returns: "u64",
107
+ },
108
+ SDL_GetPerformanceFrequency: {
109
+ returns: "u64",
110
+ },
111
+ SDL_QueryTexture: {
112
+ args: ["pointer", "pointer", "pointer", "pointer", "pointer"],
113
+ returns: "int",
114
+ },
115
+ SDL_GetMouseState: {
116
+ args: ["pointer", "pointer"],
117
+ returns: "u32",
118
+ },
119
+ SDL_CreateColorCursor: {
120
+ args: ["pointer", "int", "int"],
121
+ returns: "pointer",
122
+ },
123
+ SDL_SetCursor: {
124
+ args: ["pointer"],
125
+ returns: "void",
126
+ },
127
+ SDL_SetRenderDrawColor: {
128
+ args: ["pointer", "int", "int", "int", "int"],
129
+ returns: "void",
130
+ },
131
+ SDL_RenderFillRect: {
132
+ args: ["pointer", "pointer"],
133
+ returns: "bool",
134
+ },
135
+ SDL_GetWindowPosition: {
136
+ args: ["pointer", "pointer", "pointer"],
137
+ returns: "void",
138
+ },
139
+ SDL_SetWindowPosition: {
140
+ args: ["pointer", "int", "int"],
141
+ returns: "void",
142
+ },
143
+ SDL_SetWindowHitTest: {
144
+ args: ["pointer", FFIType.function, "pointer"],
145
+ returns: "int",
146
+ },
147
+ SDL_GetWindowSize: {
148
+ args: ["pointer", "pointer", "pointer"],
149
+ returns: "void",
150
+ },
151
+ SDL_CreateSystemCursor: {
152
+ args: ["int"],
153
+ returns: "pointer",
154
+ },
155
+ SDL_GetError: {
156
+ returns: "cstring",
157
+ },
158
+ SDL_SetHint: {
159
+ args: ["cstring", "cstring"],
160
+ returns: "bool",
161
+ },
162
+ SDL_MinimizeWindow: {
163
+ args: ["pointer"],
164
+ returns: "void",
165
+ },
166
+ SDL_MaximizeWindow: {
167
+ args: ["pointer"],
168
+ returns: "void",
169
+ },
170
+ SDL_GetShapedWindowMode: {
171
+ args: ["pointer", "pointer"],
172
+ returns: "int",
173
+ },
174
+ SDL_CreateShapedWindow: {
175
+ args: ["cstring", "int", "int", "int", "int", "u32"],
176
+ returns: "pointer",
177
+ },
178
+ SDL_SetWindowShape: {
179
+ args: ["pointer", "pointer", "pointer"],
180
+ returns: "int",
181
+ },
182
+ SDL_SetWindowIcon: {
183
+ args: ["pointer", "pointer"],
184
+ returns: "void",
185
+ },
186
+ SDL_RaiseWindow: {
187
+ args: ["pointer"],
188
+ returns: "void",
189
+ },
190
+ SDL_RenderCopyEx: {
191
+ args: [
192
+ "pointer",
193
+ "pointer",
194
+ "pointer",
195
+ "pointer",
196
+ "double",
197
+ "pointer",
198
+ "int",
199
+ ],
200
+ returns: "int",
201
+ },
202
+ SDL_SetWindowSize: {
203
+ args: ["pointer", "int", "int"],
204
+ returns: "void",
205
+ },
206
+ SDL_SetWindowTitle: {
207
+ args: ["pointer", "cstring"],
208
+ returns: "void",
209
+ },
210
+ SDL_GetTicks: {
211
+ returns: "uint32_t",
212
+ },
213
+ SDL_Delay: {
214
+ args: ["uint32_t"],
215
+ },
216
+ SDL_GetKeyboardState: {
217
+ args: ["pointer"],
218
+ returns: "pointer",
219
+ },
220
+ SDL_GetScancodeFromName: {
221
+ args: ["cstring"],
222
+ returns: "int",
223
+ },
204
224
  });
205
225
 
206
226
  /** @internal */
207
227
  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
- },
228
+ IMG_Init: {
229
+ args: ["int"],
230
+ returns: "int",
231
+ },
232
+ IMG_Load: {
233
+ args: ["cstring"],
234
+ returns: "pointer",
235
+ },
216
236
  });
217
237
 
218
238
  /** @internal */
219
239
  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
- },
240
+ TTF_Init: {
241
+ returns: "int",
242
+ },
243
+ TTF_OpenFont: {
244
+ args: ["cstring", "int"],
245
+ returns: "pointer",
246
+ },
247
+ TTF_RenderText_Solid: {
248
+ args: ["pointer", "cstring", "u32"],
249
+ returns: "pointer",
250
+ },
251
+ TTF_SizeText: {
252
+ args: ["pointer", "cstring", "pointer", "pointer"],
253
+ returns: "int",
254
+ },
255
+ TTF_Quit: {
256
+ returns: "void",
257
+ },
258
+ TTF_CloseFont: {
259
+ args: ["pointer"],
260
+ returns: "void",
261
+ },
262
+ });
263
+
264
+ /** @internal */
265
+ export const libmixer = dlopen(libMixerImport.default, {
266
+ Mix_OpenAudio: {
267
+ args: ["int", "pointer", "int", "int"],
268
+ returns: "int",
269
+ },
270
+ Mix_LoadMUS: {
271
+ args: ["cstring"],
272
+ returns: "pointer",
273
+ },
274
+ Mix_LoadWAV: {
275
+ args: ["cstring"],
276
+ returns: "pointer",
277
+ },
278
+ Mix_FreeMusic: {
279
+ args: ["pointer"],
280
+ returns: "void",
281
+ },
282
+ Mix_FreeChunk: {
283
+ args: ["pointer"],
284
+ returns: "void",
285
+ },
286
+ Mix_PlayChannel: {
287
+ args: ["int", "pointer", "int"],
288
+ returns: "int",
289
+ },
242
290
  });
@@ -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
+ export 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;