melonjs 19.0.0 → 19.2.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 (94) hide show
  1. package/README.md +7 -5
  2. package/build/application/application.d.ts +33 -0
  3. package/build/application/application.d.ts.map +1 -1
  4. package/build/application/defaultApplicationSettings.d.ts +1 -0
  5. package/build/application/defaultApplicationSettings.d.ts.map +1 -1
  6. package/build/application/settings.d.ts +47 -1
  7. package/build/application/settings.d.ts.map +1 -1
  8. package/build/camera/camera2d.d.ts +45 -22
  9. package/build/camera/camera2d.d.ts.map +1 -1
  10. package/build/camera/effects/camera_effect.d.ts +45 -0
  11. package/build/camera/effects/camera_effect.d.ts.map +1 -0
  12. package/build/camera/effects/fade_effect.d.ts +60 -0
  13. package/build/camera/effects/fade_effect.d.ts.map +1 -0
  14. package/build/camera/effects/mask_effect.d.ts +88 -0
  15. package/build/camera/effects/mask_effect.d.ts.map +1 -0
  16. package/build/camera/effects/shake_effect.d.ts +47 -0
  17. package/build/camera/effects/shake_effect.d.ts.map +1 -0
  18. package/build/index.d.ts +10 -2
  19. package/build/index.d.ts.map +1 -1
  20. package/build/index.js +2928 -935
  21. package/build/index.js.map +4 -4
  22. package/build/level/tiled/TMXObjectFactory.d.ts.map +1 -1
  23. package/build/math/color_matrix.d.ts +51 -0
  24. package/build/math/color_matrix.d.ts.map +1 -0
  25. package/build/math/matrix2d.d.ts +6 -6
  26. package/build/math/matrix3d.d.ts +17 -0
  27. package/build/math/matrix3d.d.ts.map +1 -1
  28. package/build/particles/emitter.d.ts +19 -5
  29. package/build/particles/emitter.d.ts.map +1 -1
  30. package/build/particles/particle.d.ts +4 -1
  31. package/build/particles/particle.d.ts.map +1 -1
  32. package/build/particles/settings.d.ts +200 -31
  33. package/build/particles/settings.d.ts.map +1 -1
  34. package/build/physics/quadtree.d.ts.map +1 -1
  35. package/build/renderable/imagelayer.d.ts +13 -2
  36. package/build/renderable/imagelayer.d.ts.map +1 -1
  37. package/build/renderable/renderable.d.ts +54 -35
  38. package/build/renderable/renderable.d.ts.map +1 -1
  39. package/build/renderable/text/bitmaptext.d.ts +33 -5
  40. package/build/renderable/text/bitmaptext.d.ts.map +1 -1
  41. package/build/renderable/text/text.d.ts +27 -1
  42. package/build/renderable/text/text.d.ts.map +1 -1
  43. package/build/renderable/trigger.d.ts +44 -19
  44. package/build/renderable/trigger.d.ts.map +1 -1
  45. package/build/state/state.d.ts +44 -2
  46. package/build/state/state.d.ts.map +1 -1
  47. package/build/tweens/tween.d.ts +9 -0
  48. package/build/tweens/tween.d.ts.map +1 -1
  49. package/build/video/buffer/index.d.ts +40 -0
  50. package/build/video/buffer/index.d.ts.map +1 -0
  51. package/build/video/{webgl/buffer → buffer}/vertex.d.ts +11 -4
  52. package/build/video/buffer/vertex.d.ts.map +1 -0
  53. package/build/video/canvas/canvas_renderer.d.ts.map +1 -1
  54. package/build/video/renderer.d.ts +79 -0
  55. package/build/video/renderer.d.ts.map +1 -1
  56. package/build/video/renderstate.d.ts +7 -0
  57. package/build/video/renderstate.d.ts.map +1 -1
  58. package/build/video/rendertarget/canvasrendertarget.d.ts +26 -63
  59. package/build/video/rendertarget/canvasrendertarget.d.ts.map +1 -1
  60. package/build/video/rendertarget/render_target_pool.d.ts +73 -0
  61. package/build/video/rendertarget/render_target_pool.d.ts.map +1 -0
  62. package/build/video/rendertarget/rendertarget.d.ts +77 -0
  63. package/build/video/rendertarget/rendertarget.d.ts.map +1 -0
  64. package/build/video/rendertarget/webglrendertarget.d.ts +30 -0
  65. package/build/video/rendertarget/webglrendertarget.d.ts.map +1 -0
  66. package/build/video/texture/cache.d.ts +6 -0
  67. package/build/video/texture/cache.d.ts.map +1 -1
  68. package/build/video/webgl/batchers/batcher.d.ts +4 -4
  69. package/build/video/webgl/batchers/batcher.d.ts.map +1 -1
  70. package/build/video/webgl/batchers/material_batcher.d.ts +3 -3
  71. package/build/video/webgl/batchers/material_batcher.d.ts.map +1 -1
  72. package/build/video/webgl/batchers/quad_batcher.d.ts +34 -0
  73. package/build/video/webgl/batchers/quad_batcher.d.ts.map +1 -1
  74. package/build/video/webgl/buffer/index.d.ts +5 -34
  75. package/build/video/webgl/buffer/index.d.ts.map +1 -1
  76. package/build/video/webgl/effects/colorMatrix.d.ts +92 -0
  77. package/build/video/webgl/effects/colorMatrix.d.ts.map +1 -0
  78. package/build/video/webgl/effects/desaturate.d.ts +2 -4
  79. package/build/video/webgl/effects/desaturate.d.ts.map +1 -1
  80. package/build/video/webgl/effects/invert.d.ts +2 -2
  81. package/build/video/webgl/effects/invert.d.ts.map +1 -1
  82. package/build/video/webgl/effects/sepia.d.ts +2 -2
  83. package/build/video/webgl/effects/sepia.d.ts.map +1 -1
  84. package/build/video/webgl/effects/vignette.d.ts +42 -0
  85. package/build/video/webgl/effects/vignette.d.ts.map +1 -0
  86. package/build/video/webgl/shadereffect.d.ts.map +1 -1
  87. package/build/video/webgl/shaders/multitexture.d.ts +10 -0
  88. package/build/video/webgl/shaders/multitexture.d.ts.map +1 -0
  89. package/build/video/webgl/utils/precision.d.ts +4 -3
  90. package/build/video/webgl/utils/precision.d.ts.map +1 -1
  91. package/build/video/webgl/webgl_renderer.d.ts +15 -8
  92. package/build/video/webgl/webgl_renderer.d.ts.map +1 -1
  93. package/package.json +1 -1
  94. package/build/video/webgl/buffer/vertex.d.ts.map +0 -1
