toaimin-indie-engine 1.0.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.
Files changed (149) hide show
  1. package/README.md +55 -0
  2. package/cli/bin.cjs +99 -0
  3. package/dist/audio/AudioBus.d.ts +30 -0
  4. package/dist/audio/AudioBus.d.ts.map +1 -0
  5. package/dist/audio/AudioMock.d.ts +112 -0
  6. package/dist/audio/AudioMock.d.ts.map +1 -0
  7. package/dist/audio/ProceduralAudio.d.ts +48 -0
  8. package/dist/audio/ProceduralAudio.d.ts.map +1 -0
  9. package/dist/audio/SoundManager.d.ts +73 -0
  10. package/dist/audio/SoundManager.d.ts.map +1 -0
  11. package/dist/audio/VoicePool.d.ts +26 -0
  12. package/dist/audio/VoicePool.d.ts.map +1 -0
  13. package/dist/audio/index.d.ts +7 -0
  14. package/dist/audio/index.d.ts.map +1 -0
  15. package/dist/audio/types.d.ts +87 -0
  16. package/dist/audio/types.d.ts.map +1 -0
  17. package/dist/core/EventEmitter.d.ts +64 -0
  18. package/dist/core/EventEmitter.d.ts.map +1 -0
  19. package/dist/core/Game.d.ts +248 -0
  20. package/dist/core/Game.d.ts.map +1 -0
  21. package/dist/core/GameLoop.d.ts +128 -0
  22. package/dist/core/GameLoop.d.ts.map +1 -0
  23. package/dist/core/Time.d.ts +73 -0
  24. package/dist/core/Time.d.ts.map +1 -0
  25. package/dist/core/index.d.ts +5 -0
  26. package/dist/core/index.d.ts.map +1 -0
  27. package/dist/entity/Component.d.ts +31 -0
  28. package/dist/entity/Component.d.ts.map +1 -0
  29. package/dist/entity/Entity.d.ts +61 -0
  30. package/dist/entity/Entity.d.ts.map +1 -0
  31. package/dist/entity/EntityManager.d.ts +46 -0
  32. package/dist/entity/EntityManager.d.ts.map +1 -0
  33. package/dist/entity/components/ColliderComponent.d.ts +47 -0
  34. package/dist/entity/components/ColliderComponent.d.ts.map +1 -0
  35. package/dist/entity/components/RigidBodyComponent.d.ts +38 -0
  36. package/dist/entity/components/RigidBodyComponent.d.ts.map +1 -0
  37. package/dist/entity/components/ScriptComponent.d.ts +32 -0
  38. package/dist/entity/components/ScriptComponent.d.ts.map +1 -0
  39. package/dist/entity/components/ShapeComponent.d.ts +50 -0
  40. package/dist/entity/components/ShapeComponent.d.ts.map +1 -0
  41. package/dist/entity/components/SpriteComponent.d.ts +31 -0
  42. package/dist/entity/components/SpriteComponent.d.ts.map +1 -0
  43. package/dist/entity/components/index.d.ts +6 -0
  44. package/dist/entity/components/index.d.ts.map +1 -0
  45. package/dist/entity/index.d.ts +5 -0
  46. package/dist/entity/index.d.ts.map +1 -0
  47. package/dist/index.cjs +4 -0
  48. package/dist/index.cjs.map +1 -0
  49. package/dist/index.d.ts +15 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +6326 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/input/ActionMap.d.ts +91 -0
  54. package/dist/input/ActionMap.d.ts.map +1 -0
  55. package/dist/input/InputManager.d.ts +102 -0
  56. package/dist/input/InputManager.d.ts.map +1 -0
  57. package/dist/input/Pointer.d.ts +115 -0
  58. package/dist/input/Pointer.d.ts.map +1 -0
  59. package/dist/input/VirtualJoystick.d.ts +79 -0
  60. package/dist/input/VirtualJoystick.d.ts.map +1 -0
  61. package/dist/input/index.d.ts +5 -0
  62. package/dist/input/index.d.ts.map +1 -0
  63. package/dist/math/Circle.d.ts +39 -0
  64. package/dist/math/Circle.d.ts.map +1 -0
  65. package/dist/math/Color.d.ts +58 -0
  66. package/dist/math/Color.d.ts.map +1 -0
  67. package/dist/math/MathUtils.d.ts +82 -0
  68. package/dist/math/MathUtils.d.ts.map +1 -0
  69. package/dist/math/Matrix2D.d.ts +97 -0
  70. package/dist/math/Matrix2D.d.ts.map +1 -0
  71. package/dist/math/Rect.d.ts +54 -0
  72. package/dist/math/Rect.d.ts.map +1 -0
  73. package/dist/math/Transform2D.d.ts +47 -0
  74. package/dist/math/Transform2D.d.ts.map +1 -0
  75. package/dist/math/Vector2.d.ts +89 -0
  76. package/dist/math/Vector2.d.ts.map +1 -0
  77. package/dist/math/index.d.ts +8 -0
  78. package/dist/math/index.d.ts.map +1 -0
  79. package/dist/physics/BoxCollider2D.d.ts +38 -0
  80. package/dist/physics/BoxCollider2D.d.ts.map +1 -0
  81. package/dist/physics/CircleCollider2D.d.ts +27 -0
  82. package/dist/physics/CircleCollider2D.d.ts.map +1 -0
  83. package/dist/physics/Collider2D.d.ts +79 -0
  84. package/dist/physics/Collider2D.d.ts.map +1 -0
  85. package/dist/physics/CollisionFSM.d.ts +84 -0
  86. package/dist/physics/CollisionFSM.d.ts.map +1 -0
  87. package/dist/physics/ContactSolver.d.ts +58 -0
  88. package/dist/physics/ContactSolver.d.ts.map +1 -0
  89. package/dist/physics/Narrowphase.d.ts +25 -0
  90. package/dist/physics/Narrowphase.d.ts.map +1 -0
  91. package/dist/physics/PhysicsWorld2D.d.ts +75 -0
  92. package/dist/physics/PhysicsWorld2D.d.ts.map +1 -0
  93. package/dist/physics/Raycast.d.ts +38 -0
  94. package/dist/physics/Raycast.d.ts.map +1 -0
  95. package/dist/physics/RigidBody2D.d.ts +118 -0
  96. package/dist/physics/RigidBody2D.d.ts.map +1 -0
  97. package/dist/physics/SpatialGrid.d.ts +78 -0
  98. package/dist/physics/SpatialGrid.d.ts.map +1 -0
  99. package/dist/physics/index.d.ts +14 -0
  100. package/dist/physics/index.d.ts.map +1 -0
  101. package/dist/rendering/Animation.d.ts +62 -0
  102. package/dist/rendering/Animation.d.ts.map +1 -0
  103. package/dist/rendering/AssetLoader.d.ts +35 -0
  104. package/dist/rendering/AssetLoader.d.ts.map +1 -0
  105. package/dist/rendering/Camera2D.d.ts +109 -0
  106. package/dist/rendering/Camera2D.d.ts.map +1 -0
  107. package/dist/rendering/CanvasContext.d.ts +80 -0
  108. package/dist/rendering/CanvasContext.d.ts.map +1 -0
  109. package/dist/rendering/CanvasMock.d.ts +163 -0
  110. package/dist/rendering/CanvasMock.d.ts.map +1 -0
  111. package/dist/rendering/ParticleSystem.d.ts +103 -0
  112. package/dist/rendering/ParticleSystem.d.ts.map +1 -0
  113. package/dist/rendering/Renderer.d.ts +98 -0
  114. package/dist/rendering/Renderer.d.ts.map +1 -0
  115. package/dist/rendering/Shapes.d.ts +24 -0
  116. package/dist/rendering/Shapes.d.ts.map +1 -0
  117. package/dist/rendering/Sprite.d.ts +74 -0
  118. package/dist/rendering/Sprite.d.ts.map +1 -0
  119. package/dist/rendering/SpriteSheet.d.ts +22 -0
  120. package/dist/rendering/SpriteSheet.d.ts.map +1 -0
  121. package/dist/rendering/index.d.ts +11 -0
  122. package/dist/rendering/index.d.ts.map +1 -0
  123. package/dist/scene/Blackboard.d.ts +81 -0
  124. package/dist/scene/Blackboard.d.ts.map +1 -0
  125. package/dist/scene/Scene.d.ts +160 -0
  126. package/dist/scene/Scene.d.ts.map +1 -0
  127. package/dist/scene/SceneManager.d.ts +142 -0
  128. package/dist/scene/SceneManager.d.ts.map +1 -0
  129. package/dist/scene/SceneTransition.d.ts +118 -0
  130. package/dist/scene/SceneTransition.d.ts.map +1 -0
  131. package/dist/scene/index.d.ts +5 -0
  132. package/dist/scene/index.d.ts.map +1 -0
  133. package/dist/ui/UIAnchor.d.ts +31 -0
  134. package/dist/ui/UIAnchor.d.ts.map +1 -0
  135. package/dist/ui/UIButton.d.ts +48 -0
  136. package/dist/ui/UIButton.d.ts.map +1 -0
  137. package/dist/ui/UIElement.d.ts +108 -0
  138. package/dist/ui/UIElement.d.ts.map +1 -0
  139. package/dist/ui/UILabel.d.ts +54 -0
  140. package/dist/ui/UILabel.d.ts.map +1 -0
  141. package/dist/ui/UIManager.d.ts +41 -0
  142. package/dist/ui/UIManager.d.ts.map +1 -0
  143. package/dist/ui/UIPanel.d.ts +36 -0
  144. package/dist/ui/UIPanel.d.ts.map +1 -0
  145. package/dist/ui/UIProgressBar.d.ts +47 -0
  146. package/dist/ui/UIProgressBar.d.ts.map +1 -0
  147. package/dist/ui/index.d.ts +8 -0
  148. package/dist/ui/index.d.ts.map +1 -0
  149. package/package.json +47 -0
