melonjs 20.12.0 → 20.13.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 (120) hide show
  1. package/README.md +2 -1
  2. package/build/camera/camera2d.d.ts +2 -0
  3. package/build/camera/camera2d.d.ts.map +1 -1
  4. package/build/camera/effects/fade_effect.d.ts.map +1 -1
  5. package/build/geometries/ellipse.d.ts +3 -0
  6. package/build/geometries/ellipse.d.ts.map +1 -1
  7. package/build/geometries/line.d.ts.map +1 -1
  8. package/build/geometries/polygon.d.ts +2 -1
  9. package/build/geometries/polygon.d.ts.map +1 -1
  10. package/build/index.d.ts +13 -2
  11. package/build/index.d.ts.map +1 -1
  12. package/build/index.js +5409 -1500
  13. package/build/index.js.map +4 -4
  14. package/build/input/gamepad.d.ts.map +1 -1
  15. package/build/input/pointerevent.d.ts.map +1 -1
  16. package/build/level/tiled/TMXLayer.d.ts +48 -14
  17. package/build/level/tiled/TMXLayer.d.ts.map +1 -1
  18. package/build/level/tiled/TMXTileMap.d.ts +1 -1
  19. package/build/level/tiled/TMXTileMap.d.ts.map +1 -1
  20. package/build/level/tiled/TMXTileset.d.ts.map +1 -1
  21. package/build/level/tiled/TMXUtils.d.ts.map +1 -1
  22. package/build/level/tiled/renderer/TMXHexagonalRenderer.d.ts.map +1 -1
  23. package/build/level/tiled/renderer/TMXIsometricRenderer.d.ts.map +1 -1
  24. package/build/level/tiled/renderer/TMXObliqueRenderer.d.ts.map +1 -1
  25. package/build/level/tiled/renderer/TMXOrthogonalRenderer.d.ts.map +1 -1
  26. package/build/level/tiled/renderer/TMXRenderer.d.ts +1 -1
  27. package/build/level/tiled/renderer/TMXRenderer.d.ts.map +1 -1
  28. package/build/level/tiled/renderer/TMXStaggeredRenderer.d.ts.map +1 -1
  29. package/build/loader/loader.d.ts +55 -11
  30. package/build/loader/loader.d.ts.map +1 -1
  31. package/build/math/color.d.ts.map +1 -1
  32. package/build/math/math.d.ts +6 -1
  33. package/build/math/math.d.ts.map +1 -1
  34. package/build/math/observableVector2d.d.ts +6 -6
  35. package/build/math/observableVector2d.d.ts.map +1 -1
  36. package/build/math/observableVector3d.d.ts +8 -8
  37. package/build/math/observableVector3d.d.ts.map +1 -1
  38. package/build/particles/emitter.d.ts +15 -3
  39. package/build/particles/emitter.d.ts.map +1 -1
  40. package/build/particles/particle.d.ts +6 -0
  41. package/build/particles/particle.d.ts.map +1 -1
  42. package/build/particles/settings.d.ts +22 -5
  43. package/build/particles/settings.d.ts.map +1 -1
  44. package/build/physics/builtin/body.d.ts +14 -4
  45. package/build/physics/builtin/body.d.ts.map +1 -1
  46. package/build/physics/builtin/raycast.d.ts.map +1 -1
  47. package/build/physics/world.d.ts.map +1 -1
  48. package/build/renderable/container.d.ts +40 -6
  49. package/build/renderable/container.d.ts.map +1 -1
  50. package/build/renderable/frameAnimation.d.ts.map +1 -1
  51. package/build/renderable/renderable.d.ts.map +1 -1
  52. package/build/renderable/sprite.d.ts +4 -2
  53. package/build/renderable/sprite.d.ts.map +1 -1
  54. package/build/renderable/text/bitmaptext.d.ts +12 -3
  55. package/build/renderable/text/bitmaptext.d.ts.map +1 -1
  56. package/build/renderable/text/text.d.ts +147 -4
  57. package/build/renderable/text/text.d.ts.map +1 -1
  58. package/build/renderable/text/textmetrics.d.ts +10 -2
  59. package/build/renderable/text/textmetrics.d.ts.map +1 -1
  60. package/build/renderable/text/textstyle.d.ts.map +1 -1
  61. package/build/renderable/ui/panelpaint.d.ts +5 -1
  62. package/build/renderable/ui/panelpaint.d.ts.map +1 -1
  63. package/build/renderable/ui/progressbar.d.ts +267 -95
  64. package/build/renderable/ui/progressbar.d.ts.map +1 -1
  65. package/build/renderable/ui/uibaseelement.d.ts +436 -50
  66. package/build/renderable/ui/uibaseelement.d.ts.map +1 -1
  67. package/build/renderable/ui/uicheckbox.d.ts +383 -0
  68. package/build/renderable/ui/uicheckbox.d.ts.map +1 -0
  69. package/build/renderable/ui/uifocus.d.ts +6 -0
  70. package/build/renderable/ui/uifocus.d.ts.map +1 -0
  71. package/build/renderable/ui/uilabel.d.ts +31 -0
  72. package/build/renderable/ui/uilabel.d.ts.map +1 -0
  73. package/build/renderable/ui/uipanel.d.ts +589 -116
  74. package/build/renderable/ui/uipanel.d.ts.map +1 -1
  75. package/build/renderable/ui/uiskin.d.ts +25 -0
  76. package/build/renderable/ui/uiskin.d.ts.map +1 -0
  77. package/build/renderable/ui/uislider.d.ts +518 -0
  78. package/build/renderable/ui/uislider.d.ts.map +1 -0
  79. package/build/renderable/ui/uispriteelement.d.ts +161 -85
  80. package/build/renderable/ui/uispriteelement.d.ts.map +1 -1
  81. package/build/renderable/ui/uitextbutton.d.ts +369 -63
  82. package/build/renderable/ui/uitextbutton.d.ts.map +1 -1
  83. package/build/state/stage.d.ts.map +1 -1
  84. package/build/system/pool.d.ts.map +1 -1
  85. package/build/system/save.d.ts +2 -1
  86. package/build/system/save.d.ts.map +1 -1
  87. package/build/tweens/tween.d.ts +5 -2
  88. package/build/tweens/tween.d.ts.map +1 -1
  89. package/build/utils/fetchdata.d.ts.map +1 -1
  90. package/build/video/canvas/canvas_renderer.d.ts +0 -5
  91. package/build/video/canvas/canvas_renderer.d.ts.map +1 -1
  92. package/build/video/renderer.d.ts +20 -4
  93. package/build/video/renderer.d.ts.map +1 -1
  94. package/build/video/renderstate.d.ts +26 -3
  95. package/build/video/renderstate.d.ts.map +1 -1
  96. package/build/video/utils/tessellation.d.ts +11 -0
  97. package/build/video/utils/tessellation.d.ts.map +1 -1
  98. package/build/video/webgl/webgl_renderer.d.ts +3 -6
  99. package/build/video/webgl/webgl_renderer.d.ts.map +1 -1
  100. package/build/video/webgpu/batchers/primitive_batcher.d.ts.map +1 -1
  101. package/build/video/webgpu/webgpu_renderer.d.ts +3 -6
  102. package/build/video/webgpu/webgpu_renderer.d.ts.map +1 -1
  103. package/package.json +1 -1
  104. package/skills/melonjs/SKILL.md +3 -3
  105. package/skills/melonjs-audio/SKILL.md +7 -5
  106. package/skills/melonjs-camera-and-drawing/SKILL.md +41 -1
  107. package/skills/melonjs-effects-and-shaders/SKILL.md +1 -0
  108. package/skills/melonjs-events/SKILL.md +3 -1
  109. package/skills/melonjs-getting-started/SKILL.md +1 -2
  110. package/skills/melonjs-input/SKILL.md +38 -2
  111. package/skills/melonjs-loading-assets/SKILL.md +53 -12
  112. package/skills/melonjs-math/SKILL.md +14 -3
  113. package/skills/melonjs-particles-and-trails/SKILL.md +72 -8
  114. package/skills/melonjs-physics/SKILL.md +53 -4
  115. package/skills/melonjs-plugins/SKILL.md +7 -2
  116. package/skills/melonjs-renderables/SKILL.md +7 -0
  117. package/skills/melonjs-scenes-and-state/SKILL.md +15 -0
  118. package/skills/melonjs-sprites-and-animation/SKILL.md +14 -0
  119. package/skills/melonjs-tilemaps/SKILL.md +96 -2
  120. package/skills/melonjs-ui-and-text/SKILL.md +560 -23
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/renderable/text/text.js"],"names":[],"mappings":"AAiDA;;;;;;;;;;;;;;GAcG;AACH;IACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6DG;IACH,eA7DW,MAAM,KACN,MAAM,YAEd;QAAyB,IAAI,EAArB,MAAM;QACkB,IAAI,EAA5B,MAAM,GAAC,MAAM;QACoB,SAAS;QACvB,eAAe;QACV,WAAW;QACjB,SAAS;QACT,SAAS;QACT,YAAY;QACZ,UAAU;QACmB,WAAW;eAAvC,MAAM;eAAG,MAAM;;QAChB,aAAa;QACZ,IAAI;QACJ,MAAM;QACI,IAAI;KACzC,EAsHF;IAtEA;;;;OAIG;IACH,WAHU,KAAK,CAGwB;IAEvC;;;;OAIG;IACH,aAHU,KAAK,CAG0B;IAEzC;;;;OAIG;IACH,WAHU,MAAM,CAGE;IAElB;;;;;OAKG;IACH,WAHU,MAAM,CAGO;IAEvB;;;;;OAKG;IACH,cAHU,MAAM,CAGS;IAEzB;;;;;OAKG;IACH,YAHU,MAAM,CAGK;IAErB;;;;;OAKG;IACH,eAHU,MAAM,CAGO;IAEvB;;;;OAIG;IACH,UAHU,MAAM,CAGE;IAElB;;;;;OAKG;IACH,cAAe;IAMhB;;;OAGG;IACH,kDA8KC;IAjJA;;;;;;;;;;;;;;;;OAgBG;IACH,cARU,QAAQ,GAAC,SAAS,CAQC;IAE7B;;;;;;;;;;;;;;OAcG;IACH,qCAA2B;IA4F1B,8CAEE;IAGH;;;OAGG;IACH,wBAA4B;IAK3B,iCAAoC;IAOtC;;;OAGG;IACH,QAFa,IAAI,CAWhB;IAJC,UAA+B;IAMjC;;;OAGG;IACH,UAFa,IAAI,CAWhB;IAED;;;;;;;;OAQG;IACH,cAPW,MAAM,SACN,MAAM,GAAC,MAAM,GACX,IAAI,CAwChB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,MAAM,GAAC,MAAM,EAAE,GACpB,IAAI,CAuFhB;IAkBD,oCAZU,MAAM,EAiBf;IArBD;;;;;;;;;;;OAWG;IACH,gCARU,MAAM,CAUf;IAkCD,+BAlBU,MAAM,EA4Bf;IAnCD;;;;;;;;;;;;;;OAcG;IACH,2BARU,MAAM,CAgBf;IAiED;;;;;;;;;;;;OAYG;IACH,mBAXW,MAAM,GACJ,WAAW,CAYvB;IAED;;;OAGG;IACH,eAFW,QAAQ,QAqClB;IAED;;;OAGG;IACH,4EA+GC;IAED;;;;OAIG;IACH,gBAWC;CACD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wGAQG;uBAz2B8C,kBAAkB;sBANlC,qBAAqB;yBAE7B,yBAAyB;+BAEnB,gDAAgD;wBAGvD,kBAAkB;0BASjB,yBAAyB;8BAHvB,wBAAwB"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/renderable/text/text.js"],"names":[],"mappings":"AAiDA;;;;;;;;;;;;;;;;GAgBG;AACH;IACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8GG;IACH,eA9GW,MAAM,KACN,MAAM,YAEd;QAAyB,IAAI,EAArB,MAAM;QACkB,IAAI,EAA5B,MAAM,GAAC,MAAM;QACoB,SAAS;QACvB,eAAe;QACV,WAAW;QACjB,SAAS;QACQ,QAAQ;QACzB,UAAU;QACD,UAAU;QACnB,SAAS;QACT,YAAY;QACZ,UAAU;QACmB,WAAW;eAAvC,MAAM;eAAG,MAAM;;QAChB,aAAa;QACZ,IAAI;QACJ,MAAM;QACI,IAAI;KACzC,EA2PF;IA7JA;;;;OAIG;IACH,WAHU,KAAK,CAGwB;IAEvC;;;;OAIG;IACH,aAHU,KAAK,CAG0B;IAEzC;;;;OAIG;IACH,WAHU,MAAM,CAGE;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,UAfU,OAAO,GAAC,OAAO,GAAC,OAAO,CAeV;IAEvB;;;;;;;;;;;;;;;;;OAiBG;IACH,YARU,MAAM,CAQI;IAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,YAdU,QAAQ,GAAC,MAAM,CAcC;IAE1B;;;;;OAKG;IACH,WAHU,MAAM,CAGO;IAEvB;;;;;;;OAOG;IACH,cAHU,MAAM,CAGS;IAEzB;;;;;OAKG;IACH,YAHU,MAAM,CAGK;IAErB;;;;;;;OAOG;IACH,eAHU,MAAM,CAGO;IAEvB;;;;OAIG;IACH,UAHU,MAAM,CAGE;IAElB;;;;;OAKG;IACH,cAAe;IAMhB;;;OAGG;IACH,kDAkLC;IArJA;;;;;;;;;;;;;;;;OAgBG;IACH,cARU,QAAQ,GAAC,SAAS,CAQC;IAE7B;;;;;;;;;;;;;;OAcG;IACH,qCAA2B;IAgG1B,8CAEE;IAGH;;;OAGG;IACH,wBAA4B;IAK3B,iCAAoC;IAOtC;;;OAGG;IACH,QAFa,IAAI,CAWhB;IAJC,UAA+B;IAMjC;;;OAGG;IACH,UAFa,IAAI,CAWhB;IAED;;;;;;;;OAQG;IACH,cAPW,MAAM,SACN,MAAM,GAAC,MAAM,GACX,IAAI,CAwChB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,MAAM,GAAC,MAAM,EAAE,GACpB,IAAI,CA+FhB;IAkBD,oCAZU,MAAM,EAiBf;IArBD;;;;;;;;;;;OAWG;IACH,gCARU,MAAM,CAUf;IAkCD,+BAlBU,MAAM,EA4Bf;IAnCD;;;;;;;;;;;;;;OAcG;IACH,2BARU,MAAM,CAgBf;IAwDD;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAXW,MAAM,GAAC,MAAM,EAAE,GACb,WAAW,CAmBvB;IAED;;;OAGG;IACH,eAFW,QAAQ,QAsClB;IAED;;;OAGG;IACH,4EA+HC;IAED;;;;OAIG;IACH,gBAWC;CACD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wGAQG;uBAnhC8C,kBAAkB;sBANlC,qBAAqB;yBAE7B,yBAAyB;+BAEnB,gDAAgD;wBAG/B,kBAAkB;0BASzC,yBAAyB;8BAHvB,wBAAwB"}
@@ -1,3 +1,4 @@
1
+
1
2
  export default TextMetrics;
