melonjs 14.0.1 → 14.1.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 (214) 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 +240 -0
  11. package/dist/melonjs.mjs/audio/audio.js +536 -0
  12. package/dist/melonjs.mjs/camera/camera2d.js +732 -0
  13. package/dist/melonjs.mjs/entity/entity.js +248 -0
  14. package/dist/melonjs.mjs/game.js +29 -0
  15. package/dist/melonjs.mjs/geometries/ellipse.js +275 -0
  16. package/dist/melonjs.mjs/geometries/line.js +116 -0
  17. package/dist/melonjs.mjs/geometries/path2d.js +319 -0
  18. package/dist/melonjs.mjs/geometries/point.js +89 -0
  19. package/dist/melonjs.mjs/geometries/poly.js +500 -0
  20. package/dist/melonjs.mjs/geometries/rectangle.js +375 -0
  21. package/dist/melonjs.mjs/geometries/roundrect.js +168 -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 +448 -0
  32. package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
  33. package/dist/melonjs.mjs/level/tiled/TMXTile.js +194 -0
  34. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +639 -0
  35. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +311 -0
  36. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +83 -0
  37. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
  38. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +506 -0
  39. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +220 -0
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +157 -0
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +125 -0
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +109 -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 +618 -0
  47. package/dist/melonjs.mjs/math/math.js +218 -0
  48. package/dist/melonjs.mjs/math/matrix2.js +503 -0
  49. package/dist/melonjs.mjs/math/matrix3.js +681 -0
  50. package/dist/melonjs.mjs/math/observable_vector2.js +471 -0
  51. package/dist/melonjs.mjs/math/observable_vector3.js +561 -0
  52. package/dist/melonjs.mjs/math/vector2.js +528 -0
  53. package/dist/melonjs.mjs/math/vector3.js +569 -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 +267 -0
  62. package/dist/melonjs.mjs/particles/particle.js +188 -0
  63. package/dist/melonjs.mjs/particles/settings.js +319 -0
  64. package/dist/melonjs.mjs/physics/body.js +704 -0
  65. package/dist/melonjs.mjs/physics/bounds.js +460 -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 +391 -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 +221 -0
  72. package/dist/melonjs.mjs/plugin/plugin.js +141 -0
  73. package/dist/melonjs.mjs/renderable/collectable.js +62 -0
  74. package/dist/melonjs.mjs/renderable/colorlayer.js +80 -0
  75. package/dist/melonjs.mjs/renderable/container.js +1018 -0
  76. package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
  77. package/dist/melonjs.mjs/renderable/imagelayer.js +306 -0
  78. package/dist/melonjs.mjs/renderable/light2d.js +156 -0
  79. package/dist/melonjs.mjs/renderable/nineslicesprite.js +247 -0
  80. package/dist/melonjs.mjs/renderable/renderable.js +783 -0
  81. package/dist/melonjs.mjs/renderable/sprite.js +654 -0
  82. package/dist/melonjs.mjs/renderable/trigger.js +157 -0
  83. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +213 -0
  84. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +226 -0
  85. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +128 -0
  86. package/dist/melonjs.mjs/state/stage.js +237 -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 +364 -0
  96. package/dist/melonjs.mjs/text/bitmaptextdata.js +199 -0
  97. package/dist/melonjs.mjs/text/glyph.js +66 -0
  98. package/dist/melonjs.mjs/text/text.js +453 -0
  99. package/dist/melonjs.mjs/text/textmetrics.js +176 -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 +480 -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 +807 -0
  111. package/dist/melonjs.mjs/video/renderer.js +411 -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 +143 -0
  117. package/dist/melonjs.mjs/video/webgl/glshader.js +168 -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 +495 -0
  128. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1036 -0
  129. package/dist/melonjs.module.d.ts +1163 -1163
  130. package/dist/melonjs.module.js +1903 -3274
  131. package/package.json +22 -17
  132. package/src/application/application.js +3 -3
  133. package/src/audio/audio.js +32 -32
  134. package/src/camera/camera2d.js +31 -31
  135. package/src/entity/entity.js +17 -17
  136. package/src/geometries/ellipse.js +16 -16
  137. package/src/geometries/line.js +5 -5
  138. package/src/geometries/path2d.js +32 -32
  139. package/src/geometries/poly.js +15 -15
  140. package/src/geometries/rectangle.js +18 -18
  141. package/src/geometries/roundrect.js +8 -8
  142. package/src/input/gamepad.js +15 -15
  143. package/src/input/keyboard.js +12 -12
  144. package/src/input/pointer.js +6 -6
  145. package/src/input/pointerevent.js +12 -12
  146. package/src/lang/deprecated.js +12 -12
  147. package/src/level/level.js +25 -25
  148. package/src/level/tiled/TMXLayer.js +22 -22
  149. package/src/level/tiled/TMXTile.js +5 -5
  150. package/src/level/tiled/TMXTileMap.js +6 -6
  151. package/src/level/tiled/TMXTileset.js +2 -2
  152. package/src/level/tiled/TMXUtils.js +5 -5
  153. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +2 -2
  154. package/src/level/tiled/renderer/TMXIsometricRenderer.js +2 -2
  155. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  156. package/src/level/tiled/renderer/TMXRenderer.js +19 -19
  157. package/src/loader/loader.js +20 -20
  158. package/src/math/color.js +20 -20
  159. package/src/math/math.js +16 -16
  160. package/src/math/matrix2.js +16 -16
  161. package/src/math/matrix3.js +25 -25
  162. package/src/math/observable_vector2.js +14 -14
  163. package/src/math/observable_vector3.js +16 -16
  164. package/src/math/vector2.js +9 -9
  165. package/src/math/vector3.js +10 -10
  166. package/src/particles/emitter.js +6 -6
  167. package/src/particles/particle.js +2 -2
  168. package/src/physics/body.js +28 -28
  169. package/src/physics/bounds.js +8 -8
  170. package/src/physics/collision.js +2 -2
  171. package/src/physics/detector.js +6 -6
  172. package/src/physics/quadtree.js +11 -11
  173. package/src/physics/sat.js +31 -31
  174. package/src/physics/world.js +5 -5
  175. package/src/plugin/plugin.js +5 -5
  176. package/src/renderable/collectable.js +3 -3
  177. package/src/renderable/colorlayer.js +5 -5
  178. package/src/renderable/container.js +21 -21
  179. package/src/renderable/dragndrop.js +14 -14
  180. package/src/renderable/imagelayer.js +13 -13
  181. package/src/renderable/light2d.js +3 -3
  182. package/src/renderable/nineslicesprite.js +16 -16
  183. package/src/renderable/renderable.js +23 -23
  184. package/src/renderable/sprite.js +28 -28
  185. package/src/renderable/trigger.js +15 -15
  186. package/src/renderable/ui/uibaseelement.js +7 -7
  187. package/src/renderable/ui/uispriteelement.js +6 -6
  188. package/src/renderable/ui/uitextbutton.js +13 -13
  189. package/src/state/stage.js +7 -7
  190. package/src/state/state.js +17 -17
  191. package/src/system/device.js +11 -11
  192. package/src/system/event.js +10 -10
  193. package/src/system/pooling.js +9 -9
  194. package/src/system/save.js +2 -2
  195. package/src/system/timer.js +10 -10
  196. package/src/text/bitmaptext.js +18 -18
  197. package/src/text/bitmaptextdata.js +2 -2
  198. package/src/text/text.js +23 -23
  199. package/src/text/textmetrics.js +8 -8
  200. package/src/tweens/tween.js +19 -19
  201. package/src/utils/agent.js +5 -5
  202. package/src/utils/array.js +4 -4
  203. package/src/utils/file.js +2 -2
  204. package/src/utils/function.js +6 -6
  205. package/src/utils/string.js +5 -5
  206. package/src/utils/utils.js +4 -4
  207. package/src/video/canvas/canvas_renderer.js +70 -70
  208. package/src/video/renderer.js +26 -26
  209. package/src/video/texture/atlas.js +22 -22
  210. package/src/video/texture/canvas_texture.js +9 -9
  211. package/src/video/video.js +17 -17
  212. package/src/video/webgl/glshader.js +10 -10
  213. package/src/video/webgl/webgl_compositor.js +41 -41
  214. package/src/video/webgl/webgl_renderer.js +75 -75
