three-nebula 10.0.3 → 11.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 (247) hide show
  1. package/.claude/rules/no-coauthor.md +4 -0
  2. package/CHANGELOG.md +33 -0
  3. package/dist/three-nebula.cjs +109 -0
  4. package/dist/three-nebula.cjs.map +1 -0
  5. package/dist/three-nebula.mjs +2968 -0
  6. package/dist/three-nebula.mjs.map +1 -0
  7. package/dist/three-nebula.umd.js +109 -0
  8. package/dist/three-nebula.umd.js.map +1 -0
  9. package/package.json +32 -56
  10. package/specs/01-emitter-hierarchy.md +200 -0
  11. package/specs/02-determinism-scrubbing.md +188 -0
  12. package/specs/03-sound-renderer.md +183 -0
  13. package/specs/04-schema-versioning.md +140 -0
  14. package/specs/05-content-addressed-assets.md +288 -0
  15. package/specs/README.md +80 -0
  16. package/build/cjs/behaviour/Alpha.js +0 -189
  17. package/build/cjs/behaviour/Attraction.js +0 -189
  18. package/build/cjs/behaviour/Behaviour.js +0 -253
  19. package/build/cjs/behaviour/Collision.js +0 -146
  20. package/build/cjs/behaviour/Color.js +0 -148
  21. package/build/cjs/behaviour/CrossZone.js +0 -141
  22. package/build/cjs/behaviour/Force.js +0 -126
  23. package/build/cjs/behaviour/Gravity.js +0 -78
  24. package/build/cjs/behaviour/RandomDrift.js +0 -153
  25. package/build/cjs/behaviour/Repulsion.js +0 -123
  26. package/build/cjs/behaviour/Rotate.js +0 -265
  27. package/build/cjs/behaviour/Scale.js +0 -177
  28. package/build/cjs/behaviour/Spring.js +0 -133
  29. package/build/cjs/behaviour/constants.js +0 -28
  30. package/build/cjs/behaviour/index.js +0 -112
  31. package/build/cjs/behaviour/types.js +0 -33
  32. package/build/cjs/constants/index.js +0 -61
  33. package/build/cjs/core/Particle.js +0 -390
  34. package/build/cjs/core/Pool.js +0 -203
  35. package/build/cjs/core/System.js +0 -366
  36. package/build/cjs/core/constants.js +0 -163
  37. package/build/cjs/core/fromJSON.js +0 -128
  38. package/build/cjs/core/fromJSONAsync.js +0 -239
  39. package/build/cjs/core/index.js +0 -32
  40. package/build/cjs/core/three/Euler.js +0 -233
  41. package/build/cjs/core/three/Math.js +0 -91
  42. package/build/cjs/core/three/Matrix4.js +0 -745
  43. package/build/cjs/core/three/Quaternion.js +0 -451
  44. package/build/cjs/core/three/Vector3.js +0 -464
  45. package/build/cjs/core/three/constants.js +0 -298
  46. package/build/cjs/core/three/index.js +0 -48
  47. package/build/cjs/core/types.js +0 -13
  48. package/build/cjs/debug/Debug.js +0 -209
  49. package/build/cjs/debug/constants.js +0 -19
  50. package/build/cjs/debug/index.js +0 -24
  51. package/build/cjs/debug/log.js +0 -38
  52. package/build/cjs/ease/index.js +0 -149
  53. package/build/cjs/emitter/Emitter.js +0 -791
  54. package/build/cjs/emitter/FollowEmitter.js +0 -146
  55. package/build/cjs/emitter/constants.js +0 -20
  56. package/build/cjs/emitter/index.js +0 -24
  57. package/build/cjs/emitter/types.js +0 -11
  58. package/build/cjs/events/EventDispatcher.js +0 -105
  59. package/build/cjs/events/constants.js +0 -23
  60. package/build/cjs/events/index.js +0 -27
  61. package/build/cjs/index.js +0 -151
  62. package/build/cjs/initializer/Body.js +0 -122
  63. package/build/cjs/initializer/BodySprite.js +0 -146
  64. package/build/cjs/initializer/Initializer.js +0 -109
  65. package/build/cjs/initializer/InitializerUtil.js +0 -54
  66. package/build/cjs/initializer/Life.js +0 -106
  67. package/build/cjs/initializer/Mass.js +0 -101
  68. package/build/cjs/initializer/Position.js +0 -152
  69. package/build/cjs/initializer/Radius.js +0 -118
  70. package/build/cjs/initializer/Rate.js +0 -150
  71. package/build/cjs/initializer/Texture.js +0 -139
  72. package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
  73. package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
  74. package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
  75. package/build/cjs/initializer/Velocity/Velocity.js +0 -94
  76. package/build/cjs/initializer/Velocity/index.js +0 -32
  77. package/build/cjs/initializer/constants.js +0 -43
  78. package/build/cjs/initializer/index.js +0 -100
  79. package/build/cjs/initializer/types.js +0 -35
  80. package/build/cjs/math/ArraySpan.js +0 -103
  81. package/build/cjs/math/Box.js +0 -46
  82. package/build/cjs/math/ColorSpan.js +0 -113
  83. package/build/cjs/math/MathUtils.js +0 -57
  84. package/build/cjs/math/Polar3D.js +0 -115
  85. package/build/cjs/math/Span.js +0 -88
  86. package/build/cjs/math/Vector3D.js +0 -76
  87. package/build/cjs/math/constants.js +0 -35
  88. package/build/cjs/math/index.js +0 -122
  89. package/build/cjs/math/integration.js +0 -59
  90. package/build/cjs/math/types.js +0 -19
  91. package/build/cjs/renderer/BaseRenderer.js +0 -108
  92. package/build/cjs/renderer/CustomRenderer.js +0 -65
  93. package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -350
  94. package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
  95. package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
  96. package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
  97. package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -364
  98. package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
  99. package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
  100. package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
  101. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -53
  102. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
  103. package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
  104. package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
  105. package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
  106. package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
  107. package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
  108. package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -43
  109. package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
  110. package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
  111. package/build/cjs/renderer/GPURenderer/index.js +0 -97
  112. package/build/cjs/renderer/MeshRenderer.js +0 -136
  113. package/build/cjs/renderer/SpriteRenderer.js +0 -63
  114. package/build/cjs/renderer/index.js +0 -40
  115. package/build/cjs/renderer/types.js +0 -21
  116. package/build/cjs/utils/ColorUtil.js +0 -39
  117. package/build/cjs/utils/PUID.js +0 -26
  118. package/build/cjs/utils/THREEUtil.js +0 -40
  119. package/build/cjs/utils/Util.js +0 -69
  120. package/build/cjs/utils/index.js +0 -61
  121. package/build/cjs/utils/uid.js +0 -14
  122. package/build/cjs/zone/BoxZone.js +0 -178
  123. package/build/cjs/zone/LineZone.js +0 -101
  124. package/build/cjs/zone/MeshZone.js +0 -101
  125. package/build/cjs/zone/PointZone.js +0 -99
  126. package/build/cjs/zone/ScreenZone.js +0 -164
  127. package/build/cjs/zone/SphereZone.js +0 -155
  128. package/build/cjs/zone/Zone.js +0 -172
  129. package/build/cjs/zone/index.js +0 -56
  130. package/build/cjs/zone/types.js +0 -21
  131. package/build/esm/behaviour/Alpha.js +0 -134
  132. package/build/esm/behaviour/Attraction.js +0 -135
  133. package/build/esm/behaviour/Behaviour.js +0 -215
  134. package/build/esm/behaviour/Collision.js +0 -100
  135. package/build/esm/behaviour/Color.js +0 -101
  136. package/build/esm/behaviour/CrossZone.js +0 -82
  137. package/build/esm/behaviour/Force.js +0 -83
  138. package/build/esm/behaviour/Gravity.js +0 -40
  139. package/build/esm/behaviour/RandomDrift.js +0 -97
  140. package/build/esm/behaviour/Repulsion.js +0 -81
  141. package/build/esm/behaviour/Rotate.js +0 -214
  142. package/build/esm/behaviour/Scale.js +0 -131
  143. package/build/esm/behaviour/Spring.js +0 -90
  144. package/build/esm/behaviour/constants.js +0 -11
  145. package/build/esm/behaviour/index.js +0 -14
  146. package/build/esm/behaviour/types.js +0 -14
  147. package/build/esm/constants/index.js +0 -42
  148. package/build/esm/core/Particle.js +0 -357
  149. package/build/esm/core/Pool.js +0 -161
  150. package/build/esm/core/System.js +0 -320
  151. package/build/esm/core/constants.js +0 -127
  152. package/build/esm/core/fromJSON.js +0 -107
  153. package/build/esm/core/fromJSONAsync.js +0 -210
  154. package/build/esm/core/index.js +0 -4
  155. package/build/esm/core/three/Euler.js +0 -224
  156. package/build/esm/core/three/Math.js +0 -84
  157. package/build/esm/core/three/Matrix4.js +0 -739
  158. package/build/esm/core/three/Quaternion.js +0 -445
  159. package/build/esm/core/three/Vector3.js +0 -457
  160. package/build/esm/core/three/constants.js +0 -148
  161. package/build/esm/core/three/index.js +0 -5
  162. package/build/esm/core/types.js +0 -4
  163. package/build/esm/debug/Debug.js +0 -195
  164. package/build/esm/debug/constants.js +0 -7
  165. package/build/esm/debug/index.js +0 -3
  166. package/build/esm/debug/log.js +0 -31
  167. package/build/esm/ease/index.js +0 -113
  168. package/build/esm/emitter/Emitter.js +0 -701
  169. package/build/esm/emitter/FollowEmitter.js +0 -97
  170. package/build/esm/emitter/constants.js +0 -7
  171. package/build/esm/emitter/index.js +0 -3
  172. package/build/esm/emitter/types.js +0 -3
  173. package/build/esm/events/EventDispatcher.js +0 -82
  174. package/build/esm/events/constants.js +0 -9
  175. package/build/esm/events/index.js +0 -4
  176. package/build/esm/index.js +0 -13
  177. package/build/esm/initializer/Body.js +0 -83
  178. package/build/esm/initializer/BodySprite.js +0 -108
  179. package/build/esm/initializer/Initializer.js +0 -84
  180. package/build/esm/initializer/InitializerUtil.js +0 -48
  181. package/build/esm/initializer/Life.js +0 -66
  182. package/build/esm/initializer/Mass.js +0 -60
  183. package/build/esm/initializer/Position.js +0 -98
  184. package/build/esm/initializer/Radius.js +0 -75
  185. package/build/esm/initializer/Rate.js +0 -107
  186. package/build/esm/initializer/Texture.js +0 -101
  187. package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
  188. package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
  189. package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
  190. package/build/esm/initializer/Velocity/Velocity.js +0 -52
  191. package/build/esm/initializer/Velocity/index.js +0 -4
  192. package/build/esm/initializer/constants.js +0 -26
  193. package/build/esm/initializer/index.js +0 -11
  194. package/build/esm/initializer/types.js +0 -15
  195. package/build/esm/math/ArraySpan.js +0 -62
  196. package/build/esm/math/Box.js +0 -25
  197. package/build/esm/math/ColorSpan.js +0 -71
  198. package/build/esm/math/MathUtils.js +0 -48
  199. package/build/esm/math/Polar3D.js +0 -81
  200. package/build/esm/math/Span.js +0 -63
  201. package/build/esm/math/Vector3D.js +0 -34
  202. package/build/esm/math/constants.js +0 -24
  203. package/build/esm/math/index.js +0 -10
  204. package/build/esm/math/integration.js +0 -47
  205. package/build/esm/math/types.js +0 -7
  206. package/build/esm/renderer/BaseRenderer.js +0 -78
  207. package/build/esm/renderer/CustomRenderer.js +0 -23
  208. package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -331
  209. package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -23
  210. package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
  211. package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -33
  212. package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -349
  213. package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -20
  214. package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
  215. package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -30
  216. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -27
  217. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
  218. package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
  219. package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
  220. package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
  221. package/build/esm/renderer/GPURenderer/common/index.js +0 -4
  222. package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
  223. package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -24
  224. package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
  225. package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
  226. package/build/esm/renderer/GPURenderer/index.js +0 -57
  227. package/build/esm/renderer/MeshRenderer.js +0 -94
  228. package/build/esm/renderer/SpriteRenderer.js +0 -26
  229. package/build/esm/renderer/index.js +0 -5
  230. package/build/esm/renderer/types.js +0 -8
  231. package/build/esm/utils/ColorUtil.js +0 -32
  232. package/build/esm/utils/PUID.js +0 -19
  233. package/build/esm/utils/THREEUtil.js +0 -31
  234. package/build/esm/utils/Util.js +0 -60
  235. package/build/esm/utils/index.js +0 -13
  236. package/build/esm/utils/uid.js +0 -3
  237. package/build/esm/zone/BoxZone.js +0 -133
  238. package/build/esm/zone/LineZone.js +0 -61
  239. package/build/esm/zone/MeshZone.js +0 -60
  240. package/build/esm/zone/PointZone.js +0 -59
  241. package/build/esm/zone/ScreenZone.js +0 -116
  242. package/build/esm/zone/SphereZone.js +0 -113
  243. package/build/esm/zone/Zone.js +0 -141
  244. package/build/esm/zone/index.js +0 -7
  245. package/build/esm/zone/types.js +0 -8
  246. package/build/three-nebula.js +0 -2
  247. package/build/three-nebula.js.map +0 -1
