three-nebula 11.0.0 → 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.
- package/CHANGELOG.md +10 -0
- package/dist/three-nebula.cjs +109 -0
- package/dist/three-nebula.cjs.map +1 -0
- package/dist/three-nebula.mjs +2968 -0
- package/dist/three-nebula.mjs.map +1 -0
- package/dist/three-nebula.umd.js +109 -0
- package/dist/three-nebula.umd.js.map +1 -0
- package/package.json +23 -47
- package/specs/01-emitter-hierarchy.md +200 -0
- package/specs/02-determinism-scrubbing.md +188 -0
- package/specs/03-sound-renderer.md +183 -0
- package/specs/04-schema-versioning.md +140 -0
- package/specs/05-content-addressed-assets.md +288 -0
- package/specs/README.md +80 -0
- package/build/cjs/behaviour/Alpha.js +0 -189
- package/build/cjs/behaviour/Attraction.js +0 -189
- package/build/cjs/behaviour/Behaviour.js +0 -253
- package/build/cjs/behaviour/Collision.js +0 -146
- package/build/cjs/behaviour/Color.js +0 -148
- package/build/cjs/behaviour/CrossZone.js +0 -141
- package/build/cjs/behaviour/Force.js +0 -126
- package/build/cjs/behaviour/Gravity.js +0 -78
- package/build/cjs/behaviour/RandomDrift.js +0 -153
- package/build/cjs/behaviour/Repulsion.js +0 -123
- package/build/cjs/behaviour/Rotate.js +0 -265
- package/build/cjs/behaviour/Scale.js +0 -177
- package/build/cjs/behaviour/Spring.js +0 -133
- package/build/cjs/behaviour/constants.js +0 -28
- package/build/cjs/behaviour/index.js +0 -112
- package/build/cjs/behaviour/types.js +0 -33
- package/build/cjs/constants/index.js +0 -61
- package/build/cjs/core/Particle.js +0 -390
- package/build/cjs/core/Pool.js +0 -203
- package/build/cjs/core/System.js +0 -366
- package/build/cjs/core/constants.js +0 -163
- package/build/cjs/core/fromJSON.js +0 -128
- package/build/cjs/core/fromJSONAsync.js +0 -239
- package/build/cjs/core/index.js +0 -32
- package/build/cjs/core/three/Euler.js +0 -233
- package/build/cjs/core/three/Math.js +0 -91
- package/build/cjs/core/three/Matrix4.js +0 -745
- package/build/cjs/core/three/Quaternion.js +0 -451
- package/build/cjs/core/three/Vector3.js +0 -464
- package/build/cjs/core/three/constants.js +0 -298
- package/build/cjs/core/three/index.js +0 -48
- package/build/cjs/core/types.js +0 -13
- package/build/cjs/debug/Debug.js +0 -209
- package/build/cjs/debug/constants.js +0 -19
- package/build/cjs/debug/index.js +0 -24
- package/build/cjs/debug/log.js +0 -38
- package/build/cjs/ease/index.js +0 -149
- package/build/cjs/emitter/Emitter.js +0 -798
- package/build/cjs/emitter/FollowEmitter.js +0 -146
- package/build/cjs/emitter/constants.js +0 -20
- package/build/cjs/emitter/index.js +0 -24
- package/build/cjs/emitter/types.js +0 -11
- package/build/cjs/events/EventDispatcher.js +0 -105
- package/build/cjs/events/constants.js +0 -23
- package/build/cjs/events/index.js +0 -27
- package/build/cjs/index.js +0 -151
- package/build/cjs/initializer/Body.js +0 -122
- package/build/cjs/initializer/BodySprite.js +0 -146
- package/build/cjs/initializer/Initializer.js +0 -109
- package/build/cjs/initializer/InitializerUtil.js +0 -54
- package/build/cjs/initializer/Life.js +0 -106
- package/build/cjs/initializer/Mass.js +0 -101
- package/build/cjs/initializer/Position.js +0 -152
- package/build/cjs/initializer/Radius.js +0 -118
- package/build/cjs/initializer/Rate.js +0 -150
- package/build/cjs/initializer/Rotation.js +0 -95
- package/build/cjs/initializer/Texture.js +0 -139
- package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
- package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
- package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
- package/build/cjs/initializer/Velocity/Velocity.js +0 -94
- package/build/cjs/initializer/Velocity/index.js +0 -32
- package/build/cjs/initializer/constants.js +0 -43
- package/build/cjs/initializer/index.js +0 -108
- package/build/cjs/initializer/types.js +0 -37
- package/build/cjs/math/ArraySpan.js +0 -103
- package/build/cjs/math/Box.js +0 -46
- package/build/cjs/math/ColorSpan.js +0 -113
- package/build/cjs/math/MathUtils.js +0 -57
- package/build/cjs/math/Polar3D.js +0 -115
- package/build/cjs/math/Span.js +0 -88
- package/build/cjs/math/Vector3D.js +0 -76
- package/build/cjs/math/constants.js +0 -35
- package/build/cjs/math/index.js +0 -122
- package/build/cjs/math/integration.js +0 -59
- package/build/cjs/math/types.js +0 -19
- package/build/cjs/renderer/BaseRenderer.js +0 -108
- package/build/cjs/renderer/CustomRenderer.js +0 -65
- package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -371
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
- package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -385
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -58
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
- package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
- package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
- package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -45
- package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
- package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/index.js +0 -97
- package/build/cjs/renderer/MeshRenderer.js +0 -136
- package/build/cjs/renderer/SpriteRenderer.js +0 -68
- package/build/cjs/renderer/index.js +0 -40
- package/build/cjs/renderer/types.js +0 -21
- package/build/cjs/utils/ColorUtil.js +0 -39
- package/build/cjs/utils/PUID.js +0 -26
- package/build/cjs/utils/THREEUtil.js +0 -40
- package/build/cjs/utils/Util.js +0 -69
- package/build/cjs/utils/index.js +0 -61
- package/build/cjs/utils/uid.js +0 -12
- package/build/cjs/zone/BoxZone.js +0 -178
- package/build/cjs/zone/LineZone.js +0 -101
- package/build/cjs/zone/MeshZone.js +0 -101
- package/build/cjs/zone/PointZone.js +0 -99
- package/build/cjs/zone/ScreenZone.js +0 -164
- package/build/cjs/zone/SphereZone.js +0 -155
- package/build/cjs/zone/Zone.js +0 -172
- package/build/cjs/zone/index.js +0 -56
- package/build/cjs/zone/types.js +0 -21
- package/build/esm/behaviour/Alpha.js +0 -134
- package/build/esm/behaviour/Attraction.js +0 -135
- package/build/esm/behaviour/Behaviour.js +0 -215
- package/build/esm/behaviour/Collision.js +0 -100
- package/build/esm/behaviour/Color.js +0 -101
- package/build/esm/behaviour/CrossZone.js +0 -82
- package/build/esm/behaviour/Force.js +0 -83
- package/build/esm/behaviour/Gravity.js +0 -40
- package/build/esm/behaviour/RandomDrift.js +0 -97
- package/build/esm/behaviour/Repulsion.js +0 -81
- package/build/esm/behaviour/Rotate.js +0 -214
- package/build/esm/behaviour/Scale.js +0 -131
- package/build/esm/behaviour/Spring.js +0 -90
- package/build/esm/behaviour/constants.js +0 -11
- package/build/esm/behaviour/index.js +0 -14
- package/build/esm/behaviour/types.js +0 -14
- package/build/esm/constants/index.js +0 -42
- package/build/esm/core/Particle.js +0 -357
- package/build/esm/core/Pool.js +0 -161
- package/build/esm/core/System.js +0 -320
- package/build/esm/core/constants.js +0 -127
- package/build/esm/core/fromJSON.js +0 -107
- package/build/esm/core/fromJSONAsync.js +0 -210
- package/build/esm/core/index.js +0 -4
- package/build/esm/core/three/Euler.js +0 -224
- package/build/esm/core/three/Math.js +0 -84
- package/build/esm/core/three/Matrix4.js +0 -739
- package/build/esm/core/three/Quaternion.js +0 -445
- package/build/esm/core/three/Vector3.js +0 -457
- package/build/esm/core/three/constants.js +0 -148
- package/build/esm/core/three/index.js +0 -5
- package/build/esm/core/types.js +0 -4
- package/build/esm/debug/Debug.js +0 -195
- package/build/esm/debug/constants.js +0 -7
- package/build/esm/debug/index.js +0 -3
- package/build/esm/debug/log.js +0 -31
- package/build/esm/ease/index.js +0 -113
- package/build/esm/emitter/Emitter.js +0 -708
- package/build/esm/emitter/FollowEmitter.js +0 -97
- package/build/esm/emitter/constants.js +0 -7
- package/build/esm/emitter/index.js +0 -3
- package/build/esm/emitter/types.js +0 -3
- package/build/esm/events/EventDispatcher.js +0 -82
- package/build/esm/events/constants.js +0 -9
- package/build/esm/events/index.js +0 -4
- package/build/esm/index.js +0 -13
- package/build/esm/initializer/Body.js +0 -83
- package/build/esm/initializer/BodySprite.js +0 -108
- package/build/esm/initializer/Initializer.js +0 -84
- package/build/esm/initializer/InitializerUtil.js +0 -48
- package/build/esm/initializer/Life.js +0 -66
- package/build/esm/initializer/Mass.js +0 -60
- package/build/esm/initializer/Position.js +0 -98
- package/build/esm/initializer/Radius.js +0 -75
- package/build/esm/initializer/Rate.js +0 -107
- package/build/esm/initializer/Rotation.js +0 -54
- package/build/esm/initializer/Texture.js +0 -101
- package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
- package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
- package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
- package/build/esm/initializer/Velocity/Velocity.js +0 -52
- package/build/esm/initializer/Velocity/index.js +0 -4
- package/build/esm/initializer/constants.js +0 -26
- package/build/esm/initializer/index.js +0 -12
- package/build/esm/initializer/types.js +0 -16
- package/build/esm/math/ArraySpan.js +0 -62
- package/build/esm/math/Box.js +0 -25
- package/build/esm/math/ColorSpan.js +0 -71
- package/build/esm/math/MathUtils.js +0 -48
- package/build/esm/math/Polar3D.js +0 -81
- package/build/esm/math/Span.js +0 -63
- package/build/esm/math/Vector3D.js +0 -34
- package/build/esm/math/constants.js +0 -24
- package/build/esm/math/index.js +0 -10
- package/build/esm/math/integration.js +0 -47
- package/build/esm/math/types.js +0 -7
- package/build/esm/renderer/BaseRenderer.js +0 -78
- package/build/esm/renderer/CustomRenderer.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -357
- package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -30
- package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -36
- package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -375
- package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -27
- package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -33
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -30
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
- package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
- package/build/esm/renderer/GPURenderer/common/index.js +0 -4
- package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -26
- package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
- package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
- package/build/esm/renderer/GPURenderer/index.js +0 -57
- package/build/esm/renderer/MeshRenderer.js +0 -93
- package/build/esm/renderer/SpriteRenderer.js +0 -30
- package/build/esm/renderer/index.js +0 -5
- package/build/esm/renderer/types.js +0 -8
- package/build/esm/utils/ColorUtil.js +0 -32
- package/build/esm/utils/PUID.js +0 -19
- package/build/esm/utils/THREEUtil.js +0 -31
- package/build/esm/utils/Util.js +0 -60
- package/build/esm/utils/index.js +0 -13
- package/build/esm/utils/uid.js +0 -3
- package/build/esm/zone/BoxZone.js +0 -133
- package/build/esm/zone/LineZone.js +0 -61
- package/build/esm/zone/MeshZone.js +0 -60
- package/build/esm/zone/PointZone.js +0 -59
- package/build/esm/zone/ScreenZone.js +0 -116
- package/build/esm/zone/SphereZone.js +0 -113
- package/build/esm/zone/Zone.js +0 -141
- package/build/esm/zone/index.js +0 -7
- package/build/esm/zone/types.js +0 -8
- package/build/three-nebula.js +0 -2
- package/build/three-nebula.js.map +0 -1
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports["default"] = void 0;
|
|
9
|
-
|
|
10
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
|
-
var _constants = require("./constants");
|
|
15
|
-
|
|
16
|
-
var _utils = require("../utils");
|
|
17
|
-
|
|
18
|
-
var _constants2 = require("../constants");
|
|
19
|
-
|
|
20
|
-
var _math = require("../math");
|
|
21
|
-
|
|
22
|
-
var _types = require("./types");
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* A Particle is an object that is emitted by an emitter.
|
|
26
|
-
*
|
|
27
|
-
*/
|
|
28
|
-
var Particle = /*#__PURE__*/function () {
|
|
29
|
-
/**
|
|
30
|
-
* Constructs a Particle instance.
|
|
31
|
-
*
|
|
32
|
-
* @param {object} properties - The properties to instantiate the particle with
|
|
33
|
-
* @property {number} properties.life - The particle's life
|
|
34
|
-
* @property {number} properties.age - The particle's age
|
|
35
|
-
* @property {number} properties.energy - The particle's energy loss
|
|
36
|
-
* @property {boolean} properties.dead - Determines if the particle is dead or not
|
|
37
|
-
* @property {boolean} properties.sleep - Determines if the particle is sleeping or not
|
|
38
|
-
* @property {object} properties.target - The particle's target
|
|
39
|
-
* @property {object} properties.body - The particle's body
|
|
40
|
-
* @property {number} properties.mass - The particle's mass
|
|
41
|
-
* @property {number} properties.radius - The particle's radius
|
|
42
|
-
* @property {number} properties.alpha - The particle's alpha
|
|
43
|
-
* @property {number} properties.scale - The particle's scale
|
|
44
|
-
* @property {number} properties.rotation - The particle's rotation
|
|
45
|
-
* @property {string|number} properties.color - The particle's color
|
|
46
|
-
* @property {function} properties.easing - The particle's easing
|
|
47
|
-
* @property {Vector3D} properties.position - The particle's position
|
|
48
|
-
* @property {Vector3D} properties.velocity - The particle's velocity
|
|
49
|
-
* @property {Vector3D} properties.acceleration - The particle's acceleration
|
|
50
|
-
* @property {array} properties.behaviours - The particle's behaviours array
|
|
51
|
-
* @property {object} properties.transform - The particle's transform collection
|
|
52
|
-
* @return void
|
|
53
|
-
*/
|
|
54
|
-
function Particle(properties) {
|
|
55
|
-
(0, _classCallCheck2["default"])(this, Particle);
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* @desc The particle's unique id
|
|
59
|
-
* @type {number}
|
|
60
|
-
*/
|
|
61
|
-
this.id = "particle-".concat((0, _utils.uid)());
|
|
62
|
-
/**
|
|
63
|
-
* @desc The class type.
|
|
64
|
-
* @type {string}
|
|
65
|
-
*/
|
|
66
|
-
|
|
67
|
-
this.type = _types.CORE_TYPE_PARTICLE;
|
|
68
|
-
/**
|
|
69
|
-
* @desc The particle's life
|
|
70
|
-
* @type {number}
|
|
71
|
-
*/
|
|
72
|
-
|
|
73
|
-
this.life = _constants.DEFAULT_LIFE;
|
|
74
|
-
/**
|
|
75
|
-
* @desc The particle's age
|
|
76
|
-
* @type {number}
|
|
77
|
-
*/
|
|
78
|
-
|
|
79
|
-
this.age = _constants.DEFAULT_AGE;
|
|
80
|
-
/**
|
|
81
|
-
* @desc The particle's energy loss
|
|
82
|
-
* @type {number}
|
|
83
|
-
*/
|
|
84
|
-
|
|
85
|
-
this.energy = _constants.DEFAULT_ENERGY;
|
|
86
|
-
/**
|
|
87
|
-
* @desc Determines if the particle is dead or not
|
|
88
|
-
* @type {number}
|
|
89
|
-
*/
|
|
90
|
-
|
|
91
|
-
this.dead = _constants.DEFAULT_DEAD;
|
|
92
|
-
/**
|
|
93
|
-
* @desc Determines if the particle is sleeping or not
|
|
94
|
-
* @type {number}
|
|
95
|
-
*/
|
|
96
|
-
|
|
97
|
-
this.sleep = _constants.DEFAULT_SLEEP;
|
|
98
|
-
/**
|
|
99
|
-
* @desc The particle's body
|
|
100
|
-
* @type {object}
|
|
101
|
-
*/
|
|
102
|
-
|
|
103
|
-
this.body = _constants.DEFAULT_BODY;
|
|
104
|
-
/**
|
|
105
|
-
* @desc The particle's parent
|
|
106
|
-
* @type {?Emitter}
|
|
107
|
-
*/
|
|
108
|
-
|
|
109
|
-
this.parent = _constants.DEFAULT_PARENT;
|
|
110
|
-
/**
|
|
111
|
-
* @desc The particle's mass
|
|
112
|
-
* @type {number}
|
|
113
|
-
*/
|
|
114
|
-
|
|
115
|
-
this.mass = _constants.DEFAULT_MASS;
|
|
116
|
-
/**
|
|
117
|
-
* @desc The particle's radius
|
|
118
|
-
* @type {number}
|
|
119
|
-
*/
|
|
120
|
-
|
|
121
|
-
this.radius = _constants.DEFAULT_RADIUS;
|
|
122
|
-
/**
|
|
123
|
-
* @desc The particle's alpha
|
|
124
|
-
* @type {number}
|
|
125
|
-
*/
|
|
126
|
-
|
|
127
|
-
this.alpha = _constants.DEFAULT_ALPHA;
|
|
128
|
-
/**
|
|
129
|
-
* @desc The particle's scale
|
|
130
|
-
* @type {number}
|
|
131
|
-
*/
|
|
132
|
-
|
|
133
|
-
this.scale = _constants.DEFAULT_SCALE;
|
|
134
|
-
/**
|
|
135
|
-
* @desc Determines whether to use color or not
|
|
136
|
-
* @type {boolean}
|
|
137
|
-
*/
|
|
138
|
-
|
|
139
|
-
this.useColor = _constants.DEFAULT_USE_COLOR;
|
|
140
|
-
/**
|
|
141
|
-
* @desc Determines whether to use alpha or not
|
|
142
|
-
* @type {boolean}
|
|
143
|
-
*/
|
|
144
|
-
|
|
145
|
-
this.useAlpha = _constants.DEFAULT_USE_ALPHA;
|
|
146
|
-
/**
|
|
147
|
-
* @desc The particle's easing
|
|
148
|
-
* @type {string}
|
|
149
|
-
*/
|
|
150
|
-
|
|
151
|
-
this.easing = _constants.DEFAULT_EASING;
|
|
152
|
-
/**
|
|
153
|
-
* @desc The particle's position
|
|
154
|
-
* @type {Vector3D}
|
|
155
|
-
*/
|
|
156
|
-
|
|
157
|
-
this.position = new _math.Vector3D();
|
|
158
|
-
/**
|
|
159
|
-
* @desc The particle's velocity
|
|
160
|
-
* @type {Vector3D}
|
|
161
|
-
*/
|
|
162
|
-
|
|
163
|
-
this.velocity = new _math.Vector3D();
|
|
164
|
-
/**
|
|
165
|
-
* @desc The particle's acceleration
|
|
166
|
-
* @type {Vector3D}
|
|
167
|
-
*/
|
|
168
|
-
|
|
169
|
-
this.acceleration = new _math.Vector3D();
|
|
170
|
-
/**
|
|
171
|
-
* @desc The particle's last position, velocity and acceleration
|
|
172
|
-
* @type {Vector3D}
|
|
173
|
-
*/
|
|
174
|
-
|
|
175
|
-
this.old = {};
|
|
176
|
-
/**
|
|
177
|
-
* @desc The particle's old position
|
|
178
|
-
* @type {Vector3D}
|
|
179
|
-
*/
|
|
180
|
-
|
|
181
|
-
this.old.position = this.position.clone();
|
|
182
|
-
/**
|
|
183
|
-
* @desc The particle's old velocity
|
|
184
|
-
* @type {Vector3D}
|
|
185
|
-
*/
|
|
186
|
-
|
|
187
|
-
this.old.velocity = this.velocity.clone();
|
|
188
|
-
/**
|
|
189
|
-
* @desc The particle's old acceleration
|
|
190
|
-
* @type {Vector3D}
|
|
191
|
-
*/
|
|
192
|
-
|
|
193
|
-
this.old.acceleration = this.acceleration.clone();
|
|
194
|
-
/**
|
|
195
|
-
* @desc The particle's behaviours array
|
|
196
|
-
* @type {array}
|
|
197
|
-
*/
|
|
198
|
-
|
|
199
|
-
this.behaviours = [];
|
|
200
|
-
/**
|
|
201
|
-
* @desc The particle's transform collection
|
|
202
|
-
* @type {object}
|
|
203
|
-
*/
|
|
204
|
-
|
|
205
|
-
this.transform = {};
|
|
206
|
-
/**
|
|
207
|
-
* @desc The particle's color store
|
|
208
|
-
* @type {object}
|
|
209
|
-
*/
|
|
210
|
-
|
|
211
|
-
this.color = {
|
|
212
|
-
r: 0,
|
|
213
|
-
g: 0,
|
|
214
|
-
b: 0
|
|
215
|
-
};
|
|
216
|
-
/**
|
|
217
|
-
* @desc The particle's rotation
|
|
218
|
-
* @type {number}
|
|
219
|
-
*/
|
|
220
|
-
|
|
221
|
-
this.rotation = new _math.Vector3D();
|
|
222
|
-
/**
|
|
223
|
-
* @desc The particle's distance to the camera, only set by the GPURenderer for depth sorting purposes.
|
|
224
|
-
* @type {number}
|
|
225
|
-
*/
|
|
226
|
-
|
|
227
|
-
this.distanceToCamera = 0; // override constructor props with passed properties.
|
|
228
|
-
|
|
229
|
-
_utils.Util.setPrototypeByObj(this, properties);
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Gets the particle's current direction.
|
|
233
|
-
*
|
|
234
|
-
* @return {number}
|
|
235
|
-
*/
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
(0, _createClass2["default"])(Particle, [{
|
|
239
|
-
key: "getDirection",
|
|
240
|
-
value: function getDirection() {
|
|
241
|
-
return Math.atan2(this.velocity.x, -this.velocity.y) * (180 / _constants2.PI);
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Resets the particle's default properties and clear's its particle's position,
|
|
245
|
-
* velocity, acceleration, color and rotation. Also destroy's the particle's
|
|
246
|
-
* transform collection & removes all behaviours.
|
|
247
|
-
*
|
|
248
|
-
* @return {Particle}
|
|
249
|
-
*/
|
|
250
|
-
|
|
251
|
-
}, {
|
|
252
|
-
key: "reset",
|
|
253
|
-
value: function reset() {
|
|
254
|
-
this.life = _constants.DEFAULT_LIFE;
|
|
255
|
-
this.age = _constants.DEFAULT_AGE;
|
|
256
|
-
this.energy = _constants.DEFAULT_ENERGY;
|
|
257
|
-
this.dead = _constants.DEFAULT_DEAD;
|
|
258
|
-
this.sleep = _constants.DEFAULT_SLEEP;
|
|
259
|
-
this.body = _constants.DEFAULT_BODY;
|
|
260
|
-
this.parent = _constants.DEFAULT_PARENT;
|
|
261
|
-
this.mass = _constants.DEFAULT_MASS;
|
|
262
|
-
this.radius = _constants.DEFAULT_RADIUS;
|
|
263
|
-
this.alpha = _constants.DEFAULT_ALPHA;
|
|
264
|
-
this.scale = _constants.DEFAULT_SCALE;
|
|
265
|
-
this.useColor = _constants.DEFAULT_USE_COLOR;
|
|
266
|
-
this.useAlpha = _constants.DEFAULT_USE_ALPHA;
|
|
267
|
-
this.easing = _constants.DEFAULT_EASING;
|
|
268
|
-
this.position.set(0, 0, 0);
|
|
269
|
-
this.velocity.set(0, 0, 0);
|
|
270
|
-
this.acceleration.set(0, 0, 0);
|
|
271
|
-
this.old.position.set(0, 0, 0);
|
|
272
|
-
this.old.velocity.set(0, 0, 0);
|
|
273
|
-
this.old.acceleration.set(0, 0, 0);
|
|
274
|
-
this.color.r = 0;
|
|
275
|
-
this.color.g = 0;
|
|
276
|
-
this.color.b = 0;
|
|
277
|
-
this.rotation.clear();
|
|
278
|
-
|
|
279
|
-
_utils.Util.destroyObject(this.transform);
|
|
280
|
-
|
|
281
|
-
this.removeAllBehaviours();
|
|
282
|
-
return this;
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Updates the particle's properties by applying each behaviour to the particle.
|
|
286
|
-
* Will also update the particle's energy, unless it's age is greater than it's life
|
|
287
|
-
* in which case it will be destroyed.
|
|
288
|
-
*
|
|
289
|
-
* @param {number} time - Integration time
|
|
290
|
-
* @param {integer} index - Particle index
|
|
291
|
-
* @return void
|
|
292
|
-
*/
|
|
293
|
-
|
|
294
|
-
}, {
|
|
295
|
-
key: "update",
|
|
296
|
-
value: function update(time, index) {
|
|
297
|
-
if (!this.sleep) {
|
|
298
|
-
this.age += time;
|
|
299
|
-
var i = this.behaviours.length;
|
|
300
|
-
|
|
301
|
-
while (i--) {
|
|
302
|
-
var behaviour = this.behaviours[i]; //behaviour &&
|
|
303
|
-
|
|
304
|
-
behaviour.applyBehaviour(this, time, index);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
if (this.age >= this.life) {
|
|
309
|
-
this.destroy();
|
|
310
|
-
} else {
|
|
311
|
-
var scale = this.easing(this.age / this.life);
|
|
312
|
-
this.energy = Math.max(1 - scale, 0);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Adds a behaviour to the particle.
|
|
317
|
-
*
|
|
318
|
-
* @param {Behaviour} behaviour - The behaviour to add to the particle
|
|
319
|
-
* @return void
|
|
320
|
-
*/
|
|
321
|
-
|
|
322
|
-
}, {
|
|
323
|
-
key: "addBehaviour",
|
|
324
|
-
value: function addBehaviour(behaviour) {
|
|
325
|
-
this.behaviours.push(behaviour);
|
|
326
|
-
behaviour.initialize(this);
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Adds multiple behaviours to the particle.
|
|
330
|
-
*
|
|
331
|
-
* @param {array<Behaviour>} behaviours - An array of behaviours to add to the particle
|
|
332
|
-
* @return void
|
|
333
|
-
*/
|
|
334
|
-
|
|
335
|
-
}, {
|
|
336
|
-
key: "addBehaviours",
|
|
337
|
-
value: function addBehaviours(behaviours) {
|
|
338
|
-
var i = behaviours.length;
|
|
339
|
-
|
|
340
|
-
while (i--) {
|
|
341
|
-
this.addBehaviour(behaviours[i]);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Removes the behaviour from the particle.
|
|
346
|
-
*
|
|
347
|
-
* @param {Behaviour} behaviour - The behaviour to remove from the particle
|
|
348
|
-
* @return void
|
|
349
|
-
*/
|
|
350
|
-
|
|
351
|
-
}, {
|
|
352
|
-
key: "removeBehaviour",
|
|
353
|
-
value: function removeBehaviour(behaviour) {
|
|
354
|
-
var index = this.behaviours.indexOf(behaviour);
|
|
355
|
-
|
|
356
|
-
if (index > -1) {
|
|
357
|
-
this.behaviours.splice(index, 1);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* Removes all behaviours from the particle.
|
|
362
|
-
*
|
|
363
|
-
* @return void
|
|
364
|
-
*/
|
|
365
|
-
|
|
366
|
-
}, {
|
|
367
|
-
key: "removeAllBehaviours",
|
|
368
|
-
value: function removeAllBehaviours() {
|
|
369
|
-
_utils.Util.destroyArray(this.behaviours);
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Destroys the particle.
|
|
373
|
-
*
|
|
374
|
-
* @return void
|
|
375
|
-
*/
|
|
376
|
-
|
|
377
|
-
}, {
|
|
378
|
-
key: "destroy",
|
|
379
|
-
value: function destroy() {
|
|
380
|
-
this.removeAllBehaviours();
|
|
381
|
-
this.energy = 0;
|
|
382
|
-
this.dead = true;
|
|
383
|
-
this.parent = null;
|
|
384
|
-
}
|
|
385
|
-
}]);
|
|
386
|
-
return Particle;
|
|
387
|
-
}();
|
|
388
|
-
|
|
389
|
-
exports["default"] = Particle;
|
|
390
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL1BhcnRpY2xlLmpzIl0sIm5hbWVzIjpbIlBhcnRpY2xlIiwicHJvcGVydGllcyIsImlkIiwidHlwZSIsImxpZmUiLCJERUZBVUxUX0xJRkUiLCJhZ2UiLCJERUZBVUxUX0FHRSIsImVuZXJneSIsIkRFRkFVTFRfRU5FUkdZIiwiZGVhZCIsIkRFRkFVTFRfREVBRCIsInNsZWVwIiwiREVGQVVMVF9TTEVFUCIsImJvZHkiLCJERUZBVUxUX0JPRFkiLCJwYXJlbnQiLCJERUZBVUxUX1BBUkVOVCIsIm1hc3MiLCJERUZBVUxUX01BU1MiLCJyYWRpdXMiLCJERUZBVUxUX1JBRElVUyIsImFscGhhIiwiREVGQVVMVF9BTFBIQSIsInNjYWxlIiwiREVGQVVMVF9TQ0FMRSIsInVzZUNvbG9yIiwiREVGQVVMVF9VU0VfQ09MT1IiLCJ1c2VBbHBoYSIsIkRFRkFVTFRfVVNFX0FMUEhBIiwiZWFzaW5nIiwiREVGQVVMVF9FQVNJTkciLCJwb3NpdGlvbiIsIlZlY3RvcjNEIiwidmVsb2NpdHkiLCJhY2NlbGVyYXRpb24iLCJvbGQiLCJjbG9uZSIsImJlaGF2aW91cnMiLCJ0cmFuc2Zvcm0iLCJjb2xvciIsInIiLCJnIiwiYiIsInJvdGF0aW9uIiwiZGlzdGFuY2VUb0NhbWVyYSIsIlV0aWwiLCJzZXRQcm90b3R5cGVCeU9iaiIsIk1hdGgiLCJhdGFuMiIsIngiLCJ5IiwiUEkiLCJzZXQiLCJjbGVhciIsImRlc3Ryb3lPYmplY3QiLCJyZW1vdmVBbGxCZWhhdmlvdXJzIiwidGltZSIsImluZGV4IiwiaSIsImxlbmd0aCIsImJlaGF2aW91ciIsImFwcGx5QmVoYXZpb3VyIiwiZGVzdHJveSIsIm1heCIsInB1c2giLCJpbml0aWFsaXplIiwiYWRkQmVoYXZpb3VyIiwiaW5kZXhPZiIsInNwbGljZSIsImRlc3Ryb3lBcnJheSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQWdCQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTtBQUNB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QWN3QyxJQUFJLENBQUNnQixHQUFMLENBQVMsSUFBSXhDLEtBQWIsRUFBb0IsQ0FBcEIsQ0FBZDtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7aUNBQ2VxQyxTLEVBQVc7QUFDdEIsV0FBS3ZCLFVBQUwsQ0FBZ0IyQixJQUFoQixDQUFxQkosU0FBckI7QUFDQUEsTUFBQUEsU0FBUyxDQUFDSyxVQUFWLENBQXFCLElBQXJCO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7a0NBQ2dCNUIsVSxFQUFZO0FBQ3hCLFVBQUlxQixDQUFDLEdBQUdyQixVQUFVLENBQUNzQixNQUFuQjs7QUFFQSxhQUFPRCxDQUFDLEVBQVIsRUFBWTtBQUNWLGFBQUtRLFlBQUwsQ0FBa0I3QixVQUFVLENBQUNxQixDQUFELENBQTVCO0FBQ0Q7QUFDRjtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztvQ0FDa0JFLFMsRUFBVztBQUN6QixVQUFNSCxLQUFLLEdBQUcsS0FBS3BCLFVBQUwsQ0FBZ0I4QixPQUFoQixDQUF3QlAsU0FBeEIsQ0FBZDs7QUFFQSxVQUFJSCxLQUFLLEdBQUcsQ0FBQyxDQUFiLEVBQWdCO0FBQ2QsYUFBS3BCLFVBQUwsQ0FBZ0IrQixNQUFoQixDQUF1QlgsS0FBdkIsRUFBOEIsQ0FBOUI7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OzswQ0FDd0I7QUFDcEJaLGtCQUFLd0IsWUFBTCxDQUFrQixLQUFLaEMsVUFBdkI7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7OEJBQ1k7QUFDUixXQUFLa0IsbUJBQUw7QUFDQSxXQUFLaEQsTUFBTCxHQUFjLENBQWQ7QUFDQSxXQUFLRSxJQUFMLEdBQVksSUFBWjtBQUNBLFdBQUtNLE1BQUwsR0FBYyxJQUFkO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBERUZBVUxUX0FHRSxcbiAgREVGQVVMVF9BTFBIQSxcbiAgREVGQVVMVF9CT0RZLFxuICBERUZBVUxUX0RFQUQsXG4gIERFRkFVTFRfRUFTSU5HLFxuICBERUZBVUxUX0VORVJHWSxcbiAgREVGQVVMVF9MSUZFLFxuICBERUZBVUxUX01BU1MsXG4gIERFRkFVTFRfUEFSRU5ULFxuICBERUZBVUxUX1JBRElVUyxcbiAgREVGQVVMVF9TQ0FMRSxcbiAgREVGQVVMVF9TTEVFUCxcbiAgREVGQVVMVF9VU0VfQUxQSEEsXG4gIERFRkFVTFRfVVNFX0NPTE9SLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBVdGlsLCB1aWQgfSBmcm9tICcuLi91dGlscyc7XG5cbmltcG9ydCB7IFBJIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFZlY3RvcjNEIH0gZnJvbSAnLi4vbWF0aCc7XG5pbXBvcnQgeyBDT1JFX1RZUEVfUEFSVElDTEUgYXMgdHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEEgUGFydGljbGUgaXMgYW4gb2JqZWN0IHRoYXQgaXMgZW1pdHRlZCBieSBhbiBlbWl0dGVyLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydGljbGUge1xuICAvKipcbiAgICogQ29uc3RydWN0cyBhIFBhcnRpY2xlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllcyAtIFRoZSBwcm9wZXJ0aWVzIHRvIGluc3RhbnRpYXRlIHRoZSBwYXJ0aWNsZSB3aXRoXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwcm9wZXJ0aWVzLmxpZmUgLSBUaGUgcGFydGljbGUncyBsaWZlXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwcm9wZXJ0aWVzLmFnZSAtIFRoZSBwYXJ0aWNsZSdzIGFnZVxuICAgKiBAcHJvcGVydHkge251bWJlcn0gcHJvcGVydGllcy5lbmVyZ3kgLSBUaGUgcGFydGljbGUncyBlbmVyZ3kgbG9zc1xuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHByb3BlcnRpZXMuZGVhZCAtIERldGVybWluZXMgaWYgdGhlIHBhcnRpY2xlIGlzIGRlYWQgb3Igbm90XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcHJvcGVydGllcy5zbGVlcCAtIERldGVybWluZXMgaWYgdGhlIHBhcnRpY2xlIGlzIHNsZWVwaW5nIG9yIG5vdFxuICAgKiBAcHJvcGVydHkge29iamVjdH0gcHJvcGVydGllcy50YXJnZXQgLSBUaGUgcGFydGljbGUncyB0YXJnZXRcbiAgICogQHByb3BlcnR5IHtvYmplY3R9IHByb3BlcnRpZXMuYm9keSAtIFRoZSBwYXJ0aWNsZSdzIGJvZHlcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHByb3BlcnRpZXMubWFzcyAtIFRoZSBwYXJ0aWNsZSdzIG1hc3NcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHByb3BlcnRpZXMucmFkaXVzIC0gVGhlIHBhcnRpY2xlJ3MgcmFkaXVzXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwcm9wZXJ0aWVzLmFscGhhIC0gVGhlIHBhcnRpY2xlJ3MgYWxwaGFcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHByb3BlcnRpZXMuc2NhbGUgLSBUaGUgcGFydGljbGUncyBzY2FsZVxuICAgKiBAcHJvcGVydHkge251bWJlcn0gcHJvcGVydGllcy5yb3RhdGlvbiAtIFRoZSBwYXJ0aWNsZSdzIHJvdGF0aW9uXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gcHJvcGVydGllcy5jb2xvciAtIFRoZSBwYXJ0aWNsZSdzIGNvbG9yXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHByb3BlcnRpZXMuZWFzaW5nIC0gVGhlIHBhcnRpY2xlJ3MgZWFzaW5nXG4gICAqIEBwcm9wZXJ0eSB7VmVjdG9yM0R9IHByb3BlcnRpZXMucG9zaXRpb24gLSBUaGUgcGFydGljbGUncyBwb3NpdGlvblxuICAgKiBAcHJvcGVydHkge1ZlY3RvcjNEfSBwcm9wZXJ0aWVzLnZlbG9jaXR5IC0gVGhlIHBhcnRpY2xlJ3MgdmVsb2NpdHlcbiAgICogQHByb3BlcnR5IHtWZWN0b3IzRH0gcHJvcGVydGllcy5hY2NlbGVyYXRpb24gLSBUaGUgcGFydGljbGUncyBhY2NlbGVyYXRpb25cbiAgICogQHByb3BlcnR5IHthcnJheX0gcHJvcGVydGllcy5iZWhhdmlvdXJzIC0gVGhlIHBhcnRpY2xlJ3MgYmVoYXZpb3VycyBhcnJheVxuICAgKiBAcHJvcGVydHkge29iamVjdH0gcHJvcGVydGllcy50cmFuc2Zvcm0gLSBUaGUgcGFydGljbGUncyB0cmFuc2Zvcm0gY29sbGVjdGlvblxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXMpIHtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgcGFydGljbGUncyB1bmlxdWUgaWRcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaWQgPSBgcGFydGljbGUtJHt1aWQoKX1gO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIGNsYXNzIHR5cGUuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBwYXJ0aWNsZSdzIGxpZmVcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGlmZSA9IERFRkFVTFRfTElGRTtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgcGFydGljbGUncyBhZ2VcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWdlID0gREVGQVVMVF9BR0U7XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3MgZW5lcmd5IGxvc3NcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuZW5lcmd5ID0gREVGQVVMVF9FTkVSR1k7XG4gICAgLyoqXG4gICAgICogQGRlc2MgRGV0ZXJtaW5lcyBpZiB0aGUgcGFydGljbGUgaXMgZGVhZCBvciBub3RcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuZGVhZCA9IERFRkFVTFRfREVBRDtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBEZXRlcm1pbmVzIGlmIHRoZSBwYXJ0aWNsZSBpcyBzbGVlcGluZyBvciBub3RcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2xlZXAgPSBERUZBVUxUX1NMRUVQO1xuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBwYXJ0aWNsZSdzIGJvZHlcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuYm9keSA9IERFRkFVTFRfQk9EWTtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgcGFydGljbGUncyBwYXJlbnRcbiAgICAgKiBAdHlwZSB7P0VtaXR0ZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYXJlbnQgPSBERUZBVUxUX1BBUkVOVDtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgcGFydGljbGUncyBtYXNzXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc3MgPSBERUZBVUxUX01BU1M7XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3MgcmFkaXVzXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IERFRkFVTFRfUkFESVVTO1xuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBwYXJ0aWNsZSdzIGFscGhhXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gREVGQVVMVF9BTFBIQTtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgcGFydGljbGUncyBzY2FsZVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IERFRkFVTFRfU0NBTEU7XG4gICAgLyoqXG4gICAgICogQGRlc2MgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSBjb2xvciBvciBub3RcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnVzZUNvbG9yID0gREVGQVVMVF9VU0VfQ09MT1I7XG4gICAgLyoqXG4gICAgICogQGRlc2MgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSBhbHBoYSBvciBub3RcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnVzZUFscGhhID0gREVGQVVMVF9VU0VfQUxQSEE7XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3MgZWFzaW5nXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmVhc2luZyA9IERFRkFVTFRfRUFTSU5HO1xuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBwYXJ0aWNsZSdzIHBvc2l0aW9uXG4gICAgICogQHR5cGUge1ZlY3RvcjNEfVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgVmVjdG9yM0QoKTtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgcGFydGljbGUncyB2ZWxvY2l0eVxuICAgICAqIEB0eXBlIHtWZWN0b3IzRH1cbiAgICAgKi9cbiAgICB0aGlzLnZlbG9jaXR5ID0gbmV3IFZlY3RvcjNEKCk7XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3MgYWNjZWxlcmF0aW9uXG4gICAgICogQHR5cGUge1ZlY3RvcjNEfVxuICAgICAqL1xuICAgIHRoaXMuYWNjZWxlcmF0aW9uID0gbmV3IFZlY3RvcjNEKCk7XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3MgbGFzdCBwb3NpdGlvbiwgdmVsb2NpdHkgYW5kIGFjY2VsZXJhdGlvblxuICAgICAqIEB0eXBlIHtWZWN0b3IzRH1cbiAgICAgKi9cbiAgICB0aGlzLm9sZCA9IHt9O1xuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBwYXJ0aWNsZSdzIG9sZCBwb3NpdGlvblxuICAgICAqIEB0eXBlIHtWZWN0b3IzRH1cbiAgICAgKi9cbiAgICB0aGlzLm9sZC5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb24uY2xvbmUoKTtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgcGFydGljbGUncyBvbGQgdmVsb2NpdHlcbiAgICAgKiBAdHlwZSB7VmVjdG9yM0R9XG4gICAgICovXG4gICAgdGhpcy5vbGQudmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5LmNsb25lKCk7XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3Mgb2xkIGFjY2VsZXJhdGlvblxuICAgICAqIEB0eXBlIHtWZWN0b3IzRH1cbiAgICAgKi9cbiAgICB0aGlzLm9sZC5hY2NlbGVyYXRpb24gPSB0aGlzLmFjY2VsZXJhdGlvbi5jbG9uZSgpO1xuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBwYXJ0aWNsZSdzIGJlaGF2aW91cnMgYXJyYXlcbiAgICAgKiBAdHlwZSB7YXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5iZWhhdmlvdXJzID0gW107XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3MgdHJhbnNmb3JtIGNvbGxlY3Rpb25cbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNmb3JtID0ge307XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3MgY29sb3Igc3RvcmVcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSB7IHI6IDAsIGc6IDAsIGI6IDAgfTtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgcGFydGljbGUncyByb3RhdGlvblxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGlvbiA9IG5ldyBWZWN0b3IzRCgpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIHBhcnRpY2xlJ3MgZGlzdGFuY2UgdG8gdGhlIGNhbWVyYSwgb25seSBzZXQgYnkgdGhlIEdQVVJlbmRlcmVyIGZvciBkZXB0aCBzb3J0aW5nIHB1cnBvc2VzLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5kaXN0YW5jZVRvQ2FtZXJhID0gMDtcblxuICAgIC8vIG92ZXJyaWRlIGNvbnN0cnVjdG9yIHByb3BzIHdpdGggcGFzc2VkIHByb3BlcnRpZXMuXG4gICAgVXRpbC5zZXRQcm90b3R5cGVCeU9iaih0aGlzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwYXJ0aWNsZSdzIGN1cnJlbnQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXREaXJlY3Rpb24oKSB7XG4gICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy52ZWxvY2l0eS54LCAtdGhpcy52ZWxvY2l0eS55KSAqICgxODAgLyBQSSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBwYXJ0aWNsZSdzIGRlZmF1bHQgcHJvcGVydGllcyBhbmQgY2xlYXIncyBpdHMgcGFydGljbGUncyBwb3NpdGlvbixcbiAgICogdmVsb2NpdHksIGFjY2VsZXJhdGlvbiwgY29sb3IgYW5kIHJvdGF0aW9uLiBBbHNvIGRlc3Ryb3kncyB0aGUgcGFydGljbGUnc1xuICAgKiB0cmFuc2Zvcm0gY29sbGVjdGlvbiAmIHJlbW92ZXMgYWxsIGJlaGF2aW91cnMuXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnRpY2xlfVxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5saWZlID0gREVGQVVMVF9MSUZFO1xuICAgIHRoaXMuYWdlID0gREVGQVVMVF9BR0U7XG4gICAgdGhpcy5lbmVyZ3kgPSBERUZBVUxUX0VORVJHWTtcbiAgICB0aGlzLmRlYWQgPSBERUZBVUxUX0RFQUQ7XG4gICAgdGhpcy5zbGVlcCA9IERFRkFVTFRfU0xFRVA7XG4gICAgdGhpcy5ib2R5ID0gREVGQVVMVF9CT0RZO1xuICAgIHRoaXMucGFyZW50ID0gREVGQVVMVF9QQVJFTlQ7XG4gICAgdGhpcy5tYXNzID0gREVGQVVMVF9NQVNTO1xuICAgIHRoaXMucmFkaXVzID0gREVGQVVMVF9SQURJVVM7XG4gICAgdGhpcy5hbHBoYSA9IERFRkFVTFRfQUxQSEE7XG4gICAgdGhpcy5zY2FsZSA9IERFRkFVTFRfU0NBTEU7XG4gICAgdGhpcy51c2VDb2xvciA9IERFRkFVTFRfVVNFX0NPTE9SO1xuICAgIHRoaXMudXNlQWxwaGEgPSBERUZBVUxUX1VTRV9BTFBIQTtcbiAgICB0aGlzLmVhc2luZyA9IERFRkFVTFRfRUFTSU5HO1xuICAgIHRoaXMucG9zaXRpb24uc2V0KDAsIDAsIDApO1xuICAgIHRoaXMudmVsb2NpdHkuc2V0KDAsIDAsIDApO1xuICAgIHRoaXMuYWNjZWxlcmF0aW9uLnNldCgwLCAwLCAwKTtcbiAgICB0aGlzLm9sZC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgdGhpcy5vbGQudmVsb2NpdHkuc2V0KDAsIDAsIDApO1xuICAgIHRoaXMub2xkLmFjY2VsZXJhdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgdGhpcy5jb2xvci5yID0gMDtcbiAgICB0aGlzLmNvbG9yLmcgPSAwO1xuICAgIHRoaXMuY29sb3IuYiA9IDA7XG5cbiAgICB0aGlzLnJvdGF0aW9uLmNsZWFyKCk7XG4gICAgVXRpbC5kZXN0cm95T2JqZWN0KHRoaXMudHJhbnNmb3JtKTtcbiAgICB0aGlzLnJlbW92ZUFsbEJlaGF2aW91cnMoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBhcnRpY2xlJ3MgcHJvcGVydGllcyBieSBhcHBseWluZyBlYWNoIGJlaGF2aW91ciB0byB0aGUgcGFydGljbGUuXG4gICAqIFdpbGwgYWxzbyB1cGRhdGUgdGhlIHBhcnRpY2xlJ3MgZW5lcmd5LCB1bmxlc3MgaXQncyBhZ2UgaXMgZ3JlYXRlciB0aGFuIGl0J3MgbGlmZVxuICAgKiBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgZGVzdHJveWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIEludGVncmF0aW9uIHRpbWVcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFBhcnRpY2xlIGluZGV4XG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgdXBkYXRlKHRpbWUsIGluZGV4KSB7XG4gICAgaWYgKCF0aGlzLnNsZWVwKSB7XG4gICAgICB0aGlzLmFnZSArPSB0aW1lO1xuXG4gICAgICBsZXQgaSA9IHRoaXMuYmVoYXZpb3Vycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgbGV0IGJlaGF2aW91ciA9IHRoaXMuYmVoYXZpb3Vyc1tpXTtcblxuICAgICAgICAvL2JlaGF2aW91ciAmJiBcbiAgICAgICAgYmVoYXZpb3VyLmFwcGx5QmVoYXZpb3VyKHRoaXMsIHRpbWUsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZ2UgPj0gdGhpcy5saWZlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLmVhc2luZyh0aGlzLmFnZSAvIHRoaXMubGlmZSk7XG5cbiAgICAgIHRoaXMuZW5lcmd5ID0gTWF0aC5tYXgoMSAtIHNjYWxlLCAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGJlaGF2aW91ciB0byB0aGUgcGFydGljbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7QmVoYXZpb3VyfSBiZWhhdmlvdXIgLSBUaGUgYmVoYXZpb3VyIHRvIGFkZCB0byB0aGUgcGFydGljbGVcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBhZGRCZWhhdmlvdXIoYmVoYXZpb3VyKSB7XG4gICAgdGhpcy5iZWhhdmlvdXJzLnB1c2goYmVoYXZpb3VyKTtcbiAgICBiZWhhdmlvdXIuaW5pdGlhbGl6ZSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG11bHRpcGxlIGJlaGF2aW91cnMgdG8gdGhlIHBhcnRpY2xlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5PEJlaGF2aW91cj59IGJlaGF2aW91cnMgLSBBbiBhcnJheSBvZiBiZWhhdmlvdXJzIHRvIGFkZCB0byB0aGUgcGFydGljbGVcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBhZGRCZWhhdmlvdXJzKGJlaGF2aW91cnMpIHtcbiAgICBsZXQgaSA9IGJlaGF2aW91cnMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5hZGRCZWhhdmlvdXIoYmVoYXZpb3Vyc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGJlaGF2aW91ciBmcm9tIHRoZSBwYXJ0aWNsZS5cbiAgICpcbiAgICogQHBhcmFtIHtCZWhhdmlvdXJ9IGJlaGF2aW91ciAtIFRoZSBiZWhhdmlvdXIgdG8gcmVtb3ZlIGZyb20gdGhlIHBhcnRpY2xlXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgcmVtb3ZlQmVoYXZpb3VyKGJlaGF2aW91cikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5iZWhhdmlvdXJzLmluZGV4T2YoYmVoYXZpb3VyKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmJlaGF2aW91cnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgYmVoYXZpb3VycyBmcm9tIHRoZSBwYXJ0aWNsZS5cbiAgICpcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICByZW1vdmVBbGxCZWhhdmlvdXJzKCkge1xuICAgIFV0aWwuZGVzdHJveUFycmF5KHRoaXMuYmVoYXZpb3Vycyk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBhcnRpY2xlLlxuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVBbGxCZWhhdmlvdXJzKCk7XG4gICAgdGhpcy5lbmVyZ3kgPSAwO1xuICAgIHRoaXMuZGVhZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB9XG59XG4iXX0=
|
package/build/cjs/core/Pool.js
DELETED
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports["default"] = void 0;
|
|
9
|
-
|
|
10
|
-
var _construct2 = _interopRequireDefault(require("@babel/runtime/helpers/construct"));
|
|
11
|
-
|
|
12
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
|
-
|
|
14
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
|
-
|
|
16
|
-
var _PUID = _interopRequireDefault(require("../utils/PUID"));
|
|
17
|
-
|
|
18
|
-
var _types = require("./types");
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* An object pool implementation. Used for pooling objects to avoid unnecessary
|
|
22
|
-
* garbage collection.
|
|
23
|
-
*
|
|
24
|
-
*/
|
|
25
|
-
var Pool = /*#__PURE__*/function () {
|
|
26
|
-
/**
|
|
27
|
-
* Constructs a Pool instance.
|
|
28
|
-
*
|
|
29
|
-
* @return void
|
|
30
|
-
*/
|
|
31
|
-
function Pool() {
|
|
32
|
-
(0, _classCallCheck2["default"])(this, Pool);
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @desc The class type.
|
|
36
|
-
* @type {string}
|
|
37
|
-
*/
|
|
38
|
-
this.type = _types.CORE_TYPE_POOL;
|
|
39
|
-
/**
|
|
40
|
-
* @desc Incrementing id that keeps a count of the number of objects created
|
|
41
|
-
* @type {integer}
|
|
42
|
-
*/
|
|
43
|
-
|
|
44
|
-
this.cID = 0;
|
|
45
|
-
/**
|
|
46
|
-
* @desc Map of pools in the format of PUID<String>: pool<Array>
|
|
47
|
-
* @type {object}
|
|
48
|
-
*/
|
|
49
|
-
|
|
50
|
-
this.list = {};
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Attempts to create a new object either by creating a new instance or calling its
|
|
54
|
-
* clone method.
|
|
55
|
-
*
|
|
56
|
-
* TODO COVERAGE - for the constructorArgs
|
|
57
|
-
* @param {function|object} functionOrObject - The object to instantiate or clone
|
|
58
|
-
* @return {object|undefined}
|
|
59
|
-
*/
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
(0, _createClass2["default"])(Pool, [{
|
|
63
|
-
key: "create",
|
|
64
|
-
value: function create(functionOrObject) {
|
|
65
|
-
if (!this.canCreateNewObject(functionOrObject)) {
|
|
66
|
-
throw new Error('The pool is unable to create or clone the object supplied');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
this.cID++;
|
|
70
|
-
|
|
71
|
-
if (this.canInstantiateObject(functionOrObject)) {
|
|
72
|
-
for (var _len = arguments.length, constructorArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
73
|
-
constructorArgs[_key - 1] = arguments[_key];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return (0, _construct2["default"])(functionOrObject, constructorArgs);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (this.canCloneObject(functionOrObject)) {
|
|
80
|
-
return functionOrObject.clone();
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Determines if the object is able to be instantiated or not.
|
|
85
|
-
*
|
|
86
|
-
* @param {object} object - The object to check
|
|
87
|
-
* @return {boolean}
|
|
88
|
-
*/
|
|
89
|
-
|
|
90
|
-
}, {
|
|
91
|
-
key: "canInstantiateObject",
|
|
92
|
-
value: function canInstantiateObject(object) {
|
|
93
|
-
return typeof object === 'function';
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Determines if the object is able to be cloned or not.
|
|
97
|
-
*
|
|
98
|
-
* @param {object} object - The object to check
|
|
99
|
-
* @return {boolean}
|
|
100
|
-
*/
|
|
101
|
-
|
|
102
|
-
}, {
|
|
103
|
-
key: "canCloneObject",
|
|
104
|
-
value: function canCloneObject(object) {
|
|
105
|
-
return object.clone && typeof object.clone === 'function';
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Determines if a new object is able to be created.
|
|
109
|
-
*
|
|
110
|
-
* @param {object} object - The object to check
|
|
111
|
-
* @return {boolean}
|
|
112
|
-
*/
|
|
113
|
-
|
|
114
|
-
}, {
|
|
115
|
-
key: "canCreateNewObject",
|
|
116
|
-
value: function canCreateNewObject(object) {
|
|
117
|
-
return this.canInstantiateObject(object) || this.canCloneObject(object) ? true : false;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Gets a count of all objects in the pool.
|
|
121
|
-
*
|
|
122
|
-
* @return {integer}
|
|
123
|
-
*/
|
|
124
|
-
|
|
125
|
-
}, {
|
|
126
|
-
key: "getCount",
|
|
127
|
-
value: function getCount() {
|
|
128
|
-
var count = 0;
|
|
129
|
-
|
|
130
|
-
for (var id in this.list) {
|
|
131
|
-
count += this.list[id].length;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return count++;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Gets an object either by creating a new one or retrieving it from the pool.
|
|
138
|
-
*
|
|
139
|
-
* @param {function|object} obj - The function or object to get
|
|
140
|
-
* @param {array} args - The args to pass to the function on creation
|
|
141
|
-
* @return {object}
|
|
142
|
-
*/
|
|
143
|
-
|
|
144
|
-
}, {
|
|
145
|
-
key: "get",
|
|
146
|
-
value: function get(obj) {
|
|
147
|
-
var p,
|
|
148
|
-
puid = obj.__puid || _PUID["default"].id(obj);
|
|
149
|
-
|
|
150
|
-
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
151
|
-
args[_key2 - 1] = arguments[_key2];
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if (this.list[puid] && this.list[puid].length > 0) p = this.list[puid].pop();else p = this.create.apply(this, [obj].concat(args));
|
|
155
|
-
p.__puid = obj.__puid || puid;
|
|
156
|
-
return p;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Pushes an object into the pool.
|
|
160
|
-
*
|
|
161
|
-
* @param {object} obj - The object to expire
|
|
162
|
-
* @return {integer}
|
|
163
|
-
*/
|
|
164
|
-
|
|
165
|
-
}, {
|
|
166
|
-
key: "expire",
|
|
167
|
-
value: function expire(obj) {
|
|
168
|
-
return this._getList(obj.__puid).push(obj);
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Destroys all pools.
|
|
172
|
-
*
|
|
173
|
-
* @return void
|
|
174
|
-
*/
|
|
175
|
-
|
|
176
|
-
}, {
|
|
177
|
-
key: "destroy",
|
|
178
|
-
value: function destroy() {
|
|
179
|
-
for (var id in this.list) {
|
|
180
|
-
this.list[id].length = 0;
|
|
181
|
-
delete this.list[id];
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Gets the pool mapped to the UID.
|
|
186
|
-
*
|
|
187
|
-
* @param {string} uid - The pool uid
|
|
188
|
-
* @return {array}
|
|
189
|
-
*/
|
|
190
|
-
|
|
191
|
-
}, {
|
|
192
|
-
key: "_getList",
|
|
193
|
-
value: function _getList(uid) {
|
|
194
|
-
uid = uid || 'default';
|
|
195
|
-
if (!this.list[uid]) this.list[uid] = [];
|
|
196
|
-
return this.list[uid];
|
|
197
|
-
}
|
|
198
|
-
}]);
|
|
199
|
-
return Pool;
|
|
200
|
-
}();
|
|
201
|
-
|
|
202
|
-
exports["default"] = Pool;
|
|
203
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL1Bvb2wuanMiXSwibmFtZXMiOlsiUG9vbCIsInR5cGUiLCJjSUQiLCJsaXN0IiwiZnVuY3Rpb25Pck9iamVjdCIsImNhbkNyZWF0ZU5ld09iamVjdCIsIkVycm9yIiwiY2FuSW5zdGFudGlhdGVPYmplY3QiLCJjb25zdHJ1Y3RvckFyZ3MiLCJjYW5DbG9uZU9iamVjdCIsImNsb25lIiwib2JqZWN0IiwiY291bnQiLCJpZCIsImxlbmd0aCIsIm9iaiIsInAiLCJwdWlkIiwiX19wdWlkIiwiUFVJRCIsImFyZ3MiLCJwb3AiLCJjcmVhdGUiLCJfZ2V0TGlzdCIsInB1c2giLCJ1aWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDcUJBLEk7QUFDbkI7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNFLGtCQUFjO0FBQUE7O0FBQ1o7QUFDSjtBQUNBO0FBQ0E7QUFDSSxTQUFLQyxJQUFMLEdBQVlBLHFCQUFaO0FBQ0E7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksU0FBS0MsR0FBTCxHQUFXLENBQVg7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxJQUFMLEdBQVksRUFBWjtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7MkJBQ1NDLGdCLEVBQXNDO0FBQzNDLFVBQUksQ0FBQyxLQUFLQyxrQkFBTCxDQUF3QkQsZ0JBQXhCLENBQUwsRUFBZ0Q7QUFDOUMsY0FBTSxJQUFJRSxLQUFKLENBQ0osMkRBREksQ0FBTjtBQUdEOztBQUVELFdBQUtKLEdBQUw7O0FBRUEsVUFBSSxLQUFLSyxvQkFBTCxDQUEwQkgsZ0JBQTFCLENBQUosRUFBaUQ7QUFBQSwwQ0FUdkJJLGVBU3VCO0FBVHZCQSxVQUFBQSxlQVN1QjtBQUFBOztBQUMvQywyQ0FBV0osZ0JBQVgsRUFBK0JJLGVBQS9CO0FBQ0Q7O0FBRUQsVUFBSSxLQUFLQyxjQUFMLENBQW9CTCxnQkFBcEIsQ0FBSixFQUEyQztBQUN6QyxlQUFPQSxnQkFBZ0IsQ0FBQ00sS0FBakIsRUFBUDtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7eUNBQ3VCQyxNLEVBQVE7QUFDM0IsYUFBTyxPQUFPQSxNQUFQLEtBQWtCLFVBQXpCO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7bUNBQ2lCQSxNLEVBQVE7QUFDckIsYUFBT0EsTUFBTSxDQUFDRCxLQUFQLElBQWdCLE9BQU9DLE1BQU0sQ0FBQ0QsS0FBZCxLQUF3QixVQUEvQztBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O3VDQUNxQkMsTSxFQUFRO0FBQ3pCLGFBQU8sS0FBS0osb0JBQUwsQ0FBMEJJLE1BQTFCLEtBQXFDLEtBQUtGLGNBQUwsQ0FBb0JFLE1BQXBCLENBQXJDLEdBQ0gsSUFERyxHQUVILEtBRko7QUFHRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7K0JBQ2E7QUFDVCxVQUFJQyxLQUFLLEdBQUcsQ0FBWjs7QUFFQSxXQUFLLElBQUlDLEVBQVQsSUFBZSxLQUFLVixJQUFwQjtBQUEwQlMsUUFBQUEsS0FBSyxJQUFJLEtBQUtULElBQUwsQ0FBVVUsRUFBVixFQUFjQyxNQUF2QjtBQUExQjs7QUFFQSxhQUFPRixLQUFLLEVBQVo7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O3dCQUNNRyxHLEVBQWM7QUFDaEIsVUFBSUMsQ0FBSjtBQUFBLFVBQ0VDLElBQUksR0FBR0YsR0FBRyxDQUFDRyxNQUFKLElBQWNDLGlCQUFLTixFQUFMLENBQVFFLEdBQVIsQ0FEdkI7O0FBRGdCLHlDQUFOSyxJQUFNO0FBQU5BLFFBQUFBLElBQU07QUFBQTs7QUFJaEIsVUFBSSxLQUFLakIsSUFBTCxDQUFVYyxJQUFWLEtBQW1CLEtBQUtkLElBQUwsQ0FBVWMsSUFBVixFQUFnQkgsTUFBaEIsR0FBeUIsQ0FBaEQsRUFDRUUsQ0FBQyxHQUFHLEtBQUtiLElBQUwsQ0FBVWMsSUFBVixFQUFnQkksR0FBaEIsRUFBSixDQURGLEtBRUtMLENBQUMsR0FBRyxLQUFLTSxNQUFMLGNBQVlQLEdBQVosU0FBb0JLLElBQXBCLEVBQUo7QUFFTEosTUFBQUEsQ0FBQyxDQUFDRSxNQUFGLEdBQVdILEdBQUcsQ0FBQ0csTUFBSixJQUFjRCxJQUF6QjtBQUVBLGFBQU9ELENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzsyQkFDU0QsRyxFQUFLO0FBQ1YsYUFBTyxLQUFLUSxRQUFMLENBQWNSLEdBQUcsQ0FBQ0csTUFBbEIsRUFBMEJNLElBQTFCLENBQStCVCxHQUEvQixDQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7OzhCQUNZO0FBQ1IsV0FBSyxJQUFJRixFQUFULElBQWUsS0FBS1YsSUFBcEIsRUFBMEI7QUFDeEIsYUFBS0EsSUFBTCxDQUFVVSxFQUFWLEVBQWNDLE1BQWQsR0FBdUIsQ0FBdkI7QUFDQSxlQUFPLEtBQUtYLElBQUwsQ0FBVVUsRUFBVixDQUFQO0FBQ0Q7QUFDRjtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs2QkFDV1ksRyxFQUFLO0FBQ1pBLE1BQUFBLEdBQUcsR0FBR0EsR0FBRyxJQUFJLFNBQWI7QUFDQSxVQUFJLENBQUMsS0FBS3RCLElBQUwsQ0FBVXNCLEdBQVYsQ0FBTCxFQUFxQixLQUFLdEIsSUFBTCxDQUFVc0IsR0FBVixJQUFpQixFQUFqQjtBQUVyQixhQUFPLEtBQUt0QixJQUFMLENBQVVzQixHQUFWLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQVUlEIGZyb20gJy4uL3V0aWxzL1BVSUQnO1xuaW1wb3J0IHsgQ09SRV9UWVBFX1BPT0wgYXMgdHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuLyoqXG4gKiBBbiBvYmplY3QgcG9vbCBpbXBsZW1lbnRhdGlvbi4gVXNlZCBmb3IgcG9vbGluZyBvYmplY3RzIHRvIGF2b2lkIHVubmVjZXNzYXJ5XG4gKiBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb29sIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBQb29sIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBjbGFzcyB0eXBlLlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAvKipcbiAgICAgKiBAZGVzYyBJbmNyZW1lbnRpbmcgaWQgdGhhdCBrZWVwcyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBjcmVhdGVkXG4gICAgICogQHR5cGUge2ludGVnZXJ9XG4gICAgICovXG4gICAgdGhpcy5jSUQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgTWFwIG9mIHBvb2xzIGluIHRoZSBmb3JtYXQgb2YgUFVJRDxTdHJpbmc+OiBwb29sPEFycmF5PlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5saXN0ID0ge307XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCBlaXRoZXIgYnkgY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2Ugb3IgY2FsbGluZyBpdHNcbiAgICogY2xvbmUgbWV0aG9kLlxuICAgKlxuICAgKiBUT0RPIENPVkVSQUdFIC0gZm9yIHRoZSBjb25zdHJ1Y3RvckFyZ3NcbiAgICogQHBhcmFtIHtmdW5jdGlvbnxvYmplY3R9IGZ1bmN0aW9uT3JPYmplY3QgLSBUaGUgb2JqZWN0IHRvIGluc3RhbnRpYXRlIG9yIGNsb25lXG4gICAqIEByZXR1cm4ge29iamVjdHx1bmRlZmluZWR9XG4gICAqL1xuICBjcmVhdGUoZnVuY3Rpb25Pck9iamVjdCwgLi4uY29uc3RydWN0b3JBcmdzKSB7XG4gICAgaWYgKCF0aGlzLmNhbkNyZWF0ZU5ld09iamVjdChmdW5jdGlvbk9yT2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHBvb2wgaXMgdW5hYmxlIHRvIGNyZWF0ZSBvciBjbG9uZSB0aGUgb2JqZWN0IHN1cHBsaWVkJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNJRCsrO1xuXG4gICAgaWYgKHRoaXMuY2FuSW5zdGFudGlhdGVPYmplY3QoZnVuY3Rpb25Pck9iamVjdCkpIHtcbiAgICAgIHJldHVybiBuZXcgZnVuY3Rpb25Pck9iamVjdCguLi5jb25zdHJ1Y3RvckFyZ3MpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhbkNsb25lT2JqZWN0KGZ1bmN0aW9uT3JPYmplY3QpKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb25Pck9iamVjdC5jbG9uZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBvYmplY3QgaXMgYWJsZSB0byBiZSBpbnN0YW50aWF0ZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgY2FuSW5zdGFudGlhdGVPYmplY3Qob2JqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgb2JqZWN0IGlzIGFibGUgdG8gYmUgY2xvbmVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGNhbkNsb25lT2JqZWN0KG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QuY2xvbmUgJiYgdHlwZW9mIG9iamVjdC5jbG9uZSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgbmV3IG9iamVjdCBpcyBhYmxlIHRvIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjYW5DcmVhdGVOZXdPYmplY3Qob2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FuSW5zdGFudGlhdGVPYmplY3Qob2JqZWN0KSB8fCB0aGlzLmNhbkNsb25lT2JqZWN0KG9iamVjdClcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgY291bnQgb2YgYWxsIG9iamVjdHMgaW4gdGhlIHBvb2wuXG4gICAqXG4gICAqIEByZXR1cm4ge2ludGVnZXJ9XG4gICAqL1xuICBnZXRDb3VudCgpIHtcbiAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5saXN0KSBjb3VudCArPSB0aGlzLmxpc3RbaWRdLmxlbmd0aDtcblxuICAgIHJldHVybiBjb3VudCsrO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gb2JqZWN0IGVpdGhlciBieSBjcmVhdGluZyBhIG5ldyBvbmUgb3IgcmV0cmlldmluZyBpdCBmcm9tIHRoZSBwb29sLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufG9iamVjdH0gb2JqIC0gVGhlIGZ1bmN0aW9uIG9yIG9iamVjdCB0byBnZXRcbiAgICogQHBhcmFtIHthcnJheX0gYXJncyAtIFRoZSBhcmdzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uIG9uIGNyZWF0aW9uXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICovXG4gIGdldChvYmosIC4uLmFyZ3MpIHtcbiAgICB2YXIgcCxcbiAgICAgIHB1aWQgPSBvYmouX19wdWlkIHx8IFBVSUQuaWQob2JqKTtcblxuICAgIGlmICh0aGlzLmxpc3RbcHVpZF0gJiYgdGhpcy5saXN0W3B1aWRdLmxlbmd0aCA+IDApXG4gICAgICBwID0gdGhpcy5saXN0W3B1aWRdLnBvcCgpO1xuICAgIGVsc2UgcCA9IHRoaXMuY3JlYXRlKG9iaiwgLi4uYXJncyk7XG5cbiAgICBwLl9fcHVpZCA9IG9iai5fX3B1aWQgfHwgcHVpZDtcblxuICAgIHJldHVybiBwO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2hlcyBhbiBvYmplY3QgaW50byB0aGUgcG9vbC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gZXhwaXJlXG4gICAqIEByZXR1cm4ge2ludGVnZXJ9XG4gICAqL1xuICBleHBpcmUob2JqKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldExpc3Qob2JqLl9fcHVpZCkucHVzaChvYmopO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFsbCBwb29scy5cbiAgICpcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGZvciAodmFyIGlkIGluIHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5saXN0W2lkXS5sZW5ndGggPSAwO1xuICAgICAgZGVsZXRlIHRoaXMubGlzdFtpZF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBvb2wgbWFwcGVkIHRvIHRoZSBVSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1aWQgLSBUaGUgcG9vbCB1aWRcbiAgICogQHJldHVybiB7YXJyYXl9XG4gICAqL1xuICBfZ2V0TGlzdCh1aWQpIHtcbiAgICB1aWQgPSB1aWQgfHwgJ2RlZmF1bHQnO1xuICAgIGlmICghdGhpcy5saXN0W3VpZF0pIHRoaXMubGlzdFt1aWRdID0gW107XG5cbiAgICByZXR1cm4gdGhpcy5saXN0W3VpZF07XG4gIH1cbn1cbiJdfQ==
|