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,469 @@
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 pool from '../system/pooling.js';
9
+ import Vector2d from './vector2.js';
10
+ import { clamp } from './math.js';
11
+
12
+ /**
13
+ * @classdesc
14
+ * A Vector2d object that provide notification by executing the given callback when the vector is changed.
15
+ * @augments Vector2d
16
+ */
17
+ class ObservableVector2d extends Vector2d {
18
+ /**
19
+ * @param {number} x - x value of the vector
20
+ * @param {number} y - y value of the vector
21
+ * @param {object} settings - additional required parameters
22
+ * @param {Function} settings.onUpdate - the callback to be executed when the vector is changed
23
+ * @param {Function} [settings.scope] - the value to use as this when calling onUpdate
24
+ */
25
+ constructor(x = 0, y = 0, settings) {
26
+ super(x, y);
27
+ if (typeof(settings) === "undefined") {
28
+ throw new Error(
29
+ "undefined `onUpdate` callback"
30
+ );
31
+ }
32
+ this.setCallback(settings.onUpdate, settings.scope);
33
+ }
34
+
35
+ /**
36
+ * @ignore
37
+ */
38
+ onResetEvent(x = 0, y = 0, settings) {
39
+ // init is call by the constructor and does not trigger the cb
40
+ this.setMuted(x, y);
41
+ if (typeof settings !== "undefined") {
42
+ this.setCallback(settings.onUpdate, settings.scope);
43
+ }
44
+ return this;
45
+ }
46
+
47
+ /**
48
+ * x value of the vector
49
+ * @public
50
+ * @type {number}
51
+ * @name x
52
+ * @memberof ObservableVector2d
53
+ */
54
+
55
+ get x() {
56
+ return this._x;
57
+ }
58
+
59
+ set x(value) {
60
+ var ret = this.onUpdate.call(this.scope, value, this._y, this._x, this._y);
61
+ if (ret && "x" in ret) {
62
+ this._x = ret.x;
63
+ } else {
64
+ this._x = value;
65
+ }
66
+ }
67
+
68
+
69
+ /**
70
+ * y value of the vector
71
+ * @public
72
+ * @type {number}
73
+ * @name y
74
+ * @memberof ObservableVector2d
75
+ */
76
+
77
+ get y() {
78
+ return this._y;
79
+ }
80
+
81
+ set y(value) {
82
+ var ret = this.onUpdate.call(this.scope, this._x, value, this._x, this._y);
83
+ if (ret && "y" in ret) {
84
+ this._y = ret.y;
85
+ } else {
86
+ this._y = value;
87
+ }
88
+ }
89
+
90
+ /** @ignore */
91
+ _set(x, y) {
92
+ var ret = this.onUpdate.call(this.scope, x, y, this._x, this._y);
93
+ if (ret && "x" in ret && "y" in ret) {
94
+ this._x = ret.x;
95
+ this._y = ret.y;
96
+ } else {
97
+ this._x = x;
98
+ this._y = y;
99
+ }
100
+ return this;
101
+ }
102
+
103
+ /**
104
+ * set the vector value without triggering the callback
105
+ * @name setMuted
106
+ * @memberof ObservableVector2d
107
+ * @param {number} x - x value of the vector
108
+ * @param {number} y - y value of the vector
109
+ * @returns {ObservableVector2d} Reference to this object for method chaining
110
+ */
111
+ setMuted(x, y) {
112
+ this._x = x;
113
+ this._y = y;
114
+ return this;
115
+ }
116
+
117
+ /**
118
+ * set the callback to be executed when the vector is changed
119
+ * @name setCallback
120
+ * @memberof ObservableVector2d
121
+ * @param {Function} fn - callback
122
+ * @param {Function} [scope=null] - scope
123
+ * @returns {ObservableVector2d} Reference to this object for method chaining
124
+ */
125
+ setCallback(fn, scope = null) {
126
+ if (typeof(fn) !== "function") {
127
+ throw new Error(
128
+ "invalid `onUpdate` callback"
129
+ );
130
+ }
131
+ this.onUpdate = fn;
132
+ this.scope = scope;
133
+ return this;
134
+ }
135
+
136
+ /**
137
+ * Add the passed vector to this vector
138
+ * @name add
139
+ * @memberof ObservableVector2d
140
+ * @param {ObservableVector2d} v
141
+ * @returns {ObservableVector2d} Reference to this object for method chaining
142
+ */
143
+ add(v) {
144
+ return this._set(this._x + v.x, this._y + v.y);
145
+ }
146
+
147
+ /**
148
+ * Substract the passed vector to this vector
149
+ * @name sub
150
+ * @memberof ObservableVector2d
151
+ * @param {ObservableVector2d} v
152
+ * @returns {ObservableVector2d} Reference to this object for method chaining
153
+ */
154
+ sub(v) {
155
+ return this._set(this._x - v.x, this._y - v.y);
156
+ }
157
+
158
+ /**
159
+ * Multiply this vector values by the given scalar
160
+ * @name scale
161
+ * @memberof ObservableVector2d
162
+ * @param {number} x
163
+ * @param {number} [y=x]
164
+ * @returns {ObservableVector2d} Reference to this object for method chaining
165
+ */
166
+ scale(x, y) {
167
+ return this._set(this._x * x, this._y * (typeof (y) !== "undefined" ? y : x));
168
+ }
169
+
170
+ /**
171
+ * Multiply this vector values by the passed vector
172
+ * @name scaleV
173
+ * @memberof ObservableVector2d
174
+ * @param {ObservableVector2d} v
175
+ * @returns {ObservableVector2d} Reference to this object for method chaining
176
+ */
177
+ scaleV(v) {
178
+ return this._set(this._x * v.x, this._y * v.y);
179
+ }
180
+
181
+ /**
182
+ * Divide this vector values by the passed value
183
+ * @name div
184
+ * @memberof ObservableVector2d
185
+ * @param {number} n - the value to divide the vector by
186
+ * @returns {ObservableVector2d} Reference to this object for method chaining
187
+ */
188
+ div(n) {
189
+ return this._set(this._x / n, this._y / n);
190
+ }
191
+
192
+ /**
193
+ * Update this vector values to absolute values
194
+ * @name abs
195
+ * @memberof ObservableVector2d
196
+ * @returns {ObservableVector2d} Reference to this object for method chaining
197
+ */
198
+ abs() {
199
+ return this._set((this._x < 0) ? -this._x : this._x, (this._y < 0) ? -this._y : this._y);
200
+ }
201
+
202
+ /**
203
+ * Clamp the vector value within the specified value range
204
+ * @name clamp
205
+ * @memberof ObservableVector2d
206
+ * @param {number} low
207
+ * @param {number} high
208
+ * @returns {ObservableVector2d} new me.ObservableVector2d
209
+ */
210
+ clamp(low, high) {
211
+ return new ObservableVector2d(clamp(this.x, low, high), clamp(this.y, low, high), {onUpdate: this.onUpdate, scope: this.scope});
212
+ }
213
+
214
+ /**
215
+ * Clamp this vector value within the specified value range
216
+ * @name clampSelf
217
+ * @memberof ObservableVector2d
218
+ * @param {number} low
219
+ * @param {number} high
220
+ * @returns {ObservableVector2d} Reference to this object for method chaining
221
+ */
222
+ clampSelf(low, high) {
223
+ return this._set(clamp(this._x, low, high), clamp(this._y, low, high));
224
+ }
225
+
226
+ /**
227
+ * Update this vector with the minimum value between this and the passed vector
228
+ * @name minV
229
+ * @memberof ObservableVector2d
230
+ * @param {ObservableVector2d} v
231
+ * @returns {ObservableVector2d} Reference to this object for method chaining
232
+ */
233
+ minV(v) {
234
+ return this._set((this._x < v.x) ? this._x : v.x, (this._y < v.y) ? this._y : v.y);
235
+ }
236
+
237
+ /**
238
+ * Update this vector with the maximum value between this and the passed vector
239
+ * @name maxV
240
+ * @memberof ObservableVector2d
241
+ * @param {ObservableVector2d} v
242
+ * @returns {ObservableVector2d} Reference to this object for method chaining
243
+ */
244
+ maxV(v) {
245
+ return this._set((this._x > v.x) ? this._x : v.x, (this._y > v.y) ? this._y : v.y);
246
+ }
247
+
248
+ /**
249
+ * Floor the vector values
250
+ * @name floor
251
+ * @memberof ObservableVector2d
252
+ * @returns {ObservableVector2d} new me.ObservableVector2d
253
+ */
254
+ floor() {
255
+ return new ObservableVector2d(Math.floor(this._x), Math.floor(this._y), {onUpdate: this.onUpdate, scope: this.scope});
256
+ }
257
+
258
+ /**
259
+ * Floor this vector values
260
+ * @name floorSelf
261
+ * @memberof ObservableVector2d
262
+ * @returns {ObservableVector2d} Reference to this object for method chaining
263
+ */
264
+ floorSelf() {
265
+ return this._set(Math.floor(this._x), Math.floor(this._y));
266
+ }
267
+
268
+ /**
269
+ * Ceil the vector values
270
+ * @name ceil
271
+ * @memberof ObservableVector2d
272
+ * @returns {ObservableVector2d} new me.ObservableVector2d
273
+ */
274
+ ceil() {
275
+ return new ObservableVector2d(Math.ceil(this._x), Math.ceil(this._y), {onUpdate: this.onUpdate, scope: this.scope});
276
+ }
277
+
278
+ /**
279
+ * Ceil this vector values
280
+ * @name ceilSelf
281
+ * @memberof ObservableVector2d
282
+ * @returns {ObservableVector2d} Reference to this object for method chaining
283
+ */
284
+ ceilSelf() {
285
+ return this._set(Math.ceil(this._x), Math.ceil(this._y));
286
+ }
287
+
288
+ /**
289
+ * Negate the vector values
290
+ * @name negate
291
+ * @memberof ObservableVector2d
292
+ * @returns {ObservableVector2d} new me.ObservableVector2d
293
+ */
294
+ negate() {
295
+ return new ObservableVector2d(-this._x, -this._y, {onUpdate: this.onUpdate, scope: this.scope});
296
+ }
297
+
298
+ /**
299
+ * Negate this vector values
300
+ * @name negateSelf
301
+ * @memberof ObservableVector2d
302
+ * @returns {ObservableVector2d} Reference to this object for method chaining
303
+ */
304
+ negateSelf() {
305
+ return this._set(-this._x, -this._y);
306
+ }
307
+
308
+ /**
309
+ * Copy the x,y values of the passed vector to this one
310
+ * @name copy
311
+ * @memberof ObservableVector2d
312
+ * @param {ObservableVector2d} v
313
+ * @returns {ObservableVector2d} Reference to this object for method chaining
314
+ */
315
+ copy(v) {
316
+ return this._set(v.x, v.y);
317
+ }
318
+
319
+ /**
320
+ * return true if the two vectors are the same
321
+ * @name equals
322
+ * @memberof ObservableVector2d
323
+ * @param {ObservableVector2d} v
324
+ * @returns {boolean}
325
+ */
326
+ equals(v) {
327
+ return ((this._x === v.x) && (this._y === v.y));
328
+ }
329
+
330
+ /**
331
+ * change this vector to be perpendicular to what it was before.<br>
332
+ * (Effectively rotates it 90 degrees in a clockwise direction)
333
+ * @name perp
334
+ * @memberof ObservableVector2d
335
+ * @returns {ObservableVector2d} Reference to this object for method chaining
336
+ */
337
+ perp() {
338
+ return this._set(this._y, -this._x);
339
+ }
340
+
341
+ /**
342
+ * Rotate this vector (counter-clockwise) by the specified angle (in radians).
343
+ * @name rotate
344
+ * @memberof ObservableVector2d
345
+ * @param {number} angle - The angle to rotate (in radians)
346
+ * @param {Vector2d|ObservableVector2d} [v] - an optional point to rotate around
347
+ * @returns {ObservableVector2d} Reference to this object for method chaining
348
+ */
349
+ rotate(angle, v) {
350
+ var cx = 0;
351
+ var cy = 0;
352
+
353
+ if (typeof v === "object") {
354
+ cx = v.x;
355
+ cy = v.y;
356
+ }
357
+
358
+ var x = this._x - cx;
359
+ var y = this._y - cy;
360
+
361
+ var c = Math.cos(angle);
362
+ var s = Math.sin(angle);
363
+
364
+ return this._set(x * c - y * s + cx, x * s + y * c + cy);
365
+ }
366
+
367
+ /**
368
+ * return the dot product of this vector and the passed one
369
+ * @name dot
370
+ * @memberof ObservableVector2d
371
+ * @param {Vector2d|ObservableVector2d} v
372
+ * @returns {number} The dot product.
373
+ */
374
+ dot(v) {
375
+ return this._x * v.x + this._y * v.y;
376
+ }
377
+
378
+ /**
379
+ * return the cross product of this vector and the passed one
380
+ * @name cross
381
+ * @memberof ObservableVector2d
382
+ * @param {Vector2d|ObservableVector2d} v
383
+ * @returns {number} The cross product.
384
+ */
385
+ cross(v) {
386
+ return this._x * v.y - this._y * v.x;
387
+ }
388
+
389
+ /**
390
+ * Linearly interpolate between this vector and the given one.
391
+ * @name lerp
392
+ * @memberof ObservableVector2d
393
+ * @param {Vector2d|ObservableVector2d} v
394
+ * @param {number} alpha - distance along the line (alpha = 0 will be this vector, and alpha = 1 will be the given one).
395
+ * @returns {ObservableVector2d} Reference to this object for method chaining
396
+ */
397
+ lerp(v, alpha) {
398
+ return this._set(
399
+ this._x + ( v.x - this._x ) * alpha,
400
+ this._y + ( v.y - this._y ) * alpha
401
+ );
402
+ }
403
+
404
+ /**
405
+ * interpolate the position of this vector towards the given one while nsure that the distance never exceeds the given step.
406
+ * @name moveTowards
407
+ * @memberof ObservableVector2d
408
+ * @param {Vector2d|ObservableVector2d} target
409
+ * @param {number} step - the maximum step per iteration (Negative values will push the vector away from the target)
410
+ * @returns {ObservableVector2d} Reference to this object for method chaining
411
+ */
412
+ moveTowards(target, step) {
413
+ var angle = Math.atan2(target.y - this._y, target.x - this._x);
414
+
415
+ var distance = this.distance(target);
416
+
417
+ if (distance === 0 || (step >= 0 && distance <= step * step)) {
418
+ return target;
419
+ }
420
+
421
+ this._x += Math.cos(angle) * step;
422
+ this._y += Math.sin(angle) * step;
423
+
424
+ return this;
425
+ }
426
+
427
+ /**
428
+ * return the distance between this vector and the passed one
429
+ * @name distance
430
+ * @memberof ObservableVector2d
431
+ * @param {ObservableVector2d} v
432
+ * @returns {number}
433
+ */
434
+ distance(v) {
435
+ return Math.sqrt((this._x - v.x) * (this._x - v.x) + (this._y - v.y) * (this._y - v.y));
436
+ }
437
+
438
+ /**
439
+ * return a clone copy of this vector
440
+ * @name clone
441
+ * @memberof ObservableVector2d
442
+ * @returns {ObservableVector2d} new me.ObservableVector2d
443
+ */
444
+ clone() {
445
+ return pool.pull("ObservableVector2d", this._x, this._y, {onUpdate: this.onUpdate, scope: this.scope});
446
+ }
447
+
448
+ /**
449
+ * return a `me.Vector2d` copy of this `me.ObservableVector2d` object
450
+ * @name toVector2d
451
+ * @memberof ObservableVector2d
452
+ * @returns {Vector2d} new me.Vector2d
453
+ */
454
+ toVector2d() {
455
+ return pool.pull("Vector2d", this._x, this._y);
456
+ }
457
+
458
+ /**
459
+ * convert the object to a string representation
460
+ * @name toString
461
+ * @memberof ObservableVector2d
462
+ * @returns {string}
463
+ */
464
+ toString() {
465
+ return "x:" + this._x + ",y:" + this._y;
466
+ }
467
+ }
468
+
469
+ export { ObservableVector2d as default };