melonjs 14.0.2 → 14.1.1

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 (219) hide show
  1. package/README.md +2 -0
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +10 -0
  3. package/dist/melonjs.mjs/_virtual/arraymultimap.js +10 -0
  4. package/dist/melonjs.mjs/_virtual/earcut.js +10 -0
  5. package/dist/melonjs.mjs/_virtual/howler.js +10 -0
  6. package/dist/melonjs.mjs/_virtual/index.js +10 -0
  7. package/dist/melonjs.mjs/_virtual/index2.js +10 -0
  8. package/dist/melonjs.mjs/_virtual/multimap.js +10 -0
  9. package/dist/melonjs.mjs/_virtual/setmultimap.js +10 -0
  10. package/dist/melonjs.mjs/application/application.js +238 -0
  11. package/dist/melonjs.mjs/audio/audio.js +536 -0
  12. package/dist/melonjs.mjs/camera/camera2d.js +731 -0
  13. package/dist/melonjs.mjs/entity/entity.js +247 -0
  14. package/dist/melonjs.mjs/game.js +29 -0
  15. package/dist/melonjs.mjs/geometries/ellipse.js +274 -0
  16. package/dist/melonjs.mjs/geometries/line.js +115 -0
  17. package/dist/melonjs.mjs/geometries/path2d.js +318 -0
  18. package/dist/melonjs.mjs/geometries/point.js +88 -0
  19. package/dist/melonjs.mjs/geometries/poly.js +498 -0
  20. package/dist/melonjs.mjs/geometries/rectangle.js +374 -0
  21. package/dist/melonjs.mjs/geometries/roundrect.js +167 -0
  22. package/dist/melonjs.mjs/index.js +248 -0
  23. package/dist/melonjs.mjs/input/gamepad.js +501 -0
  24. package/dist/melonjs.mjs/input/input.js +26 -0
  25. package/dist/melonjs.mjs/input/keyboard.js +470 -0
  26. package/dist/melonjs.mjs/input/pointer.js +393 -0
  27. package/dist/melonjs.mjs/input/pointerevent.js +818 -0
  28. package/dist/melonjs.mjs/lang/deprecated.js +157 -0
  29. package/dist/melonjs.mjs/level/level.js +297 -0
  30. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +141 -0
  31. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +446 -0
  32. package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
  33. package/dist/melonjs.mjs/level/tiled/TMXTile.js +193 -0
  34. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +636 -0
  35. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +309 -0
  36. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +81 -0
  37. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
  38. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +504 -0
  39. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +218 -0
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +155 -0
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +124 -0
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +107 -0
  43. package/dist/melonjs.mjs/loader/loader.js +801 -0
  44. package/dist/melonjs.mjs/loader/loadingscreen.js +120 -0
  45. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +11 -0
  46. package/dist/melonjs.mjs/math/color.js +616 -0
  47. package/dist/melonjs.mjs/math/math.js +218 -0
  48. package/dist/melonjs.mjs/math/matrix2.js +501 -0
  49. package/dist/melonjs.mjs/math/matrix3.js +679 -0
  50. package/dist/melonjs.mjs/math/observable_vector2.js +469 -0
  51. package/dist/melonjs.mjs/math/observable_vector3.js +559 -0
  52. package/dist/melonjs.mjs/math/vector2.js +526 -0
  53. package/dist/melonjs.mjs/math/vector3.js +567 -0
  54. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +73 -0
  55. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +21 -0
  56. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +324 -0
  57. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +69 -0
  58. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +691 -0
  59. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +350 -0
  60. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +3241 -0
  61. package/dist/melonjs.mjs/particles/emitter.js +265 -0
  62. package/dist/melonjs.mjs/particles/particle.js +186 -0
  63. package/dist/melonjs.mjs/particles/settings.js +319 -0
  64. package/dist/melonjs.mjs/physics/body.js +702 -0
  65. package/dist/melonjs.mjs/physics/bounds.js +459 -0
  66. package/dist/melonjs.mjs/physics/collision.js +132 -0
  67. package/dist/melonjs.mjs/physics/detector.js +194 -0
  68. package/dist/melonjs.mjs/physics/quadtree.js +394 -0
  69. package/dist/melonjs.mjs/physics/response.js +57 -0
  70. package/dist/melonjs.mjs/physics/sat.js +483 -0
  71. package/dist/melonjs.mjs/physics/world.js +219 -0
  72. package/dist/melonjs.mjs/plugin/plugin.js +141 -0
  73. package/dist/melonjs.mjs/renderable/collectable.js +60 -0
  74. package/dist/melonjs.mjs/renderable/colorlayer.js +78 -0
  75. package/dist/melonjs.mjs/renderable/container.js +1016 -0
  76. package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
  77. package/dist/melonjs.mjs/renderable/imagelayer.js +305 -0
  78. package/dist/melonjs.mjs/renderable/light2d.js +155 -0
  79. package/dist/melonjs.mjs/renderable/nineslicesprite.js +246 -0
  80. package/dist/melonjs.mjs/renderable/renderable.js +781 -0
  81. package/dist/melonjs.mjs/renderable/sprite.js +653 -0
  82. package/dist/melonjs.mjs/renderable/trigger.js +156 -0
  83. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +212 -0
  84. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +225 -0
  85. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +127 -0
  86. package/dist/melonjs.mjs/state/stage.js +236 -0
  87. package/dist/melonjs.mjs/state/state.js +596 -0
  88. package/dist/melonjs.mjs/system/device.js +909 -0
  89. package/dist/melonjs.mjs/system/dom.js +78 -0
  90. package/dist/melonjs.mjs/system/event.js +537 -0
  91. package/dist/melonjs.mjs/system/platform.js +41 -0
  92. package/dist/melonjs.mjs/system/pooling.js +209 -0
  93. package/dist/melonjs.mjs/system/save.js +157 -0
  94. package/dist/melonjs.mjs/system/timer.js +286 -0
  95. package/dist/melonjs.mjs/text/bitmaptext.js +363 -0
  96. package/dist/melonjs.mjs/text/bitmaptextdata.js +198 -0
  97. package/dist/melonjs.mjs/text/glyph.js +65 -0
  98. package/dist/melonjs.mjs/text/text.js +452 -0
  99. package/dist/melonjs.mjs/text/textmetrics.js +175 -0
  100. package/dist/melonjs.mjs/text/textstyle.js +23 -0
  101. package/dist/melonjs.mjs/tweens/easing.js +336 -0
  102. package/dist/melonjs.mjs/tweens/interpolation.js +112 -0
  103. package/dist/melonjs.mjs/tweens/tween.js +479 -0
  104. package/dist/melonjs.mjs/utils/agent.js +76 -0
  105. package/dist/melonjs.mjs/utils/array.js +63 -0
  106. package/dist/melonjs.mjs/utils/file.js +42 -0
  107. package/dist/melonjs.mjs/utils/function.js +70 -0
  108. package/dist/melonjs.mjs/utils/string.js +82 -0
  109. package/dist/melonjs.mjs/utils/utils.js +173 -0
  110. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +806 -0
  111. package/dist/melonjs.mjs/video/renderer.js +410 -0
  112. package/dist/melonjs.mjs/video/texture/atlas.js +519 -0
  113. package/dist/melonjs.mjs/video/texture/cache.js +143 -0
  114. package/dist/melonjs.mjs/video/texture/canvas_texture.js +144 -0
  115. package/dist/melonjs.mjs/video/video.js +462 -0
  116. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +142 -0
  117. package/dist/melonjs.mjs/video/webgl/glshader.js +167 -0
  118. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +10 -0
  119. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +10 -0
  120. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +10 -0
  121. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +10 -0
  122. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +25 -0
  123. package/dist/melonjs.mjs/video/webgl/utils/precision.js +20 -0
  124. package/dist/melonjs.mjs/video/webgl/utils/program.js +67 -0
  125. package/dist/melonjs.mjs/video/webgl/utils/string.js +25 -0
  126. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +92 -0
  127. package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +494 -0
  128. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1035 -0
  129. package/dist/melonjs.module.d.ts +1298 -1359
  130. package/dist/melonjs.module.js +2072 -3520
  131. package/package.json +21 -16
  132. package/src/application/application.js +4 -5
  133. package/src/audio/audio.js +32 -32
  134. package/src/camera/camera2d.js +32 -33
  135. package/src/entity/entity.js +18 -19
  136. package/src/geometries/ellipse.js +17 -18
  137. package/src/geometries/line.js +6 -7
  138. package/src/geometries/path2d.js +33 -34
  139. package/src/geometries/point.js +1 -2
  140. package/src/geometries/poly.js +16 -18
  141. package/src/geometries/rectangle.js +19 -20
  142. package/src/geometries/roundrect.js +9 -10
  143. package/src/input/gamepad.js +15 -15
  144. package/src/input/keyboard.js +12 -12
  145. package/src/input/pointer.js +6 -6
  146. package/src/input/pointerevent.js +12 -12
  147. package/src/lang/deprecated.js +12 -12
  148. package/src/level/level.js +25 -25
  149. package/src/level/tiled/TMXLayer.js +23 -24
  150. package/src/level/tiled/TMXTile.js +6 -7
  151. package/src/level/tiled/TMXTileMap.js +8 -10
  152. package/src/level/tiled/TMXTileset.js +3 -4
  153. package/src/level/tiled/TMXTilesetGroup.js +1 -2
  154. package/src/level/tiled/TMXUtils.js +5 -5
  155. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +3 -4
  156. package/src/level/tiled/renderer/TMXIsometricRenderer.js +3 -4
  157. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +2 -3
  158. package/src/level/tiled/renderer/TMXRenderer.js +20 -21
  159. package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -2
  160. package/src/loader/loader.js +20 -20
  161. package/src/math/color.js +21 -22
  162. package/src/math/math.js +16 -16
  163. package/src/math/matrix2.js +17 -18
  164. package/src/math/matrix3.js +26 -27
  165. package/src/math/observable_vector2.js +15 -16
  166. package/src/math/observable_vector3.js +17 -18
  167. package/src/math/vector2.js +10 -11
  168. package/src/math/vector3.js +11 -12
  169. package/src/particles/emitter.js +7 -8
  170. package/src/particles/particle.js +3 -4
  171. package/src/physics/body.js +29 -30
  172. package/src/physics/bounds.js +10 -10
  173. package/src/physics/collision.js +2 -2
  174. package/src/physics/detector.js +6 -6
  175. package/src/physics/quadtree.js +18 -23
  176. package/src/physics/sat.js +31 -31
  177. package/src/physics/world.js +6 -7
  178. package/src/plugin/plugin.js +5 -5
  179. package/src/renderable/collectable.js +4 -6
  180. package/src/renderable/colorlayer.js +6 -8
  181. package/src/renderable/container.js +25 -27
  182. package/src/renderable/dragndrop.js +14 -14
  183. package/src/renderable/imagelayer.js +14 -15
  184. package/src/renderable/light2d.js +4 -5
  185. package/src/renderable/nineslicesprite.js +17 -18
  186. package/src/renderable/renderable.js +26 -28
  187. package/src/renderable/sprite.js +29 -30
  188. package/src/renderable/trigger.js +16 -17
  189. package/src/renderable/ui/uibaseelement.js +8 -9
  190. package/src/renderable/ui/uispriteelement.js +8 -8
  191. package/src/renderable/ui/uitextbutton.js +15 -15
  192. package/src/state/stage.js +8 -9
  193. package/src/state/state.js +17 -17
  194. package/src/system/device.js +11 -11
  195. package/src/system/event.js +10 -10
  196. package/src/system/pooling.js +9 -9
  197. package/src/system/save.js +2 -2
  198. package/src/system/timer.js +10 -10
  199. package/src/text/bitmaptext.js +19 -20
  200. package/src/text/bitmaptextdata.js +3 -4
  201. package/src/text/glyph.js +1 -2
  202. package/src/text/text.js +24 -25
  203. package/src/text/textmetrics.js +9 -10
  204. package/src/tweens/tween.js +20 -21
  205. package/src/utils/agent.js +5 -5
  206. package/src/utils/array.js +4 -4
  207. package/src/utils/file.js +2 -2
  208. package/src/utils/function.js +6 -6
  209. package/src/utils/string.js +5 -5
  210. package/src/utils/utils.js +4 -4
  211. package/src/video/canvas/canvas_renderer.js +72 -73
  212. package/src/video/renderer.js +27 -28
  213. package/src/video/texture/atlas.js +22 -22
  214. package/src/video/texture/canvas_texture.js +9 -9
  215. package/src/video/video.js +17 -17
  216. package/src/video/webgl/buffer/vertex.js +1 -2
  217. package/src/video/webgl/glshader.js +12 -12
  218. package/src/video/webgl/webgl_compositor.js +42 -43
  219. package/src/video/webgl/webgl_renderer.js +76 -77
