@dryanovski/gamefoo 0.2.1 → 0.2.5

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 (84) hide show
  1. package/dist/core/animate.js +147 -0
  2. package/dist/core/asset.js +74 -0
  3. package/dist/core/behaviour.js +88 -0
  4. package/dist/core/behaviours/collidable.js +186 -0
  5. package/dist/core/behaviours/control.js +75 -0
  6. package/dist/core/behaviours/healtkit.js +153 -0
  7. package/dist/core/behaviours/sprite_render.js +193 -0
  8. package/dist/core/camera.js +134 -0
  9. package/dist/core/engine.d.ts +1 -1
  10. package/dist/core/engine.d.ts.map +1 -1
  11. package/dist/core/engine.js +527 -0
  12. package/dist/core/fonts/font_bitmap.js +205 -0
  13. package/dist/core/fonts/font_bitmap_prebuild.js +137 -0
  14. package/dist/core/fonts/internal/font_3x5.js +169 -0
  15. package/dist/core/fonts/internal/font_4x6.js +171 -0
  16. package/dist/core/fonts/internal/font_5x5.js +129 -0
  17. package/dist/core/fonts/internal/font_6x8.js +171 -0
  18. package/dist/core/fonts/internal/font_8x13.js +171 -0
  19. package/dist/core/fonts/internal/font_8x8.js +171 -0
  20. package/dist/core/game_object_register.js +134 -0
  21. package/dist/core/input.js +170 -0
  22. package/dist/core/sprite.js +222 -0
  23. package/dist/core/utils/perlin_noise.js +183 -0
  24. package/dist/core/world.js +304 -0
  25. package/dist/debug/monitor.js +47 -0
  26. package/dist/decorators/index.js +1 -0
  27. package/dist/decorators/log.js +42 -0
  28. package/dist/entities/dynamic_entity.js +99 -0
  29. package/dist/entities/entity.js +283 -0
  30. package/dist/entities/player.js +93 -0
  31. package/dist/entities/text.js +62 -0
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +47 -29
  35. package/dist/subsystems/camera_system.d.ts +2 -2
  36. package/dist/subsystems/camera_system.d.ts.map +1 -1
  37. package/dist/subsystems/camera_system.js +41 -0
  38. package/dist/subsystems/collision_system.js +17 -0
  39. package/dist/subsystems/monitor_system.js +20 -0
  40. package/dist/subsystems/object_system.d.ts +1 -1
  41. package/dist/subsystems/object_system.d.ts.map +1 -1
  42. package/dist/subsystems/object_system.js +29 -0
  43. package/dist/subsystems/types.d.ts +1 -1
  44. package/dist/subsystems/types.d.ts.map +1 -1
  45. package/dist/subsystems/types.js +0 -0
  46. package/dist/types.js +10 -0
  47. package/package.json +17 -6
  48. package/src/core/animate.ts +159 -0
  49. package/src/core/asset.ts +76 -0
  50. package/src/core/behaviour.ts +145 -0
  51. package/src/core/behaviours/collidable.ts +296 -0
  52. package/src/core/behaviours/control.ts +80 -0
  53. package/src/core/behaviours/healtkit.ts +166 -0
  54. package/src/core/behaviours/sprite_render.ts +216 -0
  55. package/src/core/camera.ts +145 -0
  56. package/src/core/engine.ts +607 -0
  57. package/src/core/fonts/font_bitmap.ts +232 -0
  58. package/src/core/fonts/font_bitmap_prebuild.ts +141 -0
  59. package/src/core/fonts/internal/font_3x5.ts +178 -0
  60. package/src/core/fonts/internal/font_4x6.ts +180 -0
  61. package/src/core/fonts/internal/font_5x5.ts +137 -0
  62. package/src/core/fonts/internal/font_6x8.ts +180 -0
  63. package/src/core/fonts/internal/font_8x13.ts +180 -0
  64. package/src/core/fonts/internal/font_8x8.ts +180 -0
  65. package/src/core/game_object_register.ts +146 -0
  66. package/src/core/input.ts +182 -0
  67. package/src/core/sprite.ts +339 -0
  68. package/src/core/utils/perlin_noise.ts +196 -0
  69. package/src/core/world.ts +331 -0
  70. package/src/debug/monitor.ts +60 -0
  71. package/src/decorators/index.ts +1 -0
  72. package/src/decorators/log.ts +45 -0
  73. package/src/entities/dynamic_entity.ts +106 -0
  74. package/src/entities/entity.ts +322 -0
  75. package/src/entities/player.ts +99 -0
  76. package/src/entities/text.ts +72 -0
  77. package/src/index.ts +51 -0
  78. package/src/subsystems/camera_system.ts +52 -0
  79. package/src/subsystems/collision_system.ts +21 -0
  80. package/src/subsystems/monitor_system.ts +26 -0
  81. package/src/subsystems/object_system.ts +37 -0
  82. package/src/subsystems/types.ts +46 -0
  83. package/src/types.ts +178 -0
  84. package/dist/index.js.map +0 -9