@@ -0,0 +1,248 @@
1
+ import { EventEmitter } from './EventEmitter';
2
+ import { GameLoop } from './GameLoop';
3
+ import { Renderer, type ScaleMode } from '../rendering/Renderer';
4
+ import { CanvasContext } from '../rendering/CanvasContext';
5
+ import { Camera2D, type Camera2DConfig } from '../rendering/Camera2D';
6
+ import { InputManager, type InputConfig } from '../input/InputManager';
7
+ import { PhysicsWorld2D, type PhysicsWorldConfig } from '../physics/PhysicsWorld2D';
8
+ import { SoundManager } from '../audio/SoundManager';
9
+ import { SceneManager, type SceneEntry } from '../scene/SceneManager';
10
+ import { UIManager, type UIManagerConfig } from '../ui/UIManager';
11
+ import { Vector2 } from '../math/Vector2';
12
+ import { EntityManager } from '../entity/EntityManager';
13
+ import type { IScene } from '../scene/Scene';
14
+ import type { SceneTransition } from '../scene/SceneTransition';
15
+ import type { Blackboard } from '../scene/Blackboard';
16
+ import type { MockCanvasElement } from '../rendering/CanvasMock';
17
+ export interface GameCallbacks {
18
+ /** Quick prototype: custom one-time setup */
19
+ init?: (game: Game) => void | Promise<void>;
20
+ /** Quick prototype: variable logic update called each frame */
21
+ update?: (dt: number, game: Game) => void;
22
+ /** Quick prototype: fixed physics update called at constant rate */
23
+ fixedUpdate?: (fixedDt: number, game: Game) => void;
24
+ /** Quick prototype: render pass called each frame */
25
+ render?: (ctx: CanvasContext, game: Game) => void;
26
+ }
27
+ export interface GameAudioConfig {
28
+ /** Whether to automatically attempt AudioContext unlock on first user gesture (default: true) */
29
+ autoUnlock?: boolean;
30
+ }
31
+ export interface GameConfig extends GameCallbacks {
32
+ /** Canvas element, DOM element ID string, or MockCanvasElement. If omitted, auto-creates canvas or mock */
33
+ canvas?: HTMLCanvasElement | MockCanvasElement | string;
34
+ /** Virtual logical game width in pixels (default: 800) */
35
+ width?: number;
36
+ /** Virtual logical game height in pixels (default: 600) */
37
+ height?: number;
38
+ /** Canvas scaling mode ('letterbox' | 'fit' | 'stretch' | 'fill' | 'none', default: 'letterbox') */
39
+ scaleMode?: ScaleMode;
40
+ /** Whether to disable image smoothing for crisp pixel-art aesthetics (default: false) */
41
+ pixelArt?: boolean;
42
+ /** Canvas frame clear background color CSS/hex (default: '#11111b') */
43
+ backgroundColor?: string;
44
+ /** Whether to scale buffer to devicePixelRatio on Retina/HiDPI displays (default: true) */
45
+ highDPI?: boolean;
46
+ /** Maximum allowed devicePixelRatio clamp to prevent GPU fill-rate throttling (default: 2) */
47
+ maxPixelRatio?: number;
48
+ /** Explicit devicePixelRatio override for deterministic testing */
49
+ dpr?: number;
50
+ /** Target frames per second for loop timing (default: 60) */
51
+ targetFps?: number;
52
+ /** Alias for fixedDeltaTime */
53
+ fixedTimestep?: number;
54
+ /** Deterministic physics simulation timestep in seconds (default: 1 / 60 = ~0.0166667s) */
55
+ fixedDeltaTime?: number;
56
+ /** Maximum allowed frame delta to prevent spiral of death during heavy lags (default: 0.25s) */
57
+ maxFrameDelta?: number;
58
+ /** Maximum fixed update substeps allowed in a single frame tick (default: 15) */
59
+ maxSubSteps?: number;
60
+ /** Automatically pause simulation when browser tab is hidden (default: true) */
61
+ autoPauseOnHide?: boolean;
62
+ /** Whether to invoke render pass while game is paused (default: false) */
63
+ renderWhenPaused?: boolean;
64
+ /** Automatically start the game loop on creation when using createGame (default: false) */
65
+ autoStart?: boolean;
66
+ /** Whether to apply camera view matrix transform to world/scene rendering (default: true) */
67
+ applyCamera?: boolean;
68
+ /** Global gravity vector shortcut for physics simulation */
69
+ gravity?: Vector2;
70
+ /** Debug visual flags */
71
+ debug?: boolean;
72
+ /** Camera2D initial configuration */
73
+ camera?: Partial<Camera2DConfig>;
74
+ /** PhysicsWorld2D configuration (gravity, iterations, spatialCellSize) */
75
+ physics?: PhysicsWorldConfig;
76
+ /** InputManager configuration (preventDefaultKeys, preventContextMenu) */
77
+ input?: InputConfig;
78
+ /** SoundManager configuration */
79
+ audio?: GameAudioConfig;
80
+ /** UIManager configuration (absorbInput, etc.) */
81
+ ui?: Partial<UIManagerConfig>;
82
+ /** Initial scenes to register on startup */
83
+ scenes?: Array<{
84
+ name: string;
85
+ scene: SceneEntry<Game>;
86
+ }> | Record<string, SceneEntry<Game>>;
87
+ /** Name of the scene to activate immediately on start() */
88
+ initialScene?: string;
89
+ /** Alias for initialScene */
90
+ startScene?: string;
91
+ }
92
+ /**
93
+ * Events emitted by the Game orchestrator.
94
+ */
95
+ export interface GameEvents {
96
+ 'init': {
97
+ game: Game;
98
+ };
99
+ 'start': {
100
+ game: Game;
101
+ };
102
+ 'pause': {
103
+ game: Game;
104
+ };
105
+ 'resume': {
106
+ game: Game;
107
+ };
108
+ 'stop': {
109
+ game: Game;
110
+ };
111
+ 'update': {
112
+ deltaTime: number;
113
+ game: Game;
114
+ };
115
+ 'fixedUpdate': {
116
+ fixedDeltaTime: number;
117
+ game: Game;
118
+ };
119
+ 'render': {
120
+ alpha: number;
121
+ ctx: CanvasContext;
122
+ game: Game;
123
+ };
124
+ 'resize': {
125
+ width: number;
126
+ height: number;
127
+ game: Game;
128
+ };
129
+ 'destroy': {
130
+ game: Game;
131
+ };
132
+ }
133
+ /**
134
+ * Top-Level Game Engine Orchestrator coordinating all subsystems:
135
+ * Renderer, Camera2D, InputManager, PhysicsWorld2D, SoundManager, SceneManager, UIManager, GameLoop, and EntityManager.
136
+ */
137
+ export declare class Game extends EventEmitter<GameEvents> {
138
+ readonly config: Readonly<GameConfig>;
139
+ readonly renderer: Renderer;
140
+ readonly canvas: HTMLCanvasElement | MockCanvasElement | any;
141
+ readonly ctx: CanvasContext;
142
+ readonly camera: Camera2D;
143
+ readonly input: InputManager;
144
+ readonly physics: PhysicsWorld2D;
145
+ readonly audio: SoundManager;
146
+ readonly scenes: SceneManager<Game>;
147
+ readonly ui: UIManager;
148
+ readonly loop: GameLoop;
149
+ readonly entities: EntityManager;
150
+ /** Convenience alias for sound manager */
151
+ get sound(): SoundManager;
152
+ /** Convenience alias for cross-scene shared Blackboard */
153
+ get blackboard(): Blackboard;
154
+ readonly width: number;
155
+ readonly height: number;
156
+ applyCamera: boolean;
157
+ private _isInitialized;
158
+ private _initialSceneName;
159
+ private _boundResizeListener;
160
+ private readonly _scratchPointerWorld;
161
+ constructor(config?: GameConfig);
162
+ isRunning(): boolean;
163
+ isPaused(): boolean;
164
+ get isInitialized(): boolean;
165
+ get currentScene(): IScene<Game> | null;
166
+ get deltaTime(): number;
167
+ get rawDeltaTime(): number;
168
+ get fixedDeltaTime(): number;
169
+ get time(): number;
170
+ get fps(): number;
171
+ get exactFps(): number;
172
+ get frameCount(): number;
173
+ get timeScale(): number;
174
+ set timeScale(scale: number);
175
+ /**
176
+ * Initializes the game, executing custom init callback and activating the initial scene.
177
+ */
178
+ init(): Promise<this>;
179
+ /**
180
+ * Starts the game loop. Automatically invokes init() if not already initialized.
181
+ */
182
+ start(): this;
183
+ /**
184
+ * Pauses the game loop (logic updates and physics simulation halted).
185
+ */
186
+ pause(): this;
187
+ /**
188
+ * Resumes the game loop.
189
+ */
190
+ resume(): this;
191
+ /**
192
+ * Stops the game loop.
193
+ */
194
+ stop(): this;
195
+ /**
196
+ * Manually steps the simulation by dt seconds.
197
+ * Essential for deterministic unit testing and frame-by-frame debuggers.
198
+ */
199
+ step(dt?: number): void;
200
+ /**
201
+ * Teardown all subsystems, unregister DOM listeners, clear audio and scene graphs.
202
+ */
203
+ destroy(): void;
204
+ /**
205
+ * 1. Variable Logic Update Step
206
+ */
207
+ private _onUpdate;
208
+ /**
209
+ * 2. Deterministic Fixed Timestep Physics Simulation
210
+ */
211
+ private _onFixedUpdate;
212
+ /**
213
+ * 3. Render Pass
214
+ */
215
+ private _onRender;
216
+ /**
217
+ * Unprojects current pointer position through active camera into 2D world coordinates.
218
+ */
219
+ getPointerWorld(out?: Vector2): Vector2;
220
+ /**
221
+ * Transforms screen / viewport coordinates into 2D world coordinates.
222
+ */
223
+ screenToWorld(screenPos: Vector2, out?: Vector2): Vector2;
224
+ /**
225
+ * Transforms 2D world coordinates into screen / viewport coordinates.
226
+ */
227
+ worldToScreen(worldPos: Vector2, out?: Vector2): Vector2;
228
+ /**
229
+ * Registers a scene into the SceneManager.
230
+ */
231
+ addScene(name: string, scene: SceneEntry<Game>): this;
232
+ /**
233
+ * Switches active scene with optional transition and payload.
234
+ */
235
+ switchToScene(name: string, transition?: SceneTransition, data?: any): void;
236
+ /**
237
+ * Resizes renderer, camera, and UI when window or container dimensions change.
238
+ */
239
+ resize(containerWidth?: number, containerHeight?: number): void;
240
+ private _initResizeListener;
241
+ }
242
+ /**
243
+ * Factory function to instantiate, configure, and optionally start a new Game.
244
+ * @param config Comprehensive game configuration options.
245
+ * @returns Fully initialized Game orchestrator instance.
246
+ */
247
+ export declare function createGame(config?: GameConfig): Game;
248
+ //# sourceMappingURL=Game.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Game.d.ts","sourceRoot":"","sources":["../../src/core/Game.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Callbacks executed by the GameLoop on each frame.
3
+ */
4
+ export interface GameLoopCallbacks {
5
+ /**
6
+ * Variable logic update called once per render frame.
7
+ * Use for input polling, entity logic, animations, and sound triggers.
8
+ * @param deltaTime Scaled or raw delta time in seconds.
9
+ */
10
+ update: (deltaTime: number) => void;
11
+ /**
12
+ * Deterministic fixed timestep update called 0, 1, or multiple times per frame.
13
+ * Use for physics simulation, velocity integration, and collision response.
14
+ * @param fixedDeltaTime Constant timestep in seconds (default: 1/60s).
15
+ */
16
+ fixedUpdate: (fixedDeltaTime: number) => void;
17
+ /**
18
+ * Render pass called once per display frame.
19
+ * @param alpha Interpolation factor in [0, 1] representing remaining accumulator fraction.
20
+ */
21
+ render: (alpha: number) => void;
22
+ }
23
+ /**
24
+ * Configuration options for the GameLoop.
25
+ */
26
+ export interface GameLoopConfig {
27
+ /**
28
+ * Fixed physics timestep in seconds (default: 1 / 60 = 0.0166667s).
29
+ */
30
+ fixedDeltaTime?: number;
31
+ /**
32
+ * Maximum allowed frame delta in seconds to prevent the Spiral of Death (default: 0.25s).
33
+ */
34
+ maxFrameDelta?: number;
35
+ /**
36
+ * Maximum fixed updates permitted in a single frame tick (default: 15).
37
+ */
38
+ maxSubSteps?: number;
39
+ /**
40
+ * Automatically pause the game when the browser tab becomes hidden (default: true).
41
+ */
42
+ autoPauseOnHide?: boolean;
43
+ /**
44
+ * Whether to invoke the render callback when paused (default: false).
45
+ */
46
+ renderWhenPaused?: boolean;
47
+ }
48
+ /**
49
+ * Deterministic fixed-timestep game loop ("Fix Your Timestep") with spiral of death protection,
50
+ * variable render interpolation, and automatic browser visibility integration.
51
+ */
52
+ export declare class GameLoop {
53
+ readonly callbacks: GameLoopCallbacks;
54
+ readonly fixedDeltaTime: number;
55
+ readonly maxFrameDelta: number;
56
+ readonly maxSubSteps: number;
57
+ readonly autoPauseOnHide: boolean;
58
+ readonly renderWhenPaused: boolean;
59
+ private _accumulator;
60
+ private _lastTime;
61
+ private _rafId;
62
+ private _running;
63
+ private _paused;
64
+ private _pausedByVisibility;
65
+ private _wasManuallyPaused;
66
+ private _boundVisibilityListener;
67
+ constructor(callbacks: GameLoopCallbacks, config?: GameLoopConfig);
68
+ /**
69
+ * Check whether the loop is currently running.
70
+ */
71
+ isRunning(): boolean;
72
+ /**
73
+ * Check whether the loop is currently paused.
74
+ */
75
+ isPaused(): boolean;
76
+ /**
77
+ * Get the current accumulator remainder in seconds.
78
+ */
79
+ getAccumulator(): number;
80
+ /**
81
+ * Start the game loop.
82
+ */
83
+ start(): void;
84
+ /**
85
+ * Stop and cancel the game loop.
86
+ */
87
+ stop(): void;
88
+ /**
89
+ * Pause game updates and physics simulation.
90
+ */
91
+ pause(): void;
92
+ /**
93
+ * Resume game updates and physics simulation.
94
+ * Resets time reference and accumulator to prevent large delta leaps.
95
+ */
96
+ resume(): void;
97
+ /**
98
+ * Manually execute a single frame tick.
99
+ * Highly useful for deterministic unit testing and frame-by-frame debuggers.
100
+ * @param dt Elapsed frame time in seconds (defaults to fixedDeltaTime).
101
+ */
102
+ step(dt?: number): void;
103
+ /**
104
+ * Teardown and clean up all listeners (e.g. document visibilitychange).
105
+ */
106
+ destroy(): void;
107
+ /**
108
+ * Internal RAF tick execution.
109
+ */
110
+ private _tick;
111
+ /**
112
+ * Safe high-resolution timestamp in milliseconds.
113
+ */
114
+ private _now;
115
+ /**
116
+ * Safe requestAnimationFrame with fallback for headless testing.
117
+ */
118
+ private _requestFrame;
119
+ /**
120
+ * Safe cancelAnimationFrame with fallback for headless testing.
121
+ */
122
+ private _cancelFrame;
123
+ /**
124
+ * Attach visibilitychange listener for browser tab backgrounding.
125
+ */
126
+ private _initVisibilityListener;
127
+ }
128
+ //# sourceMappingURL=GameLoop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GameLoop.d.ts","sourceRoot":"","sources":["../../src/core/GameLoop.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC;;;;OAIG;IACH,WAAW,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9C;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,SAAgB,SAAS,EAAE,iBAAiB,CAAC;IAC7C,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,eAAe,EAAE,OAAO,CAAC;IACzC,SAAgB,gBAAgB,EAAE,OAAO,CAAC;IAE1C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,wBAAwB,CAA6B;gBAEjD,SAAS,EAAE,iBAAiB,EAAE,MAAM,GAAE,cAAmB;IAmBrE;;OAEG;IACI,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACI,QAAQ,IAAI,OAAO;IAI1B;;OAEG;IACI,cAAc,IAAI,MAAM;IAI/B;;OAEG;IACI,KAAK,IAAI,IAAI;IAapB;;OAEG;IACI,IAAI,IAAI,IAAI;IAUnB;;OAEG;IACI,KAAK,IAAI,IAAI;IAKpB;;;OAGG;IACI,MAAM,IAAI,IAAI;IAUrB;;;;OAIG;IACI,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAgC9B;;OAEG;IACI,OAAO,IAAI,IAAI;IAQtB;;OAEG;IACH,OAAO,CAAC,KAAK,CA6CX;IAEF;;OAEG;IACH,OAAO,CAAC,IAAI;IAOZ;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAyBhC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Global engine time management and frame rate measurement.
3
+ * Provides scaled, unscaled delta times, game running time, and zero-allocation rolling FPS average.
4
+ */
5
+ export declare class Time {
6
+ /**
7
+ * Scaled delta time for the current frame in seconds (rawDeltaTime * timeScale).
8
+ * Use this for game logic, movement, and animations.
9
+ */
10
+ static deltaTime: number;
11
+ /**
12
+ * Real, unscaled delta time for the current frame in seconds.
13
+ * Use this for UI animations, debug metrics, and menus unaffected by slow-motion.
14
+ */
15
+ static rawDeltaTime: number;
16
+ /**
17
+ * Fixed simulation timestep in seconds (default: 1 / 60 = ~0.0166667s).
18
+ * Matches the interval passed to fixedUpdate().
19
+ */
20
+ static fixedDeltaTime: number;
21
+ /**
22
+ * Total scaled game time elapsed in seconds since engine start.
23
+ */
24
+ static time: number;
25
+ /**
26
+ * Total unscaled real time elapsed in seconds since engine start.
27
+ */
28
+ static unscaledTime: number;
29
+ /**
30
+ * Total number of update frames executed since engine start.
31
+ */
32
+ static frameCount: number;
33
+ /**
34
+ * Global time scale multiplier.
35
+ * 1.0 = normal speed, 0.5 = slow motion, 2.0 = fast forward, 0.0 = pause game logic.
36
+ */
37
+ static timeScale: number;
38
+ /**
39
+ * Rolling average Frames Per Second (FPS) rounded to the nearest integer.
40
+ */
41
+ static fps: number;
42
+ /**
43
+ * Precise rolling average Frames Per Second (FPS) as floating point.
44
+ */
45
+ static exactFps: number;
46
+ private static readonly SAMPLE_SIZE;
47
+ private static readonly _samples;
48
+ private static _sampleIndex;
49
+ private static _sampleCount;
50
+ private static _sampleSum;
51
+ /**
52
+ * Update engine time properties for a new frame.
53
+ * Called automatically by GameLoop at the beginning of each tick.
54
+ * @param rawDelta Elapsed frame time in seconds.
55
+ */
56
+ static update(rawDelta: number): void;
57
+ /**
58
+ * Set the fixed simulation timestep.
59
+ * @param fixedDelta Step duration in seconds (must be > 0).
60
+ */
61
+ static setFixedDeltaTime(fixedDelta: number): void;
62
+ /**
63
+ * Set the global time scale.
64
+ * @param scale Multiplier (clamped to >= 0).
65
+ */
66
+ static setTimeScale(scale: number): void;
67
+ /**
68
+ * Reset all time values and rolling FPS buffers to defaults.
69
+ * Useful for unit test isolation and complete game restarts.
70
+ */
71
+ static reset(): void;
72
+ }
73
+ //# sourceMappingURL=Time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Time.d.ts","sourceRoot":"","sources":["../../src/core/Time.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,IAAI;IACf;;;OAGG;IACH,OAAc,SAAS,EAAE,MAAM,CAAK;IAEpC;;;OAGG;IACH,OAAc,YAAY,EAAE,MAAM,CAAK;IAEvC;;;OAGG;IACH,OAAc,cAAc,EAAE,MAAM,CAAU;IAE9C;;OAEG;IACH,OAAc,IAAI,EAAE,MAAM,CAAK;IAE/B;;OAEG;IACH,OAAc,YAAY,EAAE,MAAM,CAAK;IAEvC;;OAEG;IACH,OAAc,UAAU,EAAE,MAAM,CAAK;IAErC;;;OAGG;IACH,OAAc,SAAS,EAAE,MAAM,CAAO;IAEtC;;OAEG;IACH,OAAc,GAAG,EAAE,MAAM,CAAM;IAE/B;;OAEG;IACH,OAAc,QAAQ,EAAE,MAAM,CAAQ;IAGtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAc;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IACpF,OAAO,CAAC,MAAM,CAAC,YAAY,CAAa;IACxC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAa;IACxC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAa;IAEtC;;;;OAIG;WACW,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA+B5C;;;OAGG;WACW,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAOzD;;;OAGG;WACW,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/C;;;OAGG;WACW,KAAK,IAAI,IAAI;CAgB5B"}
@@ -0,0 +1,5 @@
1
+ export * from './EventEmitter';
2
+ export * from './Time';
3
+ export * from './GameLoop';
4
+ export * from './Game';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { Entity } from './Entity';
2
+ import type { Transform2D } from '../math/Transform2D';
3
+ import type { Renderer } from '../rendering/Renderer';
4
+ export type Constructor<T = any> = new (...args: any[]) => T;
5
+ export type AbstractConstructor<T = any> = abstract new (...args: any[]) => T;
6
+ export type ComponentType<T extends Component = Component> = Constructor<T> | AbstractConstructor<T>;
7
+ /**
8
+ * Abstract Base Class for all modular Entity components.
9
+ */
10
+ export declare abstract class Component {
11
+ entity: Entity;
12
+ enabled: boolean;
13
+ _hasStarted: boolean;
14
+ _isDestroyed: boolean;
15
+ get transform(): Transform2D;
16
+ get name(): string;
17
+ get tag(): string;
18
+ get layer(): number;
19
+ getComponent<T extends Component>(type: ComponentType<T>): T | null;
20
+ getComponents<T extends Component>(type: ComponentType<T>): T[];
21
+ hasComponent<T extends Component>(type: ComponentType<T>): boolean;
22
+ destroy(): void;
23
+ onAttach(): void;
24
+ onDetach(): void;
25
+ onStart(): void;
26
+ onUpdate(dt: number): void;
27
+ onFixedUpdate(dt: number): void;
28
+ onRender(renderer: Renderer): void;
29
+ onDestroy(): void;
30
+ }
31
+ //# sourceMappingURL=Component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Component.d.ts","sourceRoot":"","sources":["../../src/entity/Component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC7D,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9E,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAErG;;GAEG;AACH,8BAAsB,SAAS;IACtB,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAQ;IACxB,WAAW,EAAE,OAAO,CAAS;IAC7B,YAAY,EAAE,OAAO,CAAS;IAMrC,IAAW,SAAS,IAAI,WAAW,CAElC;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAEM,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAInE,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;IAI/D,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO;IAIlE,OAAO,IAAI,IAAI;IAUf,QAAQ,IAAI,IAAI;IAChB,QAAQ,IAAI,IAAI;IAChB,OAAO,IAAI,IAAI;IACf,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAC1B,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAClC,SAAS,IAAI,IAAI;CACzB"}
@@ -0,0 +1,61 @@
1
+ import { EventEmitter } from '../core/EventEmitter';
2
+ import { Transform2D } from '../math/Transform2D';
3
+ import { type Renderer } from '../rendering/Renderer';
4
+ import type { Component, ComponentType } from './Component';
5
+ import type { EntityManager } from './EntityManager';
6
+ import type { Collider2D } from '../physics/Collider2D';
7
+ import type { ContactManifold } from '../physics/ContactSolver';
8
+ export interface EntityEvents {
9
+ 'destroy': {
10
+ entity: Entity;
11
+ };
12
+ 'component:add': {
13
+ entity: Entity;
14
+ component: Component;
15
+ };
16
+ 'component:remove': {
17
+ entity: Entity;
18
+ component: Component;
19
+ };
20
+ }
21
+ /**
22
+ * Primary Game Object container in the 2D Scene Graph.
23
+ */
24
+ export declare class Entity extends EventEmitter<EntityEvents> {
25
+ readonly id: number;
26
+ name: string;
27
+ active: boolean;
28
+ tag: string;
29
+ layer: number;
30
+ zIndex: number;
31
+ readonly transform: Transform2D;
32
+ parent: Entity | null;
33
+ readonly children: Entity[];
34
+ entityManager: EntityManager | null;
35
+ protected _components: Component[];
36
+ _hasStarted: boolean;
37
+ _isDestroyed: boolean;
38
+ constructor(name?: string);
39
+ get isDestroyed(): boolean;
40
+ get activeInHierarchy(): boolean;
41
+ addChild(child: Entity): this;
42
+ removeChild(child: Entity): this;
43
+ setParent(parent: Entity | null): this;
44
+ addComponent<T extends Component>(component: T): T;
45
+ getComponent<T extends Component>(type: ComponentType<T>): T | null;
46
+ getComponents<T extends Component>(type: ComponentType<T>): T[];
47
+ hasComponent<T extends Component>(type: ComponentType<T>): boolean;
48
+ removeComponent<T extends Component>(componentOrType: T | ComponentType<T>): boolean;
49
+ onCollisionEnter(other: Collider2D, manifold: ContactManifold): void;
50
+ onCollisionStay(other: Collider2D, manifold: ContactManifold): void;
51
+ onCollisionExit(other: Collider2D): void;
52
+ onTriggerEnter(other: Collider2D): void;
53
+ onTriggerStay(other: Collider2D): void;
54
+ onTriggerExit(other: Collider2D): void;
55
+ start(): void;
56
+ update(dt: number): void;
57
+ fixedUpdate(dt: number): void;
58
+ render(renderer: Renderer): void;
59
+ destroy(): void;
60
+ }
61
+ //# sourceMappingURL=Entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../src/entity/Entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { Entity } from './Entity';
2
+ import { Component, type ComponentType } from './Component';
3
+ import type { PhysicsWorld2D } from '../../src/physics/PhysicsWorld2D';
4
+ import type { Renderer } from '../../src/rendering/Renderer';
5
+ import type { Camera2D } from '../../src/rendering/Camera2D';
6
+ /**
7
+ * Master Entity Manager handling collection lifecycle, fast queries,
8
+ * deferred garbage collection, and physics integration.
9
+ */
10
+ export declare class EntityManager {
11
+ physicsWorld: PhysicsWorld2D | null;
12
+ camera: Camera2D | null;
13
+ private _entities;
14
+ private _entitiesById;
15
+ private _entitiesByName;
16
+ private _entitiesByTag;
17
+ private _entitiesByLayer;
18
+ private _pendingAdd;
19
+ private _pendingDestroy;
20
+ private _isIterating;
21
+ constructor(physicsWorld?: PhysicsWorld2D | null);
22
+ get count(): number;
23
+ createEntity(name?: string): Entity;
24
+ add(entity: Entity): Entity;
25
+ private _registerEntity;
26
+ remove(entity: Entity): boolean;
27
+ private _unregisterEntity;
28
+ clear(): void;
29
+ getById(id: number): Entity | undefined;
30
+ getByName(name: string): Entity | undefined;
31
+ getByTag(tag: string): Entity[];
32
+ getByLayer(layer: number): Entity[];
33
+ queryByComponent<T extends Component>(type: ComponentType<T>): Entity[];
34
+ queryByComponents(types: ComponentType[]): Entity[];
35
+ get rootEntities(): Entity[];
36
+ _onComponentAdded(entity: Entity, component: Component): void;
37
+ _onComponentRemoved(entity: Entity, component: Component): void;
38
+ markForDestruction(entity: Entity): void;
39
+ private _flushPendingAdd;
40
+ private _flushPendingDestroy;
41
+ start(): void;
42
+ update(dt: number): void;
43
+ fixedUpdate(dt: number): void;
44
+ render(renderer: Renderer): void;
45
+ }
46
+ //# sourceMappingURL=EntityManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityManager.d.ts","sourceRoot":"","sources":["../../src/entity/EntityManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;;GAGG;AACH,qBAAa,aAAa;IACjB,YAAY,EAAE,cAAc,GAAG,IAAI,CAAQ;IAC3C,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAEtC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,gBAAgB,CAAuC;IAE/D,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,GAAE,cAAc,GAAG,IAAW;IAItD,IAAW,KAAK,IAAI,MAAM,CAEzB;IAMM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAKnC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAclC,OAAO,CAAC,eAAe;IAyChB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IA2BtC,OAAO,CAAC,iBAAiB;IAoClB,KAAK,IAAI,IAAI;IAiBb,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAU/B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAUnC,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE;IAWvE,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE;IAoB1D,IAAW,YAAY,IAAI,MAAM,EAAE,CAElC;IAMM,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAU7D,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAU/D,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/C,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,oBAAoB;IAQrB,KAAK,IAAI,IAAI;IAUb,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAoBxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAoB7B,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CASxC"}