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/src/slifer.ts CHANGED
@@ -1,68 +1,35 @@
1
- import { libimage, libsdl, libttf } from "./ffi";
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 = new Graphics();
58
- Keyboard = new Keyboard();
59
- Mouse = new 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, 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);
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
- // Clear the renderer
109
- libsdl.symbols.SDL_RenderClear(Global.ptrRenderer);
56
+ this.capTimer.start();
110
57
 
111
- // Setup deltatime
112
- this.lastFrame = this.firstFrame;
113
- this.firstFrame = Number(libsdl.symbols.SDL_GetPerformanceCounter());
58
+ // Clear the renderer
59
+ Renderer.clear();
114
60
 
115
- this.dt =
116
- ((this.firstFrame - this.lastFrame) * 1000) /
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
- libttf.symbols.TTF_CloseFont(Global.ptrFont);
166
- libsdl.symbols.SDL_DestroyRenderer(Global.ptrRenderer);
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
-