@@ -0,0 +1,681 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.0
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 pool from '../system/pooling.js';
9
+ import { EPSILON } from './math.js';
10
+
11
+ /**
12
+ * @classdesc
13
+ * a 4x4 Matrix3d Object
14
+ */
15
+ class Matrix3d {
16
+ /**
17
+ * @param {(Matrix3d|...number)} args - An instance of me.Matrix3d to copy from, or individual Matrix components (See {@link Matrix3d.setTransform}). If not arguments are given, the matrix will be set to Identity.
18
+ */
19
+ constructor(...args) {
20
+ this.onResetEvent(...args);
21
+ }
22
+
23
+ /**
24
+ * @ignore
25
+ */
26
+ onResetEvent() {
27
+ if (typeof this.val === "undefined") {
28
+ this.val = new Float32Array(16);
29
+ }
30
+
31
+ if (arguments.length && arguments[0] instanceof Matrix3d) {
32
+ this.copy(arguments[0]);
33
+ }
34
+ else if (arguments.length === 16) {
35
+ this.setTransform.apply(this, arguments);
36
+ }
37
+ else {
38
+ this.identity();
39
+ }
40
+ }
41
+
42
+ /**
43
+ * tx component of the matrix
44
+ * @public
45
+ * @type {number}
46
+ * @name tx
47
+ * @memberof Matrix3d
48
+ */
49
+ get tx() {
50
+ return this.val[12];
51
+ }
52
+
53
+ /**
54
+ * ty component of the matrix
55
+ * @public
56
+ * @type {number}
57
+ * @name ty
58
+ * @memberof Matrix3d
59
+ */
60
+ get ty() {
61
+ return this.val[13];
62
+ }
63
+
64
+ /**
65
+ * ty component of the matrix
66
+ * @public
67
+ * @type {number}
68
+ * @name tz
69
+ * @memberof Matrix3d
70
+ */
71
+ get tz() {
72
+ return this.val[14];
73
+ }
74
+
75
+ /**
76
+ * reset the transformation matrix to the identity matrix (no transformation).<br>
77
+ * the identity matrix and parameters position : <br>
78
+ * <img src="images/identity-matrix_2x.png"/>
79
+ * @name identity
80
+ * @memberof Matrix3d
81
+ * @returns {Matrix3d} Reference to this object for method chaining
82
+ */
83
+ identity() {
84
+ return this.setTransform(
85
+ 1, 0, 0, 0,
86
+ 0, 1, 0, 0,
87
+ 0, 0, 1, 0,
88
+ 0, 0, 0, 1
89
+ );
90
+ }
91
+
92
+ /**
93
+ * set the matrix to the specified value
94
+ * @name setTransform
95
+ * @memberof Matrix3d
96
+ * @param {number} m00
97
+ * @param {number} m01
98
+ * @param {number} m02
99
+ * @param {number} m03
100
+ * @param {number} m10
101
+ * @param {number} m11
102
+ * @param {number} m12
103
+ * @param {number} m13
104
+ * @param {number} m20
105
+ * @param {number} m21
106
+ * @param {number} m22
107
+ * @param {number} m23
108
+ * @param {number} m30
109
+ * @param {number} m31
110
+ * @param {number} m32
111
+ * @param {number} m33
112
+ * @returns {Matrix3d} Reference to this object for method chaining
113
+ */
114
+ setTransform(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
115
+ var a = this.val;
116
+
117
+ a[0] = m00;
118
+ a[1] = m01;
119
+ a[2] = m02;
120
+ a[3] = m03;
121
+ a[4] = m10;
122
+ a[5] = m11;
123
+ a[6] = m12;
124
+ a[7] = m13;
125
+ a[8] = m20;
126
+ a[9] = m21;
127
+ a[10] = m22;
128
+ a[11] = m23;
129
+ a[12] = m30;
130
+ a[13] = m31;
131
+ a[14] = m32;
132
+ a[15] = m33;
133
+
134
+ return this;
135
+ }
136
+
137
+ /**
138
+ * Copies over the values from another me.Matrix3d.
139
+ * @name copy
140
+ * @memberof Matrix3d
141
+ * @param {Matrix3d} m - the matrix object to copy from
142
+ * @returns {Matrix3d} Reference to this object for method chaining
143
+ */
144
+ copy(m) {
145
+ this.val.set(m.val);
146
+ return this;
147
+ }
148
+
149
+ /**
150
+ * Copies over the upper-left 2x2 values from the given me.Matrix2d
151
+ * @name fromMat2d
152
+ * @memberof Matrix3d
153
+ * @param {Matrix2d} m - the matrix object to copy from
154
+ * @returns {Matrix2d} Reference to this object for method chaining
155
+ */
156
+ fromMat2d(m) {
157
+ var b = m.val;
158
+ return this.setTransform(
159
+ b[0], b[3], b[6], 0,
160
+ b[1], b[4], b[7], 0,
161
+ b[2], b[5], b[8], 0,
162
+ 0, 0, 0, 1
163
+
164
+ );
165
+ }
166
+
167
+ /**
168
+ * multiply both matrix
169
+ * @name multiply
170
+ * @memberof Matrix3d
171
+ * @param {Matrix3d} m - Other matrix
172
+ * @returns {Matrix3d} Reference to this object for method chaining
173
+ */
174
+ multiply(m) {
175
+ var a = this.val;
176
+ var b = m.val;
177
+
178
+ var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
179
+ var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
180
+ var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
181
+ var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
182
+ var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
183
+
184
+ a[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
185
+ a[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
186
+ a[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
187
+ a[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
188
+
189
+ b0 = b[4];
190
+ b1 = b[5];
191
+ b2 = b[6];
192
+ b3 = b[7];
193
+
194
+ a[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
195
+ a[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
196
+ a[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
197
+ a[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
198
+
199
+ b0 = b[8];
200
+ b1 = b[9];
201
+ b2 = b[10];
202
+ b3 = b[11];
203
+
204
+ a[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
205
+ a[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
206
+ a[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
207
+ a[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
208
+
209
+ b0 = b[12];
210
+ b1 = b[13];
211
+ b2 = b[14];
212
+ b3 = b[15];
213
+
214
+ a[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
215
+ a[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
216
+ a[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
217
+ a[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
218
+
219
+ return this;
220
+ }
221
+
222
+ /**
223
+ * Transpose the value of this matrix.
224
+ * @name transpose
225
+ * @memberof Matrix3d
226
+ * @returns {Matrix3d} Reference to this object for method chaining
227
+ */
228
+ transpose() {
229
+ var a = this.val,
230
+ a01 = a[1],
231
+ a02 = a[2],
232
+ a03 = a[3],
233
+ a12 = a[6],
234
+ a13 = a[7],
235
+ a23 = a[11];
236
+
237
+ a[1] = a[4];
238
+ a[2] = a[8];
239
+ a[3] = a[12];
240
+ a[4] = a01;
241
+ a[6] = a[9];
242
+ a[7] = a[13];
243
+ a[8] = a02;
244
+ a[9] = a12;
245
+ a[11] = a[14];
246
+ a[12] = a03;
247
+ a[13] = a13;
248
+ a[14] = a23;
249
+
250
+ return this;
251
+ }
252
+
253
+ /**
254
+ * invert this matrix, causing it to apply the opposite transformation.
255
+ * @name invert
256
+ * @memberof Matrix3d
257
+ * @returns {Matrix3d} Reference to this object for method chaining
258
+ */
259
+ invert() {
260
+ var a = this.val;
261
+
262
+ var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
263
+ var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
264
+ var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
265
+ var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
266
+
267
+ var b00 = a00 * a11 - a01 * a10;
268
+ var b01 = a00 * a12 - a02 * a10;
269
+ var b02 = a00 * a13 - a03 * a10;
270
+ var b03 = a01 * a12 - a02 * a11;
271
+
272
+ var b04 = a01 * a13 - a03 * a11;
273
+ var b05 = a02 * a13 - a03 * a12;
274
+ var b06 = a20 * a31 - a21 * a30;
275
+ var b07 = a20 * a32 - a22 * a30;
276
+
277
+ var b08 = a20 * a33 - a23 * a30;
278
+ var b09 = a21 * a32 - a22 * a31;
279
+ var b10 = a21 * a33 - a23 * a31;
280
+ var b11 = a22 * a33 - a23 * a32;
281
+
282
+ // Calculate the determinant
283
+ var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
284
+
285
+ if (!det)
286
+ {
287
+ return null;
288
+ }
289
+
290
+ det = 1 / det;
291
+
292
+ a[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
293
+ a[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
294
+ a[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
295
+ a[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
296
+ a[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
297
+ a[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
298
+ a[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
299
+ a[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
300
+ a[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
301
+ a[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
302
+ a[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
303
+ a[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
304
+ a[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
305
+ a[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
306
+ a[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
307
+ a[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
308
+
309
+ return this;
310
+ }
311
+
312
+ /**
313
+ * apply the current transform to the given 2d or 3d vector
314
+ * @name apply
315
+ * @memberof Matrix3d
316
+ * @param {Vector2d|Vector3d} v - the vector object to be transformed
317
+ * @returns {Vector2d|Vector3d} result vector object.
318
+ */
319
+ apply(v) {
320
+ var a = this.val,
321
+ x = v.x,
322
+ y = v.y,
323
+ z = (typeof v.z !== "undefined") ? v.z : 1;
324
+
325
+ var w = (a[3] * x + a[7] * y + a[11] * z + a[15]) || 1.0;
326
+
327
+ v.x = (a[0] * x + a[4] * y + a[8] * z + a[12]) / w;
328
+ v.y = (a[1] * x + a[5] * y + a[9] * z + a[13]) / w;
329
+
330
+ if (typeof v.z !== "undefined") {
331
+ v.z = (a[2] * x + a[6] * y + a[10] * z + a[14]) / w;
332
+ }
333
+
334
+ return v;
335
+ }
336
+
337
+ /**
338
+ * apply the inverted current transform to the given 2d or 3d vector
339
+ * @name applyInverse
340
+ * @memberof Matrix3d
341
+ * @param {Vector2d|Vector3d} v - the vector object to be transformed
342
+ * @returns {Vector2d|Vector3d} result vector object.
343
+ */
344
+ applyInverse(v) {
345
+ // invert the current matrix
346
+ var im = pool.pull("Matrix3d", this).invert();
347
+
348
+ // apply the inverted matrix
349
+ im.apply(v);
350
+
351
+ pool.push(im);
352
+
353
+ return v;
354
+ }
355
+
356
+ /**
357
+ * generate an orthogonal projection matrix, with the result replacing the current matrix
358
+ * <img src="images/glOrtho.gif"/><br>
359
+ * @name ortho
360
+ * @memberof Matrix3d
361
+ * @param {number} left - farthest left on the x-axis
362
+ * @param {number} right - farthest right on the x-axis
363
+ * @param {number} bottom - farthest down on the y-axis
364
+ * @param {number} top - farthest up on the y-axis
365
+ * @param {number} near - distance to the near clipping plane along the -Z axis
366
+ * @param {number} far - distance to the far clipping plane along the -Z axis
367
+ * @returns {Matrix3d} Reference to this object for method chaining
368
+ */
369
+ ortho(left, right, bottom, top, near, far) {
370
+ var a = this.val;
371
+ var leftRight = 1.0 / (left - right);
372
+ var bottomTop = 1.0 / (bottom - top);
373
+ var nearFar = 1.0 / (near - far);
374
+
375
+ a[0] = -2.0 * leftRight;
376
+ a[1] = 0.0;
377
+ a[2] = 0.0;
378
+ a[3] = 0.0;
379
+ a[4] = 0.0;
380
+ a[5] = -2.0 * bottomTop;
381
+ a[6] = 0.0;
382
+ a[7] = 0.0;
383
+ a[8] = 0.0;
384
+ a[9] = 0.0;
385
+ a[10] = 2.0 * nearFar;
386
+ a[11] = 0.0;
387
+ a[12] = (left + right) * leftRight;
388
+ a[13] = (top + bottom) * bottomTop;
389
+ a[14] = (far + near) * nearFar;
390
+ a[15] = 1.0;
391
+
392
+ return this;
393
+ }
394
+
395
+ /**
396
+ * scale the matrix
397
+ * @name scale
398
+ * @memberof Matrix3d
399
+ * @param {number} x - a number representing the abscissa of the scaling vector.
400
+ * @param {number} [y=x] - a number representing the ordinate of the scaling vector.
401
+ * @param {number} [z=0] - a number representing the depth vector
402
+ * @returns {Matrix3d} Reference to this object for method chaining
403
+ */
404
+ scale(x, y, z) {
405
+ var a = this.val,
406
+ _x = x,
407
+ _y = typeof(y) === "undefined" ? _x : y,
408
+ _z = typeof(z) === "undefined" ? 0 : z;
409
+
410
+ a[0] = a[0] * _x;
411
+ a[1] = a[1] * _x;
412
+ a[2] = a[2] * _x;
413
+ a[3] = a[3] * _x;
414
+
415
+ a[4] = a[4] * _y;
416
+ a[5] = a[5] * _y;
417
+ a[6] = a[6] * _y;
418
+ a[7] = a[7] * _y;
419
+
420
+ a[8] = a[8] * _z;
421
+ a[9] = a[9] * _z;
422
+ a[10] = a[10] * _z;
423
+ a[11] = a[11] * _z;
424
+
425
+ return this;
426
+ }
427
+
428
+ /**
429
+ * adds a 2D scaling transformation.
430
+ * @name scaleV
431
+ * @memberof Matrix3d
432
+ * @param {Vector2d|Vector3d} v - scaling vector
433
+ * @returns {Matrix3d} Reference to this object for method chaining
434
+ */
435
+ scaleV(v) {
436
+ return this.scale(v.x, v.y, v.z);
437
+ }
438
+
439
+ /**
440
+ * specifies a 2D scale operation using the [sx, 1] scaling vector
441
+ * @name scaleX
442
+ * @memberof Matrix3d
443
+ * @param {number} x - x scaling vector
444
+ * @returns {Matrix3d} Reference to this object for method chaining
445
+ */
446
+ scaleX(x) {
447
+ return this.scale(x, 1);
448
+ }
449
+
450
+ /**
451
+ * specifies a 2D scale operation using the [1,sy] scaling vector
452
+ * @name scaleY
453
+ * @memberof Matrix3d
454
+ * @param {number} y - y scaling vector
455
+ * @returns {Matrix3d} Reference to this object for method chaining
456
+ */
457
+ scaleY(y) {
458
+ return this.scale(1, y);
459
+ }
460
+
461
+ /**
462
+ * rotate this matrix (counter-clockwise) by the specified angle (in radians).
463
+ * @name rotate
464
+ * @memberof Matrix3d
465
+ * @param {number} angle - Rotation angle in radians.
466
+ * @param {Vector3d} v - the axis to rotate around
467
+ * @returns {Matrix3d} Reference to this object for method chaining
468
+ */
469
+ rotate(angle, v) {
470
+ if (angle !== 0) {
471
+ var a = this.val,
472
+ x = v.x,
473
+ y = v.y,
474
+ z = v.z;
475
+
476
+ var len = Math.sqrt(x * x + y * y + z * z);
477
+
478
+ var s, c, t;
479
+ var a00, a01, a02, a03;
480
+ var a10, a11, a12, a13;
481
+ var a20, a21, a22, a23;
482
+ var b00, b01, b02;
483
+ var b10, b11, b12;
484
+ var b20, b21, b22;
485
+
486
+ if (len < EPSILON) {
487
+ return null;
488
+ }
489
+
490
+ len = 1 / len;
491
+ x *= len;
492
+ y *= len;
493
+ z *= len;
494
+
495
+ s = Math.sin(angle);
496
+ c = Math.cos(angle);
497
+ t = 1 - c;
498
+
499
+ a00 = a[0];
500
+ a01 = a[1];
501
+ a02 = a[2];
502
+ a03 = a[3];
503
+ a10 = a[4];
504
+ a11 = a[5];
505
+ a12 = a[6];
506
+ a13 = a[7];
507
+ a20 = a[8];
508
+ a21 = a[9];
509
+ a22 = a[10];
510
+ a23 = a[11];
511
+
512
+ // Construct the elements of the rotation matrix
513
+ b00 = x * x * t + c;
514
+ b01 = y * x * t + z * s;
515
+ b02 = z * x * t - y * s;
516
+ b10 = x * y * t - z * s;
517
+ b11 = y * y * t + c;
518
+ b12 = z * y * t + x * s;
519
+ b20 = x * z * t + y * s;
520
+ b21 = y * z * t - x * s;
521
+ b22 = z * z * t + c;
522
+
523
+ // Perform rotation-specific matrix multiplication
524
+ a[0] = a00 * b00 + a10 * b01 + a20 * b02;
525
+ a[1] = a01 * b00 + a11 * b01 + a21 * b02;
526
+ a[2] = a02 * b00 + a12 * b01 + a22 * b02;
527
+ a[3] = a03 * b00 + a13 * b01 + a23 * b02;
528
+ a[4] = a00 * b10 + a10 * b11 + a20 * b12;
529
+ a[5] = a01 * b10 + a11 * b11 + a21 * b12;
530
+ a[6] = a02 * b10 + a12 * b11 + a22 * b12;
531
+ a[7] = a03 * b10 + a13 * b11 + a23 * b12;
532
+ a[8] = a00 * b20 + a10 * b21 + a20 * b22;
533
+ a[9] = a01 * b20 + a11 * b21 + a21 * b22;
534
+ a[10] = a02 * b20 + a12 * b21 + a22 * b22;
535
+ a[11] = a03 * b20 + a13 * b21 + a23 * b22;
536
+ }
537
+ return this;
538
+ }
539
+
540
+ /**
541
+ * translate the matrix position using the given vector
542
+ * @name translate
543
+ * @memberof Matrix3d
544
+ * @method
545
+ * @param {number} x - a number representing the abscissa of the vector.
546
+ * @param {number} [y=x] - a number representing the ordinate of the vector.
547
+ * @param {number} [z=0] - a number representing the depth of the vector
548
+ * @returns {Matrix3d} Reference to this object for method chaining
549
+ */
550
+ /**
551
+ * translate the matrix by a vector on the horizontal and vertical axis
552
+ * @name translateV
553
+ * @memberof Matrix3d
554
+ * @param {Vector2d|Vector3d} v - the vector to translate the matrix by
555
+ * @returns {Matrix3d} Reference to this object for method chaining
556
+ */
557
+ translate() {
558
+ var a = this.val;
559
+ var _x, _y, _z;
560
+
561
+ if (arguments.length > 1 ) {
562
+ // x, y (, z)
563
+ _x = arguments[0];
564
+ _y = arguments[1];
565
+ _z = typeof(arguments[2]) === "undefined" ? 0 : arguments[2];
566
+ } else {
567
+ // 2d/3d vector
568
+ _x = arguments[0].x;
569
+ _y = arguments[0].y;
570
+ _z = typeof(arguments[0].z) === "undefined" ? 0 : arguments[0].z;
571
+ }
572
+
573
+ a[12] = a[0] * _x + a[4] * _y + a[8] * _z + a[12];
574
+ a[13] = a[1] * _x + a[5] * _y + a[9] * _z + a[13];
575
+ a[14] = a[2] * _x + a[6] * _y + a[10] * _z + a[14];
576
+ a[15] = a[3] * _x + a[7] * _y + a[11] * _z + a[15];
577
+
578
+ return this;
579
+ }
580
+
581
+ /**
582
+ * returns true if the matrix is an identity matrix.
583
+ * @name isIdentity
584
+ * @memberof Matrix3d
585
+ * @returns {boolean}
586
+ */
587
+ isIdentity() {
588
+ var a = this.val;
589
+
590
+ return (
591
+ (a[0] === 1) &&
592
+ (a[1] === 0) &&
593
+ (a[2] === 0) &&
594
+ (a[3] === 0) &&
595
+ (a[4] === 0) &&
596
+ (a[5] === 1) &&
597
+ (a[6] === 0) &&
598
+ (a[7] === 0) &&
599
+ (a[8] === 0) &&
600
+ (a[9] === 0) &&
601
+ (a[10] === 1) &&
602
+ (a[11] === 0) &&
603
+ (a[12] === 0) &&
604
+ (a[13] === 0) &&
605
+ (a[14] === 0) &&
606
+ (a[15] === 1)
607
+ );
608
+ }
609
+
610
+ /**
611
+ * return true if the two matrices are identical
612
+ * @name equals
613
+ * @memberof Matrix3d
614
+ * @param {Matrix3d} m - the other matrix
615
+ * @returns {boolean} true if both are equals
616
+ */
617
+ equals(m) {
618
+ var b = m.val;
619
+ var a = this.val;
620
+
621
+ return (
622
+ (a[0] === b[0]) &&
623
+ (a[1] === b[1]) &&
624
+ (a[2] === b[2]) &&
625
+ (a[3] === b[3]) &&
626
+ (a[4] === b[4]) &&
627
+ (a[5] === b[5]) &&
628
+ (a[6] === b[6]) &&
629
+ (a[7] === b[7]) &&
630
+ (a[8] === b[8]) &&
631
+ (a[9] === b[9]) &&
632
+ (a[10] === b[10]) &&
633
+ (a[11] === b[11]) &&
634
+ (a[12] === b[12]) &&
635
+ (a[13] === b[13]) &&
636
+ (a[14] === b[14]) &&
637
+ (a[15] === b[15])
638
+ );
639
+ }
640
+
641
+ /**
642
+ * Clone the Matrix
643
+ * @name clone
644
+ * @memberof Matrix3d
645
+ * @returns {Matrix3d}
646
+ */
647
+ clone() {
648
+ return pool.pull("Matrix3d", this);
649
+ }
650
+
651
+ /**
652
+ * return an array representation of this Matrix
653
+ * @name toArray
654
+ * @memberof Matrix3d
655
+ * @returns {Float32Array}
656
+ */
657
+ toArray() {
658
+ return this.val;
659
+ }
660
+
661
+ /**
662
+ * convert the object to a string representation
663
+ * @name toString
664
+ * @memberof Matrix3d
665
+ * @returns {string}
666
+ */
667
+ toString() {
668
+ var a = this.val;
669
+
670
+ return "me.Matrix3d(" +
671
+ a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " +
672
+ a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ", " +
673
+ a[8] + ", " + a[9] + ", " + a[10] + ", " + a[11] + ", " +
674
+ a[12] + ", " + a[13] + ", " + a[14] + ", " + a[15] +
675
+ ")";
676
+ }
677
+ }
678
+
679
+ var Matrix3d$1 = Matrix3d;
680
+
681
+ export { Matrix3d$1 as default };