slifer 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
- }