2
3
  /**
3
4
  * a Text Metrics object that contains helper for text manipulation
@@ -36,12 +37,19 @@ declare class TextMetrics extends Bounds {
36
37
  glyphMaxBottom: number | undefined;
37
38
  inkPadTop: number | undefined;
38
39
  inkPadBottom: number | undefined;
40
+ inkPadLeft: number | undefined;
41
+ inkPadRight: number | undefined;
39
42
  /**
40
- * wrap the given text based on the given width
43
+ * wrap the given text based on the given width.
44
+ *
45
+ * Each `\n`-separated line (each entry, for an array) is wrapped on its
46
+ * own, so wrapping only ever adds line breaks: the explicit ones are kept,
47
+ * blank lines included. A line breaks between words, never inside one: a
48
+ * word wider than `width` is put on a line of its own and overflows it.
41
49
  * @param {string|string[]} text - the text to be wrapped
42
50
  * @param {number} width - maximum width of one segment of text in css pixel
43
51
  * @param {CanvasRenderingContext2D} [context] - reference to an active 2d context for canvas rendering
44
- * @returns {string[]} an array of string representing wrapped text
52
+ * @returns {string[]} an array of string representing wrapped text, one entry per line
45
53
  */
46
54
  wordWrap(text: string | string[], width: number, context?: CanvasRenderingContext2D): string[];