package/README.md CHANGED
@@ -17,9 +17,9 @@ A modern & lightweight HTML5 game engine
17
17
  -------------------------------------------------------------------------------
18
18
  ![melonJS](https://melonjs.org/img/alex4-github.png)
19
19
 
20
- [melonJS](https://melonjs.org/) is an open-source HTML5 game engine that empowers developers to create 2D games using modern JavaScript and TypeScript. Built with ES6 classes and bundled using [esbuild](https://esbuild.github.io), it provides tree-shaking support for optimal bundle sizes.
20
+ [melonJS](https://melonjs.org/) is an open-source 2D game engine designed for indie developers post-processing effects, custom shaders, 3D mesh support, polygon-accurate physics, modern Tiled workflows, and high performance, all packed into just over 100 KB minzipped of vanilla JS/TS with no toolchain lock-in. Built with ES6 classes and bundled with [esbuild](https://esbuild.github.io).
21
21
 
22
- [melonJS](https://melonjs.org/) is licensed under the [MIT License](LICENSE.md) and actively maintained with the help of a small team of enthusiasts at AltByte in Singapore.
22
+ [melonJS](https://melonjs.org/) is licensed under the [MIT License](LICENSE.md) and actively maintained by the team at AltByte in Singapore.
23
23
 
24
24
  Why melonJS
25
25
  -------------------------------------------------------------------------------
@@ -55,9 +55,9 @@ Graphics
55
55
  - Standard spritesheet, single and multiple Packed Textures support
56
56
  - Compressed texture support (DDS, KTX, KTX2, PVR, PKM) with automatic format detection and fallback
57
57
  - 3D mesh rendering with OBJ/MTL model loading, perspective projection and hardware depth testing
58
- - Built-in shader effects (Flash, Outline, Glow, Dissolve, CRT, Hologram, etc.) and custom shader support via `ShaderEffect` for per-sprite fragment effects (WebGL)
58
+ - Built-in shader effects (Flash, Outline, Glow, Dissolve, CRT, Hologram, etc.) with multi-pass chaining via `postEffects`, plus custom shader support via `ShaderEffect` for per-sprite fragment effects (WebGL)
59
59
  - Trail renderable for fading, tapering ribbons behind moving objects (speed lines, sword slashes, magic trails)
60
- - System & Bitmap Text
60
+ - System & Bitmap Text with built-in typewriter effect
61
61
  - Video sprite playback
62
62
 
63
63
  Sound
@@ -78,7 +78,8 @@ Input
78
78
  Camera
79
79
  - Multi-camera support (split-screen, minimaps, multiple viewports)
80
80
  - Camera follow with configurable deadzone and damping
81
- - Built-in shake, fade and flash effects
81
+ - Built-in shake, fade, flash, and mask-based transition effects
82
+ - Per-camera post-processing pipeline with stackable shader effects and color grading (ColorMatrix)
82
83
 
83
84
  UI
84
85
  - Clickable, hoverable and draggable UI elements
@@ -107,6 +108,7 @@ Assets
107
108
  - Support for images, JSON, TMX/TSX, audio, video, binary and fonts
108
109
 
109
110
  Core
111
+ - `Application` class as the modern entry point with built-in pause, resume, and `freeze()` (hit-stop) primitives
110
112
  - A state manager (to easily manage loading, menu, options, in-game state)
111
113
  - Tween effects with multiple easing functions (Quadratic, Cubic, Elastic, Bounce, etc.) and Bezier/Catmull-Rom interpolation
112
114
  - Transition effects
@@ -188,6 +188,39 @@ export default class Application {
188
188
  * force the redraw (not update) of all objects
189
189
  */
190
190
  repaint(): void;
191
+ /**
192
+ * Pause the current stage. Convenience proxy for {@link state.pause}.
193
+ * @param [music=false] - also pause the current music track
194
+ * @example
195
+ * app.pause(); // pause game updates, keep music playing
196
+ * app.pause(true); // pause game updates and music
197
+ */
198
+ pause(music?: boolean): void;
199
+ /**
200
+ * Resume the current stage. Convenience proxy for {@link state.resume}.
201
+ * @param [music=false] - also resume the current music track
202
+ */
203
+ resume(music?: boolean): void;
204
+ /**
205
+ * Freeze the current stage for a fixed duration, then automatically resume.
206
+ * Useful for hit-stop / hit-pause effects on impact.
207
+ *
208
+ * Convenience proxy for {@link state.freeze}; see that method's
209
+ * documentation for the full behaviour matrix (extend-not-stack semantics,
210
+ * interaction with manual `state.pause()` / `state.resume()`, automatic
211
+ * cancellation on window blur, etc.).
212
+ * @param duration - duration of the freeze in milliseconds
213
+ * @param [music=false] - also pause the current music track during the freeze
214
+ * @returns a Promise that resolves once the freeze ends (or is cancelled)
215
+ * @example
216
+ * // simple hit-stop on impact
217
+ * app.freeze(80);
218
+ *
219
+ * // chain VFX after the freeze
220
+ * await app.freeze(120);
221
+ * spawnImpactParticles();
222
+ */
223
+ freeze(duration: number, music?: boolean): Promise<void>;
191
224
  /** @ignore */
192
225
  _tick(time: number): void;
193
226
  /** @ignore */
@@ -1 +1 @@
1
- {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/application/application.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/application/application.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export declare const defaultApplicationSettings: {
10
10
  blendMode: "normal";
11
11
  physic: "builtin";
12
12
  failIfMajorPerformanceCaveat: true;
13
+ highPrecisionShader: true;
13
14
  subPixel: false;
14
15
  verbose: false;
15
16
  legacy: false;
@@ -1 +1 @@
1
- {"version":3,"file":"defaultApplicationSettings.d.ts","sourceRoot":"","sources":["../../src/application/defaultApplicationSettings.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;CAgBC,CAAC"}
1
+ {"version":3,"file":"defaultApplicationSettings.d.ts","sourceRoot":"","sources":["../../src/application/defaultApplicationSettings.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;CAiBC,CAAC"}
@@ -22,7 +22,7 @@ export type ApplicationSettings = {
22
22
  scale: number | "auto";
23
23
  /**
24
24
  * screen scaling modes
25
- * @default fit
25
+ * @default "manual"
26
26
  */
27
27
  scaleMethod: ScaleMethod;
28
28
  /**
@@ -54,15 +54,53 @@ export type ApplicationSettings = {
54
54
  * @default true
55
55
  */
56
56
  consoleHeader: boolean;
57
+ /**
58
+ * the default blend mode to use ("normal", "multiply", "lighter", "additive", "screen")
59
+ * @default "normal"
60
+ */
57
61
  blendMode: BlendMode;
58
62
  /**
59
63
  * the physic system to use (default: "builtin", or "none" to disable builtin physic)
60
64
  * @default "builtin"
61
65
  */
62
66
  physic: PhysicsType;
67
+ /**
68
+ * if true, the renderer will fail if the browser reports a major performance caveat
69
+ * (e.g. software WebGL). Set to false to allow WebGL on machines with
70
+ * blocklisted GPU drivers or software renderers.
71
+ * @default true
72
+ */
63
73
  failIfMajorPerformanceCaveat: boolean;
74
+ /**
75
+ * enable high precision shaders (WebGL only).
76
+ * When false, shaders prefer "mediump" precision for better performance on
77
+ * some mobile GPUs, falling back to "lowp" if "mediump" is not supported.
78
+ * When true (default), the highest precision supported by the device is used.
79
+ * This setting is ignored by the Canvas renderer.
80
+ * @default true
81
+ * @example
82
+ * import { Application, device } from "melonjs";
83
+ * const app = new Application(800, 600, {
84
+ * parent: "screen",
85
+ * // prefer lower shader precision on mobile for better performance
86
+ * highPrecisionShader: !device.isMobile,
87
+ * });
88
+ */
89
+ highPrecisionShader: boolean;
90
+ /**
91
+ * whether to enable sub-pixel rendering (avoid sprite flickering when using transforms)
92
+ * @default false
93
+ */
64
94
  subPixel: boolean;
95
+ /**
96
+ * whether to enable verbose mode (additional console output for debugging)
97
+ * @default false
98
+ */
65
99
  verbose: boolean;
100
+ /**
101
+ * whether to enable legacy mode (enables deprecated `video.init()` entry point)
102
+ * @default false
103
+ */
66
104
  legacy: boolean;
67
105
  /**
68
106
  * the CSS background color of the parent element that holds the canvas.
@@ -81,15 +119,23 @@ export type ApplicationSettings = {
81
119
  */
82
120
  batcher?: (new (renderer: any) => Batcher) | undefined;
83
121
  } & ({
122
+ /**
123
+ * the DOM parent element (or its string ID) to hold the canvas in the HTML file
124
+ */
84
125
  parent: string | HTMLElement;
85
126
  canvas?: never;
86
127
  } | {
87
128
  parent?: never;
129
+ /**
130
+ * an existing canvas element to use as the renderer target
131
+ * (by default melonJS will create its own canvas based on given parameters)
132
+ */
88
133
  canvas: HTMLCanvasElement;
89
134
  });
90
135
  /**
91
136
  * Resolved application settings after init() has processed the input.
92
137
  * Includes computed properties not present in the user-facing settings.
138
+ * @ignore
93
139
  */
94
140
  export type ResolvedApplicationSettings = ApplicationSettings & {
95
141
  width: number;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/application/settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,KAAK,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3E,KAAK,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtC,KAAK,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IACjC;;;OAGG;IACH,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAAC;IAElC;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC;IAEzB;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC;IAEzB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,eAAe,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB,4BAA4B,EAAE,OAAO,CAAC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAE1D;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CACvD,GAAG,CACD;IAEA,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC;CACd,GACD;IACA,MAAM,CAAC,EAAE,KAAK,CAAC;IAEf,MAAM,EAAE,iBAAiB,CAAC;CACzB,CACH,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,GAAG;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd,CAAC"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/application/settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,KAAK,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3E,KAAK,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtC,KAAK,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IACjC;;;OAGG;IACH,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAAC;IAElC;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC;IAEzB;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC;IAEzB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,eAAe,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB;;;;;OAKG;IACH,4BAA4B,EAAE,OAAO,CAAC;IAEtC;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAE1D;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CACvD,GAAG,CACD;IACA;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC;CACd,GACD;IACA,MAAM,CAAC,EAAE,KAAK,CAAC;IACf;;;OAGG;IACH,MAAM,EAAE,iBAAiB,CAAC;CACzB,CACH,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,GAAG;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -1,13 +1,15 @@
1
1
  import { Rect } from "./../geometries/rectangle.ts";
2
2
  import type { Color } from "../math/color.ts";
3
+ import { ColorMatrix } from "../math/color_matrix.ts";
3
4
  import { Matrix3d } from "../math/matrix3d.ts";
4
5
  import { Vector2d } from "../math/vector2d.ts";
5
6
  import { Vector3d } from "../math/vector3d.ts";
6
7
  import { Bounds } from "./../physics/bounds.ts";
7
8
  import type Container from "./../renderable/container.js";
8
9
  import Renderable from "./../renderable/renderable.js";
9
- import type Tween from "../tweens/tween.ts";
10
10
  import type Renderer from "./../video/renderer.js";
11
+ import ColorMatrixEffect from "./../video/webgl/effects/colorMatrix.js";
12
+ import type CameraEffect from "./effects/camera_effect.ts";
11
13
  /**
12
14
  * @import Entity from "./../renderable/entity/entity.js";
13
15
  * @import Sprite from "./../renderable/sprite.js";
@@ -19,16 +21,6 @@ interface AxisEnum {
19
21
  readonly VERTICAL: 2;
20
22
  readonly BOTH: 3;
21
23
  }
22
- interface ShakeState {
23
- intensity: number;
24
- duration: number;
25
- axis: number;
26
- onComplete: (() => void) | null | undefined;
27
- }
28
- interface FadeState {
29
- color: Color | null;
30
- tween: Tween | null;
31
- }
32
24
  /**
33
25
  * a 2D orthographic camera
34
26
  * @category Camera
@@ -133,20 +125,23 @@ export default class Camera2d extends Renderable {
133
125
  /** default value follow */
134
126
  follow_axis: number;
135
127
  /**
136
- * shake variables
137
- * @ignore
138
- */
139
- _shake: ShakeState;
140
- /**
141
- * flash variables
142
- * @ignore
128
+ * active camera effects (shake, fade, etc.)
143
129
  */
144
- _fadeOut: FadeState;
130
+ cameraEffects: CameraEffect[];
145
131
  /**
146
- * fade variables
147
- * @ignore
132
+ * A built-in color transformation matrix applied as the final post-processing pass.
133
+ * Provides convenient color grading (brightness, contrast, saturation, etc.)
134
+ * that is always applied after any effects added via {@link addPostEffect}.
135
+ * When set to identity (default), no effect is applied and there is zero overhead.
136
+ * @example
137
+ * // warm HDR-like color grading
138
+ * camera.colorMatrix.contrast(1.2).saturate(1.1);
139
+ * // reset to no color grading
140
+ * camera.colorMatrix.identity();
148
141
  */
149
- _fadeIn: FadeState;
142
+ colorMatrix: ColorMatrix;
143
+ /** @ignore */
144
+ _colorMatrixEffect: ColorMatrixEffect | null;
150
145
  /** the camera deadzone */
151
146
  deadzone: Rect;
152
147
  /**
@@ -300,6 +295,30 @@ export default class Camera2d extends Renderable {
300
295
  * app.viewport.fadeIn("#FFFFFF", 75);
301
296
  */
302
297
  fadeIn(color: Color | string, duration?: number, onComplete?: () => void): void;
298
+ /**
299
+ * Add a camera effect to this camera.
300
+ * @param effect - the camera effect to add
301
+ * @returns the added effect
302
+ * @example
303
+ * camera.addCameraEffect(new ShakeEffect(camera, { intensity: 10, duration: 500 }));
304
+ */
305
+ addCameraEffect<T extends CameraEffect>(effect: T): T;
306
+ /**
307
+ * Get the first camera effect matching the given class.
308
+ * @param effectClass - the effect class to search for
309
+ * @returns the first matching effect, or undefined
310
+ * @example
311
+ * const shake = camera.getCameraEffect(ShakeEffect);
312
+ */
313
+ getCameraEffect<T extends CameraEffect>(effectClass: new (...args: any[]) => T): T | undefined;
314
+ /**
315
+ * Remove a specific camera effect instance.
316
+ * @param effect - the effect to remove
317
+ * @example
318
+ * const fade = camera.getCameraEffect(FadeEffect);
319
+ * if (fade) camera.removeCameraEffect(fade);
320
+ */
321
+ removeCameraEffect(effect: CameraEffect): void;
303
322
  /**
304
323
  * set the camera position around the specified object
305
324
  * @param target - the renderable to focus the camera on
@@ -338,6 +357,10 @@ export default class Camera2d extends Renderable {
338
357
  * @ignore
339
358
  */
340
359
  draw(renderer: Renderer, container: Container): void;
360
+ /**
361
+ * @ignore
362
+ */
363
+ destroy(): void;
341
364
  }
342
365
  export {};
343
366
  //# sourceMappingURL=camera2d.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"camera2d.d.ts","sourceRoot":"","sources":["../../src/camera/camera2d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera2d.d.ts","sourceRoot":"","sources":["../../src/camera/camera2d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type Renderer from "../../video/renderer.js";
2
+ import type Camera2d from "../camera2d.ts";
3
+ /**
4
+ * Base class for camera effects (shake, fade, flash, transitions, etc.).
5
+ * Subclasses implement update() for per-frame logic and/or draw() for rendering overlays.
6
+ * Effects are automatically removed from the camera when isComplete becomes true.
7
+ * @category Camera
8
+ */
9
+ export default class CameraEffect {
10
+ /**
11
+ * the camera this effect is attached to
12
+ */
13
+ camera: Camera2d;
14
+ /**
15
+ * whether this effect has finished and should be removed
16
+ */
17
+ isComplete: boolean;
18
+ /**
19
+ * whether this effect should persist across camera/game resets
20
+ * (e.g. transition effects that span state changes)
21
+ * @default false
22
+ */
23
+ isPersistent: boolean;
24
+ /**
25
+ * @param camera - the camera this effect is attached to
26
+ */
27
+ constructor(camera: Camera2d);
28
+ /**
29
+ * Called each frame to update the effect state (e.g. modify camera offset, countdown duration).
30
+ * @param _dt - time elapsed since last frame in milliseconds
31
+ */
32
+ update(_dt: number): void;
33
+ /**
34
+ * Called after the scene renders to draw visual overlays (e.g. color fills for fading).
35
+ * @param _renderer - the renderer to draw with
36
+ * @param _width - the camera viewport width
37
+ * @param _height - the camera viewport height
38
+ */
39
+ draw(_renderer: Renderer, _width: number, _height: number): void;
40
+ /**
41
+ * Called when the effect is removed from the camera. Override to clean up resources.
42
+ */
43
+ destroy(): void;
44
+ }
45
+ //# sourceMappingURL=camera_effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera_effect.d.ts","sourceRoot":"","sources":["../../../src/camera/effects/camera_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAChC;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC;IAEjB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;OAEG;gBACS,MAAM,EAAE,QAAQ;IAM5B;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAEzB;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAEhE;;OAEG;IACH,OAAO,IAAI,IAAI;CACf"}
@@ -0,0 +1,60 @@
1
+ import type { Color } from "../../math/color.ts";
2
+ import type Tween from "../../tweens/tween.ts";
3
+ import type Renderer from "../../video/renderer.js";
4
+ import type Camera2d from "../camera2d.ts";
5
+ import CameraEffect from "./camera_effect.ts";
6
+ /**
7
+ * A camera effect that fades the screen to or from a color overlay.
8
+ * @category Camera
9
+ * @example
10
+ * // fade to black
11
+ * camera.addCameraEffect(new FadeEffect(camera, {
12
+ * color: "#000",
13
+ * duration: 500,
14
+ * direction: "in",
15
+ * }));
16
+ * @example
17
+ * // flash white then fade back
18
+ * camera.addCameraEffect(new FadeEffect(camera, {
19
+ * color: "#fff",
20
+ * duration: 200,
21
+ * direction: "out",
22
+ * }));
23
+ */
24
+ export default class FadeEffect extends CameraEffect {
25
+ /**
26
+ * the overlay color
27
+ */
28
+ color: Color;
29
+ /**
30
+ * the tween controlling alpha transition
31
+ */
32
+ tween: Tween;
33
+ /**
34
+ * fade direction: "in" fades to the color, "out" fades from the color back to transparent
35
+ */
36
+ direction: "in" | "out";
37
+ /**
38
+ * target alpha value for completion check
39
+ * @ignore
40
+ */
41
+ _targetAlpha: number;
42
+ /**
43
+ * @param camera - the camera to apply the fade to
44
+ * @param options - fade parameters
45
+ * @param options.color - CSS color value or Color instance
46
+ * @param [options.duration=1000] - fade duration in milliseconds
47
+ * @param [options.direction="in"] - "in" fades to color, "out" fades from color to transparent
48
+ * @param [options.onComplete] - callback when the fade finishes
49
+ */
50
+ constructor(camera: Camera2d, options: {
51
+ color: Color | string;
52
+ duration?: number | undefined;
53
+ direction?: "in" | "out" | undefined;
54
+ onComplete?: (() => void) | undefined;
55
+ });
56
+ draw(renderer: Renderer, width: number, height: number): void;
57
+ update(): void;
58
+ destroy(): void;
59
+ }
60
+ //# sourceMappingURL=fade_effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fade_effect.d.ts","sourceRoot":"","sources":["../../../src/camera/effects/fade_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IACnD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IAExB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;;;OAOG;gBAEF,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE;QACR,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;QACrC,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;KACtC;IA4BO,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY7D,MAAM,IAAI,IAAI;IASd,OAAO,IAAI,IAAI;CAKxB"}
@@ -0,0 +1,88 @@
1
+ import { Ellipse } from "../../geometries/ellipse.ts";
2
+ import { Polygon } from "../../geometries/polygon.ts";
3
+ import type { Color } from "../../math/color.ts";
4
+ import type Tween from "../../tweens/tween.ts";
5
+ import type Renderer from "../../video/renderer.js";
6
+ import type Camera2d from "../camera2d.ts";
7
+ import CameraEffect from "./camera_effect.ts";
8
+ type MaskShape = Ellipse | Polygon;
9
+ /**
10
+ * A camera effect that performs a mask-based scene transition.
11
+ * A shape (ellipse, polygon) is scaled from full-screen to zero (hide)
12
+ * or from zero to full-screen (reveal), with the area outside the shape
13
+ * filled with a solid color.
14
+ * @category Camera
15
+ * @example
16
+ * // iris transition (circle shrinks to hide the scene)
17
+ * camera.addCameraEffect(new MaskEffect(camera, {
18
+ * shape: new Ellipse(0, 0, 1, 1),
19
+ * color: "#000",
20
+ * duration: 500,
21
+ * direction: "hide",
22
+ * }));
23
+ * @example
24
+ * // diamond reveal transition
25
+ * camera.addCameraEffect(new MaskEffect(camera, {
26
+ * shape: new Polygon(0, 0, [
27
+ * { x: 0, y: -1 }, { x: 1, y: 0 },
28
+ * { x: 0, y: 1 }, { x: -1, y: 0 },
29
+ * ]),
30
+ * color: "#000",
31
+ * duration: 500,
32
+ * direction: "reveal",
33
+ * }));
34
+ */
35
+ export default class MaskEffect extends CameraEffect {
36
+ /**
37
+ * the transition fill color
38
+ */
39
+ color: Color;
40
+ /**
41
+ * the mask shape template (unit-sized, centered at origin)
42
+ */
43
+ shape: MaskShape;
44
+ /**
45
+ * current progress value (0 = fully covered, 1 = fully visible)
46
+ */
47
+ progress: {
48
+ value: number;
49
+ };
50
+ /**
51
+ * the tween controlling progress
52
+ */
53
+ tween: Tween;
54
+ /**
55
+ * transition direction
56
+ */
57
+ direction: "hide" | "reveal";
58
+ /**
59
+ * optional callback when transition completes
60
+ */
61
+ onComplete: (() => void) | undefined;
62
+ /**
63
+ * pooled shape used for rendering (avoids per-frame allocation)
64
+ * @ignore
65
+ */
66
+ _maskShape: MaskShape;
67
+ /**
68
+ * @param camera - the camera to apply the transition to
69
+ * @param options - transition parameters
70
+ * @param options.shape - an Ellipse or Polygon (unit-sized, centered at origin) defining the mask shape
71
+ * @param options.color - CSS color value or Color instance for the transition fill
72
+ * @param [options.duration=500] - transition duration in milliseconds
73
+ * @param [options.direction="hide"] - "hide" shrinks the visible area, "reveal" grows it
74
+ * @param [options.onComplete] - callback when the transition finishes
75
+ */
76
+ constructor(camera: Camera2d, options: {
77
+ shape: MaskShape;
78
+ color: Color | string;
79
+ duration?: number | undefined;
80
+ direction?: "hide" | "reveal" | undefined;
81
+ onComplete?: (() => void) | undefined;
82
+ });
83
+ update(): void;
84
+ draw(renderer: Renderer, width: number, height: number): void;
85
+ destroy(): void;
86
+ }
87
+ export {};
88
+ //# sourceMappingURL=mask_effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask_effect.d.ts","sourceRoot":"","sources":["../../../src/camera/effects/mask_effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,KAAK,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IACnD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5B;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAErC;;;OAGG;IACH,UAAU,EAAE,SAAS,CAAC;IAEtB;;;;;;;;OAQG;gBAEF,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE;QACR,KAAK,EAAE,SAAS,CAAC;QACjB,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC1C,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;KACtC;IA+BO,MAAM,IAAI,IAAI;IAmCd,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAwB7D,OAAO,IAAI,IAAI;CAUxB"}
@@ -0,0 +1,47 @@
1
+ import type Camera2d from "../camera2d.ts";
2
+ import CameraEffect from "./camera_effect.ts";
3
+ /**
4
+ * A camera effect that shakes the viewport by applying random offsets.
5
+ * @category Camera
6
+ * @example
7
+ * camera.addCameraEffect(new ShakeEffect(camera, {
8
+ * intensity: 10,
9
+ * duration: 500,
10
+ * axis: camera.AXIS.BOTH,
11
+ * }));
12
+ */
13
+ export default class ShakeEffect extends CameraEffect {
14
+ /**
15
+ * maximum pixel offset during shake
16
+ */
17
+ intensity: number;
18
+ /**
19
+ * remaining duration in milliseconds
20
+ */
21
+ duration: number;
22
+ /**
23
+ * which axes to shake (use camera.AXIS constants)
24
+ */
25
+ axis: number;
26
+ /**
27
+ * optional callback when shake completes
28
+ */
29
+ onComplete: (() => void) | undefined;
30
+ /**
31
+ * @param camera - the camera to shake
32
+ * @param options - shake parameters
33
+ * @param options.intensity - maximum offset in pixels
34
+ * @param options.duration - duration in milliseconds
35
+ * @param [options.axis=3] - which axes (NONE=0, HORIZONTAL=1, VERTICAL=2, BOTH=3)
36
+ * @param [options.onComplete] - callback when the shake finishes
37
+ */
38
+ constructor(camera: Camera2d, options: {
39
+ intensity: number;
40
+ duration: number;
41
+ axis?: number | undefined;
42
+ onComplete?: (() => void) | undefined;
43
+ });
44
+ update(dt: number): void;
45
+ destroy(): void;
46
+ }
47
+ //# sourceMappingURL=shake_effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shake_effect.d.ts","sourceRoot":"","sources":["../../../src/camera/effects/shake_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,YAAY;IACpD;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAErC;;;;;;;OAOG;gBAEF,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;KACtC;IASO,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAoBxB,OAAO,IAAI,IAAI;CAGxB"}