slifer 0.1.8 → 0.2.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.
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
- "name": "slifer",
3
- "version": "0.1.8",
4
- "description": "A game framework made for bun and typescript",
5
- "module": "index.ts",
6
- "devDependencies": {
7
- "@types/bun": "latest",
8
- "typedoc": "^0.26.7"
9
- },
10
- "peerDependencies": {
11
- "typescript": "^5.0.0"
12
- },
13
- "type": "module"
2
+ "name": "slifer",
3
+ "version": "0.2.0",
4
+ "description": "A game framework made for bun and typescript",
5
+ "module": "index.ts",
6
+ "devDependencies": {
7
+ "@types/bun": "latest",
8
+ "typedoc": "^0.26.7"
9
+ },
10
+ "peerDependencies": {
11
+ "typescript": "^5.0.0"
12
+ },
13
+ "type": "module"
14
14
  }
package/src/color.ts ADDED
@@ -0,0 +1,15 @@
1
+ class Color {
2
+ readonly r;
3
+ readonly g;
4
+ readonly b;
5
+ readonly a;
6
+
7
+ constructor(r: number, g: number, b: number, a: number) {
8
+ this.r = r;
9
+ this.g = g;
10
+ this.b = b;
11
+ this.a = a;
12
+ }
13
+ }
14
+
15
+ export default Color;
@@ -0,0 +1,25 @@
1
+ import { ptr } from "bun:ffi";
2
+ import Vector2 from "./vector";
3
+
4
+ class Rectangle {
5
+ private readonly pointer;
6
+ public position: Vector2;
7
+ public size: Vector2;
8
+
9
+ constructor(position: Vector2, size: Vector2) {
10
+ const arr = new Uint32Array(4);
11
+ arr[0] = position.x;
12
+ arr[1] = position.y;
13
+ arr[2] = size.x;
14
+ arr[3] = size.y;
15
+ this.pointer = ptr(arr);
16
+ this.position = position;
17
+ this.size = size;
18
+ }
19
+
20
+ static empty() {
21
+ return new Rectangle(new Vector2(0, 0), new Vector2(0, 0));
22
+ }
23
+ }
24
+
25
+ export default Rectangle;
@@ -0,0 +1,49 @@
1
+ class Vector2 {
2
+ public x;
3
+ public y;
4
+
5
+ constructor(x: number, y: number) {
6
+ this.x = x;
7
+ this.y = y;
8
+ }
9
+
10
+ /**
11
+ * Creates a Vector2 with the components 1,1
12
+ */
13
+ static one() {
14
+ return new Vector2(1, 1);
15
+ }
16
+
17
+ /**
18
+ * Creates a Vector2 with the components 1,0
19
+ */
20
+ static unitX() {
21
+ return new Vector2(1, 0);
22
+ }
23
+
24
+ /**
25
+ * Creates a Vector2 with the components 0,1
26
+ */
27
+ static unitY() {
28
+ return new Vector2(0, 1);
29
+ }
30
+
31
+ /**
32
+ * Creates a vector2 with component 0,0
33
+ */
34
+ static zero() {
35
+ return new Vector2(0, 0);
36
+ }
37
+
38
+ /**
39
+ * Adds two vectors together
40
+ *
41
+ * @param vec1 Vector2 object
42
+ * @param vec2 Vector2 object
43
+ */
44
+ static add(vec1: Vector2, vec2: Vector2) {
45
+ return new Vector2(vec1.x + vec2.x, vec1.y + vec2.y);
46
+ }
47
+ }
48
+
49
+ export default Vector2;
package/src/engine.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { libsdl, libimage, libttf } from "./ffi";
2
+ import Global from "./global";
3
+
4
+ //@ts-expect-error
5
+ const fontFile = await import("./Jost-Bold.ttf");
6
+
7
+ export function initLibraries(): void {
8
+ const baseInit = libsdl.symbols.SDL_Init(0x00000020);
9
+ if (baseInit != 0) throw `SDL failed to initialize`;
10
+
11
+ const imageInit = libimage.symbols.IMG_Init(3);
12
+ if (imageInit != 3) throw `SDL Image failed to initialize`;
13
+
14
+ const ttfInit = libttf.symbols.TTF_Init();
15
+ if (ttfInit != 0) throw `SDL TTF failed to initialize`;
16
+
17
+ const tempFont = libttf.symbols.TTF_OpenFont(
18
+ Buffer.from(fontFile.default),
19
+ 24
20
+ );
21
+
22
+ if (tempFont == null) throw `Default font loading failed`;
23
+ Global.ptrFont = tempFont;
24
+ }
@@ -1,8 +1,9 @@
1
1
  import { libimage, libsdl, libttf } from "../ffi";