@@ -1,233 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Euler = Euler;
7
-
8
- var _Quaternion = require("./Quaternion.js");
9
-
10
- var _Vector = require("./Vector3.js");
11
-
12
- var _Matrix = require("./Matrix4.js");
13
-
14
- var _Math2 = require("./Math.js");
15
-
16
- /**
17
- * @author mrdoob / http://mrdoob.com/
18
- * @author WestLangley / http://github.com/WestLangley
19
- * @author bhouston / http://clara.io
20
- */
21
- function Euler(x, y, z, order) {
22
- this._x = x || 0;
23
- this._y = y || 0;
24
- this._z = z || 0;
25
- this._order = order || Euler.DefaultOrder;
26
- }
27
-
28
- Euler.RotationOrders = ['XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX'];
29
- Euler.DefaultOrder = 'XYZ';
30
- Object.defineProperties(Euler.prototype, {
31
- x: {
32
- get: function get() {
33
- return this._x;
34
- },
35
- set: function set(value) {
36
- this._x = value;
37
-
38
- this._onChangeCallback();
39
- }
40
- },
41
- y: {
42
- get: function get() {
43
- return this._y;
44
- },
45
- set: function set(value) {
46
- this._y = value;
47
-
48
- this._onChangeCallback();
49
- }
50
- },
51
- z: {
52
- get: function get() {
53
- return this._z;
54
- },
55
- set: function set(value) {
56
- this._z = value;
57
-
58
- this._onChangeCallback();
59
- }
60
- },
61
- order: {
62
- get: function get() {
63
- return this._order;
64
- },
65
- set: function set(value) {
66
- this._order = value;
67
-
68
- this._onChangeCallback();
69
- }
70
- }
71
- });
72
- Object.assign(Euler.prototype, {
73
- isEuler: true,
74
- set: function set(x, y, z, order) {
75
- this._x = x;
76
- this._y = y;
77
- this._z = z;
78
- this._order = order || this._order;
79
-
80
- this._onChangeCallback();
81
-
82
- return this;
83
- },
84
- clone: function clone() {
85
- return new this.constructor(this._x, this._y, this._z, this._order);
86
- },
87
- copy: function copy(euler) {
88
- this._x = euler._x;
89
- this._y = euler._y;
90
- this._z = euler._z;
91
- this._order = euler._order;
92
-
93
- this._onChangeCallback();
94
-
95
- return this;
96
- },
97
- setFromRotationMatrix: function setFromRotationMatrix(m, order, update) {
98
- var clamp = _Math2._Math.clamp; // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
99
-
100
- var te = m.elements;
101
- var m11 = te[0],
102
- m12 = te[4],
103
- m13 = te[8];
104
- var m21 = te[1],
105
- m22 = te[5],
106
- m23 = te[9];
107
- var m31 = te[2],
108
- m32 = te[6],
109
- m33 = te[10];
110
- order = order || this._order;
111
-
112
- if (order === 'XYZ') {
113
- this._y = Math.asin(clamp(m13, -1, 1));
114
-
115
- if (Math.abs(m13) < 0.99999) {
116
- this._x = Math.atan2(-m23, m33);
117
- this._z = Math.atan2(-m12, m11);
118
- } else {
119
- this._x = Math.atan2(m32, m22);
120
- this._z = 0;
121
- }
122
- } else if (order === 'YXZ') {
123
- this._x = Math.asin(-clamp(m23, -1, 1));
124
-
125
- if (Math.abs(m23) < 0.99999) {
126
- this._y = Math.atan2(m13, m33);
127
- this._z = Math.atan2(m21, m22);
128
- } else {
129
- this._y = Math.atan2(-m31, m11);
130
- this._z = 0;
131
- }
132
- } else if (order === 'ZXY') {
133
- this._x = Math.asin(clamp(m32, -1, 1));
134
-
135
- if (Math.abs(m32) < 0.99999) {
136
- this._y = Math.atan2(-m31, m33);
137
- this._z = Math.atan2(-m12, m22);
138
- } else {
139
- this._y = 0;
140
- this._z = Math.atan2(m21, m11);
141
- }
142
- } else if (order === 'ZYX') {
143
- this._y = Math.asin(-clamp(m31, -1, 1));
144
-
145
- if (Math.abs(m31) < 0.99999) {
146
- this._x = Math.atan2(m32, m33);
147
- this._z = Math.atan2(m21, m11);
148
- } else {
149
- this._x = 0;
150
- this._z = Math.atan2(-m12, m22);
151
- }
152
- } else if (order === 'YZX') {
153
- this._z = Math.asin(clamp(m21, -1, 1));
154
-
155
- if (Math.abs(m21) < 0.99999) {
156
- this._x = Math.atan2(-m23, m22);
157
- this._y = Math.atan2(-m31, m11);
158
- } else {
159
- this._x = 0;
160
- this._y = Math.atan2(m13, m33);
161
- }
162
- } else if (order === 'XZY') {
163
- this._z = Math.asin(-clamp(m12, -1, 1));
164
-
165
- if (Math.abs(m12) < 0.99999) {
166
- this._x = Math.atan2(m32, m22);
167
- this._y = Math.atan2(m13, m11);
168
- } else {
169
- this._x = Math.atan2(-m23, m33);
170
- this._y = 0;
171
- }
172
- } else {
173
- console.warn('THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order);
174
- }
175
-
176
- this._order = order;
177
- if (update !== false) this._onChangeCallback();
178
- return this;
179
- },
180
- setFromQuaternion: function () {
181
- var matrix = new _Matrix.Matrix4();
182
- return function setFromQuaternion(q, order, update) {
183
- matrix.makeRotationFromQuaternion(q);
184
- return this.setFromRotationMatrix(matrix, order, update);
185
- };
186
- }(),
187
- setFromVector3: function setFromVector3(v, order) {
188
- return this.set(v.x, v.y, v.z, order || this._order);
189
- },
190
- reorder: function () {
191
- // WARNING: this discards revolution information -bhouston
192
- var q = new _Quaternion.Quaternion();
193
- return function reorder(newOrder) {
194
- q.setFromEuler(this);
195
- return this.setFromQuaternion(q, newOrder);
196
- };
197
- }(),
198
- equals: function equals(euler) {
199
- return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order;
200
- },
201
- fromArray: function fromArray(array) {
202
- this._x = array[0];
203
- this._y = array[1];
204
- this._z = array[2];
205
- if (array[3] !== undefined) this._order = array[3];
206
-
207
- this._onChangeCallback();
208
-
209
- return this;
210
- },
211
- toArray: function toArray(array, offset) {
212
- if (array === undefined) array = [];
213
- if (offset === undefined) offset = 0;
214
- array[offset] = this._x;
215
- array[offset + 1] = this._y;
216
- array[offset + 2] = this._z;
217
- array[offset + 3] = this._order;
218
- return array;
219
- },
220
- toVector3: function toVector3(optionalResult) {
221
- if (optionalResult) {
222
- return optionalResult.set(this._x, this._y, this._z);
223
- } else {
224
- return new _Vector.Vector3(this._x, this._y, this._z);
225
- }
226
- },
227
- _onChange: function _onChange(callback) {
228
- this._onChangeCallback = callback;
229
- return this;
230
- },
231
- _onChangeCallback: function _onChangeCallback() {}
232
- });
233
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RocmVlL0V1bGVyLmpzIl0sIm5hbWVzIjpbIkV1bGVyIiwieCIsInkiLCJ6Iiwib3JkZXIiLCJfeCIsIl95IiwiX3oiLCJfb3JkZXIiLCJEZWZhdWx0T3JkZXIiLCJSb3RhdGlvbk9yZGVycyIsIk9iamVjdCIsImRlZmluZVByb3BlcnRpZXMiLCJwcm90b3R5cGUiLCJnZXQiLCJzZXQiLCJ2YWx1ZSIsIl9vbkNoYW5nZUNhbGxiYWNrIiwiYXNzaWduIiwiaXNFdWxlciIsImNsb25lIiwiY29uc3RydWN0b3IiLCJjb3B5IiwiZXVsZXIiLCJzZXRGcm9tUm90YXRpb25NYXRyaXgiLCJtIiwidXBkYXRlIiwiY2xhbXAiLCJfTWF0aCIsInRlIiwiZWxlbWVudHMiLCJtMTEiLCJtMTIiLCJtMTMiLCJtMjEiLCJtMjIiLCJtMjMiLCJtMzEiLCJtMzIiLCJtMzMiLCJNYXRoIiwiYXNpbiIsImFicyIsImF0YW4yIiwiY29uc29sZSIsIndhcm4iLCJzZXRGcm9tUXVhdGVybmlvbiIsIm1hdHJpeCIsIk1hdHJpeDQiLCJxIiwibWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24iLCJzZXRGcm9tVmVjdG9yMyIsInYiLCJyZW9yZGVyIiwiUXVhdGVybmlvbiIsIm5ld09yZGVyIiwic2V0RnJvbUV1bGVyIiwiZXF1YWxzIiwiZnJvbUFycmF5IiwiYXJyYXkiLCJ1bmRlZmluZWQiLCJ0b0FycmF5Iiwib2Zmc2V0IiwidG9WZWN0b3IzIiwib3B0aW9uYWxSZXN1bHQiLCJWZWN0b3IzIiwiX29uQ2hhbmdlIiwiY2FsbGJhY2siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsU0FBU0EsS0FBVCxDQUFnQkMsQ0FBaEIsRUFBbUJDLENBQW5CLEVBQXNCQyxDQUF0QixFQUF5QkMsS0FBekIsRUFBaUM7QUFFaEMsT0FBS0MsRUFBTCxHQUFVSixDQUFDLElBQUks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ZUFBSixDQUFhLEtBQUs1RCxFQUFsQixFQUFzQixLQUFLQyxFQUEzQixFQUErQixLQUFLQyxFQUFwQyxDQUFQO0FBRUE7QUFFRCxHQWhQOEI7QUFrUC9CMkQsRUFBQUEsU0FBUyxFQUFFLG1CQUFXQyxRQUFYLEVBQXNCO0FBRWhDLFNBQUtsRCxpQkFBTCxHQUF5QmtELFFBQXpCO0FBRUEsV0FBTyxJQUFQO0FBRUEsR0F4UDhCO0FBMFAvQmxELEVBQUFBLGlCQUFpQixFQUFFLDZCQUFZLENBQUU7QUExUEYsQ0FBaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSAnLi9RdWF0ZXJuaW9uLmpzJztcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL1ZlY3RvcjMuanMnO1xuaW1wb3J0IHsgTWF0cml4NCB9IGZyb20gJy4vTWF0cml4NC5qcyc7XG5pbXBvcnQgeyBfTWF0aCB9IGZyb20gJy4vTWF0aC5qcyc7XG5cbi8qKlxuICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS9cbiAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xleVxuICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pb1xuICovXG5cbmZ1bmN0aW9uIEV1bGVyKCB4LCB5LCB6LCBvcmRlciApIHtcblxuXHR0aGlzLl94ID0geCB8fCAwO1xuXHR0aGlzLl95ID0geSB8fCAwO1xuXHR0aGlzLl96ID0geiB8fCAwO1xuXHR0aGlzLl9vcmRlciA9IG9yZGVyIHx8IEV1bGVyLkRlZmF1bHRPcmRlcjtcblxufVxuXG5FdWxlci5Sb3RhdGlvbk9yZGVycyA9IFsgJ1hZWicsICdZWlgnLCAnWlhZJywgJ1haWScsICdZWFonLCAnWllYJyBdO1xuXG5FdWxlci5EZWZhdWx0T3JkZXIgPSAnWFlaJztcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIEV1bGVyLnByb3RvdHlwZSwge1xuXG5cdHg6IHtcblxuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5feDtcblxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdHRoaXMuX3ggPSB2YWx1ZTtcblx0XHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdH1cblxuXHR9LFxuXG5cdHk6IHtcblxuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5feTtcblxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdHRoaXMuX3kgPSB2YWx1ZTtcblx0XHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdH1cblxuXHR9LFxuXG5cdHo6IHtcblxuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5fejtcblxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRcdHRoaXMuX3ogPSB2YWx1ZTtcblx0XHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdH1cblxuXHR9LFxuXG5cdG9yZGVyOiB7XG5cblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuX29yZGVyO1xuXG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdFx0dGhpcy5fb3JkZXIgPSB2YWx1ZTtcblx0XHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtcblxuXHRcdH1cblxuXHR9XG5cbn0gKTtcblxuT2JqZWN0LmFzc2lnbiggRXVsZXIucHJvdG90eXBlLCB7XG5cblx0aXNFdWxlcjogdHJ1ZSxcblxuXHRzZXQ6IGZ1bmN0aW9uICggeCwgeSwgeiwgb3JkZXIgKSB7XG5cblx0XHR0aGlzLl94ID0geDtcblx0XHR0aGlzLl95ID0geTtcblx0XHR0aGlzLl96ID0gejtcblx0XHR0aGlzLl9vcmRlciA9IG9yZGVyIHx8IHRoaXMuX29yZGVyO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96LCB0aGlzLl9vcmRlciApO1xuXG5cdH0sXG5cblx0Y29weTogZnVuY3Rpb24gKCBldWxlciApIHtcblxuXHRcdHRoaXMuX3ggPSBldWxlci5feDtcblx0XHR0aGlzLl95ID0gZXVsZXIuX3k7XG5cdFx0dGhpcy5feiA9IGV1bGVyLl96O1xuXHRcdHRoaXMuX29yZGVyID0gZXVsZXIuX29yZGVyO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRGcm9tUm90YXRpb25NYXRyaXg6IGZ1bmN0aW9uICggbSwgb3JkZXIsIHVwZGF0ZSApIHtcblxuXHRcdHZhciBjbGFtcCA9IF9NYXRoLmNsYW1wO1xuXG5cdFx0Ly8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcblxuXHRcdHZhciB0ZSA9IG0uZWxlbWVudHM7XG5cdFx0dmFyIG0xMSA9IHRlWyAwIF0sIG0xMiA9IHRlWyA0IF0sIG0xMyA9IHRlWyA4IF07XG5cdFx0dmFyIG0yMSA9IHRlWyAxIF0sIG0yMiA9IHRlWyA1IF0sIG0yMyA9IHRlWyA5IF07XG5cdFx0dmFyIG0zMSA9IHRlWyAyIF0sIG0zMiA9IHRlWyA2IF0sIG0zMyA9IHRlWyAxMCBdO1xuXG5cdFx0b3JkZXIgPSBvcmRlciB8fCB0aGlzLl9vcmRlcjtcblxuXHRcdGlmICggb3JkZXIgPT09ICdYWVonICkge1xuXG5cdFx0XHR0aGlzLl95ID0gTWF0aC5hc2luKCBjbGFtcCggbTEzLCAtIDEsIDEgKSApO1xuXG5cdFx0XHRpZiAoIE1hdGguYWJzKCBtMTMgKSA8IDAuOTk5OTkgKSB7XG5cblx0XHRcdFx0dGhpcy5feCA9IE1hdGguYXRhbjIoIC0gbTIzLCBtMzMgKTtcblx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIoIC0gbTEyLCBtMTEgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMiggbTMyLCBtMjIgKTtcblx0XHRcdFx0dGhpcy5feiA9IDA7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWVhaJyApIHtcblxuXHRcdFx0dGhpcy5feCA9IE1hdGguYXNpbiggLSBjbGFtcCggbTIzLCAtIDEsIDEgKSApO1xuXG5cdFx0XHRpZiAoIE1hdGguYWJzKCBtMjMgKSA8IDAuOTk5OTkgKSB7XG5cblx0XHRcdFx0dGhpcy5feSA9IE1hdGguYXRhbjIoIG0xMywgbTMzICk7XG5cdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKCBtMjEsIG0yMiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKCAtIG0zMSwgbTExICk7XG5cdFx0XHRcdHRoaXMuX3ogPSAwO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBvcmRlciA9PT0gJ1pYWScgKSB7XG5cblx0XHRcdHRoaXMuX3ggPSBNYXRoLmFzaW4oIGNsYW1wKCBtMzIsIC0gMSwgMSApICk7XG5cblx0XHRcdGlmICggTWF0aC5hYnMoIG0zMiApIDwgMC45OTk5OSApIHtcblxuXHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMiggLSBtMzEsIG0zMyApO1xuXHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMiggLSBtMTIsIG0yMiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHRoaXMuX3kgPSAwO1xuXHRcdFx0XHR0aGlzLl96ID0gTWF0aC5hdGFuMiggbTIxLCBtMTEgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggb3JkZXIgPT09ICdaWVgnICkge1xuXG5cdFx0XHR0aGlzLl95ID0gTWF0aC5hc2luKCAtIGNsYW1wKCBtMzEsIC0gMSwgMSApICk7XG5cblx0XHRcdGlmICggTWF0aC5hYnMoIG0zMSApIDwgMC45OTk5OSApIHtcblxuXHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMiggbTMyLCBtMzMgKTtcblx0XHRcdFx0dGhpcy5feiA9IE1hdGguYXRhbjIoIG0yMSwgbTExICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0dGhpcy5feCA9IDA7XG5cdFx0XHRcdHRoaXMuX3ogPSBNYXRoLmF0YW4yKCAtIG0xMiwgbTIyICk7XG5cblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWVpYJyApIHtcblxuXHRcdFx0dGhpcy5feiA9IE1hdGguYXNpbiggY2xhbXAoIG0yMSwgLSAxLCAxICkgKTtcblxuXHRcdFx0aWYgKCBNYXRoLmFicyggbTIxICkgPCAwLjk5OTk5ICkge1xuXG5cdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKCAtIG0yMywgbTIyICk7XG5cdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKCAtIG0zMSwgbTExICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0dGhpcy5feCA9IDA7XG5cdFx0XHRcdHRoaXMuX3kgPSBNYXRoLmF0YW4yKCBtMTMsIG0zMyApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBvcmRlciA9PT0gJ1haWScgKSB7XG5cblx0XHRcdHRoaXMuX3ogPSBNYXRoLmFzaW4oIC0gY2xhbXAoIG0xMiwgLSAxLCAxICkgKTtcblxuXHRcdFx0aWYgKCBNYXRoLmFicyggbTEyICkgPCAwLjk5OTk5ICkge1xuXG5cdFx0XHRcdHRoaXMuX3ggPSBNYXRoLmF0YW4yKCBtMzIsIG0yMiApO1xuXHRcdFx0XHR0aGlzLl95ID0gTWF0aC5hdGFuMiggbTEzLCBtMTEgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR0aGlzLl94ID0gTWF0aC5hdGFuMiggLSBtMjMsIG0zMyApO1xuXHRcdFx0XHR0aGlzLl95ID0gMDtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBnaXZlbiB1bnN1cHBvcnRlZCBvcmRlcjogJyArIG9yZGVyICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9vcmRlciA9IG9yZGVyO1xuXG5cdFx0aWYgKCB1cGRhdGUgIT09IGZhbHNlICkgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRGcm9tUXVhdGVybmlvbjogZnVuY3Rpb24gKCkge1xuXG5cdFx0dmFyIG1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gc2V0RnJvbVF1YXRlcm5pb24oIHEsIG9yZGVyLCB1cGRhdGUgKSB7XG5cblx0XHRcdG1hdHJpeC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiggcSApO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoIG1hdHJpeCwgb3JkZXIsIHVwZGF0ZSApO1xuXG5cdFx0fTtcblxuXHR9KCksXG5cblx0c2V0RnJvbVZlY3RvcjM6IGZ1bmN0aW9uICggdiwgb3JkZXIgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXQoIHYueCwgdi55LCB2LnosIG9yZGVyIHx8IHRoaXMuX29yZGVyICk7XG5cblx0fSxcblxuXHRyZW9yZGVyOiBmdW5jdGlvbiAoKSB7XG5cblx0XHQvLyBXQVJOSU5HOiB0aGlzIGRpc2NhcmRzIHJldm9sdXRpb24gaW5mb3JtYXRpb24gLWJob3VzdG9uXG5cblx0XHR2YXIgcSA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gcmVvcmRlciggbmV3T3JkZXIgKSB7XG5cblx0XHRcdHEuc2V0RnJvbUV1bGVyKCB0aGlzICk7XG5cblx0XHRcdHJldHVybiB0aGlzLnNldEZyb21RdWF0ZXJuaW9uKCBxLCBuZXdPcmRlciApO1xuXG5cdFx0fTtcblxuXHR9KCksXG5cblx0ZXF1YWxzOiBmdW5jdGlvbiAoIGV1bGVyICkge1xuXG5cdFx0cmV0dXJuICggZXVsZXIuX3ggPT09IHRoaXMuX3ggKSAmJiAoIGV1bGVyLl95ID09PSB0aGlzLl95ICkgJiYgKCBldWxlci5feiA9PT0gdGhpcy5feiApICYmICggZXVsZXIuX29yZGVyID09PSB0aGlzLl9vcmRlciApO1xuXG5cdH0sXG5cblx0ZnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5ICkge1xuXG5cdFx0dGhpcy5feCA9IGFycmF5WyAwIF07XG5cdFx0dGhpcy5feSA9IGFycmF5WyAxIF07XG5cdFx0dGhpcy5feiA9IGFycmF5WyAyIF07XG5cdFx0aWYgKCBhcnJheVsgMyBdICE9PSB1bmRlZmluZWQgKSB0aGlzLl9vcmRlciA9IGFycmF5WyAzIF07XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHtcblxuXHRcdGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCApIGFycmF5ID0gW107XG5cdFx0aWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLl94O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0aGlzLl95O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLl96O1xuXHRcdGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0aGlzLl9vcmRlcjtcblxuXHRcdHJldHVybiBhcnJheTtcblxuXHR9LFxuXG5cdHRvVmVjdG9yMzogZnVuY3Rpb24gKCBvcHRpb25hbFJlc3VsdCApIHtcblxuXHRcdGlmICggb3B0aW9uYWxSZXN1bHQgKSB7XG5cblx0XHRcdHJldHVybiBvcHRpb25hbFJlc3VsdC5zZXQoIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3ogKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyggdGhpcy5feCwgdGhpcy5feSwgdGhpcy5feiApO1xuXG5cdFx0fVxuXG5cdH0sXG5cblx0X29uQ2hhbmdlOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkge1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRfb25DaGFuZ2VDYWxsYmFjazogZnVuY3Rpb24gKCkge31cblxufSApO1xuXG5cbmV4cG9ydCB7IEV1bGVyIH07Il19
@@ -1,91 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports._Math = void 0;
7
-
8
- /**
9
- * @author alteredq / http://alteredqualia.com/
10
- * @author mrdoob / http://mrdoob.com/
11
- */
12
- var _Math = {
13
- DEG2RAD: Math.PI / 180,
14
- RAD2DEG: 180 / Math.PI,
15
- generateUUID: function () {
16
- // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
17
- var lut = [];
18
-
19
- for (var i = 0; i < 256; i++) {
20
- lut[i] = (i < 16 ? '0' : '') + i.toString(16);
21
- }
22
-
23
- return function generateUUID() {
24
- var d0 = Math.random() * 0xffffffff | 0;
25
- var d1 = Math.random() * 0xffffffff | 0;
26
- var d2 = Math.random() * 0xffffffff | 0;
27
- var d3 = Math.random() * 0xffffffff | 0;
28
- var uuid = lut[d0 & 0xff] + lut[d0 >> 8 & 0xff] + lut[d0 >> 16 & 0xff] + lut[d0 >> 24 & 0xff] + '-' + lut[d1 & 0xff] + lut[d1 >> 8 & 0xff] + '-' + lut[d1 >> 16 & 0x0f | 0x40] + lut[d1 >> 24 & 0xff] + '-' + lut[d2 & 0x3f | 0x80] + lut[d2 >> 8 & 0xff] + '-' + lut[d2 >> 16 & 0xff] + lut[d2 >> 24 & 0xff] + lut[d3 & 0xff] + lut[d3 >> 8 & 0xff] + lut[d3 >> 16 & 0xff] + lut[d3 >> 24 & 0xff]; // .toUpperCase() here flattens concatenated strings to save heap memory space.
29
-
30
- return uuid.toUpperCase();
31
- };
32
- }(),
33
- clamp: function clamp(value, min, max) {
34
- return Math.max(min, Math.min(max, value));
35
- },
36
- // compute euclidian modulo of m % n
37
- // https://en.wikipedia.org/wiki/Modulo_operation
38
- euclideanModulo: function euclideanModulo(n, m) {
39
- return (n % m + m) % m;
40
- },
41
- // Linear mapping from range <a1, a2> to range <b1, b2>
42
- mapLinear: function mapLinear(x, a1, a2, b1, b2) {
43
- return b1 + (x - a1) * (b2 - b1) / (a2 - a1);
44
- },
45
- // https://en.wikipedia.org/wiki/Linear_interpolation
46
- lerp: function lerp(x, y, t) {
47
- return (1 - t) * x + t * y;
48
- },
49
- // http://en.wikipedia.org/wiki/Smoothstep
50
- smoothstep: function smoothstep(x, min, max) {
51
- if (x <= min) return 0;
52
- if (x >= max) return 1;
53
- x = (x - min) / (max - min);
54
- return x * x * (3 - 2 * x);
55
- },
56
- smootherstep: function smootherstep(x, min, max) {
57
- if (x <= min) return 0;
58
- if (x >= max) return 1;
59
- x = (x - min) / (max - min);
60
- return x * x * x * (x * (x * 6 - 15) + 10);
61
- },
62
- // Random integer from <low, high> interval
63
- randInt: function randInt(low, high) {
64
- return low + Math.floor(Math.random() * (high - low + 1));
65
- },
66
- // Random float from <low, high> interval
67
- randFloat: function randFloat(low, high) {
68
- return low + Math.random() * (high - low);
69
- },
70
- // Random float from <-range/2, range/2> interval
71
- randFloatSpread: function randFloatSpread(range) {
72
- return range * (0.5 - Math.random());
73
- },
74
- degToRad: function degToRad(degrees) {
75
- return degrees * _Math.DEG2RAD;
76
- },
77
- radToDeg: function radToDeg(radians) {
78
- return radians * _Math.RAD2DEG;
79
- },
80
- isPowerOfTwo: function isPowerOfTwo(value) {
81
- return (value & value - 1) === 0 && value !== 0;
82
- },
83
- ceilPowerOfTwo: function ceilPowerOfTwo(value) {
84
- return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));
85
- },
86
- floorPowerOfTwo: function floorPowerOfTwo(value) {
87
- return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));
88
- }
89
- };
90
- exports._Math = _Math;
91
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RocmVlL01hdGguanMiXSwibmFtZXMiOlsiX01hdGgiLCJERUcyUkFEIiwiTWF0aCIsIlBJIiwiUkFEMkRFRyIsImdlbmVyYXRlVVVJRCIsImx1dCIsImkiLCJ0b1N0cmluZyIsImQwIiwicmFuZG9tIiwiZDEiLCJkMiIsImQzIiwidXVpZCIsInRvVXBwZXJDYXNlIiwiY2xhbXAiLCJ2YWx1ZSIsIm1pbiIsIm1heCIsImV1Y2xpZGVhbk1vZHVsbyIsIm4iLCJtIiwibWFwTGluZWFyIiwieCIsImExIiwiYTIiLCJiMSIsImIyIiwibGVycCIsInkiLCJ0Iiwic21vb3Roc3RlcCIsInNtb290aGVyc3RlcCIsInJhbmRJbnQiLCJsb3ciLCJoaWdoIiwiZmxvb3IiLCJyYW5kRmxvYXQiLCJyYW5kRmxvYXRTcHJlYWQiLCJyYW5nZSIsImRlZ1RvUmFkIiwiZGVncmVlcyIsInJhZFRvRGVnIiwicmFkaWFucyIsImlzUG93ZXJPZlR3byIsImNlaWxQb3dlck9mVHdvIiwicG93IiwiY2VpbCIsImxvZyIsIkxOMiIsImZsb29yUG93ZXJPZlR3byJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsS0FBSyxHQUFHO0FBRVhDLEVBQUFBLE9BQU8sRUFBRUMsSUFBSSxDQUFDQyxFQUFMLEdBQVUsR0FGUjtBQUdYQyxFQUFBQSxPQUFPLEVBQUUsTUFBTUYsSUFBSSxDQUFDQyxFQUhUO0FBS1hFLEVBQUFBLFlBQVksRUFBSSxZQUFZO0FBRTNCO0FBRUEsUUFBSUMsR0FBRyxHQUFHLEVBQVY7O0FBRUEsU0FBTSxJQUFJQyxDQUFDLEdBQUcsQ0FBZCxFQUFpQkEsQ0FBQyxHQUFHLEdBQXJCLEVBQTBCQSxDQUFDLEVBQTNCLEVBQWlDO0FBRWhDRCxNQUFBQSxHQUFHLENBQUVDLENBQUYsQ0FBSCxHQUFXLENBQUVBLENBQUMsR0FBRyxFQUFKLEdBQVMsR0FBVCxHQUFlLEVBQWpCLElBQTBCQSxDQUFG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QUFQO0FBRUE7QUE5SVUsQ0FBWiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS9cbiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vXG4gKi9cblxudmFyIF9NYXRoID0ge1xuXG5cdERFRzJSQUQ6IE1hdGguUEkgLyAxODAsXG5cdFJBRDJERUc6IDE4MCAvIE1hdGguUEksXG5cblx0Z2VuZXJhdGVVVUlEOiAoIGZ1bmN0aW9uICgpIHtcblxuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTk2MzEzNiMyMTk2MzEzNlxuXG5cdFx0dmFyIGx1dCA9IFtdO1xuXG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgMjU2OyBpICsrICkge1xuXG5cdFx0XHRsdXRbIGkgXSA9ICggaSA8IDE2ID8gJzAnIDogJycgKSArICggaSApLnRvU3RyaW5nKCAxNiApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGdlbmVyYXRlVVVJRCgpIHtcblxuXHRcdFx0dmFyIGQwID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRcdFx0dmFyIGQxID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRcdFx0dmFyIGQyID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRcdFx0dmFyIGQzID0gTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmZmYgfCAwO1xuXHRcdFx0dmFyIHV1aWQgPSBsdXRbIGQwICYgMHhmZiBdICsgbHV0WyBkMCA+PiA4ICYgMHhmZiBdICsgbHV0WyBkMCA+PiAxNiAmIDB4ZmYgXSArIGx1dFsgZDAgPj4gMjQgJiAweGZmIF0gKyAnLScgK1xuXHRcdFx0XHRsdXRbIGQxICYgMHhmZiBdICsgbHV0WyBkMSA+PiA4ICYgMHhmZiBdICsgJy0nICsgbHV0WyBkMSA+PiAxNiAmIDB4MGYgfCAweDQwIF0gKyBsdXRbIGQxID4+IDI0ICYgMHhmZiBdICsgJy0nICtcblx0XHRcdFx0bHV0WyBkMiAmIDB4M2YgfCAweDgwIF0gKyBsdXRbIGQyID4+IDggJiAweGZmIF0gKyAnLScgKyBsdXRbIGQyID4+IDE2ICYgMHhmZiBdICsgbHV0WyBkMiA+PiAyNCAmIDB4ZmYgXSArXG5cdFx0XHRcdGx1dFsgZDMgJiAweGZmIF0gKyBsdXRbIGQzID4+IDggJiAweGZmIF0gKyBsdXRbIGQzID4+IDE2ICYgMHhmZiBdICsgbHV0WyBkMyA+PiAyNCAmIDB4ZmYgXTtcblxuXHRcdFx0Ly8gLnRvVXBwZXJDYXNlKCkgaGVyZSBmbGF0dGVucyBjb25jYXRlbmF0ZWQgc3RyaW5ncyB0byBzYXZlIGhlYXAgbWVtb3J5IHNwYWNlLlxuXHRcdFx0cmV0dXJuIHV1aWQudG9VcHBlckNhc2UoKTtcblxuXHRcdH07XG5cblx0fSApKCksXG5cblx0Y2xhbXA6IGZ1bmN0aW9uICggdmFsdWUsIG1pbiwgbWF4ICkge1xuXG5cdFx0cmV0dXJuIE1hdGgubWF4KCBtaW4sIE1hdGgubWluKCBtYXgsIHZhbHVlICkgKTtcblxuXHR9LFxuXG5cdC8vIGNvbXB1dGUgZXVjbGlkaWFuIG1vZHVsbyBvZiBtICUgblxuXHQvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uXG5cblx0ZXVjbGlkZWFuTW9kdWxvOiBmdW5jdGlvbiAoIG4sIG0gKSB7XG5cblx0XHRyZXR1cm4gKCAoIG4gJSBtICkgKyBtICkgJSBtO1xuXG5cdH0sXG5cblx0Ly8gTGluZWFyIG1hcHBpbmcgZnJvbSByYW5nZSA8YTEsIGEyPiB0byByYW5nZSA8YjEsIGIyPlxuXG5cdG1hcExpbmVhcjogZnVuY3Rpb24gKCB4LCBhMSwgYTIsIGIxLCBiMiApIHtcblxuXHRcdHJldHVybiBiMSArICggeCAtIGExICkgKiAoIGIyIC0gYjEgKSAvICggYTIgLSBhMSApO1xuXG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGluZWFyX2ludGVycG9sYXRpb25cblxuXHRsZXJwOiBmdW5jdGlvbiAoIHgsIHksIHQgKSB7XG5cblx0XHRyZXR1cm4gKCAxIC0gdCApICogeCArIHQgKiB5O1xuXG5cdH0sXG5cblx0Ly8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbW9vdGhzdGVwXG5cblx0c21vb3Roc3RlcDogZnVuY3Rpb24gKCB4LCBtaW4sIG1heCApIHtcblxuXHRcdGlmICggeCA8PSBtaW4gKSByZXR1cm4gMDtcblx0XHRpZiAoIHggPj0gbWF4ICkgcmV0dXJuIDE7XG5cblx0XHR4ID0gKCB4IC0gbWluICkgLyAoIG1heCAtIG1pbiApO1xuXG5cdFx0cmV0dXJuIHggKiB4ICogKCAzIC0gMiAqIHggKTtcblxuXHR9LFxuXG5cdHNtb290aGVyc3RlcDogZnVuY3Rpb24gKCB4LCBtaW4sIG1heCApIHtcblxuXHRcdGlmICggeCA8PSBtaW4gKSByZXR1cm4gMDtcblx0XHRpZiAoIHggPj0gbWF4ICkgcmV0dXJuIDE7XG5cblx0XHR4ID0gKCB4IC0gbWluICkgLyAoIG1heCAtIG1pbiApO1xuXG5cdFx0cmV0dXJuIHggKiB4ICogeCAqICggeCAqICggeCAqIDYgLSAxNSApICsgMTAgKTtcblxuXHR9LFxuXG5cdC8vIFJhbmRvbSBpbnRlZ2VyIGZyb20gPGxvdywgaGlnaD4gaW50ZXJ2YWxcblxuXHRyYW5kSW50OiBmdW5jdGlvbiAoIGxvdywgaGlnaCApIHtcblxuXHRcdHJldHVybiBsb3cgKyBNYXRoLmZsb29yKCBNYXRoLnJhbmRvbSgpICogKCBoaWdoIC0gbG93ICsgMSApICk7XG5cblx0fSxcblxuXHQvLyBSYW5kb20gZmxvYXQgZnJvbSA8bG93LCBoaWdoPiBpbnRlcnZhbFxuXG5cdHJhbmRGbG9hdDogZnVuY3Rpb24gKCBsb3csIGhpZ2ggKSB7XG5cblx0XHRyZXR1cm4gbG93ICsgTWF0aC5yYW5kb20oKSAqICggaGlnaCAtIGxvdyApO1xuXG5cdH0sXG5cblx0Ly8gUmFuZG9tIGZsb2F0IGZyb20gPC1yYW5nZS8yLCByYW5nZS8yPiBpbnRlcnZhbFxuXG5cdHJhbmRGbG9hdFNwcmVhZDogZnVuY3Rpb24gKCByYW5nZSApIHtcblxuXHRcdHJldHVybiByYW5nZSAqICggMC41IC0gTWF0aC5yYW5kb20oKSApO1xuXG5cdH0sXG5cblx0ZGVnVG9SYWQ6IGZ1bmN0aW9uICggZGVncmVlcyApIHtcblxuXHRcdHJldHVybiBkZWdyZWVzICogX01hdGguREVHMlJBRDtcblxuXHR9LFxuXG5cdHJhZFRvRGVnOiBmdW5jdGlvbiAoIHJhZGlhbnMgKSB7XG5cblx0XHRyZXR1cm4gcmFkaWFucyAqIF9NYXRoLlJBRDJERUc7XG5cblx0fSxcblxuXHRpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICggdmFsdWUgKSB7XG5cblx0XHRyZXR1cm4gKCB2YWx1ZSAmICggdmFsdWUgLSAxICkgKSA9PT0gMCAmJiB2YWx1ZSAhPT0gMDtcblxuXHR9LFxuXG5cdGNlaWxQb3dlck9mVHdvOiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0cmV0dXJuIE1hdGgucG93KCAyLCBNYXRoLmNlaWwoIE1hdGgubG9nKCB2YWx1ZSApIC8gTWF0aC5MTjIgKSApO1xuXG5cdH0sXG5cblx0Zmxvb3JQb3dlck9mVHdvOiBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0cmV0dXJuIE1hdGgucG93KCAyLCBNYXRoLmZsb29yKCBNYXRoLmxvZyggdmFsdWUgKSAvIE1hdGguTE4yICkgKTtcblxuXHR9XG5cbn07XG5cblxuZXhwb3J0IHsgX01hdGggfTsiXX0=