@@ -0,0 +1,153 @@
1
+ import { Behaviour } from "../behaviour";
2
+ /**
3
+ * Health-tracking behaviour for a {@link Entity}.
4
+ *
5
+ * `HealthKit` manages a current and maximum HP value, provides damage
6
+ * and healing methods, and exposes queries for health percentage and
7
+ * death state.
8
+ *
9
+ * @category Behaviours
10
+ * @since 0.1.0
11
+ *
12
+ * @example Attaching to a player
13
+ * ```ts
14
+ * import { HealthKit, Player } from "gamefoo";
15
+ *
16
+ * const player = new Player("hero", 400, 300, 50, 50);
17
+ * player.attachBehaviour(new HealthKit(player, 100));
18
+ *
19
+ * player.healthkit?.takeDamage(25);
20
+ * console.log(player.healthkit?.getHealth()); // 75
21
+ * console.log(player.healthkit?.getHealthPercent()); // 0.75
22
+ * ```
23
+ *
24
+ * @example Custom max HP
25
+ * ```ts
26
+ * const hk = new HealthKit(entity, 50, 200);
27
+ * // starts at 50 HP, max is 200
28
+ * hk.heal(999);
29
+ * console.log(hk.getHealth()); // 200 (clamped to max)
30
+ * ```
31
+ *
32
+ * @see {@link Behaviour} — abstract base class
33
+ * @see {@link Player} — has a convenience getter for this behaviour
34
+ */
35
+ export class HealthKit extends Behaviour {
36
+ /** @inheritDoc */
37
+ type = "healthkit";
38
+ /** Current health points. */
39
+ health;
40
+ /** Maximum health points (healing cap). */
41
+ maxHP;
42
+ /**
43
+ * Creates a new health behaviour.
44
+ *
45
+ * @param owner - The entity this behaviour is attached to.
46
+ * @param health - Starting health value.
47
+ * @param maxHP - Maximum health cap. If omitted, defaults to the
48
+ * initial `health` value.
49
+ */
50
+ constructor(owner, health, maxHP) {
51
+ super(owner);
52
+ this.health = health;
53
+ this.maxHP = maxHP || health;
54
+ }
55
+ /**
56
+ * No-op — health does not change passively each frame.
57
+ *
58
+ * @param _deltaTime - Unused.
59
+ */
60
+ update(_deltaTime) { }
61
+ /**
62
+ * Reduces health by the given amount, clamping at zero.
63
+ *
64
+ * @param amount - Damage to apply (positive number).
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * healthkit.takeDamage(30);
69
+ * ```
70
+ */
71
+ takeDamage(amount) {
72
+ this.health = Math.max(0, this.health - amount);
73
+ }
74
+ /**
75
+ * Increases health by the given amount, clamping at
76
+ * {@link HealthKit.maxHP}.
77
+ *
78
+ * @param amount - Health to restore (positive number).
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * healthkit.heal(50);
83
+ * ```
84
+ */
85
+ heal(amount) {
86
+ this.health = Math.min(this.maxHP, this.health + amount);
87
+ }
88
+ /**
89
+ * Returns the current health value.
90
+ *
91
+ * @returns Current HP.
92
+ */
93
+ getHealth() {
94
+ return this.health;
95
+ }
96
+ /**
97
+ * Returns the maximum health cap.
98
+ *
99
+ * @returns Maximum HP.
100
+ */
101
+ getMaxHealth() {
102
+ return this.maxHP;
103
+ }
104
+ /**
105
+ * Updates the maximum health cap.
106
+ *
107
+ * If the current health exceeds the new cap it is clamped down.
108
+ *
109
+ * @param value - The new maximum HP.
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * healthkit.setMaxHealth(150);
114
+ * ```
115
+ */
116
+ setMaxHealth(value) {
117
+ this.maxHP = value;
118
+ if (this.health > this.maxHP) {
119
+ this.health = this.maxHP;
120
+ }
121
+ }
122
+ /**
123
+ * Whether the entity is dead (health is zero or below).
124
+ *
125
+ * @returns `true` if `health <= 0`.
126
+ *
127
+ * @example
128
+ * ```ts
129
+ * if (healthkit.isDead()) {
130
+ * entity.destroy();
131
+ * }
132
+ * ```
133
+ */
134
+ isDead() {
135
+ return this.health <= 0;
136
+ }
137
+ /**
138
+ * Returns health as a normalised ratio in the range `[0, 1]`.
139
+ *
140
+ * Useful for rendering health bars.
141
+ *
142
+ * @returns `health / maxHP`, or `0` if `maxHP` is zero.
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * const barWidth = 100 * healthkit.getHealthPercent();
147
+ * ctx.fillRect(x, y, barWidth, 8);
148
+ * ```
149
+ */
150
+ getHealthPercent() {
151
+ return this.maxHP > 0 ? this.health / this.maxHP : 0;
152
+ }
153
+ }
@@ -0,0 +1,193 @@
1
+ import { Behaviour } from "../behaviour";
2
+ /**
3
+ * Sprite animation renderer that can be attached to any {@link Entity}.
4
+ *
5
+ * `SpriteRender` plays named animations defined in a {@link Sprite}
6
+ * sheet, advancing frames based on each animation's `duration` and
7
+ * `loop` settings. It supports horizontal flipping for left/right
8
+ * facing and an optional pixel offset for fine-tuning draw position.
9
+ *
10
+ * @category Behaviours
11
+ * @since 0.1.0
12
+ *
13
+ * @example Attaching and playing an animation
14
+ * ```ts
15
+ * import { Asset, Sprite, SpriteRender, Player } from "gamefoo";
16
+ *
17
+ * const image = await Asset.load("hero.png");
18
+ * const sheet = new Sprite(image, 32, 32, {
19
+ * idle: { frames: [0, 1], duration: 0.25, loop: true },
20
+ * run: { frames: [2, 3, 4, 5], duration: 0.1, loop: true },
21
+ * });
22
+ *
23
+ * const player = new Player("hero", 100, 100, 32, 32);
24
+ * const sr = new SpriteRender(player, sheet);
25
+ * player.attachBehaviour(sr);
26
+ *
27
+ * sr.play("idle");
28
+ * ```
29
+ *
30
+ * @example Flipping for directional facing
31
+ * ```ts
32
+ * if (velocity.x < 0) {
33
+ * spriteRender.setFlipX(true);
34
+ * } else if (velocity.x > 0) {
35
+ * spriteRender.setFlipX(false);
36
+ * }
37
+ * ```
38
+ *
39
+ * @see {@link Sprite} — spritesheet metadata
40
+ * @see {@link Asset} — image loader
41
+ * @see {@link Behaviour} — abstract base class
42
+ */
43
+ export default class SpriteRender extends Behaviour {
44
+ /** @inheritDoc */
45
+ type = "sprite";
46
+ /** The spritesheet this renderer draws from. */
47
+ sheet;
48
+ /**
49
+ * Name of the currently playing animation, or `null` if stopped.
50
+ *
51
+ * @defaultValue `null`
52
+ */
53
+ currentFrame = null;
54
+ /**
55
+ * Index into the current animation's `frames` array.
56
+ *
57
+ * @defaultValue `0`
58
+ */
59
+ currentFrameIndex = 0;
60
+ /**
61
+ * Seconds accumulated towards the next frame advance.
62
+ *
63
+ * @defaultValue `0`
64
+ */
65
+ elapsedTime = 0;
66
+ /**
67
+ * Whether the sprite is drawn mirrored horizontally.
68
+ *
69
+ * @defaultValue `false`
70
+ */
71
+ flipX = false;
72
+ /**
73
+ * Pixel offset applied to the draw position, relative to the
74
+ * entity's origin.
75
+ *
76
+ * @defaultValue `{ x: 0, y: 0 }`
77
+ */
78
+ offset = { x: 0, y: 0 };
79
+ /**
80
+ * Creates a sprite renderer bound to the given entity and sheet.
81
+ *
82
+ * @param owner - The entity whose position determines where the
83
+ * sprite is drawn.
84
+ * @param sheet - A {@link Sprite} containing the image and animation
85
+ * definitions.
86
+ */
87
+ constructor(owner, sheet) {
88
+ super(owner);
89
+ this.sheet = sheet;
90
+ }
91
+ /**
92
+ * Starts (or switches to) the named animation.
93
+ *
94
+ * If the requested animation is already playing, the call is a no-op
95
+ * so the current playback position is preserved.
96
+ *
97
+ * @param animation - Name matching a key in
98
+ * {@link Sprite.animations}.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * spriteRender.play("run");
103
+ * ```
104
+ */
105
+ play(animation) {
106
+ if (this.currentFrame === animation) {
107
+ return;
108
+ }
109
+ this.currentFrame = animation;
110
+ this.currentFrameIndex = 0;
111
+ this.elapsedTime = 0;
112
+ }
113
+ /**
114
+ * Stops the current animation and resets playback state.
115
+ *
116
+ * After calling `stop`, nothing is drawn until {@link SpriteRender.play}
117
+ * is called again.
118
+ */
119
+ stop() {
120
+ this.currentFrame = null;
121
+ this.currentFrameIndex = 0;
122
+ this.elapsedTime = 0;
123
+ }
124
+ /**
125
+ * Enables or disables horizontal flipping.
126
+ *
127
+ * Useful for mirroring a character sprite when facing left.
128
+ *
129
+ * @param flip - `true` to mirror horizontally, `false` for normal.
130
+ */
131
+ setFlipX(flip) {
132
+ this.flipX = flip;
133
+ }
134
+ /**
135
+ * Advances the animation clock and moves to the next frame when the
136
+ * animation's `duration` has elapsed.
137
+ *
138
+ * If the animation does not loop, it holds on the last frame.
139
+ *
140
+ * @param deltaTime - Seconds elapsed since the previous frame.
141
+ */
142
+ update(deltaTime) {
143
+ if (!this.currentFrame) {
144
+ return;
145
+ }
146
+ const animation = this.sheet.animations.get(this.currentFrame);
147
+ if (!animation) {
148
+ console.warn(`Animation "${this.currentFrame}" not found in sprite sheet.`);
149
+ return;
150
+ }
151
+ this.elapsedTime += deltaTime;
152
+ if (this.elapsedTime >= animation.duration) {
153
+ this.elapsedTime -= animation.duration;
154
+ this.currentFrameIndex++;
155
+ if (this.currentFrameIndex >= animation.frames.length) {
156
+ this.currentFrameIndex = animation.loop ? 0 : animation.frames.length - 1;
157
+ }
158
+ }
159
+ }
160
+ /**
161
+ * Draws the current animation frame to the canvas.
162
+ *
163
+ * Respects {@link SpriteRender.flipX} by temporarily mirroring the
164
+ * canvas transform, and applies {@link SpriteRender.offset} to the
165
+ * draw position.
166
+ *
167
+ * @param ctx - The canvas 2-D rendering context.
168
+ */
169
+ render(ctx) {
170
+ if (!this.currentFrame) {
171
+ return;
172
+ }
173
+ const animation = this.sheet.animations.get(this.currentFrame);
174
+ if (!animation) {
175
+ return;
176
+ }
177
+ const frameKey = animation.frames[this.currentFrameIndex];
178
+ const { x, y, width, height } = this.sheet.getFrameRect(frameKey);
179
+ const pos = this.owner.getPosition();
180
+ const drawX = pos.x + this.offset.x;
181
+ const drawY = pos.y + this.offset.y;
182
+ const size = this.owner.getSize();
183
+ if (this.flipX) {
184
+ ctx.save();
185
+ ctx.scale(-1, 1);
186
+ ctx.drawImage(this.sheet.image, x, y, width, height, -(drawX + size.width), drawY, size.width, size.height);
187
+ ctx.restore();
188
+ }
189
+ else {
190
+ ctx.drawImage(this.sheet.image, x, y, width, height, drawX, drawY, size.width, size.height);
191
+ }
192
+ }
193
+ }
@@ -0,0 +1,134 @@
1
+ /**
2
+ * A 2-D viewport camera that tracks a target position within the game
3
+ * world.
4
+ *
5
+ * The camera stores its own `(x, y)` centre and viewport dimensions.
6
+ * Each frame the {@link Engine} calls {@link Camera.follow} with the
7
+ * player's position so the viewport stays centred on the action.
8
+ *
9
+ * @category Core
10
+ * @since 0.1.0
11
+ *
12
+ * @example Basic usage inside the engine
13
+ * ```ts
14
+ * const camera = new Camera(800, 600);
15
+ * camera.follow(player.getPosition());
16
+ *
17
+ * const view = camera.getViewRect();
18
+ * // view → { x: px - 400, y: py - 300, width: 800, height: 600 }
19
+ * ```
20
+ *
21
+ * @example Manual camera control
22
+ * ```ts
23
+ * const camera = new Camera(800, 600);
24
+ * camera.moveTo({ x: 0, y: 0 }); // jump to origin
25
+ * console.log(camera.getPosition()); // { x: 0, y: 0 }
26
+ * ```
27
+ *
28
+ * @see {@link Engine} — owns and drives the camera each frame
29
+ */
30
+ export default class Camera {
31
+ /** Current X coordinate of the camera centre. */
32
+ x = 0;
33
+ /** Current Y coordinate of the camera centre. */
34
+ y = 0;
35
+ /** Viewport width in pixels. */
36
+ width;
37
+ /** Viewport height in pixels. */
38
+ height;
39
+ /**
40
+ * Creates a camera with the given viewport dimensions.
41
+ *
42
+ * @param width - Viewport width in pixels.
43
+ * @param height - Viewport height in pixels.
44
+ */
45
+ constructor(width, height) {
46
+ this.width = width;
47
+ this.height = height;
48
+ }
49
+ /**
50
+ * Centres the camera on a target position.
51
+ *
52
+ * Called by the engine every frame when a player is set.
53
+ *
54
+ * @param target - The world-space position to track.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * camera.follow(player.getPosition());
59
+ * ```
60
+ */
61
+ follow(target) {
62
+ this.x = target.x;
63
+ this.y = target.y;
64
+ }
65
+ /**
66
+ * Instantly teleports the camera to a specific position.
67
+ *
68
+ * Functionally identical to {@link Camera.follow} but communicates
69
+ * intent more clearly for one-shot repositioning (e.g. scene
70
+ * transitions).
71
+ *
72
+ * @param target - The world-space position to jump to.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * camera.moveTo({ x: 500, y: 300 });
77
+ * ```
78
+ */
79
+ moveTo(target) {
80
+ this.x = target.x;
81
+ this.y = target.y;
82
+ }
83
+ /**
84
+ * Returns the current centre position of the camera.
85
+ *
86
+ * @returns A new {@link Vector2} copy of the camera centre.
87
+ */
88
+ getPosition() {
89
+ return { x: this.x, y: this.y };
90
+ }
91
+ /**
92
+ * Computes the axis-aligned rectangle that represents the visible
93
+ * area in world-space.
94
+ *
95
+ * The rectangle is centred on the camera's current position.
96
+ *
97
+ * @returns An object with `x` (left edge), `y` (top edge), `width`,
98
+ * and `height`.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * const rect = camera.getViewRect();
103
+ * // Use rect to cull off-screen objects
104
+ * if (entity.x < rect.x || entity.x > rect.x + rect.width) {
105
+ * return; // off-screen — skip rendering
106
+ * }
107
+ * ```
108
+ */
109
+ getViewRect() {
110
+ return {
111
+ x: this.x - this.width / 2,
112
+ y: this.y - this.height / 2,
113
+ width: this.width,
114
+ height: this.height,
115
+ };
116
+ }
117
+ /**
118
+ * Updates the viewport dimensions, e.g. after a window resize.
119
+ *
120
+ * @param width - New viewport width in pixels.
121
+ * @param height - New viewport height in pixels.
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * window.addEventListener("resize", () => {
126
+ * camera.resize(window.innerWidth, window.innerHeight);
127
+ * });
128
+ * ```
129
+ */
130
+ resize(width, height) {
131
+ this.width = width;
132
+ this.height = height;
133
+ }
134
+ }
@@ -1,4 +1,4 @@
1
- import type { SubSystem } from "@/subsystems/types";
1
+ import type { SubSystem } from "../subsystems/types";
2
2
  /**
3
3
  * Configuration options for the {@link Engine}.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD;;;;;;;;;;;;;;GAcG;AACH,UAAU,YAAY;IACpB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAoB;IAElC;;;OAGG;IACH,OAAO,CAAC,GAAG,CAA2B;IAEtC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAa;IAE7B;;;;OAIG;IACH,OAAO,CAAC,KAAK,CAAS;IAEtB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAS;IAEvB;;;OAGG;IACH,OAAO,CAAC,YAAY,CAAkB;IAEtC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,CAAkB;IAEjC;;;OAGG;IACH,OAAO,CAAC,GAAG,CAOT;IAEF;;;;;;OAMG;IACI,SAAS,EAAE,MAAM,CAAsB;IAE9C;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAmB;IAErC;;;;;;;;;;;;;;;;;;;;;;OAsBG;gBACS,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IA2BjF;;;;;;;;;;;;;;;;OAgBG;IACH,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAgB/B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,GAAG;IAeX;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY;IAkBZ;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK3C;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAAwB;IAEzC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI;IA+DZ;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACU,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI;IA8BvC;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAC,UAAU,EAAE,MAAM;IAEhC;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,IAAI,EAAE,wBAAwB;IAE5C;;;;;;;;;;;;;;;;OAgBG;IACI,KAAK;IAIZ;;;;;;;;OAQG;IACI,WAAW;IAMlB;;;;;;;;;;;;;;;;OAgBG;IACI,OAAO;CAQf"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD;;;;;;;;;;;;;;GAcG;AACH,UAAU,YAAY;IACpB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAoB;IAElC;;;OAGG;IACH,OAAO,CAAC,GAAG,CAA2B;IAEtC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAa;IAE7B;;;;OAIG;IACH,OAAO,CAAC,KAAK,CAAS;IAEtB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAS;IAEvB;;;OAGG;IACH,OAAO,CAAC,YAAY,CAAkB;IAEtC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,CAAkB;IAEjC;;;OAGG;IACH,OAAO,CAAC,GAAG,CAOT;IAEF;;;;;;OAMG;IACI,SAAS,EAAE,MAAM,CAAsB;IAE9C;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAmB;IAErC;;;;;;;;;;;;;;;;;;;;;;OAsBG;gBACS,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IA2BjF;;;;;;;;;;;;;;;;OAgBG;IACH,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAgB/B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,GAAG;IAeX;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY;IAkBZ;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK3C;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAAwB;IAEzC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI;IA+DZ;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACU,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI;IA8BvC;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAC,UAAU,EAAE,MAAM;IAEhC;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,IAAI,EAAE,wBAAwB;IAE5C;;;;;;;;;;;;;;;;OAgBG;IACI,KAAK;IAIZ;;;;;;;;OAQG;IACI,WAAW;IAMlB;;;;;;;;;;;;;;;;OAgBG;IACI,OAAO;CAQf"}