47
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"textmetrics.d.ts","sourceRoot":"","sources":["../../../src/renderable/text/textmetrics.js"],"names":[],"mappings":";AA+BA;;GAEG;AACH;IACC;;OAEG;IACH,sBAFW,IAAI,GAAC,UAAU,EAczB;IARA;;;;OAIG;IACH,UAHU,UAAU,CAGI;IAKzB;;;OAGG;IACH,cAFa,MAAM,CAalB;IAED;;;;;OAKG;IACH,gBAJW,MAAM,YACN,wBAAwB,GACtB,MAAM,CA4BlB;IAED;;;;;OAKG;IACH,kBAJW,MAAM,YACN,wBAAwB,GACtB,WAAW,CAiHvB;IA/EA,iCAAqB;IACrB,mCAAuB;IAmCvB,8BAAkB;IAClB,iCAAqB;IA4CtB;;;;;;;;;;;;;;;OAeG;IACH,gBAJa,WAAW,CAoBvB;IAED;;;;;;OAMG;IACH,eALW,MAAM,GAAC,MAAM,EAAE,SACf,MAAM,YACN,wBAAwB,GACtB,MAAM,EAAE,CAyCpB;CACD;uBA/SsB,yBAAyB;4BAOrB,kBAAkB;iBAN5B,WAAW;4BAKD,iBAAiB"}
1
+ {"version":3,"file":"textmetrics.d.ts","sourceRoot":"","sources":["../../../src/renderable/text/textmetrics.js"],"names":[],"mappings":"AA+BA;;;;;;;GAOG;AACH,gCALW,MAAM,GAAC,MAAM,GAAC,MAAM,EAAE,GAAC,IAAI,GACzB,MAAM,EAAE,CAWpB;AAED;;;;;;;;GAQG;AACH,6BANW,MAAM,EAAE,KACR,MAAM,EAAE,GACN,OAAO,CAcnB;;AAaD;;GAEG;AACH;IACC;;OAEG;IACH,sBAFW,IAAI,GAAC,UAAU,EAczB;IARA;;;;OAIG;IACH,UAHU,UAAU,CAGI;IAKzB;;;OAGG;IACH,cAFa,MAAM,CAalB;IAED;;;;;OAKG;IACH,gBAJW,MAAM,YACN,wBAAwB,GACtB,MAAM,CA4BlB;IAED;;;;;OAKG;IACH,kBAJW,MAAM,YACN,wBAAwB,GACtB,WAAW,CAuJvB;IArHA,iCAAqB;IACrB,mCAAuB;IAyCvB,8BAAkB;IAClB,iCAAqB;IACrB,+BAAmB;IACnB,gCAAoB;IA0ErB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,gBAJa,WAAW,CAcvB;IAED;;;;;;;;;;;OAWG;IACH,cAJa,MAAM,CAclB;IAED;;;;;;;;;;;OAWG;IACH,eALW,MAAM,GAAC,MAAM,EAAE,SACf,MAAM,YACN,wBAAwB,GACtB,MAAM,EAAE,CA8CpB;CACD;uBAxasB,yBAAyB;4BAOrB,kBAAkB;iBAN5B,WAAW;4BAKD,iBAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"textstyle.d.ts","sourceRoot":"","sources":["../../../src/renderable/text/textstyle.js"],"names":[],"mappings":"AAmEA;;;;;;;;GAQG;AACH,iDAPW,wBAAwB,SACxB,MAAM,GACJ,MAAM,GAAC,cAAc,CAcjC"}
1
+ {"version":3,"file":"textstyle.d.ts","sourceRoot":"","sources":["../../../src/renderable/text/textstyle.js"],"names":[],"mappings":"AAwFA;;;;;;;;;;;;GAYG;AACH,mCALW,MAAM,GACJ,MAAM,CAclB;AAED;;;;;;;;GAQG;AACH,iDAPW,wBAAwB,SACxB,MAAM,GACJ,MAAM,GAAC,cAAc,CAgBjC"}
@@ -1,5 +1,9 @@
1
1
  import { Color } from "../../math/color.ts";
2
2
  import type { Gradient } from "../../video/gradient.js";
3
- /** anything {@link Renderer#setColor} will take */
3
+ /**
4
+ * A colour a widget is painted with: a CSS string, a {@link Color} (kept
5
+ * and read every frame, so changing it animates the widget), or a gradient.
6
+ * @category UI
7
+ */
4
8
  export type Paint = Color | string | Gradient;
5
9
  //# sourceMappingURL=panelpaint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"panelpaint.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/panelpaint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAa,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxD,mDAAmD;AACnD,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"panelpaint.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/panelpaint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAa,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC"}
@@ -10,147 +10,298 @@ import type { Paint } from "./panelpaint.ts";
10
10
  * the event module; this gets the same set without widening that surface.
11
11
  */
12
12
  type EventName = Parameters<typeof on>[0];
13
- /** which way the fill grows */
13
+ /**
14
+ * Which edge a {@link ProgressBar}'s fill grows from: `"left-to-right"`
15
+ * and `"right-to-left"` for a horizontal bar, `"top-to-bottom"` and
16
+ * `"bottom-to-top"` for a vertical one.
17
+ * @category UI
18
+ */
14
19
  export type ProgressBarDirection = "left-to-right" | "right-to-left" | "top-to-bottom" | "bottom-to-top";
15
20
  /**
16
- * Everything {@link ProgressBar} takes.
21
+ * The settings a {@link ProgressBar} takes. Only `width` and `height` are
22
+ * required.
23
+ * @category UI
17
24
  */
18
25
  export interface ProgressBarSettings {
19
26
  /** the bar's full width, in pixels */
20
27
  width: number;
21
28
  /** the bar's full height, in pixels */
22
29
  height: number;
23
- /** the value that reads as empty */
30
+ /**
31
+ * the value that shows as empty
32
+ * @default 0
33
+ */
24
34
  min?: number;
25
- /** the value that reads as full */
35
+ /**
36
+ * the value that shows as full; given below `min`, the two are swapped
37
+ * @default 1
38
+ */
26
39
  max?: number;
27
- /** where to start */
40
+ /**
41
+ * the starting value, clamped between `min` and `max`; `min` if not given
42
+ */
28
43
  value?: number;
29
- /** which edge the fill grows from */
44
+ /**
45
+ * which edge the fill grows from; see {@link ProgressBarDirection}
46
+ * @default "left-to-right"
47
+ */
30
48
  direction?: ProgressBarDirection;
31
- /** behind the fill; `null` leaves it hollow, showing whatever is behind */
49
+ /**
50
+ * the colour behind the fill; `null` leaves it hollow, showing whatever
51
+ * is behind the bar
52
+ * @default null
53
+ */
32
54
  trackColor?: Paint | null;
33
55
  /**
34
- * the fill itself. A {@link Color} is re-read every frame, so mutating the
35
- * one you passed animates the bar
56
+ * The colour of the fill. A {@link Color} is read again every frame, so
57
+ * changing the one you passed changes the bar.
58
+ * @default "#ffffff"
36
59
  */
37
60
  fillColor?: Paint;
38
- /** drawn around the track; `null` for none */
61
+ /**
62
+ * the colour of the border drawn around the bar; `null` for none
63
+ * @default null
64
+ */
39
65
  borderColor?: Paint | null;
40
- /** how thick that border is */
66
+ /**
67
+ * the border's thickness, in pixels, drawn inside the bar's edge
68
+ * @default 1
69
+ */
41
70
  borderWidth?: number;
42
- /** how far the fill sits inside the track, per side */
71
+ /**
72
+ * the gap between the track's edge and the fill on each side, in pixels
73
+ * @default 0
74
+ */
43
75
  padding?: number;
44
- /** corner radius; `0` is square */
76
+ /**
77
+ * the corner radius, in pixels; `0` is square. The fill's corners are
78
+ * reduced by `padding`, so they stay parallel to the track's.
79
+ * @default 0
80
+ */
45
81
  radius?: number;
46
- /** called whenever the value actually moves */
47
- onChange?: (value: number, ratio: number) => void;
48
- /** draw a label over the bar */
82
+ /**
83
+ * The colour of a drop shadow under the bar; `null` for none. Its alpha
84
+ * sets how dark the shadow is, e.g. `"#00000066"`.
85
+ * @default null
86
+ */
87
+ shadowColor?: Paint | null;
88
+ /**
89
+ * how far right the shadow falls, in pixels; negative goes left
90
+ * @default 0
91
+ */
92
+ shadowOffsetX?: number;
93
+ /**
94
+ * how far down the shadow falls, in pixels; negative goes up
95
+ * @default 4
96
+ */
97
+ shadowOffsetY?: number;
98
+ /**
99
+ * how far the shadow's soft edge spreads, in pixels; `0` is a sharp edge
100
+ * @default 8
101
+ */
102
+ shadowBlur?: number;
103
+ /**
104
+ * Called each time the value changes, with the new value, the same as a
105
+ * `0..1` fraction of the way from `min` to `max`, and the bar. Not called
106
+ * when the value is set to what it already is.
107
+ */
108
+ onChange?: (value: number, ratio: number, bar: ProgressBar) => void;
109
+ /**
110
+ * draw a text label centred over the bar
111
+ * @default false
112
+ */
49
113
  showLabel?: boolean;
50
- /** the label's font family */
114
+ /**
115
+ * the label's CSS font family
116
+ * @default "sans-serif"
117
+ */
51
118
  font?: string;
52
- /** the label's font size, in pixels */
119
+ /**
120
+ * the label's text height, in pixels; 70% of the bar's height (at least
121
+ * 8), rounded, if not given
122
+ */
53
123
  fontSize?: number;
54
- /** the label's colour */
124
+ /**
125
+ * the label's colour
126
+ * @default "#ffffff"
127
+ */
55
128
  labelFillStyle?: Paint;
56
- /** what the label says; the default is a rounded percentage */
129
+ /**
130
+ * What the label says, given the value and its `0..1` fraction. The
131
+ * default shows a rounded percentage, such as `"75%"`.
132
+ */
57
133
  labelFormat?: (value: number, ratio: number) => string;
58
134
  /**
59
- * an event to take the value from, instead of setting it by hand.
60
- *
61
- * The bar subscribes for as long as it exists and unsubscribes when it is
62
- * destroyed, which is the point: a subscription that outlives what it
63
- * drives is a listener writing into a freed object.
135
+ * An event to take the value from, instead of setting it by hand: each
136
+ * time the event fires, its first argument becomes the value. The bar
137
+ * stops listening when it is destroyed.
64
138
  */
65
139
  bindEvent?: EventName;
66
140
  }
67
141
  /**
68
- * A bar that shows one value between two bounds.
142
+ * A bar that shows one value between a minimum and a maximum: a health
143
+ * bar, a shield or stamina gauge, a cooldown, a loading bar. Set
144
+ * {@link ProgressBar#value} and it redraws. The engine's own loading screen
145
+ * uses one.
146
+ *
147
+ * It draws its track, fill, border and optional label itself, as one
148
+ * renderable, so there is nothing to keep in step.
69
149
  *
70
- * A health bar, a shield gauge, a cooldown, a loading bar: all the same
71
- * object, and the engine's own loading screen is built on this one. Set
72
- * {@link ProgressBar#value} and it redraws.
150
+ * ## Look
151
+ * `trackColor` is behind the fill (`null` for a hollow frame), `fillColor`
152
+ * is the fill, `borderColor` and `borderWidth` draw an outline, `padding`
153
+ * insets the fill, and `radius` rounds the corners. `direction` sets which
154
+ * edge the fill grows from, horizontal or vertical.
73
155
  *
74
- * It draws the track, the fill, the border and the label itself, in that
75
- * order, which is the point of it being ONE renderable rather than a track
76
- * sprite with a fill sprite on top. Two renderables at the same place have to
77
- * be told which is in front, and that question has to be answered again every
78
- * time either one moves.
156
+ * ## Value
157
+ * `min` and `max` set the range (`0` to `1` by default). A value outside it
158
+ * is clamped. {@link ProgressBar#ratio} gives the value as a `0..1`
159
+ * fraction. `onChange(value, ratio, bar)` is called whenever the value
160
+ * changes, and `bindEvent` takes the value from an event.
79
161
  *
80
- * ## The colour can follow the value
162
+ * ## Label
163
+ * `showLabel` draws text over the bar, a percentage by default; `labelFormat`
164
+ * changes what it says, and `font`, `fontSize` and `labelFillStyle` how it
165
+ * looks.
81
166
  *
82
- * `fillColor` is read at draw time rather than copied, so passing a
83
- * {@link Color} you keep hold of and mutating it is all a value-driven colour
84
- * takes. That is deliberately not built in, because every game wants a
85
- * different rule and most want the colour somewhere else too, next to a shader
86
- * uniform or a glow:
167
+ * ## Drop shadow
168
+ * `shadowColor` draws a soft shadow under the bar; its alpha sets how dark
169
+ * it is. `shadowOffsetX` and `shadowOffsetY` move it and `shadowBlur`
170
+ * softens its edge.
171
+ *
172
+ * ## Colour that follows the value
173
+ * `fillColor` is read every frame, not copied, so pass a {@link Color} you
174
+ * keep and change it as the value changes. To make the bar blink, use
175
+ * {@link Renderable#setOpacity}.
176
+ * @category UI
177
+ * @example
178
+ * // a loading bar, fed by the loader
179
+ * import { ProgressBar, event } from "melonjs";
180
+ *
181
+ * const loading = new ProgressBar(0, 300, {
182
+ * width: 800,
183
+ * height: 4,
184
+ * trackColor: "black",
185
+ * fillColor: "#55aa00",
186
+ * bindEvent: event.LOADER_PROGRESS,
187
+ * });
188
+ * app.world.addChild(loading);
189
+ * @example
190
+ * // a health bar with a label, and a range that is not 0 to 1
191
+ * const hp = new ProgressBar(20, 20, {
192
+ * width: 200,
193
+ * height: 24,
194
+ * min: 0,
195
+ * max: 100,
196
+ * value: 100,
197
+ * trackColor: "#3a1010",
198
+ * fillColor: "#c0392b",
199
+ * radius: 6,
200
+ * showLabel: true,
201
+ * labelFormat: (value) => `${Math.round(value)} HP`,
202
+ * });
203
+ * // when the player is hit
204
+ * hp.value -= 15;
205
+ * @example
206
+ * // a colour that follows the value, from red when empty to blue when full
207
+ * import { ProgressBar, Color } from "melonjs";
87
208
  *
88
- * ```js
89
209
  * const full = new Color().parseCSS("#7fe0ff");
90
210
  * const empty = new Color().parseCSS("#ff2a1e");
91
- * const mixed = new Color();
92
- *
93
- * const shield = new ProgressBar(x, y, {
94
- * width: 190, height: 13,
95
- * trackColor: null, // a hollow frame
211
+ * const mixed = full.clone();
212
+ * const shield = new ProgressBar(20, 52, {
213
+ * width: 190,
214
+ * height: 13,
215
+ * value: 1,
216
+ * trackColor: null, // a hollow frame
96
217
  * borderColor: "rgba(122, 190, 235, 0.8)",
97
218
  * padding: 2,
98
- * fillColor: mixed, // kept, not copied
219
+ * radius: 4,
220
+ * fillColor: mixed, // kept, not copied
221
+ * onChange: (value, ratio) => {
222
+ * mixed.copy(empty).lerp(full, ratio);
223
+ * },
99
224
  * });
100
- *
101
- * // each frame
102
- * mixed.copy(empty).lerp(full, hp);
103
- * shield.value = hp;
104
- * ```
105
- *
106
- * Blinking is the same story: {@link Renderable#setOpacity} already does it,
107
- * on whatever clock the game is already keeping.
108
- * @category UI
109
225
  * @example
110
- * // a loading bar
111
- * const bar = new ProgressBar(0, 100, {
112
- * width: renderer.width, height: 4,
113
- * trackColor: "black", fillColor: "#55aa00",
226
+ * // a vertical bar that fills from the bottom
227
+ * const power = new ProgressBar(740, 200, {
228
+ * width: 16,
229
+ * height: 120,
230
+ * direction: "bottom-to-top",
231
+ * trackColor: "#222222",
232
+ * fillColor: "#f1c40f",
233
+ * borderColor: "#ffffff",
234
+ * borderWidth: 2,
235
+ * padding: 3,
114
236
  * });
115
- * event.on(event.LOADER_PROGRESS, (progress) => { bar.value = progress; });
116
237
  * @example
117
- * // a label, and a value that is not a fraction
118
- * const hp = new ProgressBar(20, 20, {
119
- * width: 200, height: 24,
120
- * min: 0, max: 100, value: 100,
121
- * fillColor: "#c0392b", radius: 6,
122
- * showLabel: true,
123
- * labelFormat: (v) => `${Math.round(v)} HP`,
238
+ * // a drop shadow under the bar
239
+ * const xp = new ProgressBar(20, 80, {
240
+ * width: 240,
241
+ * height: 16,
242
+ * trackColor: "#1e1e2e",
243
+ * fillColor: "#9b59b6",
244
+ * radius: 8,
245
+ * shadowColor: "#00000080", // the alpha sets how dark
246
+ * shadowOffsetY: 3,
247
+ * shadowBlur: 6,
248
+ * });
249
+ * @example
250
+ * // react when the bar is emptied
251
+ * const timer = new ProgressBar(20, 110, {
252
+ * width: 200,
253
+ * height: 8,
254
+ * value: 1,
255
+ * fillColor: "#2ecc71",
256
+ * onChange: (value, ratio, bar) => {
257
+ * if (ratio === 0) {
258
+ * bar.setOpacity(0.5);
259
+ * onTimeUp();
260
+ * }
261
+ * },
124
262
  * });
125
263
  */
126
264
  export default class ProgressBar extends Renderable {
127
- /** the value that reads as empty */
128
- min: number;
129
- /** the value that reads as full */
130
- max: number;
131
- /** which edge the fill grows from */
265
+ /** which edge the fill grows from; see {@link ProgressBarDirection} */
132
266
  direction: ProgressBarDirection;
133
- /** behind the fill; `null` leaves it hollow */
267
+ /** the colour behind the fill; `null` leaves it hollow */
134
268
  trackColor: Paint | null;
135
- /** the fill. A {@link Color} here is re-read every frame */
269
+ /** the colour of the fill; a {@link Color} here is read every frame */
136
270
  fillColor: Paint;
137
- /** drawn around the track; `null` for none */
271
+ /** the colour of the border; `null` for none */
138
272
  borderColor: Paint | null;
139
- /** how thick that border is */
273
+ /** the border's thickness, in pixels */
140
274
  borderWidth: number;
141
- /** how far the fill sits inside the track, per side */
275
+ /** the gap between the track's edge and the fill on each side, in pixels */
142
276
  padding: number;
143
- /** corner radius; `0` is square */
277
+ /** the corner radius, in pixels; `0` is square */
144
278
  radius: number;
145
- /** called whenever the value actually moves */
146
- onChange?: ((value: number, ratio: number) => void) | undefined;
147
- /** what the label says */
279
+ /** the colour of the drop shadow, its alpha setting how dark; `null` for none */
280
+ shadowColor: Paint | null;
281
+ /** how far right the shadow falls, in pixels */
282
+ shadowOffsetX: number;
283
+ /** how far down the shadow falls, in pixels */
284
+ shadowOffsetY: number;
285
+ /** how far the shadow's soft edge spreads, in pixels */
286
+ shadowBlur: number;
287
+ /**
288
+ * Called each time the value changes, with the new value, its `0..1`
289
+ * fraction from `min` to `max`, and the bar.
290
+ * @example
291
+ * bar.onChange = (value, ratio, bar) => {
292
+ * bar.setOpacity(ratio < 0.25 ? 0.6 : 1);
293
+ * };
294
+ */
295
+ onChange?: ((value: number, ratio: number, bar: ProgressBar) => void) | undefined;
296
+ /** builds the label's text from the value and its `0..1` fraction */
148
297
  labelFormat: (value: number, ratio: number) => string;
149
- /** the label, when `showLabel` was asked for */
298
+ /** the label's text object, when `showLabel` was set */
150
299
  label?: Text | undefined;
151
300
  /** the event the value is taken from, if any */
152
301
  readonly bindEvent?: EventName | undefined;
153
302
  private _value;
303
+ private _min;
304
+ private _max;
154
305
  /**
155
306
  * @param x - position of the bar's left edge
156
307
  * @param y - position of its top edge
@@ -158,22 +309,43 @@ export default class ProgressBar extends Renderable {
158
309
  */
159
310
  constructor(x: number, y: number, settings: ProgressBarSettings);
160
311
  /**
161
- * Where the bar is now, between {@link ProgressBar#min} and
162
- * {@link ProgressBar#max}.
163
- *
164
- * Writing a value outside that range clamps rather than throwing, since
165
- * the usual source is a health or a timer that has just gone past its own
166
- * limit. Writing the value it already has does nothing at all, so
167
- * `onChange` means the value MOVED.
312
+ * The value that shows as empty. Setting it clamps the value into the
313
+ * new range, and a `min` above `max` raises `max` to it, so the bar never
314
+ * draws past its ends. A value moved by the clamp calls `onChange`, as
315
+ * any change of the value does; the label is rewritten either way.
316
+ * @example
317
+ * // a gauge that starts at 50 rather than 0
318
+ * pressure.min = 50;
319
+ */
320
+ get min(): number;
321
+ set min(v: number);
322
+ /**
323
+ * The value that shows as full. Setting it clamps the value into the
324
+ * new range, and a `max` below `min` lowers `min` to it, so the bar never
325
+ * draws past its ends. A value moved by the clamp calls `onChange`, as
326
+ * any change of the value does; the label is rewritten either way.
327
+ * @example
328
+ * // a debuff lowers the most health the player can have: a full bar
329
+ * // stays full, at the new maximum
330
+ * hp.max = 50;
331
+ */
332
+ get max(): number;
333
+ set max(v: number);
334
+ /**
335
+ * The current value, between {@link ProgressBar#min} and
336
+ * {@link ProgressBar#max}. Setting it redraws the bar and updates the
337
+ * label. A value outside the range is clamped, and setting the value it
338
+ * already has does nothing, so `onChange` only fires on a real change.
339
+ * @example
340
+ * // a cooldown that refills over 3 seconds
341
+ * cooldown.value = Math.min(1, elapsed / 3000);
168
342
  */
169
343
  get value(): number;
170
344
  set value(v: number);
171
345
  /**
172
- * The value as a fraction, `0` at `min` and `1` at `max`.
173
- *
174
- * This is what the fill is drawn from, and what a caller usually wants for
175
- * anything else keyed to the same number. Read only; set
176
- * {@link ProgressBar#value}.
346
+ * The value as a fraction, `0` at `min` and `1` at `max`; how full the
347
+ * bar is drawn. Always within `0..1`, and `0` when `min` equals `max`.
348
+ * Read only: set {@link ProgressBar#value} instead.
177
349
  */
178
350
  get ratio(): number;
179
351
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"progressbar.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/progressbar.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;;;;GAKG;AACH,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C,+BAA+B;AAC/B,MAAM,MAAM,oBAAoB,GAC7B,eAAe,GACf,eAAe,GACf,eAAe,GACf,eAAe,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC3B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,UAAU;IAClD,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,SAAS,EAAE,oBAAoB,CAAC;IAChC,+CAA+C;IAC/C,UAAU,EAAE,KAAK,GAAG,IAAI,CAAC;IACzB,4DAA4D;IAC5D,SAAS,EAAE,KAAK,CAAC;IACjB,8CAA8C;IAC9C,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;IAC1B,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAChE,0BAA0B;IAC1B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,gDAAgD;IAChD,KAAK,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAE3C,OAAO,CAAC,MAAM,CAAS;IAYvB;;;;OAIG;gBACS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB;IAyD/D;;;;;;;;OAQG;IACH,IAAI,KAAK,IAII,MAAM,CAFlB;IAED,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAWlB;IAED;;;;;;OAMG;IACH,IAAI,KAAK,WAGR;IAYD;;;;OAIG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM;IAKlB;;;OAGG;IACM,IAAI,CAAC,QAAQ,EAAE,QAAQ;CAgGhC"}
1
+ {"version":3,"file":"progressbar.d.ts","sourceRoot":"","sources":["../../../src/renderable/ui/progressbar.ts"],"names":[],"mappings":"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"}