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/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
-