2
2
  import Global from "../global";
3
- import { type Pointer, ptr } from 'bun:ffi';
4
- import path from 'path';
5
- import type { Rectangle, Vector2 } from "../slifer";
3
+ import { type Pointer, ptr } from "bun:ffi";
4
+ import Rectangle from "../engine/rectangle";
5
+ import Color from "../color";
6
+ import Vector2 from "../engine/vector";
6
7
 
7
8
  /** @internal */
8
9
  class Graphics {
@@ -15,8 +16,8 @@ class Graphics {
15
16
 
16
17
  /**
17
18
  * Create a new color. All values are from 0-255
18
- *
19
- * @param r red value
19
+ *
20
+ * @param r red value
20
21
  * @param g green value
21
22
  * @param b blue value
22
23
  * @param a alpha value
@@ -28,37 +29,47 @@ class Graphics {
28
29
  }
29
30
 
30
31
  /**
31
- * Sets the background of the window to a color of choice.
32
- *
32
+ * Sets the background of the window to a color of choice.
33
+ *
33
34
  * Make sure this is put in the top level of the while loop
34
35
  * as it will clear the renderer.
35
- *
36
+ *
36
37
  * @param color Color object. Make using Slifer.Graphics.makeColor
37
38
  */
38
39
  setBackground(color: Color) {
39
- libsdl.symbols.SDL_SetRenderDrawColor(Global.ptrRenderer, color.r, color.g, color.b, color.a);
40
+ libsdl.symbols.SDL_SetRenderDrawColor(
41
+ Global.ptrRenderer,
42
+ color.r,
43
+ color.g,
44
+ color.b,
45
+ color.a
46
+ );
40
47
  libsdl.symbols.SDL_RenderClear(Global.ptrRenderer);
41
48
  }
42
49
 
43
50
  /**
44
51
  * Loads a new image
45
- *
52
+ *
46
53
  * @param path string path to image
47
54
  * @returns Image ready to draw
48
55
  */
49
- loadImage(path: string) : Image {
56
+ loadImage(path: string): Image {
50
57
  const _path = Buffer.from(path + "\x00");
51
- //@ts-expect-error Buffer and CString differences
52
58
  const surface = libimage.symbols.IMG_Load(_path);
53
59
  if (surface == null) throw `Image failed to load`;
54
- const texture = libsdl.symbols.SDL_CreateTextureFromSurface(Global.ptrRenderer, surface);
60
+ const texture = libsdl.symbols.SDL_CreateTextureFromSurface(
61
+ Global.ptrRenderer,
62
+ surface
63
+ );
55
64
  if (texture == null) throw `Image failed to be created`;
56
65
  return new Image(texture);
57
66
  }
58
67
 
68
+ draw(image: Image, position: Vector2) {}
69
+
59
70
  /**
60
71
  * Method to draw the image to the screen
61
- *
72
+ *
62
73
  * @param image Image object to draw. Made using Slifer.Graphics.loadImage
63
74
  * @param x x position to draw image
64
75
  * @param y y position to draw image
@@ -67,14 +78,28 @@ class Graphics {
67
78
  * @param ys (optional) scale of y axis
68
79
  * @param flip (optional) horizontal flip
69
80
  */
70
- draw(image: Image, position: Vector2, clipRectangle?: Rectangle, rotation?: number, xs?: number, ys?: number, flip?: true) {
81
+ drawEx(
82
+ image: Image,
83
+ position: Vector2,
84
+ clipRectangle?: Rectangle,
85
+ rotation?: number,
86
+ xs?: number,
87
+ ys?: number,
88
+ flip?: true
89
+ ) {
71
90
  const _dest = new Uint32Array(4);
72
91
  const wArr = new Uint32Array(1);
73
92
  const hArr = new Uint32Array(1);
74
93
  let srcRect: null | Uint32Array = null;
75
-
94
+
76
95
  if (clipRectangle == undefined) {
77
- libsdl.symbols.SDL_QueryTexture((image as any).pointer, null, null, ptr(wArr), ptr(hArr));
96
+ libsdl.symbols.SDL_QueryTexture(
97
+ (image as any).pointer,
98
+ null,
99
+ null,
100
+ ptr(wArr),
101
+ ptr(hArr)
102
+ );
78
103
  } else {
79
104
  srcRect = new Uint32Array(4);
80
105
  srcRect[0] = clipRectangle.x;
@@ -85,7 +110,6 @@ class Graphics {
85
110
  hArr[0] = clipRectangle.height;
86
111
  }
87
112
 
88
-
89
113
  _dest[0] = position.x;
90
114
  _dest[1] = position.y;
91
115
  _dest[2] = wArr[0] * (xs ? xs : 1);
@@ -93,36 +117,53 @@ class Graphics {
93
117
  const _center = new Uint32Array(2);
94
118
  _center[0] = _dest[2] / 2;
95
119
  _center[1] = _dest[3] / 2;
96
- libsdl.symbols.SDL_RenderCopyEx(Global.ptrRenderer, (image as any).pointer, srcRect, ptr(_dest), rotation ? rotation : 0, ptr(_center), flip ? Number(flip) : 0);
120
+ libsdl.symbols.SDL_RenderCopyEx(
121
+ Global.ptrRenderer,
122
+ (image as any).pointer,
123
+ srcRect,
124
+ ptr(_dest),
125
+ rotation ? rotation : 0,
126
+ ptr(_center),
127
+ flip ? Number(flip) : 0
128
+ );
97
129
  }
98
130
 
99
131
  /**
100
132
  * Method to draw text to the screen
101
- *
133
+ *
102
134
  * @param text the string of text to print
103
135
  * @param x x position
104
136
  * @param y y position
105
137
  * @param color color of text. Made using Slifer.Graphics.makeColor.
106
138
  */
107
139
  print(text: string, x: number, y: number, color: Color) {
108
-
109
140
  // Create text buffer
110
- const textBuffer = Buffer.from(text+"\x00");
141
+ const textBuffer = Buffer.from(text + "\x00");
111
142
 
112
- // Get width and height of text
143
+ // Get width and height of text
113
144
  const wArr = new Uint32Array(1);
114
145
  const hArr = new Uint32Array(1);
115
- //@ts-expect-error Buffer and CString differences
116
- libttf.symbols.TTF_SizeText(Global.ptrFont,textBuffer , ptr(wArr), ptr(hArr));
146
+ libttf.symbols.TTF_SizeText(
147
+ Global.ptrFont,
148
+ textBuffer,
149
+ ptr(wArr),
150
+ ptr(hArr)
151
+ );
117
152
 
118
153
  // Define color
119
- const _col = ((color.r << 0) + (color.g << 8) + (color.b << 16));
154
+ const _col = (color.r << 0) + (color.g << 8) + (color.b << 16);
120
155
 
121
156
  // Create texture
122
- //@ts-expect-error Buffer and CString differences
123
- const surface = libttf.symbols.TTF_RenderText_Solid(Global.ptrFont, textBuffer, _col);
157
+ const surface = libttf.symbols.TTF_RenderText_Solid(
158
+ Global.ptrFont,
159
+ textBuffer,
160
+ _col
161
+ );
124
162
  if (surface == null) throw `Surface creation failed on print`;
125
- const texture = libsdl.symbols.SDL_CreateTextureFromSurface(Global.ptrRenderer, surface);
163
+ const texture = libsdl.symbols.SDL_CreateTextureFromSurface(
164
+ Global.ptrRenderer,
165
+ surface
166
+ );
126
167
  if (texture == null) throw `Texture creation failed on print`;
127
168
 
128
169
  // Create destination
@@ -133,45 +174,37 @@ class Graphics {
133
174
  destArr[3] = hArr[0];
134
175
 
135
176
  // Draw text
136
- libsdl.symbols.SDL_RenderCopy(Global.ptrRenderer, texture, null, ptr(destArr));
177
+ libsdl.symbols.SDL_RenderCopy(
178
+ Global.ptrRenderer,
179
+ texture,
180
+ null,
181
+ ptr(destArr)
182
+ );
137
183
  }
138
184
 
139
185
  /**
140
186
  * Sets the font to a ttf file in your project
141
- *
187
+ *
142
188
  * @param path relative path to font
143
189
  * @param pt size of text
144
190
  */
145
191
  setFont(path: string, pt: number) {
146
- //@ts-expect-error Buffer and CString differences
147
- const tempFont = libttf.symbols.TTF_OpenFont(Buffer.from(path+"\x00"), pt);
192
+ const tempFont = libttf.symbols.TTF_OpenFont(
193
+ Buffer.from(path + "\x00"),
194
+ pt
195
+ );
148
196
  if (tempFont == null) throw `Font loading failed`;
149
197
  Global.ptrFont = tempFont;
150
198
  }
151
199
  }
152
200
 
153
201
  class Image {
154
-
155
202
  private pointer;
156
-
203
+
157
204
  constructor(texture: Pointer) {
158
205
  this.pointer = texture;
159
206
  }
160
207
  }
161
208
 
162
- class Color {
163
- readonly r;
164
- readonly g;
165
- readonly b;
166
- readonly a;
167
-
168
- constructor(r: number, g: number, b: number, a: number) {
169
- this.r = r;
170
- this.g = g;
171
- this.b = b;
172
- this.a = a;
173
- }
174
- }
175
-
176
209
  /** @internal */
177
- export default Graphics;
210
+ export default Graphics;
@@ -0,0 +1,8 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { initLibraries } from "./engine";
3
+
4
+ describe("Initializing ", () => {
5
+ it("Should initialize without error ", () => {
6
+ expect(() => initLibraries()).not.toThrow(Error);
7
+ });
8
+ });
package/src/slifer.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { libimage, libsdl, libttf } from "./ffi";
2
+ import { initLibraries } from "./engine";
2
3
  import Global from "./global";
3
4
  import { ptr } from "bun:ffi";
4
5
  import Graphics from "./modules/graphics";
@@ -6,229 +7,169 @@ import Keyboard from "./modules/keyboard";
6
7
  import Mouse from "./modules/mouse";
7
8
  import { version } from "../package.json";
8
9
 
9
- //@ts-expect-error
10
- const fontFile = await import("./Jost-Bold.ttf");
11
-
12
10
  /** @internal */
13
11
  class Window {
14
- public width: number;
15
- public height: number;
16
- public title: string;
17
-
18
- constructor(title: string, width: number, height: number) {
19
- this.width = width;
20
- this.height = height;
21
- this.title = title;
22
- }
23
-
24
- setSize(width: number, height: number): void {
25
- libsdl.symbols.SDL_SetWindowSize(Global.ptrWindow, width, height);
26
- }
27
-
28
- setTitle(title: string): void {
29
- libsdl.symbols.SDL_SetWindowTitle(
30
- Global.ptrWindow,
31
- //@ts-expect-error Buffer and CString differences
32
- Buffer.from(title + "\x00")
33
- );
34
- }
35
-
36
- setFullscreen(flag: boolean): void {
37
- libsdl.symbols.SDL_SetWindowFullscreen(Global.ptrWindow, Number(flag));
38
- }
39
-
40
- centerWindow(): void {
41
- libsdl.symbols.SDL_SetWindowPosition(
42
- Global.ptrWindow,
43
- 0x2fff0000,
44
- 0x2fff0000
45
- );
46
- }
47
-
48
- setPosition(x: number, y: number): void {
49
- libsdl.symbols.SDL_SetWindowPosition(Global.ptrWindow, x, y);
50
- }
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
+ }
51
48
  }
52
49
 
53
50
  /** @interal */
54
51
  export class SliferClass {
55
- private isRunning: boolean = true;
56
- private lastFrame: number = 0;
57
- private firstFrame: number = 0;
58
-
59
- // Modules
60
- Graphics = new Graphics();
61
- Keyboard = new Keyboard();
62
- Mouse = new Mouse();
63
-
64
- // Public Variables
65
- public dt: number = 0;
66
-
67
- constructor() {
68
- const baseInit = libsdl.symbols.SDL_Init(0x00000020);
69
- if (baseInit != 0) throw `SDL failed to initialize`;
70
-
71
- const imageInit = libimage.symbols.IMG_Init(3);
72
- if (imageInit != 3) throw `SDL Image failed to initialize`;
73
-
74
- const ttfInit = libttf.symbols.TTF_Init();
75
- if (ttfInit != 0) throw `SDL TTF failed to initialize`;
76
-
77
- /*
78
- if (process.platform == "darwin") {
79
- const tempFont = libttf.symbols.TTF_OpenFont(
80
- Buffer.from("/System/Library/Fonts/SFNSMono.ttf"),
81
- 12,
82
- );
83
- if (tempFont == null) throw `Default font loading failed`;
84
- Global.ptrFont = tempFont;
85
- } else if (process.platform == "linux") {
86
- const tempFont = libttf.symbols.TTF_OpenFont(
87
- Buffer.from("/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf"),
88
- 12,
89
- );
90
- if (tempFont == null) throw `Default font loading failed`;
91
- Global.ptrFont = tempFont;
52
+ private isRunning: boolean = true;
53
+ private lastFrame: number = 0;
54
+ private firstFrame: number = 0;
55
+
56
+ // Modules
57
+ Graphics = new Graphics();
58
+ Keyboard = new Keyboard();
59
+ Mouse = new Mouse();
60
+
61
+ // Public Variables
62
+ public dt: number = 0;
63
+
64
+ constructor() {
65
+ initLibraries();
92
66
  }
93
- */
94
-
95
- const tempFont = libttf.symbols.TTF_OpenFont(
96
- //@ts-expect-error Buffer and CString differences
97
- Buffer.from(fontFile.default),
98
- 24
99
- );
100
- if (tempFont == null) throw `Default font loading failed`;
101
- Global.ptrFont = tempFont;
102
- }
103
-
104
- /**
105
- * @param title Title of window
106
- * @param width Width of window
107
- * @param height Height of window
108
- */
109
- createWindow(title: string, width: number, height: number): Window {
110
- // Creating cstring buffer from string
111
- const _title = Buffer.from(title + "\x00");
112
-
113
- // Creating window pointer
114
- const _win = libsdl.symbols.SDL_CreateWindow(
115
- //@ts-expect-error Buffer and CString differences
116
- _title,
117
- 0x2fff0000,
118
- 0x2fff0000,
119
- width,
120
- height,
121
- 0
122
- );
123
- if (_win == null) throw `Window creation failed`;
124
- Global.ptrWindow = _win;
125
-
126
- // Creating renderer pointer
127
- const _ren = libsdl.symbols.SDL_CreateRenderer(Global.ptrWindow, -1, 0);
128
- if (_ren == null) throw `Renderer Creation failed`;
129
- Global.ptrRenderer = _ren;
130
-
131
- this.firstFrame = Number(libsdl.symbols.SDL_GetPerformanceCounter());
132
-
133
- return new Window(title, width, height);
134
- }
135
-
136
- /**
137
- * @returns if the window should close
138
- */
139
- shouldClose(): boolean {
140
- // Clear the renderer
141
- libsdl.symbols.SDL_RenderClear(Global.ptrRenderer);
142
-
143
- // Setup deltatime
144
- this.lastFrame = this.firstFrame;
145
- this.firstFrame = Number(libsdl.symbols.SDL_GetPerformanceCounter());
146
-
147
- this.dt = ((this.firstFrame - this.lastFrame) * 1000 / Number(libsdl.symbols.SDL_GetPerformanceFrequency()));
148
-
149
-
150
- // Poll Events
151
- const eventArray = new Uint16Array(32);
152
- const isEvent = libsdl.symbols.SDL_PollEvent(ptr(eventArray));
153
-
154
- if (isEvent) {
155
- switch (eventArray[0]) {
156
- // Quit event
157
- case 256:
158
- this.isRunning = false;
159
- break;
160
- // Keydown event
161
- case 768:
162
- const _dscancode = eventArray[8];
163
- const _dkey = libsdl.symbols.SDL_GetKeyFromScancode(_dscancode);
164
- const _dname = libsdl.symbols.SDL_GetKeyName(_dkey);
165
- Keyboard.setKeyDown(_dname.toString().toLowerCase());
166
- break;
167
- // Keyup event
168
- case 769:
169
- const _uscancode = eventArray[8];
170
- const _ukey = libsdl.symbols.SDL_GetKeyFromScancode(_uscancode);
171
- const _uname = libsdl.symbols.SDL_GetKeyName(_ukey);
172
- Keyboard.setKeyUp(_uname.toString().toLowerCase());
173
- break;
174
- // Mouse down event
175
- case 1025:
176
- const _dbtn = eventArray[8] - 256;
177
- Mouse.setButtonDown(_dbtn);
178
- break;
179
- // Mouse up event
180
- case 1026:
181
- const _ubtn = eventArray[8];
182
- Mouse.setButtonUp(_ubtn);
183
- break;
184
- }
67
+
68
+ /**
69
+ * @param title Title of window
70
+ * @param width Width of window
71
+ * @param height Height of window
72
+ */
73
+ createWindow(title: string, width: number, height: number): Window {
74
+ // Creating cstring buffer from string
75
+ const _title = Buffer.from(title + "\x00");
76
+
77
+ // Creating window pointer
78
+ const _win = libsdl.symbols.SDL_CreateWindow(
79
+ _title,
80
+ 0x2fff0000,
81
+ 0x2fff0000,
82
+ width,
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);
185
102
  }
186
103
 
187
- return !this.isRunning;
188
- }
189
-
190
- /**
191
- * Slifers quit method
192
- */
193
- quit() {
194
- libttf.symbols.TTF_CloseFont(Global.ptrFont);
195
- libsdl.symbols.SDL_DestroyRenderer(Global.ptrRenderer);
196
- libsdl.symbols.SDL_DestroyWindow(Global.ptrWindow);
197
- libsdl.symbols.SDL_Quit();
198
- }
199
-
200
- getVersion() {
201
- return version;
202
- }
203
- }
104
+ /**
105
+ * @returns if the window should close
106
+ */
107
+ shouldClose(): boolean {
108
+ // Clear the renderer
109
+ libsdl.symbols.SDL_RenderClear(Global.ptrRenderer);
110
+
111
+ // Setup deltatime
112
+ this.lastFrame = this.firstFrame;
113
+ this.firstFrame = Number(libsdl.symbols.SDL_GetPerformanceCounter());
114
+
115
+ this.dt =
116
+ ((this.firstFrame - this.lastFrame) * 1000) /
117
+ Number(libsdl.symbols.SDL_GetPerformanceFrequency());
118
+
119
+ // Poll Events
120
+ const eventArray = new Uint16Array(32);
121
+ const isEvent = libsdl.symbols.SDL_PollEvent(ptr(eventArray));
122
+
123
+ if (isEvent) {
124
+ switch (eventArray[0]) {
125
+ // Quit event
126
+ case 256:
127
+ this.isRunning = false;
128
+ 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
+ // Mouse down event
146
+ case 1025:
147
+ const _dbtn = eventArray[8] - 256;
148
+ Mouse.setButtonDown(_dbtn);
149
+ break;
150
+ // Mouse up event
151
+ case 1026:
152
+ const _ubtn = eventArray[8];
153
+ Mouse.setButtonUp(_ubtn);
154
+ break;
155
+ }
156
+ }
157
+
158
+ return !this.isRunning;
159
+ }
204
160
 
205
- export class Vector2 {
206
- x;
207
- y;
161
+ /**
162
+ * Slifers quit method
163
+ */
164
+ quit() {
165
+ libttf.symbols.TTF_CloseFont(Global.ptrFont);
166
+ libsdl.symbols.SDL_DestroyRenderer(Global.ptrRenderer);
167
+ libsdl.symbols.SDL_DestroyWindow(Global.ptrWindow);
168
+ libsdl.symbols.SDL_Quit();
169
+ }
208
170
 
209
- constructor(x: number, y: number) {
210
- this.x = x;
211
- this.y = y;
212
- }
171
+ getVersion() {
172
+ return version;
173
+ }
213
174
  }
214
175
 
215
- export class Rectangle {
216
- private readonly pointer;
217
- readonly x;
218
- readonly y;
219
- readonly width;
220
- readonly height;
221
-
222
- constructor(x: number, y: number, width: number, height: number) {
223
- const arr = new Uint32Array(4);
224
- arr[0] = x;
225
- arr[1] = y;
226
- arr[2] = width;
227
- arr[3] = height;
228
- this.pointer = ptr(arr);
229
- this.x = x;
230
- this.y = y;
231
- this.width = width;
232
- this.height = height;
233
- }
234
- }