slifer 0.2.1 → 0.2.3
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.
- package/README.md +8 -6
- package/index.ts +8 -1
- package/libs/libSDL2.so +0 -0
- package/libs/libSDL2_image.so +0 -0
- package/libs/libSDL2_mixer.dll +0 -0
- package/libs/libSDL2_mixer.dylib +0 -0
- package/libs/libSDL2_mixer.so +0 -0
- package/package.json +1 -1
- package/src/engine/image.ts +28 -0
- package/src/engine/rectangle.ts +16 -4
- package/src/engine/renderer.ts +40 -0
- package/src/engine/time.ts +79 -0
- package/src/engine/vector.ts +1 -3
- package/src/engine/window.ts +79 -0
- package/src/engine.ts +20 -13
- package/src/ffi.ts +268 -220
- package/src/modules/audio.ts +41 -0
- package/src/modules/graphics.ts +57 -142
- package/src/modules/keyboard.ts +102 -57
- package/src/modules/mouse.ts +22 -14
- package/src/slifer.test.ts +38 -3
- package/src/slifer.ts +42 -108
package/src/slifer.ts
CHANGED
@@ -1,68 +1,35 @@
|
|
1
|
-
import {
|
2
|
-
import { initLibraries } from "./engine";
|
3
|
-
import Global from "./global";
|
4
|
-
import { ptr } from "bun:ffi";
|
1
|
+
import { libsdl } from "./ffi";
|
5
2
|
import Graphics from "./modules/graphics";
|
6
3
|
import Keyboard from "./modules/keyboard";
|
7
4
|
import Mouse from "./modules/mouse";
|
5
|
+
import Audio from "./modules/audio";
|
6
|
+
import Window from "./engine/window";
|
7
|
+
import Renderer from "./engine/renderer";
|
8
|
+
import { Vector2 } from "./engine/vector";
|
9
|
+
import { Timer } from "./engine/time";
|
10
|
+
import { ptr, toArrayBuffer } from "bun:ffi";
|
11
|
+
import { initLibraries } from "./engine";
|
8
12
|
import { version } from "../package.json";
|
9
13
|
|
10
|
-
/** @internal */
|
11
|
-
class Window {
|
12
|
-
public width: number;
|
13
|
-
public height: number;
|
14
|
-
public title: string;
|
15
|
-
|
16
|
-
constructor(title: string, width: number, height: number) {
|
17
|
-
this.width = width;
|
18
|
-
this.height = height;
|
19
|
-
this.title = title;
|
20
|
-
}
|
21
|
-
|
22
|
-
setSize(width: number, height: number): void {
|
23
|
-
libsdl.symbols.SDL_SetWindowSize(Global.ptrWindow, width, height);
|
24
|
-
}
|
25
|
-
|
26
|
-
setTitle(title: string): void {
|
27
|
-
libsdl.symbols.SDL_SetWindowTitle(
|
28
|
-
Global.ptrWindow,
|
29
|
-
Buffer.from(title + "\x00")
|
30
|
-
);
|
31
|
-
}
|
32
|
-
|
33
|
-
setFullscreen(flag: boolean): void {
|
34
|
-
libsdl.symbols.SDL_SetWindowFullscreen(Global.ptrWindow, Number(flag));
|
35
|
-
}
|
36
|
-
|
37
|
-
centerWindow(): void {
|
38
|
-
libsdl.symbols.SDL_SetWindowPosition(
|
39
|
-
Global.ptrWindow,
|
40
|
-
0x2fff0000,
|
41
|
-
0x2fff0000
|
42
|
-
);
|
43
|
-
}
|
44
|
-
|
45
|
-
setPosition(x: number, y: number): void {
|
46
|
-
libsdl.symbols.SDL_SetWindowPosition(Global.ptrWindow, x, y);
|
47
|
-
}
|
48
|
-
}
|
49
|
-
|
50
14
|
/** @interal */
|
51
15
|
export class SliferClass {
|
52
|
-
private isRunning: boolean = true;
|
53
|
-
private lastFrame: number = 0;
|
54
|
-
private firstFrame: number = 0;
|
55
|
-
|
56
16
|
// Modules
|
57
|
-
Graphics =
|
58
|
-
Keyboard =
|
59
|
-
Mouse =
|
17
|
+
Graphics = Graphics.instance;
|
18
|
+
Keyboard = Keyboard.instance;
|
19
|
+
Mouse = Mouse.instance;
|
20
|
+
Audio = Audio.instance;
|
60
21
|
|
61
22
|
// Public Variables
|
62
23
|
public dt: number = 0;
|
24
|
+
public isRunning: boolean = true;
|
25
|
+
|
26
|
+
private fps = 60;
|
27
|
+
private ticksPerFrame = 1000 / this.fps;
|
28
|
+
private capTimer: Timer;
|
63
29
|
|
64
30
|
constructor() {
|
65
31
|
initLibraries();
|
32
|
+
this.capTimer = new Timer();
|
66
33
|
}
|
67
34
|
|
68
35
|
/**
|
@@ -70,51 +37,29 @@ export class SliferClass {
|
|
70
37
|
* @param width Width of window
|
71
38
|
* @param height Height of window
|
72
39
|
*/
|
73
|
-
createWindow(title: string,
|
74
|
-
//
|
75
|
-
const
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
height,
|
84
|
-
0
|
85
|
-
);
|
86
|
-
if (_win == null) throw `Window creation failed`;
|
87
|
-
Global.ptrWindow = _win;
|
88
|
-
|
89
|
-
// Creating renderer pointer
|
90
|
-
const vsyncHint = 0x00000004;
|
91
|
-
const _ren = libsdl.symbols.SDL_CreateRenderer(
|
92
|
-
Global.ptrWindow,
|
93
|
-
-1,
|
94
|
-
vsyncHint
|
95
|
-
);
|
96
|
-
if (_ren == null) throw `Renderer Creation failed`;
|
97
|
-
Global.ptrRenderer = _ren;
|
98
|
-
|
99
|
-
this.firstFrame = Number(libsdl.symbols.SDL_GetPerformanceCounter());
|
100
|
-
|
101
|
-
return new Window(title, width, height);
|
40
|
+
createWindow(title: string, size: Vector2): Window {
|
41
|
+
// Create the window
|
42
|
+
const window = Window.instance;
|
43
|
+
Window.createWindow(title, size);
|
44
|
+
|
45
|
+
// Create the renderer
|
46
|
+
Renderer.createRenderer();
|
47
|
+
|
48
|
+
// Return the window object
|
49
|
+
return window;
|
102
50
|
}
|
103
51
|
|
104
52
|
/**
|
105
53
|
* @returns if the window should close
|
106
54
|
*/
|
107
55
|
shouldClose(): boolean {
|
108
|
-
|
109
|
-
libsdl.symbols.SDL_RenderClear(Global.ptrRenderer);
|
56
|
+
this.capTimer.start();
|
110
57
|
|
111
|
-
//
|
112
|
-
|
113
|
-
this.firstFrame = Number(libsdl.symbols.SDL_GetPerformanceCounter());
|
58
|
+
// Clear the renderer
|
59
|
+
Renderer.clear();
|
114
60
|
|
115
|
-
|
116
|
-
|
117
|
-
Number(libsdl.symbols.SDL_GetPerformanceFrequency());
|
61
|
+
// Calculate delta time
|
62
|
+
// this.dt = Time.instance.calcDelta();
|
118
63
|
|
119
64
|
// Poll Events
|
120
65
|
const eventArray = new Uint16Array(32);
|
@@ -126,22 +71,6 @@ export class SliferClass {
|
|
126
71
|
case 256:
|
127
72
|
this.isRunning = false;
|
128
73
|
break;
|
129
|
-
// Keydown event
|
130
|
-
case 768:
|
131
|
-
const _dscancode = eventArray[8];
|
132
|
-
const _dkey =
|
133
|
-
libsdl.symbols.SDL_GetKeyFromScancode(_dscancode);
|
134
|
-
const _dname = libsdl.symbols.SDL_GetKeyName(_dkey);
|
135
|
-
Keyboard.setKeyDown(_dname.toString().toLowerCase());
|
136
|
-
break;
|
137
|
-
// Keyup event
|
138
|
-
case 769:
|
139
|
-
const _uscancode = eventArray[8];
|
140
|
-
const _ukey =
|
141
|
-
libsdl.symbols.SDL_GetKeyFromScancode(_uscancode);
|
142
|
-
const _uname = libsdl.symbols.SDL_GetKeyName(_ukey);
|
143
|
-
Keyboard.setKeyUp(_uname.toString().toLowerCase());
|
144
|
-
break;
|
145
74
|
// Mouse down event
|
146
75
|
case 1025:
|
147
76
|
const _dbtn = eventArray[8] - 256;
|
@@ -155,6 +84,13 @@ export class SliferClass {
|
|
155
84
|
}
|
156
85
|
}
|
157
86
|
|
87
|
+
Keyboard.getStates();
|
88
|
+
|
89
|
+
const frameTicks = this.capTimer.getTicks();
|
90
|
+
if (frameTicks < this.ticksPerFrame) {
|
91
|
+
libsdl.symbols.SDL_Delay(this.ticksPerFrame - frameTicks);
|
92
|
+
}
|
93
|
+
|
158
94
|
return !this.isRunning;
|
159
95
|
}
|
160
96
|
|
@@ -162,9 +98,8 @@ export class SliferClass {
|
|
162
98
|
* Slifers quit method
|
163
99
|
*/
|
164
100
|
quit() {
|
165
|
-
|
166
|
-
libsdl.symbols.
|
167
|
-
libsdl.symbols.SDL_DestroyWindow(Global.ptrWindow);
|
101
|
+
libsdl.symbols.SDL_DestroyRenderer(Renderer.pointer);
|
102
|
+
libsdl.symbols.SDL_DestroyWindow(Window.pointer);
|
168
103
|
libsdl.symbols.SDL_Quit();
|
169
104
|
}
|
170
105
|
|
@@ -172,4 +107,3 @@ export class SliferClass {
|
|
172
107
|
return version;
|
173
108
|
}
|
174
109
|
}
|
175
|
-
|