@@ -0,0 +1,616 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.1
3
+ * http://www.melonjs.org
4
+ * melonjs is licensed under the MIT License.
5
+ * http://www.opensource.org/licenses/mit-license
6
+ * @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
7
+ */
8
+ import { clamp, random } from './math.js';
9
+ import pool from '../system/pooling.js';
10
+
11
+ // convert a give color component to it hexadecimal value
12
+ function toHex(component) {
13
+ return "0123456789ABCDEF".charAt((component - (component % 16)) >> 4) + "0123456789ABCDEF".charAt(component % 16);
14
+ }
15
+
16
+ function hue2rgb(p, q, t) {
17
+ if (t < 0) t += 1;
18
+ if (t > 1) t -= 1;
19
+ if (t < 1/6) return p + (q - p) * 6 * t;
20
+ if (t < 1/2) return q;
21
+ if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;
22
+ return p;
23
+ }
24
+
25
+ const rgbaRx = /^rgba?\((\d+), ?(\d+), ?(\d+)(, ?([\d\.]+))?\)$/;
26
+ const hex3Rx = /^#([\da-fA-F])([\da-fA-F])([\da-fA-F])$/;
27
+ const hex4Rx = /^#([\da-fA-F])([\da-fA-F])([\da-fA-F])([\da-fA-F])$/;
28
+ const hex6Rx = /^#([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})$/;
29
+ const hex8Rx = /^#([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})$/;
30
+
31
+ var cssToRGB = new Map();
32
+
33
+ [
34
+ // CSS1
35
+ [ "black", [ 0, 0, 0 ] ],
36
+ [ "silver", [ 192, 192, 129 ] ],
37
+ [ "gray", [ 128, 128, 128 ] ],
38
+ [ "white", [ 255, 255, 255 ] ],
39
+ [ "maroon", [ 128, 0, 0 ] ],
40
+ [ "red", [ 255, 0, 0 ] ],
41
+ [ "purple", [ 128, 0, 128 ] ],
42
+ [ "fuchsia", [ 255, 0, 255 ] ],
43
+ [ "green", [ 0, 128, 0 ] ],
44
+ [ "lime", [ 0, 255, 0 ] ],
45
+ [ "olive", [ 128, 128, 0 ] ],
46
+ [ "yellow", [ 255, 255, 0 ] ],
47
+ [ "navy", [ 0, 0, 128 ] ],
48
+ [ "blue", [ 0, 0, 255 ] ],
49
+ [ "teal", [ 0, 128, 128 ] ],
50
+ [ "aqua", [ 0, 255, 255 ] ],
51
+
52
+ // CSS2
53
+ [ "orange", [ 255, 165, 0 ] ],
54
+
55
+ // CSS3
56
+ [ "aliceblue", [ 240, 248, 245 ] ],
57
+ [ "antiquewhite", [ 250, 235, 215 ] ],
58
+ [ "aquamarine", [ 127, 255, 212 ] ],
59
+ [ "azure", [ 240, 255, 255 ] ],
60
+ [ "beige", [ 245, 245, 220 ] ],
61
+ [ "bisque", [ 255, 228, 196 ] ],
62
+ [ "blanchedalmond", [ 255, 235, 205 ] ],
63
+ [ "blueviolet", [ 138, 43, 226 ] ],
64
+ [ "brown", [ 165, 42, 42 ] ],
65
+ [ "burlywood", [ 222, 184, 35 ] ],
66
+ [ "cadetblue", [ 95, 158, 160 ] ],
67
+ [ "chartreuse", [ 127, 255, 0 ] ],
68
+ [ "chocolate", [ 210, 105, 30 ] ],
69
+ [ "coral", [ 255, 127, 80 ] ],
70
+ [ "cornflowerblue", [ 100, 149, 237 ] ],
71
+ [ "cornsilk", [ 255, 248, 220 ] ],
72
+ [ "crimson", [ 220, 20, 60 ] ],
73
+ [ "darkblue", [ 0, 0, 139 ] ],
74
+ [ "darkcyan", [ 0, 139, 139 ] ],
75
+ [ "darkgoldenrod", [ 184, 134, 11 ] ],
76
+ [ "darkgray[*]", [ 169, 169, 169 ] ],
77
+ [ "darkgreen", [ 0, 100, 0 ] ],
78
+ [ "darkgrey[*]", [ 169, 169, 169 ] ],
79
+ [ "darkkhaki", [ 189, 183, 107 ] ],
80
+ [ "darkmagenta", [ 139, 0, 139 ] ],
81
+ [ "darkolivegreen", [ 85, 107, 47 ] ],
82
+ [ "darkorange", [ 255, 140, 0 ] ],
83
+ [ "darkorchid", [ 153, 50, 204 ] ],
84
+ [ "darkred", [ 139, 0, 0 ] ],
85
+ [ "darksalmon", [ 233, 150, 122 ] ],
86
+ [ "darkseagreen", [ 143, 188, 143 ] ],
87
+ [ "darkslateblue", [ 72, 61, 139 ] ],
88
+ [ "darkslategray", [ 47, 79, 79 ] ],
89
+ [ "darkslategrey", [ 47, 79, 79 ] ],
90
+ [ "darkturquoise", [ 0, 206, 209 ] ],
91
+ [ "darkviolet", [ 148, 0, 211 ] ],
92
+ [ "deeppink", [ 255, 20, 147 ] ],
93
+ [ "deepskyblue", [ 0, 191, 255 ] ],
94
+ [ "dimgray", [ 105, 105, 105 ] ],
95
+ [ "dimgrey", [ 105, 105, 105 ] ],
96
+ [ "dodgerblue", [ 30, 144, 255 ] ],
97
+ [ "firebrick", [ 178, 34, 34 ] ],
98
+ [ "floralwhite", [ 255, 250, 240 ] ],
99
+ [ "forestgreen", [ 34, 139, 34 ] ],
100
+ [ "gainsboro", [ 220, 220, 220 ] ],
101
+ [ "ghostwhite", [ 248, 248, 255 ] ],
102
+ [ "gold", [ 255, 215, 0 ] ],
103
+ [ "goldenrod", [ 218, 165, 32 ] ],
104
+ [ "greenyellow", [ 173, 255, 47 ] ],
105
+ [ "grey", [ 128, 128, 128 ] ],
106
+ [ "honeydew", [ 240, 255, 240 ] ],
107
+ [ "hotpink", [ 255, 105, 180 ] ],
108
+ [ "indianred", [ 205, 92, 92 ] ],
109
+ [ "indigo", [ 75, 0, 130 ] ],
110
+ [ "ivory", [ 255, 255, 240 ] ],
111
+ [ "khaki", [ 240, 230, 140 ] ],
112
+ [ "lavender", [ 230, 230, 250 ] ],
113
+ [ "lavenderblush", [ 255, 240, 245 ] ],
114
+ [ "lawngreen", [ 124, 252, 0 ] ],
115
+ [ "lemonchiffon", [ 255, 250, 205 ] ],
116
+ [ "lightblue", [ 173, 216, 230 ] ],
117
+ [ "lightcoral", [ 240, 128, 128 ] ],
118
+ [ "lightcyan", [ 224, 255, 255 ] ],
119
+ [ "lightgoldenrodyellow", [ 250, 250, 210 ] ],
120
+ [ "lightgray", [ 211, 211, 211 ] ],
121
+ [ "lightgreen", [ 144, 238, 144 ] ],
122
+ [ "lightgrey", [ 211, 211, 211 ] ],
123
+ [ "lightpink", [ 255, 182, 193 ] ],
124
+ [ "lightsalmon", [ 255, 160, 122 ] ],
125
+ [ "lightseagreen", [ 32, 178, 170 ] ],
126
+ [ "lightskyblue", [ 135, 206, 250 ] ],
127
+ [ "lightslategray", [ 119, 136, 153 ] ],
128
+ [ "lightslategrey", [ 119, 136, 153 ] ],
129
+ [ "lightsteelblue", [ 176, 196, 222 ] ],
130
+ [ "lightyellow", [ 255, 255, 224 ] ],
131
+ [ "limegreen", [ 50, 205, 50 ] ],
132
+ [ "linen", [ 250, 240, 230 ] ],
133
+ [ "mediumaquamarine", [ 102, 205, 170 ] ],
134
+ [ "mediumblue", [ 0, 0, 205 ] ],
135
+ [ "mediumorchid", [ 186, 85, 211 ] ],
136
+ [ "mediumpurple", [ 147, 112, 219 ] ],
137
+ [ "mediumseagreen", [ 60, 179, 113 ] ],
138
+ [ "mediumslateblue", [ 123, 104, 238 ] ],
139
+ [ "mediumspringgreen", [ 0, 250, 154 ] ],
140
+ [ "mediumturquoise", [ 72, 209, 204 ] ],
141
+ [ "mediumvioletred", [ 199, 21, 133 ] ],
142
+ [ "midnightblue", [ 25, 25, 112 ] ],
143
+ [ "mintcream", [ 245, 255, 250 ] ],
144
+ [ "mistyrose", [ 255, 228, 225 ] ],
145
+ [ "moccasin", [ 255, 228, 181 ] ],
146
+ [ "navajowhite", [ 255, 222, 173 ] ],
147
+ [ "oldlace", [ 253, 245, 230 ] ],
148
+ [ "olivedrab", [ 107, 142, 35 ] ],
149
+ [ "orangered", [ 255, 69, 0 ] ],
150
+ [ "orchid", [ 218, 112, 214 ] ],
151
+ [ "palegoldenrod", [ 238, 232, 170 ] ],
152
+ [ "palegreen", [ 152, 251, 152 ] ],
153
+ [ "paleturquoise", [ 175, 238, 238 ] ],
154
+ [ "palevioletred", [ 219, 112, 147 ] ],
155
+ [ "papayawhip", [ 255, 239, 213 ] ],
156
+ [ "peachpuff", [ 255, 218, 185 ] ],
157
+ [ "peru", [ 205, 133, 63 ] ],
158
+ [ "pink", [ 255, 192, 203 ] ],
159
+ [ "plum", [ 221, 160, 221 ] ],
160
+ [ "powderblue", [ 176, 224, 230 ] ],
161
+ [ "rosybrown", [ 188, 143, 143 ] ],
162
+ [ "royalblue", [ 65, 105, 225 ] ],
163
+ [ "saddlebrown", [ 139, 69, 19 ] ],
164
+ [ "salmon", [ 250, 128, 114 ] ],
165
+ [ "sandybrown", [ 244, 164, 96 ] ],
166
+ [ "seagreen", [ 46, 139, 87 ] ],
167
+ [ "seashell", [ 255, 245, 238 ] ],
168
+ [ "sienna", [ 160, 82, 45 ] ],
169
+ [ "skyblue", [ 135, 206, 235 ] ],
170
+ [ "slateblue", [ 106, 90, 205 ] ],
171
+ [ "slategray", [ 112, 128, 144 ] ],
172
+ [ "slategrey", [ 112, 128, 144 ] ],
173
+ [ "snow", [ 255, 250, 250 ] ],
174
+ [ "springgreen", [ 0, 255, 127 ] ],
175
+ [ "steelblue", [ 70, 130, 180 ] ],
176
+ [ "tan", [ 210, 180, 140 ] ],
177
+ [ "thistle", [ 216, 191, 216 ] ],
178
+ [ "tomato", [ 255, 99, 71 ] ],
179
+ [ "turquoise", [ 64, 224, 208 ] ],
180
+ [ "violet", [ 238, 130, 238 ] ],
181
+ [ "wheat", [ 245, 222, 179 ] ],
182
+ [ "whitesmoke", [ 245, 245, 245 ] ],
183
+ [ "yellowgreen", [ 154, 205, 50 ] ]
184
+ ].forEach((value) => {
185
+ cssToRGB.set(value[0], value[1]);
186
+ });
187
+
188
+ /**
189
+ * @classdesc
190
+ * A color manipulation object.
191
+ */
192
+ class Color {
193
+ /**
194
+ * @param {number} [r=0] - red component or array of color components
195
+ * @param {number} [g=0] - green component
196
+ * @param {number} [b=0] - blue component
197
+ * @param {number} [alpha=1.0] - alpha value
198
+ */
199
+ constructor(r = 0, g = 0, b = 0, alpha = 1.0) {
200
+ this.onResetEvent(r, g, b, alpha);
201
+ }
202
+
203
+ /**
204
+ * @ignore
205
+ */
206
+ onResetEvent(r = 0, g = 0, b = 0, alpha = 1.0) {
207
+ if (typeof (this.glArray) === "undefined") {
208
+ // Color components in a Float32Array suitable for WebGL
209
+ this.glArray = new Float32Array([ 0.0, 0.0, 0.0, 1.0 ]);
210
+ }
211
+
212
+ return this.setColor(r, g, b, alpha);
213
+ }
214
+
215
+ /**
216
+ * Color Red Component [0 .. 255]
217
+ * @type {number}
218
+ */
219
+ get r() {
220
+ return ~~(this.glArray[0] * 255);
221
+ }
222
+
223
+ set r(value) {
224
+ this.glArray[0] = clamp(~~value || 0, 0, 255) / 255.0;
225
+ }
226
+
227
+
228
+ /**
229
+ * Color Green Component [0 .. 255]
230
+ * @type {number}
231
+ */
232
+ get g() {
233
+ return ~~(this.glArray[1] * 255);
234
+ }
235
+
236
+ set g(value) {
237
+ this.glArray[1] = clamp(~~value || 0, 0, 255) / 255.0;
238
+ }
239
+
240
+
241
+ /**
242
+ * Color Blue Component [0 .. 255]
243
+ * @type {number}
244
+ */
245
+ get b() {
246
+ return ~~(this.glArray[2] * 255);
247
+ }
248
+ set b(value) {
249
+ this.glArray[2] = clamp(~~value || 0, 0, 255) / 255.0;
250
+ }
251
+
252
+ /**
253
+ * Color Alpha Component [0.0 .. 1.0]
254
+ * @type {number}
255
+ */
256
+ get alpha() {
257
+ return this.glArray[3];
258
+ }
259
+
260
+ set alpha(value) {
261
+ this.glArray[3] = typeof(value) === "undefined" ? 1.0 : clamp(+value, 0, 1.0);
262
+ }
263
+
264
+
265
+ /**
266
+ * Set this color to the specified value.
267
+ * @param {number} r - red component [0 .. 255]
268
+ * @param {number} g - green component [0 .. 255]
269
+ * @param {number} b - blue component [0 .. 255]
270
+ * @param {number} [alpha=1.0] - alpha value [0.0 .. 1.0]
271
+ * @returns {Color} Reference to this object for method chaining
272
+ */
273
+ setColor(r, g, b, alpha = 1.0) {
274
+ this.r = r;
275
+ this.g = g;
276
+ this.b = b;
277
+ this.alpha = alpha;
278
+ return this;
279
+ }
280
+
281
+ /**
282
+ * set this color to the specified HSV value
283
+ * @param {number} h - hue (a value from 0 to 1)
284
+ * @param {number} s - saturation (a value from 0 to 1)
285
+ * @param {number} v - value (a value from 0 to 1)
286
+ * @returns {Color} Reference to this object for method chaining
287
+ */
288
+ setHSV(h, s, v) {
289
+ var r, g, b;
290
+
291
+ var i = Math.floor(h * 6);
292
+ var f = h * 6 - i;
293
+ var p = v * (1 - s);
294
+ var q = v * (1 - f * s);
295
+ var t = v * (1 - (1 - f) * s);
296
+
297
+ switch (i % 6) {
298
+ case 0: r = v, g = t, b = p; break;
299
+ case 1: r = q, g = v, b = p; break;
300
+ case 2: r = p, g = v, b = t; break;
301
+ case 3: r = p, g = q, b = v; break;
302
+ case 4: r = t, g = p, b = v; break;
303
+ case 5: r = v, g = p, b = q; break;
304
+ }
305
+ return this.setColor(r * 255, g * 255, b * 255);
306
+ }
307
+
308
+ /**
309
+ * set this color to the specified HSL value
310
+ * @param {number} h - hue (a value from 0 to 1)
311
+ * @param {number} s - saturation (a value from 0 to 1)
312
+ * @param {number} l - lightness (a value from 0 to 1)
313
+ * @returns {Color} Reference to this object for method chaining
314
+ */
315
+ setHSL(h, s, l) {
316
+ var r, g, b;
317
+
318
+ if (s === 0) {
319
+ r = g = b = l; // achromatic
320
+ } else {
321
+ var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
322
+ var p = 2 * l - q;
323
+
324
+ r = hue2rgb(p, q, h + 1/3);
325
+ g = hue2rgb(p, q, h);
326
+ b = hue2rgb(p, q, h - 1/3);
327
+ }
328
+
329
+ return this.setColor(r * 255, g * 255, b * 255);
330
+ }
331
+
332
+ /**
333
+ * Create a new copy of this color object.
334
+ * @returns {Color} Reference to the newly cloned object
335
+ */
336
+ clone() {
337
+ return pool.pull("Color").copy(this);
338
+ }
339
+
340
+ /**
341
+ * Copy a color object or CSS color into this one.
342
+ * @param {Color|string} color
343
+ * @returns {Color} Reference to this object for method chaining
344
+ */
345
+ copy(color) {
346
+ if (color instanceof Color) {
347
+ this.glArray.set(color.glArray);
348
+ return this;
349
+ }
350
+
351
+ return this.parseCSS(color);
352
+ }
353
+
354
+ /**
355
+ * Blend this color with the given one using addition.
356
+ * @param {Color} color
357
+ * @returns {Color} Reference to this object for method chaining
358
+ */
359
+ add(color) {
360
+ this.glArray[0] = clamp(this.glArray[0] + color.glArray[0], 0, 1);
361
+ this.glArray[1] = clamp(this.glArray[1] + color.glArray[1], 0, 1);
362
+ this.glArray[2] = clamp(this.glArray[2] + color.glArray[2], 0, 1);
363
+ this.glArray[3] = (this.glArray[3] + color.glArray[3]) / 2;
364
+
365
+ return this;
366
+ }
367
+
368
+ /**
369
+ * Darken this color value by 0..1
370
+ * @param {number} scale
371
+ * @returns {Color} Reference to this object for method chaining
372
+ */
373
+ darken(scale) {
374
+ scale = clamp(scale, 0, 1);
375
+ this.glArray[0] *= scale;
376
+ this.glArray[1] *= scale;
377
+ this.glArray[2] *= scale;
378
+
379
+ return this;
380
+ }
381
+
382
+ /**
383
+ * Linearly interpolate between this color and the given one.
384
+ * @param {Color} color
385
+ * @param {number} alpha - with alpha = 0 being this color, and alpha = 1 being the given one.
386
+ * @returns {Color} Reference to this object for method chaining
387
+ */
388
+ lerp(color, alpha) {
389
+ alpha = clamp(alpha, 0, 1);
390
+ this.glArray[0] += (color.glArray[0] - this.glArray[0]) * alpha;
391
+ this.glArray[1] += (color.glArray[1] - this.glArray[1]) * alpha;
392
+ this.glArray[2] += (color.glArray[2] - this.glArray[2]) * alpha;
393
+
394
+ return this;
395
+ }
396
+
397
+ /**
398
+ * Lighten this color value by 0..1
399
+ * @param {number} scale
400
+ * @returns {Color} Reference to this object for method chaining
401
+ */
402
+ lighten(scale) {
403
+ scale = clamp(scale, 0, 1);
404
+ this.glArray[0] = clamp(this.glArray[0] + (1 - this.glArray[0]) * scale, 0, 1);
405
+ this.glArray[1] = clamp(this.glArray[1] + (1 - this.glArray[1]) * scale, 0, 1);
406
+ this.glArray[2] = clamp(this.glArray[2] + (1 - this.glArray[2]) * scale, 0, 1);
407
+
408
+ return this;
409
+ }
410
+
411
+ /**
412
+ * Generate random r,g,b values for this color object
413
+ * @param {number} [min=0] - minimum value for the random range
414
+ * @param {number} [max=255] - maxmium value for the random range
415
+ * @returns {Color} Reference to this object for method chaining
416
+ */
417
+ random(min = 0, max = 255) {
418
+ if (min < 0) {
419
+ min = 0;
420
+ }
421
+ if (max > 255) {
422
+ max = 255;
423
+ }
424
+
425
+ return this.setColor(
426
+ random(min, max),
427
+ random(min, max),
428
+ random(min, max),
429
+ this.alpha
430
+ );
431
+ }
432
+
433
+ /**
434
+ * Return true if the r,g,b,a values of this color are equal with the
435
+ * given one.
436
+ * @param {Color} color
437
+ * @returns {boolean}
438
+ */
439
+ equals(color) {
440
+ return (
441
+ (this.glArray[0] === color.glArray[0]) &&
442
+ (this.glArray[1] === color.glArray[1]) &&
443
+ (this.glArray[2] === color.glArray[2]) &&
444
+ (this.glArray[3] === color.glArray[3])
445
+ );
446
+ }
447
+
448
+ /**
449
+ * Parse a CSS color string and set this color to the corresponding
450
+ * r,g,b values
451
+ * @param {string} cssColor
452
+ * @returns {Color} Reference to this object for method chaining
453
+ */
454
+ parseCSS(cssColor) {
455
+ // TODO : Memoize this function by caching its input
456
+
457
+ if (cssToRGB.has(cssColor)) {
458
+ return this.setColor.apply(this, cssToRGB.get(cssColor));
459
+ }
460
+
461
+ return this.parseRGB(cssColor);
462
+ }
463
+
464
+ /**
465
+ * Parse an RGB or RGBA CSS color string
466
+ * @param {string} rgbColor
467
+ * @returns {Color} Reference to this object for method chaining
468
+ */
469
+ parseRGB(rgbColor) {
470
+ // TODO : Memoize this function by caching its input
471
+
472
+ var match = rgbaRx.exec(rgbColor);
473
+ if (match) {
474
+ return this.setColor(+match[1], +match[2], +match[3], +match[5]);
475
+ }
476
+
477
+ return this.parseHex(rgbColor);
478
+ }
479
+
480
+ /**
481
+ * Parse a Hex color ("#RGB", "#RGBA" or "#RRGGBB", "#RRGGBBAA" format) and set this color to
482
+ * the corresponding r,g,b,a values
483
+ * @param {string} hexColor
484
+ * @param {boolean} [argb = false] - true if format is #ARGB, or #AARRGGBB (as opposed to #RGBA or #RGGBBAA)
485
+ * @returns {Color} Reference to this object for method chaining
486
+ */
487
+ parseHex(hexColor, argb = false) {
488
+ // TODO : Memoize this function by caching its input
489
+
490
+ var match;
491
+ if ((match = hex8Rx.exec(hexColor))) {
492
+ // #AARRGGBB or #RRGGBBAA
493
+ return this.setColor(
494
+ parseInt(match[argb === false ? 1 : 2], 16), // r
495
+ parseInt(match[argb === false ? 2 : 3], 16), // g
496
+ parseInt(match[argb === false ? 3 : 4], 16), // b
497
+ (clamp(parseInt(match[argb === false ? 4 : 1], 16), 0, 255) / 255.0).toFixed(1) // a
498
+ );
499
+ }
500
+
501
+ if ((match = hex6Rx.exec(hexColor))) {
502
+ // #RRGGBB
503
+ return this.setColor(
504
+ parseInt(match[1], 16),
505
+ parseInt(match[2], 16),
506
+ parseInt(match[3], 16)
507
+ );
508
+ }
509
+
510
+ if ((match = hex4Rx.exec(hexColor))) {
511
+ // #ARGB or #RGBA
512
+ var r = match[argb === false ? 1 : 2];
513
+ var g = match[argb === false ? 2 : 3];
514
+ var b = match[argb === false ? 3 : 4];
515
+ var a = match[argb === false ? 4 : 1];
516
+ return this.setColor(
517
+ parseInt(r + r, 16), // r
518
+ parseInt(g + g, 16), // g
519
+ parseInt(b + b, 16), // b
520
+ (clamp(parseInt(a + a, 16), 0, 255) / 255.0).toFixed(1) // a
521
+ );
522
+ }
523
+
524
+ if ((match = hex3Rx.exec(hexColor))) {
525
+ // #RGB
526
+ return this.setColor(
527
+ parseInt(match[1] + match[1], 16),
528
+ parseInt(match[2] + match[2], 16),
529
+ parseInt(match[3] + match[3], 16)
530
+ );
531
+ }
532
+
533
+ throw new Error(
534
+ "invalid parameter: " + hexColor
535
+ );
536
+ }
537
+
538
+ /**
539
+ * Pack this color into a Uint32 ARGB representation
540
+ * @param {number} [alpha=1.0] - alpha value [0.0 .. 1.0]
541
+ * @returns {number}
542
+ */
543
+ toUint32(alpha = 1.0) {
544
+ var ur = this.r & 0xff;
545
+ var ug = this.g & 0xff;
546
+ var ub = this.b & 0xff;
547
+ var ua = (alpha * 255) & 0xff;
548
+
549
+ return (ua << 24) + (ur << 16) + (ug << 8) + ub;
550
+ }
551
+
552
+ /**
553
+ * return an array representation of this object
554
+ * @returns {Float32Array}
555
+ */
556
+ toArray() {
557
+ return this.glArray;
558
+ }
559
+
560
+
561
+ /**
562
+ * return the color in "#RRGGBB" format
563
+ * @returns {string}
564
+ */
565
+ toHex() {
566
+ // TODO : Memoize this function by caching its result until any of
567
+ // the r,g,b,a values are changed
568
+
569
+ return "#" + toHex(this.r) + toHex(this.g) + toHex(this.b);
570
+ }
571
+
572
+ /**
573
+ * Get the color in "#RRGGBBAA" format
574
+ * @returns {string}
575
+ */
576
+ toHex8(alpha = this.alpha) {
577
+ // TODO : Memoize this function by caching its result until any of
578
+ // the r,g,b,a values are changed
579
+
580
+ return "#" + toHex(this.r) + toHex(this.g) + toHex(this.b) + toHex(alpha * 255);
581
+ }
582
+
583
+ /**
584
+ * Get the color in "rgb(R,G,B)" format
585
+ * @returns {string}
586
+ */
587
+ toRGB() {
588
+ // TODO : Memoize this function by caching its result until any of
589
+ // the r,g,b,a values are changed
590
+
591
+ return "rgb(" +
592
+ this.r + "," +
593
+ this.g + "," +
594
+ this.b +
595
+ ")";
596
+ }
597
+
598
+ /**
599
+ * Get the color in "rgba(R,G,B,A)" format
600
+ * @param {number} [alpha=1.0] - alpha value [0.0 .. 1.0]
601
+ * @returns {string}
602
+ */
603
+ toRGBA(alpha = this.alpha) {
604
+ // TODO : Memoize this function by caching its result until any of
605
+ // the r,g,b,a values are changed
606
+
607
+ return "rgba(" +
608
+ this.r + "," +
609
+ this.g + "," +
610
+ this.b + "," +
611
+ alpha +
612
+ ")";
613
+ }
614
+ }
615
+
616
+ export { Color as default };