feat(All):Initial
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,40 @@
|
||||
import Force from './Force';
|
||||
import { getEasingByName } from '../ease';
|
||||
import { BEHAVIOUR_TYPE_GRAVITY as type } from './types';
|
||||
/**
|
||||
* Behaviour that forces particles down the y axis.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class Gravity extends Force {
|
||||
/**
|
||||
* Constructs a Gravity behaviour instance.
|
||||
*
|
||||
* @param {number} gravity - the force to pull the particle down the y axis
|
||||
* @param {number} life - the life of the particle
|
||||
* @param {function} easing - The behaviour's decaying trend
|
||||
* @param {boolean} [isEnabled=true] - Determines if the behaviour will be applied or not
|
||||
* @return void
|
||||
*/
|
||||
constructor(gravity, life, easing, isEnabled = true) {
|
||||
super(0, -gravity, 0, life, easing, isEnabled);
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
gravity,
|
||||
life,
|
||||
easing,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new Gravity(gravity, life, getEasingByName(easing), isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZWhhdmlvdXIvR3Jhdml0eS5qcyJdLCJuYW1lcyI6WyJGb3JjZSIsImdldEVhc2luZ0J5TmFtZSIsIkJFSEFWSU9VUl9UWVBFX0dSQVZJVFkiLCJ0eXBlIiwiR3Jhdml0eSIsImNvbnN0cnVjdG9yIiwiZ3Jhdml0eSIsImxpZmUiLCJlYXNpbmciLCJpc0VuYWJsZWQiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLEtBQVAsTUFBa0IsU0FBbEI7QUFDQSxTQUFTQyxlQUFULFFBQWdDLFNBQWhDO0FBQ0EsU0FBU0Msc0JBQXNCLElBQUlDLElBQW5DLFFBQStDLFNBQS9DO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsZUFBZSxNQUFNQyxPQUFOLFNBQXNCSixLQUF0QixDQUE0QjtBQUN6QztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRUssRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLElBQVYsRUFBZ0JDLE1BQWhCLEVBQXdCQyxTQUFTLEdBQUcsSUFBcEMsRUFBMEM7QUFDbkQsVUFBTSxDQUFOLEVBQVMsQ0FBQ0gsT0FBVixFQUFtQixDQUFuQixFQUFzQkMsSUFBdEIsRUFBNEJDLE1BQTVCLEVBQW9DQyxTQUFwQztBQUVBO0FBQ0o7QUFDQTtBQUNBOztBQUNJLFNBQUtOLElBQUwsR0FBWUEsSUFBWjtBQUNEOztBQUVjLFNBQVJPLFFBQVEsQ0FBQ0MsSUFBRCxFQUFPO0FBQ3BCLFVBQU07QUFBRUwsTUFBQUEsT0FBRjtBQUFXQyxNQUFBQSxJQUFYO0FBQWlCQyxNQUFBQSxNQUFqQjtBQUF5QkMsTUFBQUEsU0FBUyxHQUFHO0FBQXJDLFFBQThDRSxJQUFwRDtBQUVBLFdBQU8sSUFBSVAsT0FBSixDQUFZRSxPQUFaLEVBQXFCQyxJQUFyQixFQUEyQk4sZUFBZSxDQUFDTyxNQUFELENBQTFDLEVBQW9EQyxTQUFwRCxDQUFQO0FBQ0Q7O0FBeEJ3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGb3JjZSBmcm9tICcuL0ZvcmNlJztcbmltcG9ydCB7IGdldEVhc2luZ0J5TmFtZSB9IGZyb20gJy4uL2Vhc2UnO1xuaW1wb3J0IHsgQkVIQVZJT1VSX1RZUEVfR1JBVklUWSBhcyB0eXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQmVoYXZpb3VyIHRoYXQgZm9yY2VzIHBhcnRpY2xlcyBkb3duIHRoZSB5IGF4aXMuXG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcmF2aXR5IGV4dGVuZHMgRm9yY2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0cyBhIEdyYXZpdHkgYmVoYXZpb3VyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZ3Jhdml0eSAtIHRoZSBmb3JjZSB0byBwdWxsIHRoZSBwYXJ0aWNsZSBkb3duIHRoZSB5IGF4aXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpZmUgLSB0aGUgbGlmZSBvZiB0aGUgcGFydGljbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVhc2luZyAtIHRoZSBlYXNpbmcgZXF1YXRpb24gdG8gdXNlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRW5hYmxlZD10cnVlXSAtIERldGVybWluZXMgaWYgdGhlIGJlaGF2aW91ciB3aWxsIGJlIGFwcGxpZWQgb3Igbm90XG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgY29uc3RydWN0b3IoZ3Jhdml0eSwgbGlmZSwgZWFzaW5nLCBpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgc3VwZXIoMCwgLWdyYXZpdHksIDAsIGxpZmUsIGVhc2luZywgaXNFbmFibGVkKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBjbGFzcyB0eXBlLlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uKSB7XG4gICAgY29uc3QgeyBncmF2aXR5LCBsaWZlLCBlYXNpbmcsIGlzRW5hYmxlZCA9IHRydWUgfSA9IGpzb247XG5cbiAgICByZXR1cm4gbmV3IEdyYXZpdHkoZ3Jhdml0eSwgbGlmZSwgZ2V0RWFzaW5nQnlOYW1lKGVhc2luZyksIGlzRW5hYmxlZCk7XG4gIH1cbn1cbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
||||
import { easeLinear } from '../ease';
|
||||
export const DEFAULT_LIFE = Infinity;
|
||||
export const DEFAULT_ATTRACITON_RADIUS = 1000;
|
||||
export const DEFAULT_ATTRACTION_FORCE_SCALAR = 100;
|
||||
export const DEFAULT_BEHAVIOUR_EASING = easeLinear;
|
||||
export const DEFAULT_BEHAVIOUR_EASING_TYPE = 'easeLinear';
|
||||
export const DEFAULT_RANDOM_DRIFT_DELAY = 0.03;
|
||||
export const PARTICLE_ALPHA_THRESHOLD = 0.002;
|
||||
export const PARTICLE_LENGTH_SQ_THRESHOLD = 0.000004;
|
||||
export const DEFAULT_CROSS_TYPE = 'dead';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZWhhdmlvdXIvY29uc3RhbnRzLmpzIl0sIm5hbWVzIjpbImVhc2VMaW5lYXIiLCJERUZBVUxUX0xJRkUiLCJJbmZpbml0eSIsIkRFRkFVTFRfQVRUUkFDSVRPTl9SQURJVVMiLCJERUZBVUxUX0FUVFJBQ1RJT05fRk9SQ0VfU0NBTEFSIiwiREVGQVVMVF9CRUhBVklPVVJfRUFTSU5HIiwiREVGQVVMVF9CRUhBVklPVVJfRUFTSU5HX1RZUEUiLCJERUZBVUxUX1JBTkRPTV9EUklGVF9ERUxBWSIsIlBBUlRJQ0xFX0FMUEhBX1RIUkVTSE9MRCIsIlBBUlRJQ0xFX0xFTkdUSF9TUV9USFJFU0hPTEQiLCJERUZBVUxUX0NST1NTX1RZUEUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVQsUUFBMkIsU0FBM0I7QUFFQSxPQUFPLE1BQU1DLFlBQVksR0FBR0MsUUFBckI7QUFDUCxPQUFPLE1BQU1DLHlCQUF5QixHQUFHLElBQWxDO0FBQ1AsT0FBTyxNQUFNQywrQkFBK0IsR0FBRyxHQUF4QztBQUNQLE9BQU8sTUFBTUMsd0JBQXdCLEdBQUdMLFVBQWpDO0FBQ1AsT0FBTyxNQUFNTSw2QkFBNkIsR0FBRyxZQUF0QztBQUNQLE9BQU8sTUFBTUMsMEJBQTBCLEdBQUcsSUFBbkM7QUFDUCxPQUFPLE1BQU1DLHdCQUF3QixHQUFHLEtBQWpDO0FBQ1AsT0FBTyxNQUFNQyw0QkFBNEIsR0FBRyxRQUFyQztBQUNQLE9BQU8sTUFBTUMsa0JBQWtCLEdBQUcsTUFBM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlYXNlTGluZWFyIH0gZnJvbSAnLi4vZWFzZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJRkUgPSBJbmZpbml0eTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0FUVFJBQ0lUT05fUkFESVVTID0gMTAwMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0FUVFJBQ1RJT05fRk9SQ0VfU0NBTEFSID0gMTAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkVIQVZJT1VSX0VBU0lORyA9IGVhc2VMaW5lYXI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9CRUhBVklPVVJfRUFTSU5HX1RZUEUgPSAnZWFzZUxpbmVhcic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9SQU5ET01fRFJJRlRfREVMQVkgPSAwLjAzO1xuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX0FMUEhBX1RIUkVTSE9MRCA9IDAuMDAyO1xuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX0xFTkdUSF9TUV9USFJFU0hPTEQgPSAwLjAwMDAwNDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NST1NTX1RZUEUgPSAnZGVhZCc7XG4iXX0=
|
||||
@@ -0,0 +1,14 @@
|
||||
export { default as Alpha } from './Alpha';
|
||||
export { default as Attraction } from './Attraction';
|
||||
export { default as Collision } from './Collision';
|
||||
export { default as Color } from './Color';
|
||||
export { default as CrossZone } from './CrossZone';
|
||||
export { default as Force } from './Force';
|
||||
export { default as Gravity } from './Gravity';
|
||||
export { default as RandomDrift } from './RandomDrift';
|
||||
export { default as Repulsion } from './Repulsion';
|
||||
export { default as Rotate } from './Rotate';
|
||||
export { default as Scale } from './Scale';
|
||||
export { default as Spring } from './Spring';
|
||||
export { default as Behaviour } from './Behaviour';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZWhhdmlvdXIvaW5kZXguanMiXSwibmFtZXMiOlsiZGVmYXVsdCIsIkFscGhhIiwiQXR0cmFjdGlvbiIsIkNvbGxpc2lvbiIsIkNvbG9yIiwiQ3Jvc3Nab25lIiwiRm9yY2UiLCJHcmF2aXR5IiwiUmFuZG9tRHJpZnQiLCJSZXB1bHNpb24iLCJSb3RhdGUiLCJTY2FsZSIsIlNwcmluZyIsIkJlaGF2aW91ciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxJQUFJQyxLQUFwQixRQUFpQyxTQUFqQztBQUNBLFNBQVNELE9BQU8sSUFBSUUsVUFBcEIsUUFBc0MsY0FBdEM7QUFDQSxTQUFTRixPQUFPLElBQUlHLFNBQXBCLFFBQXFDLGFBQXJDO0FBQ0EsU0FBU0gsT0FBTyxJQUFJSSxLQUFwQixRQUFpQyxTQUFqQztBQUNBLFNBQVNKLE9BQU8sSUFBSUssU0FBcEIsUUFBcUMsYUFBckM7QUFDQSxTQUFTTCxPQUFPLElBQUlNLEtBQXBCLFFBQWlDLFNBQWpDO0FBQ0EsU0FBU04sT0FBTyxJQUFJTyxPQUFwQixRQUFtQyxXQUFuQztBQUNBLFNBQVNQLE9BQU8sSUFBSVEsV0FBcEIsUUFBdUMsZUFBdkM7QUFDQSxTQUFTUixPQUFPLElBQUlTLFNBQXBCLFFBQXFDLGFBQXJDO0FBQ0EsU0FBU1QsT0FBTyxJQUFJVSxNQUFwQixRQUFrQyxVQUFsQztBQUNBLFNBQVNWLE9BQU8sSUFBSVcsS0FBcEIsUUFBaUMsU0FBakM7QUFDQSxTQUFTWCxPQUFPLElBQUlZLE1BQXBCLFFBQWtDLFVBQWxDO0FBQ0EsU0FBU1osT0FBTyxJQUFJYSxTQUFwQixRQUFxQyxhQUFyQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgQWxwaGEgfSBmcm9tICcuL0FscGhhJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXR0cmFjdGlvbiB9IGZyb20gJy4vQXR0cmFjdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbGxpc2lvbiB9IGZyb20gJy4vQ29sbGlzaW9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3IgfSBmcm9tICcuL0NvbG9yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3Jvc3Nab25lIH0gZnJvbSAnLi9Dcm9zc1pvbmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb3JjZSB9IGZyb20gJy4vRm9yY2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHcmF2aXR5IH0gZnJvbSAnLi9HcmF2aXR5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmFuZG9tRHJpZnQgfSBmcm9tICcuL1JhbmRvbURyaWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVwdWxzaW9uIH0gZnJvbSAnLi9SZXB1bHNpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3RhdGUgfSBmcm9tICcuL1JvdGF0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNjYWxlIH0gZnJvbSAnLi9TY2FsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNwcmluZyB9IGZyb20gJy4vU3ByaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmVoYXZpb3VyIH0gZnJvbSAnLi9CZWhhdmlvdXInO1xuIl19
|
||||
@@ -0,0 +1,14 @@
|
||||
export const BEHAVIOUR_TYPE_ABSTRACT = 'Behaviour';
|
||||
export const BEHAVIOUR_TYPE_ALPHA = 'Alpha';
|
||||
export const BEHAVIOUR_TYPE_ATTRACTION = 'Attraction';
|
||||
export const BEHAVIOUR_TYPE_COLLISION = 'Collision';
|
||||
export const BEHAVIOUR_TYPE_COLOR = 'Color';
|
||||
export const BEHAVIOUR_TYPE_CROSS_ZONE = 'CrossZone';
|
||||
export const BEHAVIOUR_TYPE_FORCE = 'Force';
|
||||
export const BEHAVIOUR_TYPE_GRAVITY = 'Gravity';
|
||||
export const BEHAVIOUR_TYPE_RANDOM_DRIFT = 'RandomDrift';
|
||||
export const BEHAVIOUR_TYPE_REPULSION = 'Repulsion';
|
||||
export const BEHAVIOUR_TYPE_ROTATE = 'Rotate';
|
||||
export const BEHAVIOUR_TYPE_SCALE = 'Scale';
|
||||
export const BEHAVIOUR_TYPE_SPRING = 'Spring';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZWhhdmlvdXIvdHlwZXMuanMiXSwibmFtZXMiOlsiQkVIQVZJT1VSX1RZUEVfQUJTVFJBQ1QiLCJCRUhBVklPVVJfVFlQRV9BTFBIQSIsIkJFSEFWSU9VUl9UWVBFX0FUVFJBQ1RJT04iLCJCRUhBVklPVVJfVFlQRV9DT0xMSVNJT04iLCJCRUhBVklPVVJfVFlQRV9DT0xPUiIsIkJFSEFWSU9VUl9UWVBFX0NST1NTX1pPTkUiLCJCRUhBVklPVVJfVFlQRV9GT1JDRSIsIkJFSEFWSU9VUl9UWVBFX0dSQVZJVFkiLCJCRUhBVklPVVJfVFlQRV9SQU5ET01fRFJJRlQiLCJCRUhBVklPVVJfVFlQRV9SRVBVTFNJT04iLCJCRUhBVklPVVJfVFlQRV9ST1RBVEUiLCJCRUhBVklPVVJfVFlQRV9TQ0FMRSIsIkJFSEFWSU9VUl9UWVBFX1NQUklORyJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSx1QkFBdUIsR0FBRyxXQUFoQztBQUNQLE9BQU8sTUFBTUMsb0JBQW9CLEdBQUcsT0FBN0I7QUFDUCxPQUFPLE1BQU1DLHlCQUF5QixHQUFHLFlBQWxDO0FBQ1AsT0FBTyxNQUFNQyx3QkFBd0IsR0FBRyxXQUFqQztBQUNQLE9BQU8sTUFBTUMsb0JBQW9CLEdBQUcsT0FBN0I7QUFDUCxPQUFPLE1BQU1DLHlCQUF5QixHQUFHLFdBQWxDO0FBQ1AsT0FBTyxNQUFNQyxvQkFBb0IsR0FBRyxPQUE3QjtBQUNQLE9BQU8sTUFBTUMsc0JBQXNCLEdBQUcsU0FBL0I7QUFDUCxPQUFPLE1BQU1DLDJCQUEyQixHQUFHLGFBQXBDO0FBQ1AsT0FBTyxNQUFNQyx3QkFBd0IsR0FBRyxXQUFqQztBQUNQLE9BQU8sTUFBTUMscUJBQXFCLEdBQUcsUUFBOUI7QUFDUCxPQUFPLE1BQU1DLG9CQUFvQixHQUFHLE9BQTdCO0FBQ1AsT0FBTyxNQUFNQyxxQkFBcUIsR0FBRyxRQUE5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBCRUhBVklPVVJfVFlQRV9BQlNUUkFDVCA9ICdCZWhhdmlvdXInO1xuZXhwb3J0IGNvbnN0IEJFSEFWSU9VUl9UWVBFX0FMUEhBID0gJ0FscGhhJztcbmV4cG9ydCBjb25zdCBCRUhBVklPVVJfVFlQRV9BVFRSQUNUSU9OID0gJ0F0dHJhY3Rpb24nO1xuZXhwb3J0IGNvbnN0IEJFSEFWSU9VUl9UWVBFX0NPTExJU0lPTiA9ICdDb2xsaXNpb24nO1xuZXhwb3J0IGNvbnN0IEJFSEFWSU9VUl9UWVBFX0NPTE9SID0gJ0NvbG9yJztcbmV4cG9ydCBjb25zdCBCRUhBVklPVVJfVFlQRV9DUk9TU19aT05FID0gJ0Nyb3NzWm9uZSc7XG5leHBvcnQgY29uc3QgQkVIQVZJT1VSX1RZUEVfRk9SQ0UgPSAnRm9yY2UnO1xuZXhwb3J0IGNvbnN0IEJFSEFWSU9VUl9UWVBFX0dSQVZJVFkgPSAnR3Jhdml0eSc7XG5leHBvcnQgY29uc3QgQkVIQVZJT1VSX1RZUEVfUkFORE9NX0RSSUZUID0gJ1JhbmRvbURyaWZ0JztcbmV4cG9ydCBjb25zdCBCRUhBVklPVVJfVFlQRV9SRVBVTFNJT04gPSAnUmVwdWxzaW9uJztcbmV4cG9ydCBjb25zdCBCRUhBVklPVVJfVFlQRV9ST1RBVEUgPSAnUm90YXRlJztcbmV4cG9ydCBjb25zdCBCRUhBVklPVVJfVFlQRV9TQ0FMRSA9ICdTY2FsZSc7XG5leHBvcnQgY29uc3QgQkVIQVZJT1VSX1RZUEVfU1BSSU5HID0gJ1NwcmluZyc7XG4iXX0=
|
||||
@@ -0,0 +1,43 @@
|
||||
// export const PI = 3.142;
|
||||
export const PI = Math.PI;
|
||||
/**
|
||||
* The max particle number in pool.
|
||||
*
|
||||
* @const {integer}
|
||||
*/
|
||||
|
||||
export const POOL_MAX = 500;
|
||||
export const TIME_STEP = 60;
|
||||
export const DR = PI / 180;
|
||||
/**
|
||||
* 1:100
|
||||
*
|
||||
* @const {integer}
|
||||
*/
|
||||
|
||||
export const MEASURE = 100;
|
||||
export const EULER = 'euler';
|
||||
export const RK2 = 'runge-kutta2';
|
||||
export const RK4 = 'runge-kutta4';
|
||||
export const VERLET = 'verlet';
|
||||
export const BIND_EMITTER_EVENT = false;
|
||||
export const __DEV__ = () => {
|
||||
if (!process) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!process.env) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!process.env.NODE_ENV) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV !== 'development') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25zdGFudHMvaW5kZXguanMiXSwibmFtZXMiOlsiUEkiLCJQT09MX01BWCIsIlRJTUVfU1RFUCIsIkRSIiwiTUVBU1VSRSIsIkVVTEVSIiwiUksyIiwiUks0IiwiVkVSTEVUIiwiQklORF9FTUlUVEVSX0VWRU5UIiwiX19ERVZfXyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxFQUFFLEdBQUcsS0FBWDtBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxNQUFNQyxRQUFRLEdBQUcsR0FBakI7QUFDUCxPQUFPLE1BQU1DLFNBQVMsR0FBRyxFQUFsQjtBQUNQLE9BQU8sTUFBTUMsRUFBRSxHQUFHSCxFQUFFLEdBQUcsR0FBaEI7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE9BQU8sTUFBTUksT0FBTyxHQUFHLEdBQWhCO0FBQ1AsT0FBTyxNQUFNQyxLQUFLLEdBQUcsT0FBZDtBQUNQLE9BQU8sTUFBTUMsR0FBRyxHQUFHLGNBQVo7QUFDUCxPQUFPLE1BQU1DLEdBQUcsR0FBRyxjQUFaO0FBQ1AsT0FBTyxNQUFNQyxNQUFNLEdBQUcsUUFBZjtBQUNQLE9BQU8sTUFBTUMsa0JBQWtCLEdBQUcsS0FBM0I7QUFFUCxPQUFPLE1BQU1DLE9BQU8sR0FBRyxNQUFNO0FBQzNCLE1BQUksQ0FBQ0MsT0FBTCxFQUFjO0FBQ1osV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDQSxPQUFPLENBQUNDLEdBQWIsRUFBa0I7QUFDaEIsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDRCxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBakIsRUFBMkI7QUFDekIsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsTUFBSUYsT0FBTyxDQUFDQyxHQUFSLENBQVlDLFFBQVosS0FBeUIsYUFBN0IsRUFBNEM7QUFDMUMsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsU0FBTyxJQUFQO0FBQ0QsQ0FsQk0iLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgUEkgPSAzLjE0MjtcblxuLyoqXG4gKiBUaGUgbWF4IHBhcnRpY2xlIG51bWJlciBpbiBwb29sLlxuICpcbiAqIEBjb25zdCB7aW50ZWdlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFBPT0xfTUFYID0gNTAwO1xuZXhwb3J0IGNvbnN0IFRJTUVfU1RFUCA9IDYwO1xuZXhwb3J0IGNvbnN0IERSID0gUEkgLyAxODA7XG5cbi8qKlxuICogMToxMDBcbiAqXG4gKiBAY29uc3Qge2ludGVnZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNRUFTVVJFID0gMTAwO1xuZXhwb3J0IGNvbnN0IEVVTEVSID0gJ2V1bGVyJztcbmV4cG9ydCBjb25zdCBSSzIgPSAncnVuZ2Uta3V0dGEyJztcbmV4cG9ydCBjb25zdCBSSzQgPSAncnVuZ2Uta3V0dGE0JztcbmV4cG9ydCBjb25zdCBWRVJMRVQgPSAndmVybGV0JztcbmV4cG9ydCBjb25zdCBCSU5EX0VNSVRURVJfRVZFTlQgPSBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IF9fREVWX18gPSAoKSA9PiB7XG4gIGlmICghcHJvY2Vzcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghcHJvY2Vzcy5lbnYpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIl19
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,324 @@
|
||||
import EventDispatcher, { EMITTER_ADDED, EMITTER_REMOVED, SYSTEM_UPDATE, SYSTEM_UPDATE_AFTER } from '../events';
|
||||
import { DEFAULT_SYSTEM_DELTA } from './constants';
|
||||
import Emitter from '../emitter/Emitter';
|
||||
import { INTEGRATION_TYPE_EULER } from '../math/constants';
|
||||
import { POOL_MAX } from '../constants';
|
||||
import Pool from './Pool';
|
||||
import fromJSON from './fromJSON';
|
||||
import fromJSONAsync from './fromJSONAsync';
|
||||
import { CORE_TYPE_SYSTEM as type } from './types';
|
||||
/**
|
||||
* The core of the three-system particle engine.
|
||||
* A System instance can contain multiple emitters, each with their own initializers
|
||||
* and behaviours.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class System {
|
||||
/**
|
||||
* Constructs a System instance.
|
||||
*
|
||||
* @param {object} THREE - ThreeJs
|
||||
* @param {number} [preParticles=POOL_MAX] - The number of particles to start with
|
||||
* @param {string} [integrationType=INTEGRATION_TYPE_EULER] - The integration type to use
|
||||
* @return void
|
||||
*/
|
||||
constructor(preParticles = POOL_MAX, integrationType = INTEGRATION_TYPE_EULER) {
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
this.type = type;
|
||||
/**
|
||||
* @desc The system name.
|
||||
* @type {string}
|
||||
*/
|
||||
this.name = '';
|
||||
/**
|
||||
* @desc Determines if the system can update or not. Set to false when destroying
|
||||
* to ensure that external calls to update do not throw errors.
|
||||
* @type {boolean}
|
||||
*/
|
||||
|
||||
this.canUpdate = true;
|
||||
/**
|
||||
* @desc The number of particles to start with.
|
||||
* @type {number}
|
||||
*/
|
||||
|
||||
this.preParticles = preParticles;
|
||||
/**
|
||||
* @desc The integration algorithm type to use.
|
||||
* @param {string}
|
||||
*/
|
||||
|
||||
this.integrationType = integrationType;
|
||||
/**
|
||||
* @desc The emitters in the particle system.
|
||||
* @type {array<Emitter>}
|
||||
*/
|
||||
|
||||
this.emitters = [];
|
||||
/**
|
||||
* @desc The renderers for the system.
|
||||
* @type {array<Renderer>}
|
||||
*/
|
||||
|
||||
this.renderers = [];
|
||||
/**
|
||||
* @desc A pool used to manage the internal system cache of objects
|
||||
* @type {Pool}
|
||||
*/
|
||||
|
||||
this.pool = new Pool();
|
||||
/**
|
||||
* @desc Internal event dispatcher
|
||||
* @type {EventDispatcher}
|
||||
*/
|
||||
|
||||
this.eventDispatcher = new EventDispatcher();
|
||||
}
|
||||
/**
|
||||
* Creates a System instance from a JSON object.
|
||||
*
|
||||
* @param {object} json - The JSON to create the System instance from
|
||||
* @param {object} THREE - The Web GL Api to use eg., THREE
|
||||
* @return {System}
|
||||
*
|
||||
* @deprecated use fromJSONAsync instead
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json, THREE) {
|
||||
return fromJSON(json, THREE, System, Emitter);
|
||||
}
|
||||
/**
|
||||
* Loads a System instance from JSON asynchronously. Ensures all textures are
|
||||
* fully loaded before resolving with the instantiated System instance.
|
||||
*
|
||||
* @param {object} json - The JSON to create the System instance from
|
||||
* @param {object} THREE - The Web GL Api to use eg., THREE
|
||||
* @param {?object} options - Optional config options
|
||||
* @return {Promise<System>}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSONAsync(json, THREE, options) {
|
||||
return fromJSONAsync(json, THREE, System, Emitter, options);
|
||||
}
|
||||
/**
|
||||
* Proxy method for the internal event dispatcher's dispatchEvent method.
|
||||
*
|
||||
* @param {string} event - The event to dispatch
|
||||
* @param {object<System|Emitter|Particle>} [target=this] - The event target
|
||||
*/
|
||||
|
||||
|
||||
dispatch(event, target = this) {
|
||||
this.eventDispatcher.dispatchEvent(event, target);
|
||||
}
|
||||
/**
|
||||
* Adds a renderer to the System instance and initializes it.
|
||||
*
|
||||
* @param {Renderer} renderer - The renderer to add
|
||||
* @return {System}
|
||||
*/
|
||||
|
||||
|
||||
addRenderer(renderer) {
|
||||
this.renderers.push(renderer);
|
||||
renderer.init(this);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Removes a renderer from the System instance.
|
||||
*
|
||||
* @param {Renderer} renderer
|
||||
* @return {System}
|
||||
*/
|
||||
|
||||
|
||||
removeRenderer(renderer) {
|
||||
this.renderers.splice(this.renderers.indexOf(renderer), 1);
|
||||
renderer.remove(this);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Adds an emitter to the System instance.
|
||||
* Dispatches the EMITTER_ADDED event.
|
||||
*
|
||||
* @param {Emitter} emitter - The emitter to add
|
||||
* @return {System}
|
||||
*/
|
||||
|
||||
|
||||
addEmitter(emitter) {
|
||||
const index = this.emitters.length;
|
||||
emitter.parent = this;
|
||||
emitter.index = index;
|
||||
this.emitters.push(emitter);
|
||||
this.dispatch(EMITTER_ADDED, emitter);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Removes an emitter from the System instance.
|
||||
* Dispatches the EMITTER_REMOVED event.
|
||||
*
|
||||
* @param {Emitter} emitter - The emitter to remove
|
||||
* @return {System}
|
||||
*/
|
||||
|
||||
|
||||
removeEmitter(emitter) {
|
||||
if (emitter.parent !== this) {
|
||||
return this;
|
||||
}
|
||||
|
||||
emitter.parent = null;
|
||||
emitter.index = undefined;
|
||||
this.emitters.splice(this.emitters.indexOf(emitter), 1);
|
||||
this.dispatch(EMITTER_REMOVED, emitter);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Wires up life cycle methods and causes a system's emitters to emit particles.
|
||||
* Expects emitters to have their totalEmitTimes and life set already.
|
||||
* Inifnite systems will resolve immediately.
|
||||
*
|
||||
* @param {object} hooks - Functions to hook into the life cycle API
|
||||
* @param {function} hooks.onStart - Called when the system starts to emit particles
|
||||
* @param {function} hooks.onUpdate - Called each time the system updates
|
||||
* @param {function} hooks.onEnd - Called when the system's emitters have all died
|
||||
* @return {Promise}
|
||||
*/
|
||||
|
||||
|
||||
emit({
|
||||
onStart,
|
||||
onUpdate,
|
||||
onEnd
|
||||
}) {
|
||||
if (onStart) {
|
||||
onStart();
|
||||
}
|
||||
|
||||
if (onUpdate) {
|
||||
this.eventDispatcher.addEventListener(SYSTEM_UPDATE, onUpdate);
|
||||
}
|
||||
|
||||
const emitters = this.emitters.map(emitter => {
|
||||
const {
|
||||
life
|
||||
} = emitter;
|
||||
|
||||
if (life === Infinity) {
|
||||
if (onEnd) {
|
||||
onEnd();
|
||||
}
|
||||
|
||||
emitter.experimental_emit();
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return new Promise(resolve => {
|
||||
emitter.addOnEmitterDeadEventListener(() => {
|
||||
if (onEnd) {
|
||||
onEnd();
|
||||
}
|
||||
|
||||
resolve();
|
||||
});
|
||||
emitter.experimental_emit();
|
||||
});
|
||||
});
|
||||
|
||||
try {
|
||||
return Promise.all(emitters);
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Updates the particle system based on the delta passed.
|
||||
*
|
||||
* @example
|
||||
* animate = () => {
|
||||
* threeRenderer.render(threeScene, threeCamera);
|
||||
* system.update();
|
||||
* requestAnimationFrame(animate);
|
||||
* }
|
||||
* animate();
|
||||
*
|
||||
* @param {number} delta - Delta time
|
||||
* @return {Promise}
|
||||
*/
|
||||
|
||||
|
||||
update(delta = DEFAULT_SYSTEM_DELTA) {
|
||||
const d = delta || DEFAULT_SYSTEM_DELTA;
|
||||
|
||||
if (this.canUpdate) {
|
||||
if (d > 0) {
|
||||
let i = this.emitters.length;
|
||||
|
||||
while (i--) {
|
||||
const emitter = this.emitters[i];
|
||||
emitter.update(d);
|
||||
emitter.particles.length && this.dispatch(SYSTEM_UPDATE);
|
||||
}
|
||||
}
|
||||
|
||||
this.dispatch(SYSTEM_UPDATE_AFTER);
|
||||
}
|
||||
|
||||
return Promise.resolve();
|
||||
}
|
||||
/**
|
||||
* Gets a count of the total number of particles in the system.
|
||||
*
|
||||
* @return {integer}
|
||||
*/
|
||||
|
||||
|
||||
getCount() {
|
||||
const length = this.emitters.length;
|
||||
let total = 0;
|
||||
let i;
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
total += this.emitters[i].particles.length;
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
/**
|
||||
* Destroys all emitters, renderers and the Nebula pool.
|
||||
* Ensures that this.update will not perform any operations while the system
|
||||
* is being destroyed.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
destroy() {
|
||||
const length = this.emitters.length;
|
||||
this.canUpdate = false;
|
||||
|
||||
for (let e = 0; e < length; e++) {
|
||||
this.emitters[e] && this.emitters[e].destroy();
|
||||
delete this.emitters[e];
|
||||
}
|
||||
|
||||
for (let r = 0; r < length; r++) {
|
||||
if (this.renderers[r] && this.renderers[r].destroy) {
|
||||
this.renderers[r].destroy();
|
||||
delete this.renderers[r];
|
||||
}
|
||||
}
|
||||
|
||||
this.emitters.length = 0;
|
||||
this.pool.destroy();
|
||||
this.canUpdate = true;
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,4 @@
|
||||
export { default as Particle } from './Particle';
|
||||
export { default as Pool } from './Pool';
|
||||
export { default as System } from './System';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL2luZGV4LmpzIl0sIm5hbWVzIjpbImRlZmF1bHQiLCJQYXJ0aWNsZSIsIlBvb2wiLCJTeXN0ZW0iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sSUFBSUMsUUFBcEIsUUFBb0MsWUFBcEM7QUFDQSxTQUFTRCxPQUFPLElBQUlFLElBQXBCLFFBQWdDLFFBQWhDO0FBQ0EsU0FBU0YsT0FBTyxJQUFJRyxNQUFwQixRQUFrQyxVQUFsQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgUGFydGljbGUgfSBmcm9tICcuL1BhcnRpY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUG9vbCB9IGZyb20gJy4vUG9vbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN5c3RlbSB9IGZyb20gJy4vU3lzdGVtJztcbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,5 @@
|
||||
export { Vector3 } from './Vector3';
|
||||
export { Quaternion } from './Quaternion';
|
||||
export { Euler } from './Euler';
|
||||
export * from './constants';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RocmVlL2luZGV4LmpzIl0sIm5hbWVzIjpbIlZlY3RvcjMiLCJRdWF0ZXJuaW9uIiwiRXVsZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQVQsUUFBd0IsV0FBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGNBQTNCO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixTQUF0QjtBQUNBLGNBQWMsYUFBZCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL1ZlY3RvcjMnO1xuZXhwb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gJy4vUXVhdGVybmlvbic7XG5leHBvcnQgeyBFdWxlciB9IGZyb20gJy4vRXVsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuIl19
|
||||
@@ -0,0 +1,4 @@
|
||||
export const CORE_TYPE_PARTICLE = 'Particle';
|
||||
export const CORE_TYPE_POOL = 'Pool';
|
||||
export const CORE_TYPE_SYSTEM = 'System';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3R5cGVzLmpzIl0sIm5hbWVzIjpbIkNPUkVfVFlQRV9QQVJUSUNMRSIsIkNPUkVfVFlQRV9QT09MIiwiQ09SRV9UWVBFX1NZU1RFTSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxrQkFBa0IsR0FBRyxVQUEzQjtBQUNQLE9BQU8sTUFBTUMsY0FBYyxHQUFHLE1BQXZCO0FBQ1AsT0FBTyxNQUFNQyxnQkFBZ0IsR0FBRyxRQUF6QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBDT1JFX1RZUEVfUEFSVElDTEUgPSAnUGFydGljbGUnO1xuZXhwb3J0IGNvbnN0IENPUkVfVFlQRV9QT09MID0gJ1Bvb2wnO1xuZXhwb3J0IGNvbnN0IENPUkVfVFlQRV9TWVNURU0gPSAnU3lzdGVtJztcbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,7 @@
|
||||
export const DEFAULT_WIDTH = 10;
|
||||
export const DEFAULT_HEIGHT = 10;
|
||||
export const DEFAULT_DEPTH = 10;
|
||||
export const DEFAULT_RADIUS = 15;
|
||||
export const DEFAULT_SIZE = 15;
|
||||
export const DEFAULT_POSITION = 0;
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWJ1Zy9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9ERVBUSCIsIkRFRkFVTFRfUkFESVVTIiwiREVGQVVMVF9TSVpFIiwiREVGQVVMVF9QT1NJVElPTiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxhQUFhLEdBQUcsRUFBdEI7QUFDUCxPQUFPLE1BQU1DLGNBQWMsR0FBRyxFQUF2QjtBQUNQLE9BQU8sTUFBTUMsYUFBYSxHQUFHLEVBQXRCO0FBQ1AsT0FBTyxNQUFNQyxjQUFjLEdBQUcsRUFBdkI7QUFDUCxPQUFPLE1BQU1DLFlBQVksR0FBRyxFQUFyQjtBQUNQLE9BQU8sTUFBTUMsZ0JBQWdCLEdBQUcsQ0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9ERVBUSCA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkFESVVTID0gMTU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TSVpFID0gMTU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IDA7XG4iXX0=
|
||||
@@ -0,0 +1,3 @@
|
||||
export { default as Debug } from './Debug';
|
||||
export { default as log } from './log';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWJ1Zy9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0IiwiRGVidWciLCJsb2ciXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sSUFBSUMsS0FBcEIsUUFBaUMsU0FBakM7QUFDQSxTQUFTRCxPQUFPLElBQUlFLEdBQXBCLFFBQStCLE9BQS9CIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWJ1ZyB9IGZyb20gJy4vRGVidWcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsb2cgfSBmcm9tICcuL2xvZyc7XG4iXX0=
|
||||
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* You can use this emit particles.
|
||||
*
|
||||
* This method will console.log the fixed number of your info in updata or requestAnimationFrame
|
||||
*
|
||||
* use like this log('+12',mc); log 12 times
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
export default function () {
|
||||
let once = 0;
|
||||
|
||||
if (window.console && window.console.trace) {
|
||||
var arg = Array.prototype.slice.call(arguments);
|
||||
var s1 = arguments[0] + '';
|
||||
|
||||
if (s1.indexOf('+') == 0) {
|
||||
var n = parseInt(arguments[0]);
|
||||
|
||||
if (once < n) {
|
||||
arg.shift();
|
||||
console.trace.apply(console, arg);
|
||||
once++;
|
||||
}
|
||||
} else {
|
||||
arg.unshift('+15');
|
||||
this.apply(console, arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWJ1Zy9sb2cuanMiXSwibmFtZXMiOlsib25jZSIsIndpbmRvdyIsImNvbnNvbGUiLCJ0cmFjZSIsImFyZyIsIkFycmF5IiwicHJvdG90eXBlIiwic2xpY2UiLCJjYWxsIiwiYXJndW1lbnRzIiwiczEiLCJpbmRleE9mIiwibiIsInBhcnNlSW50Iiwic2hpZnQiLCJhcHBseSIsInVuc2hpZnQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBVztBQUN4QixNQUFJQSxJQUFJLEdBQUcsQ0FBWDs7QUFFQSxNQUFJQyxNQUFNLENBQUNDLE9BQVAsSUFBa0JELE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxLQUFyQyxFQUE0QztBQUMxQyxRQUFJQyxHQUFHLEdBQUdDLEtBQUssQ0FBQ0MsU0FBTixDQUFnQkMsS0FBaEIsQ0FBc0JDLElBQXRCLENBQTJCQyxTQUEzQixDQUFWO0FBQ0EsUUFBSUMsRUFBRSxHQUFHRCxTQUFTLENBQUMsQ0FBRCxDQUFULEdBQWUsRUFBeEI7O0FBRUEsUUFBSUMsRUFBRSxDQUFDQyxPQUFILENBQVcsR0FBWCxLQUFtQixDQUF2QixFQUEwQjtBQUN4QixVQUFJQyxDQUFDLEdBQUdDLFFBQVEsQ0FBQ0osU0FBUyxDQUFDLENBQUQsQ0FBVixDQUFoQjs7QUFFQSxVQUFJVCxJQUFJLEdBQUdZLENBQVgsRUFBYztBQUNaUixRQUFBQSxHQUFHLENBQUNVLEtBQUo7QUFDQVosUUFBQUEsT0FBTyxDQUFDQyxLQUFSLENBQWNZLEtBQWQsQ0FBb0JiLE9BQXBCLEVBQTZCRSxHQUE3QjtBQUNBSixRQUFBQSxJQUFJO0FBQ0w7QUFDRixLQVJELE1BUU87QUFDTEksTUFBQUEsR0FBRyxDQUFDWSxPQUFKLENBQVksS0FBWjtBQUNBLFdBQUtELEtBQUwsQ0FBV2IsT0FBWCxFQUFvQkUsR0FBcEI7QUFDRDtBQUNGO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFlvdSBjYW4gdXNlIHRoaXMgZW1pdCBwYXJ0aWNsZXMuXG4gKlxuICogVGhpcyBtZXRob2Qgd2lsbCBjb25zb2xlLmxvZyB0aGUgZml4ZWQgbnVtYmVyIG9mIHlvdXIgaW5mbyAgaW4gdXBkYXRhIG9yIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICpcbiAqIHVzZSBsaWtlIHRoaXMgbG9nKCcrMTInLG1jKTsgbG9nIDEyIHRpbWVzXG4gKlxuICogQHJldHVybiB2b2lkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgb25jZSA9IDA7XG5cbiAgaWYgKHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLnRyYWNlKSB7XG4gICAgdmFyIGFyZyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgdmFyIHMxID0gYXJndW1lbnRzWzBdICsgJyc7XG5cbiAgICBpZiAoczEuaW5kZXhPZignKycpID09IDApIHtcbiAgICAgIHZhciBuID0gcGFyc2VJbnQoYXJndW1lbnRzWzBdKTtcblxuICAgICAgaWYgKG9uY2UgPCBuKSB7XG4gICAgICAgIGFyZy5zaGlmdCgpO1xuICAgICAgICBjb25zb2xlLnRyYWNlLmFwcGx5KGNvbnNvbGUsIGFyZyk7XG4gICAgICAgIG9uY2UrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXJnLnVuc2hpZnQoJysxNScpO1xuICAgICAgdGhpcy5hcHBseShjb25zb2xlLCBhcmcpO1xuICAgIH1cbiAgfVxufVxuIl19
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,707 @@
|
||||
import { DEFAULT_BIND_EMITTER, DEFAULT_BIND_EMITTER_EVENT, DEFAULT_DAMPING, DEFAULT_EMITTER_INDEX, DEFAULT_EMITTER_RATE } from './constants';
|
||||
import EventDispatcher, { EMITTER_DEAD, PARTICLE_CREATED, PARTICLE_DEAD, PARTICLE_UPDATE, SYSTEM_UPDATE } from '../events';
|
||||
import { INTEGRATION_TYPE_EULER, integrate } from '../math';
|
||||
import { Util, uid } from '../utils';
|
||||
import { InitializerUtil } from '../initializer';
|
||||
import Particle from '../core/Particle';
|
||||
import isNumber from '../utils/isNumber.js';
|
||||
import { EMITTER_TYPE_EMITTER as type } from './types';
|
||||
/**
|
||||
* Emitters are the System engine's particle factories. They cause particles to
|
||||
* be rendered by emitting them, and store all particle initializers and behaviours.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class Emitter extends Particle {
|
||||
/**
|
||||
* Constructs an Emitter instance.
|
||||
*
|
||||
* @param {object} properties - The properties to instantiate the emitter with
|
||||
* @return void
|
||||
*/
|
||||
constructor(properties = {}) {
|
||||
super(properties);
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
this.type = type;
|
||||
/**
|
||||
* @desc The particles emitted by this emitter.
|
||||
* @type {array}
|
||||
*/
|
||||
|
||||
this.particles = [];
|
||||
/**
|
||||
* @desc The initializers for particles emitted by this emitter.
|
||||
* @type {array}
|
||||
*/
|
||||
|
||||
this.initializers = [];
|
||||
/**
|
||||
* @desc The behaviours for particles emitted by this emitter.
|
||||
* @type {array}
|
||||
*/
|
||||
|
||||
this.behaviours = [];
|
||||
/**
|
||||
* @desc The behaviours for the emitter.
|
||||
* @type {array}
|
||||
*/
|
||||
|
||||
this.emitterBehaviours = [];
|
||||
/**
|
||||
* @desc The current emit iteration.
|
||||
* @type {integer}
|
||||
*/
|
||||
|
||||
this.currentEmitTime = 0;
|
||||
/**
|
||||
* @desc The total number of times the emitter should emit particles.
|
||||
* @type {integer}
|
||||
*/
|
||||
|
||||
this.totalEmitTimes = -1;
|
||||
/**
|
||||
* @desc The friction coefficient for all particle to emit by.
|
||||
* @type {number}
|
||||
*/
|
||||
|
||||
this.damping = DEFAULT_DAMPING;
|
||||
/**
|
||||
* @desc Ensures that particles emitted by this emitter are positioned
|
||||
* according to the emitter's properties.
|
||||
* @type {boolean}
|
||||
*/
|
||||
|
||||
this.bindEmitter = DEFAULT_BIND_EMITTER;
|
||||
/**
|
||||
* @desc Determines if the emitter will dispatch internal events. Defaults
|
||||
* to false
|
||||
* @type {boolean}
|
||||
*/
|
||||
|
||||
this.bindEmitterEvent = DEFAULT_BIND_EMITTER_EVENT;
|
||||
/**
|
||||
* @desc The number of particles to emit per second (a [particle]/b [s])
|
||||
* @type {Rate}
|
||||
*/
|
||||
|
||||
this.rate = DEFAULT_EMITTER_RATE;
|
||||
/**
|
||||
* @desc Determines if the emitter is emitting particles or not.
|
||||
* @type {boolean}
|
||||
*/
|
||||
|
||||
this.isEmitting = false;
|
||||
/**
|
||||
* @desc The emitter's id.
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
this.id = `emitter-${uid()}`;
|
||||
this.cID = 0;
|
||||
this.name = 'Emitter';
|
||||
/**
|
||||
* @desc The index of the emitter as it is added to the system.
|
||||
* @type {number|undefined}
|
||||
*/
|
||||
|
||||
this.index = DEFAULT_EMITTER_INDEX;
|
||||
/**
|
||||
* @desc The emitter's internal event dispatcher.
|
||||
* @type {EventDispatcher}
|
||||
*/
|
||||
|
||||
this.eventDispatcher = new EventDispatcher();
|
||||
}
|
||||
/**
|
||||
* Proxy method for the internal event dispatcher's dispatchEvent method.
|
||||
*
|
||||
* @param {string} event - The event to dispatch
|
||||
* @param {object<Particle>} [target=this] - The event target
|
||||
*/
|
||||
|
||||
|
||||
dispatch(event, target = this) {
|
||||
this.eventDispatcher.dispatchEvent(event, target);
|
||||
}
|
||||
/**
|
||||
* Sets the emitter rate.
|
||||
*
|
||||
* @param {Rate} rate - a rate initializer object
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
setRate(rate) {
|
||||
this.rate = rate;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Sets the position of the emitter.
|
||||
*
|
||||
* @param {object} newPosition - an object the new x, y and z props
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
setPosition(newPosition = {}) {
|
||||
const {
|
||||
position
|
||||
} = this;
|
||||
const {
|
||||
x = position.x,
|
||||
y = position.y,
|
||||
z = position.z
|
||||
} = newPosition;
|
||||
this.position.set(x, y, z);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Sets the rotation of the emitter.
|
||||
*
|
||||
* @param {object} newRotation - an object the new x, y and z props
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
setRotation(newRotation = {}) {
|
||||
const {
|
||||
rotation
|
||||
} = this;
|
||||
const {
|
||||
x = rotation.x,
|
||||
y = rotation.y,
|
||||
z = rotation.z
|
||||
} = newRotation;
|
||||
this.rotation.set(x, y, z);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Sets the total number of times the emitter should emit particles as well as
|
||||
* the emitter's life. Also intializes the emitter rate.
|
||||
* This enables the emitter to emit particles.
|
||||
*
|
||||
* @param {number} [totalEmitTimes=Infinity] - the total number of times to emit particles
|
||||
* @param {number} [life=Infinity] - the life of this emitter in milliseconds
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
emit(totalEmitTimes = Infinity, life = Infinity) {
|
||||
this.currentEmitTime = 0;
|
||||
this.totalEmitTimes = isNumber(totalEmitTimes) ? totalEmitTimes : Infinity;
|
||||
|
||||
if (totalEmitTimes === 1) {
|
||||
this.life = totalEmitTimes;
|
||||
} else {
|
||||
this.life = isNumber(life) ? life : Infinity;
|
||||
}
|
||||
|
||||
this.rate.init();
|
||||
this.isEmitting = true;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Experimental emit method that is designed to be called from the System.emit method.
|
||||
*
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
experimental_emit() {
|
||||
const {
|
||||
isEmitting,
|
||||
totalEmitTimes,
|
||||
life
|
||||
} = this;
|
||||
|
||||
if (!isEmitting) {
|
||||
this.currentEmitTime = 0;
|
||||
|
||||
if (!totalEmitTimes) {
|
||||
this.setTotalEmitTimes(Infinity);
|
||||
}
|
||||
|
||||
if (!life) {
|
||||
this.setLife(Infinity);
|
||||
}
|
||||
|
||||
this.rate.init();
|
||||
this.isEmitting = true;
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Sets the total emit times for the emitter.
|
||||
*
|
||||
* @param {number} [totalEmitTimes=Infinity] - the total number of times to emit particles
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
setTotalEmitTimes(totalEmitTimes = Infinity) {
|
||||
this.totalEmitTimes = isNumber(totalEmitTimes) ? totalEmitTimes : Infinity;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Sets the life of the emitter.
|
||||
*
|
||||
* @param {number} [life=Infinity] - the life of this emitter in milliseconds
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
setLife(life = Infinity) {
|
||||
if (this.totalEmitTimes === 1) {
|
||||
this.life = this.totalEmitTimes;
|
||||
} else {
|
||||
this.life = isNumber(life) ? life : Infinity;
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Stops the emitter from emitting particles.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
stopEmit() {
|
||||
this.totalEmitTimes = -1;
|
||||
this.currentEmitTime = 0;
|
||||
this.isEmitting = false;
|
||||
}
|
||||
/**
|
||||
* Kills all of the emitter's particles.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
removeAllParticles() {
|
||||
let i = this.particles.length;
|
||||
|
||||
while (i--) {
|
||||
this.particles[i].dead = true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Adds a particle initializer to the emitter.
|
||||
* Each initializer is run on each particle when they are created.
|
||||
*
|
||||
* @param {Initializer} initializer - The initializer to add
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
addInitializer(initializer) {
|
||||
this.initializers.push(initializer);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Adds multiple particle initializers to the emitter.
|
||||
*
|
||||
* @param {array<Initializer>} initializers - an array of particle initializers
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
addInitializers(initializers) {
|
||||
let i = initializers.length;
|
||||
|
||||
while (i--) {
|
||||
this.addInitializer(initializers[i]);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Sets the emitter's particle initializers.
|
||||
*
|
||||
* @param {array<Initializer>} initializers - an array of particle initializers
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
setInitializers(initializers) {
|
||||
this.initializers = initializers;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Removes an initializer from the emitter's initializers array.
|
||||
*
|
||||
* @param {Initializer} initializer - The initializer to remove
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
removeInitializer(initializer) {
|
||||
const index = this.initializers.indexOf(initializer);
|
||||
|
||||
if (index > -1) {
|
||||
this.initializers.splice(index, 1);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Removes all initializers.
|
||||
*
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
removeAllInitializers() {
|
||||
Util.destroyArray(this.initializers);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Adds a behaviour to the emitter. All emitter behaviours are added to each particle when
|
||||
* they are emitted.
|
||||
*
|
||||
* @param {Behaviour} behaviour - The behaviour to add to the emitter
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
addBehaviour(behaviour) {
|
||||
this.behaviours.push(behaviour);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Adds multiple behaviours to the emitter.
|
||||
*
|
||||
* @param {array<Behaviour>} behaviours - an array of emitter behaviours
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
addBehaviours(behaviours) {
|
||||
let i = behaviours.length;
|
||||
|
||||
while (i--) {
|
||||
this.addBehaviour(behaviours[i]);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Sets the emitter's behaviours.
|
||||
*
|
||||
* @param {array<Behaviour>} behaviours - an array of emitter behaviours
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
setBehaviours(behaviours) {
|
||||
this.behaviours = behaviours;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Removes the behaviour from the emitter's behaviours array.
|
||||
*
|
||||
* @param {Behaviour} behaviour - The behaviour to remove
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
removeBehaviour(behaviour) {
|
||||
const index = this.behaviours.indexOf(behaviour);
|
||||
|
||||
if (index > -1) {
|
||||
this.behaviours.splice(index, 1);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Removes all behaviours from the emitter.
|
||||
*
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
removeAllBehaviours() {
|
||||
Util.destroyArray(this.behaviours);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Adds an emitter behaviour to the emitter.
|
||||
*
|
||||
* @param {Behaviour} behaviour - The behaviour to add to the emitter
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
addEmitterBehaviour(behaviour) {
|
||||
this.emitterBehaviours.push(behaviour);
|
||||
behaviour.initialize(this);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Adds multiple behaviours to the emitter.
|
||||
*
|
||||
* @param {array<Behaviour>} behaviours - an array of emitter behaviours
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
addEmitterBehaviours(behaviours) {
|
||||
let i = behaviours.length;
|
||||
|
||||
while (i--) {
|
||||
this.addEmitterBehaviour(behaviours[i]);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Sets the emitter's behaviours.
|
||||
*
|
||||
* @param {array<Behaviour>} behaviours - an array of emitter behaviours
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
setEmitterBehaviours(behaviours) {
|
||||
const length = behaviours.length;
|
||||
this.emitterBehaviours = behaviours;
|
||||
|
||||
for (let i = 0; i < length; i++) {
|
||||
this.emitterBehaviours[i].initialize(this);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Removes the behaviour from the emitter's behaviours array.
|
||||
*
|
||||
* @param {Behaviour} behaviour - The behaviour to remove
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
removeEmitterBehaviour(behaviour) {
|
||||
const index = this.emitterBehaviours.indexOf(behaviour);
|
||||
|
||||
if (index > -1) {
|
||||
this.emitterBehaviours.splice(index, 1);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Removes all behaviours from the emitter.
|
||||
*
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
removeAllEmitterBehaviours() {
|
||||
Util.destroyArray(this.emitterBehaviours);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Adds the event listener for the EMITTER_DEAD event.
|
||||
*
|
||||
* @param {onEmitterDead} - The function to call when the EMITTER_DEAD is dispatched.
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
addOnEmitterDeadEventListener(onEmitterDead) {
|
||||
this.eventDispatcher.addEventListener(`${this.id}_${EMITTER_DEAD}`, () => onEmitterDead());
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Creates a particle by retreiving one from the pool and setting it up with
|
||||
* the supplied initializer and behaviour.
|
||||
*
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
|
||||
createParticle() {
|
||||
const particle = this.parent.pool.get(Particle);
|
||||
const index = this.particles.length;
|
||||
this.setupParticle(particle, index);
|
||||
this.parent && this.parent.dispatch(PARTICLE_CREATED, particle);
|
||||
this.bindEmitterEvent && this.dispatch(PARTICLE_CREATED, particle);
|
||||
return particle;
|
||||
}
|
||||
/**
|
||||
* Sets up a particle by running all initializers on it and setting its behaviours.
|
||||
* Also adds the particle to this.particles.
|
||||
*
|
||||
* @param {Particle} particle - The particle to setup
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
setupParticle(particle, index) {
|
||||
const {
|
||||
initializers,
|
||||
behaviours
|
||||
} = this;
|
||||
InitializerUtil.initialize(this, particle, initializers);
|
||||
particle.addBehaviours(behaviours);
|
||||
particle.parent = this;
|
||||
particle.index = index;
|
||||
this.particles.push(particle);
|
||||
}
|
||||
/**
|
||||
* Updates the emitter according to the time passed by calling the generate
|
||||
* and integrate methods. The generate method creates particles, the integrate
|
||||
* method updates existing particles.
|
||||
*
|
||||
* If the emitter age is greater than time, the emitter is killed.
|
||||
*
|
||||
* This method also indexes/deindexes particles.
|
||||
*
|
||||
* @param {number} time - System engine time
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
update(time) {
|
||||
if (!this.isEmitting && this.particles.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.age += time;
|
||||
|
||||
if (this.dead || this.age >= this.life) {
|
||||
this.destroy();
|
||||
}
|
||||
|
||||
if (this.isEmitting) {
|
||||
this.generate(time);
|
||||
}
|
||||
|
||||
this.integrate(time);
|
||||
let i = this.particles.length;
|
||||
|
||||
while (i--) {
|
||||
const particle = this.particles[i];
|
||||
|
||||
if (particle.dead) {
|
||||
this.parent && this.parent.dispatch(PARTICLE_DEAD, particle);
|
||||
this.bindEmitterEvent && this.dispatch(PARTICLE_DEAD, particle);
|
||||
this.parent.pool.expire(particle.reset());
|
||||
this.particles.splice(i, 1);
|
||||
|
||||
if (this.particles.length === 0) {
|
||||
this.parent && this.parent.dispatch(SYSTEM_UPDATE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.updateEmitterBehaviours(time);
|
||||
}
|
||||
/**
|
||||
* Updates the emitter's emitter behaviours.
|
||||
*
|
||||
* @param {number} time - System engine time
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
updateEmitterBehaviours(time) {
|
||||
if (this.sleep) {
|
||||
return;
|
||||
}
|
||||
|
||||
const length = this.emitterBehaviours.length;
|
||||
|
||||
for (let i = 0; i < length; i++) {
|
||||
this.emitterBehaviours[i].applyBehaviour(this, time, i);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Runs the integration algorithm on the emitter and all particles.
|
||||
* Updates the particles with the timstamp passed.
|
||||
*
|
||||
* @param {number} time - System engine time
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
integrate(time) {
|
||||
const integrationType = this.parent ? this.parent.integrationType : INTEGRATION_TYPE_EULER;
|
||||
const damping = 1 - this.damping;
|
||||
integrate(this, time, damping, integrationType);
|
||||
let index = this.particles.length;
|
||||
|
||||
while (index--) {
|
||||
const particle = this.particles[index];
|
||||
particle.update(time, index);
|
||||
integrate(particle, time, damping, integrationType);
|
||||
this.parent && this.parent.dispatch(PARTICLE_UPDATE, particle);
|
||||
this.bindEmitterEvent && this.dispatch(PARTICLE_UPDATE, particle);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Generates new particles.
|
||||
*
|
||||
* @param {number} time - System engine time
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
generate(time) {
|
||||
if (this.totalEmitTimes === 1) {
|
||||
let i = this.rate.getValue(99999);
|
||||
|
||||
if (i > 0) {
|
||||
this.cID = i;
|
||||
}
|
||||
|
||||
while (i--) {
|
||||
this.createParticle();
|
||||
}
|
||||
|
||||
this.totalEmitTimes = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
this.currentEmitTime += time;
|
||||
|
||||
if (this.currentEmitTime < this.totalEmitTimes) {
|
||||
let i = this.rate.getValue(time);
|
||||
|
||||
if (i > 0) {
|
||||
this.cID = i;
|
||||
}
|
||||
|
||||
while (i--) {
|
||||
this.createParticle();
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Kills the emitter.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
destroy() {
|
||||
this.dead = true;
|
||||
this.energy = 0;
|
||||
this.totalEmitTimes = -1;
|
||||
|
||||
if (this.particles.length == 0) {
|
||||
this.isEmitting = false;
|
||||
this.removeAllInitializers();
|
||||
this.removeAllBehaviours();
|
||||
this.dispatch(`${this.id}_${EMITTER_DEAD}`);
|
||||
this.parent && this.parent.removeEmitter(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,7 @@
|
||||
import { Rate } from '../initializer';
|
||||
export const DEFAULT_DAMPING = 0.006;
|
||||
export const DEFAULT_BIND_EMITTER = true;
|
||||
export const DEFAULT_EMITTER_RATE = new Rate(1, 0.1);
|
||||
export const DEFAULT_BIND_EMITTER_EVENT = false;
|
||||
export const DEFAULT_EMITTER_INDEX = undefined;
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbWl0dGVyL2NvbnN0YW50cy5qcyJdLCJuYW1lcyI6WyJSYXRlIiwiREVGQVVMVF9EQU1QSU5HIiwiREVGQVVMVF9CSU5EX0VNSVRURVIiLCJERUZBVUxUX0VNSVRURVJfUkFURSIsIkRFRkFVTFRfQklORF9FTUlUVEVSX0VWRU5UIiwiREVGQVVMVF9FTUlUVEVSX0lOREVYIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxJQUFULFFBQXFCLGdCQUFyQjtBQUVBLE9BQU8sTUFBTUMsZUFBZSxHQUFHLEtBQXhCO0FBQ1AsT0FBTyxNQUFNQyxvQkFBb0IsR0FBRyxJQUE3QjtBQUNQLE9BQU8sTUFBTUMsb0JBQW9CLEdBQUcsSUFBSUgsSUFBSixDQUFTLENBQVQsRUFBWSxHQUFaLENBQTdCO0FBQ1AsT0FBTyxNQUFNSSwwQkFBMEIsR0FBRyxLQUFuQztBQUNQLE9BQU8sTUFBTUMscUJBQXFCLEdBQUdDLFNBQTlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmF0ZSB9IGZyb20gJy4uL2luaXRpYWxpemVyJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfREFNUElORyA9IDAuMDA2O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQklORF9FTUlUVEVSID0gdHJ1ZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VNSVRURVJfUkFURSA9IG5ldyBSYXRlKDEsIDAuMSk7XG5leHBvcnQgY29uc3QgREVGQVVMVF9CSU5EX0VNSVRURVJfRVZFTlQgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VNSVRURVJfSU5ERVggPSB1bmRlZmluZWQ7XG4iXX0=
|
||||
@@ -0,0 +1,3 @@
|
||||
export { default as FollowEmitter } from './FollowEmitter';
|
||||
export { default as Emitter } from './Emitter';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbWl0dGVyL2luZGV4LmpzIl0sIm5hbWVzIjpbImRlZmF1bHQiLCJGb2xsb3dFbWl0dGVyIiwiRW1pdHRlciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxJQUFJQyxhQUFwQixRQUF5QyxpQkFBekM7QUFDQSxTQUFTRCxPQUFPLElBQUlFLE9BQXBCLFFBQW1DLFdBQW5DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xsb3dFbWl0dGVyIH0gZnJvbSAnLi9Gb2xsb3dFbWl0dGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW1pdHRlciB9IGZyb20gJy4vRW1pdHRlcic7XG4iXX0=
|
||||
@@ -0,0 +1,3 @@
|
||||
export const EMITTER_TYPE_EMITTER = 'Emitter';
|
||||
export const EMITTER_TYPE_FOLLOW = 'FollowEmitter';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbWl0dGVyL3R5cGVzLmpzIl0sIm5hbWVzIjpbIkVNSVRURVJfVFlQRV9FTUlUVEVSIiwiRU1JVFRFUl9UWVBFX0ZPTExPVyJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxvQkFBb0IsR0FBRyxTQUE3QjtBQUNQLE9BQU8sTUFBTUMsbUJBQW1CLEdBQUcsZUFBNUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgRU1JVFRFUl9UWVBFX0VNSVRURVIgPSAnRW1pdHRlcic7XG5leHBvcnQgY29uc3QgRU1JVFRFUl9UWVBFX0ZPTExPVyA9ICdGb2xsb3dFbWl0dGVyJztcbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
||||
export const SYSTEM_UPDATE = 'SYSTEM_UPDATE';
|
||||
export const PARTICLE_CREATED = 'PARTICLE_CREATED';
|
||||
export const PARTICLE_UPDATE = 'PARTICLE_UPDATE';
|
||||
export const PARTICLE_DEAD = 'PARTICLE_DEAD';
|
||||
export const EMITTER_ADDED = 'EMITTER_ADDED';
|
||||
export const EMITTER_REMOVED = 'EMITTER_REMOVED';
|
||||
export const EMITTER_DEAD = 'EMITTER_DEAD';
|
||||
export const SYSTEM_UPDATE_AFTER = 'SYSTEM_UPDATE_AFTER';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ldmVudHMvY29uc3RhbnRzLmpzIl0sIm5hbWVzIjpbIlNZU1RFTV9VUERBVEUiLCJQQVJUSUNMRV9DUkVBVEVEIiwiUEFSVElDTEVfVVBEQVRFIiwiUEFSVElDTEVfREVBRCIsIkVNSVRURVJfQURERUQiLCJFTUlUVEVSX1JFTU9WRUQiLCJFTUlUVEVSX0RFQUQiLCJTWVNURU1fVVBEQVRFX0FGVEVSIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU1BLGFBQWEsR0FBRyxlQUF0QjtBQUNQLE9BQU8sTUFBTUMsZ0JBQWdCLEdBQUcsa0JBQXpCO0FBQ1AsT0FBTyxNQUFNQyxlQUFlLEdBQUcsaUJBQXhCO0FBQ1AsT0FBTyxNQUFNQyxhQUFhLEdBQUcsZUFBdEI7QUFDUCxPQUFPLE1BQU1DLGFBQWEsR0FBRyxlQUF0QjtBQUNQLE9BQU8sTUFBTUMsZUFBZSxHQUFHLGlCQUF4QjtBQUNQLE9BQU8sTUFBTUMsWUFBWSxHQUFHLGNBQXJCO0FBQ1AsT0FBTyxNQUFNQyxtQkFBbUIsR0FBRyxxQkFBNUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU1lTVEVNX1VQREFURSA9ICdTWVNURU1fVVBEQVRFJztcbmV4cG9ydCBjb25zdCBQQVJUSUNMRV9DUkVBVEVEID0gJ1BBUlRJQ0xFX0NSRUFURUQnO1xuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX1VQREFURSA9ICdQQVJUSUNMRV9VUERBVEUnO1xuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX0RFQUQgPSAnUEFSVElDTEVfREVBRCc7XG5leHBvcnQgY29uc3QgRU1JVFRFUl9BRERFRCA9ICdFTUlUVEVSX0FEREVEJztcbmV4cG9ydCBjb25zdCBFTUlUVEVSX1JFTU9WRUQgPSAnRU1JVFRFUl9SRU1PVkVEJztcbmV4cG9ydCBjb25zdCBFTUlUVEVSX0RFQUQgPSAnRU1JVFRFUl9ERUFEJztcbmV4cG9ydCBjb25zdCBTWVNURU1fVVBEQVRFX0FGVEVSID0gJ1NZU1RFTV9VUERBVEVfQUZURVInO1xuIl19
|
||||
@@ -0,0 +1,4 @@
|
||||
import EventDispatcher from './EventDispatcher';
|
||||
export default EventDispatcher;
|
||||
export * from './constants';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ldmVudHMvaW5kZXguanMiXSwibmFtZXMiOlsiRXZlbnREaXNwYXRjaGVyIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxlQUFQLE1BQTRCLG1CQUE1QjtBQUVBLGVBQWVBLGVBQWY7QUFDQSxjQUFjLGFBQWQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnREaXNwYXRjaGVyIGZyb20gJy4vRXZlbnREaXNwYXRjaGVyJztcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnREaXNwYXRjaGVyO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuIl19
|
||||
@@ -0,0 +1,13 @@
|
||||
import { System } from './core';
|
||||
export * from './behaviour';
|
||||
export * from './debug';
|
||||
export * from './ease';
|
||||
export * from './emitter';
|
||||
export * from './initializer';
|
||||
export * from './math';
|
||||
export * from './renderer';
|
||||
export * from './utils';
|
||||
export * from './zone';
|
||||
export { System, Particle, Pool } from './core';
|
||||
export default System;
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJTeXN0ZW0iLCJQYXJ0aWNsZSIsIlBvb2wiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQVQsUUFBdUIsUUFBdkI7QUFFQSxjQUFjLGFBQWQ7QUFDQSxjQUFjLFNBQWQ7QUFDQSxjQUFjLFFBQWQ7QUFDQSxjQUFjLFdBQWQ7QUFDQSxjQUFjLGVBQWQ7QUFDQSxjQUFjLFFBQWQ7QUFDQSxjQUFjLFlBQWQ7QUFDQSxjQUFjLFNBQWQ7QUFDQSxjQUFjLFFBQWQ7QUFDQSxTQUFTQSxNQUFULEVBQWlCQyxRQUFqQixFQUEyQkMsSUFBM0IsUUFBdUMsUUFBdkM7QUFDQSxlQUFlRixNQUFmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3lzdGVtIH0gZnJvbSAnLi9jb3JlJztcblxuZXhwb3J0ICogZnJvbSAnLi9iZWhhdmlvdXInO1xuZXhwb3J0ICogZnJvbSAnLi9kZWJ1Zyc7XG5leHBvcnQgKiBmcm9tICcuL2Vhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9lbWl0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vaW5pdGlhbGl6ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9tYXRoJztcbmV4cG9ydCAqIGZyb20gJy4vcmVuZGVyZXInO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3pvbmUnO1xuZXhwb3J0IHsgU3lzdGVtLCBQYXJ0aWNsZSwgUG9vbCB9IGZyb20gJy4vY29yZSc7XG5leHBvcnQgZGVmYXVsdCBTeXN0ZW07XG4iXX0=
|
||||
@@ -0,0 +1,83 @@
|
||||
import Initializer from './Initializer';
|
||||
import { createArraySpan } from '../math';
|
||||
import { INITIALIZER_TYPE_BODY as type } from './types';
|
||||
/**
|
||||
* Sets the body property on initialized particles.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class Body extends Initializer {
|
||||
/**
|
||||
* Constructs a Body initalizer instance.
|
||||
*
|
||||
* @param {string|number|object} body - The content for the particle body, can
|
||||
* be a color or an object (mesh)
|
||||
* @param {?number} w - The width of the particle body
|
||||
* @param {?number} h - The height of the particle body
|
||||
* @return void
|
||||
*/
|
||||
constructor(body, w=null, h=null, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
/**
|
||||
* @desc The content for the particle body
|
||||
* @type {ArraySpan}
|
||||
*/
|
||||
|
||||
this.body = createArraySpan(body);
|
||||
/**
|
||||
* @desc The width of the particle Body
|
||||
* @type {number}
|
||||
*/
|
||||
|
||||
this.w = w;
|
||||
/**
|
||||
* @desc The height of the particle Body
|
||||
* @type {number}
|
||||
*/
|
||||
|
||||
this.h = h || w;
|
||||
}
|
||||
/**
|
||||
* Sets the particle's initial body.
|
||||
*
|
||||
* @param {Particle} particle - the particle to initialize the property on
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
initialize(particle) {
|
||||
var body = this.body.getValue();
|
||||
|
||||
if (this.w) {
|
||||
particle.body = {
|
||||
width: this.w,
|
||||
height: this.h,
|
||||
body: body
|
||||
};
|
||||
} else {
|
||||
particle.body = body;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Creates a Body initializer from JSON.
|
||||
*
|
||||
* @param {object} json - The JSON to construct the instance from.
|
||||
* @property {number} json.body - The color for the particle body
|
||||
* @property {number} json.width - The width of the particle body
|
||||
* @property {number} json.height - The height of the particle body
|
||||
* @return {Body}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
body,
|
||||
width,
|
||||
height,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new Body(body, width, height, isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9Cb2R5LmpzIl0sIm5hbWVzIjpbIkluaXRpYWxpemVyIiwiY3JlYXRlQXJyYXlTcGFuIiwiSU5JVElBTElaRVJfVFlQRV9CT0RZIiwidHlwZSIsIkJvZHkiLCJjb25zdHJ1Y3RvciIsImJvZHkiLCJ3IiwiaCIsImlzRW5hYmxlZCIsImluaXRpYWxpemUiLCJwYXJ0aWNsZSIsImdldFZhbHVlIiwid2lkdGgiLCJoZWlnaHQiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVAsTUFBd0IsZUFBeEI7QUFDQSxTQUFTQyxlQUFULFFBQWdDLFNBQWhDO0FBQ0EsU0FBU0MscUJBQXFCLElBQUlDLElBQWxDLFFBQThDLFNBQTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsZUFBZSxNQUFNQyxJQUFOLFNBQW1CSixXQUFuQixDQUErQjtBQUM1QztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRUssRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU9DLENBQVAsRUFBVUMsQ0FBVixFQUFhQyxTQUFTLEdBQUcsSUFBekIsRUFBK0I7QUFDeEMsVUFBTU4sSUFBTixFQUFZTSxTQUFaO0FBRUE7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksU0FBS0gsSUFBTCxHQUFZTCxlQUFlLENBQUNLLElBQUQsQ0FBM0I7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxDQUFMLEdBQVNBLENBQVQ7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxDQUFMLEdBQVNBLENBQUMsSUFBSUQsQ0FBZDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRUcsRUFBQUEsVUFBVSxDQUFDQyxRQUFELEVBQVc7QUFDbkIsUUFBSUwsSUFBSSxHQUFHLEtBQUtBLElBQUwsQ0FBVU0sUUFBVixFQUFYOztBQUVBLFFBQUksS0FBS0wsQ0FBVCxFQUFZO0FBQ1ZJLE1BQUFBLFFBQVEsQ0FBQ0wsSUFBVCxHQUFnQjtBQUNkTyxRQUFBQSxLQUFLLEVBQUUsS0FBS04sQ0FERTtBQUVkTyxRQUFBQSxNQUFNLEVBQUUsS0FBS04sQ0FGQztBQUdkRixRQUFBQSxJQUFJLEVBQUVBO0FBSFEsT0FBaEI7QUFLRCxLQU5ELE1BTU87QUFDTEssTUFBQUEsUUFBUSxDQUFDTCxJQUFULEdBQWdCQSxJQUFoQjtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNpQixTQUFSUyxRQUFRLENBQUNDLElBQUQsRUFBTztBQUNwQixVQUFNO0FBQUVWLE1BQUFBLElBQUY7QUFBUU8sTUFBQUEsS0FBUjtBQUFlQyxNQUFBQSxNQUFmO0FBQXVCTCxNQUFBQSxTQUFTLEdBQUc7QUFBbkMsUUFBNENPLElBQWxEO0FBRUEsV0FBTyxJQUFJWixJQUFKLENBQVNFLElBQVQsRUFBZU8sS0FBZixFQUFzQkMsTUFBdEIsRUFBOEJMLFNBQTlCLENBQVA7QUFDRDs7QUFqRTJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEluaXRpYWxpemVyIGZyb20gJy4vSW5pdGlhbGl6ZXInO1xuaW1wb3J0IHsgY3JlYXRlQXJyYXlTcGFuIH0gZnJvbSAnLi4vbWF0aCc7XG5pbXBvcnQgeyBJTklUSUFMSVpFUl9UWVBFX0JPRFkgYXMgdHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuLyoqXG4gKiBTZXRzIHRoZSBib2R5IHByb3BlcnR5IG9uIGluaXRpYWxpemVkIHBhcnRpY2xlcy5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvZHkgZXh0ZW5kcyBJbml0aWFsaXplciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgQm9keSBpbml0YWxpemVyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8b2JqZWN0fSBib2R5IC0gVGhlIGNvbnRlbnQgZm9yIHRoZSBwYXJ0aWNsZSBib2R5LCBjYW5cbiAgICogYmUgYSBjb2xvciBvciBhbiBvYmplY3QgKG1lc2gpXG4gICAqIEBwYXJhbSB7P251bWJlcn0gdyAtIFRoZSB3aWR0aCBvZiB0aGUgcGFydGljbGUgYm9keVxuICAgKiBAcGFyYW0gez9udW1iZXJ9IGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBwYXJ0aWNsZSBib2R5XG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgdywgaCwgaXNFbmFibGVkID0gdHJ1ZSkge1xuICAgIHN1cGVyKHR5cGUsIGlzRW5hYmxlZCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgY29udGVudCBmb3IgdGhlIHBhcnRpY2xlIGJvZHlcbiAgICAgKiBAdHlwZSB7QXJyYXlTcGFufVxuICAgICAqL1xuICAgIHRoaXMuYm9keSA9IGNyZWF0ZUFycmF5U3Bhbihib2R5KTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSB3aWR0aCBvZiB0aGUgcGFydGljbGUgQm9keVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53ID0gdztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBoZWlnaHQgb2YgdGhlIHBhcnRpY2xlIEJvZHlcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaCA9IGggfHwgdztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwYXJ0aWNsZSdzIGluaXRpYWwgYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSB0aGUgcGFydGljbGUgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb25cbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBpbml0aWFsaXplKHBhcnRpY2xlKSB7XG4gICAgdmFyIGJvZHkgPSB0aGlzLmJvZHkuZ2V0VmFsdWUoKTtcblxuICAgIGlmICh0aGlzLncpIHtcbiAgICAgIHBhcnRpY2xlLmJvZHkgPSB7XG4gICAgICAgIHdpZHRoOiB0aGlzLncsXG4gICAgICAgIGhlaWdodDogdGhpcy5oLFxuICAgICAgICBib2R5OiBib2R5LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGljbGUuYm9keSA9IGJvZHk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBCb2R5IGluaXRpYWxpemVyIGZyb20gSlNPTi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBUaGUgSlNPTiB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlIGZyb20uXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBqc29uLmJvZHkgLSBUaGUgY29sb3IgZm9yIHRoZSBwYXJ0aWNsZSBib2R5XG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBqc29uLndpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBwYXJ0aWNsZSBib2R5XG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBqc29uLmhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHBhcnRpY2xlIGJvZHlcbiAgICogQHJldHVybiB7Qm9keX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uKSB7XG4gICAgY29uc3QgeyBib2R5LCB3aWR0aCwgaGVpZ2h0LCBpc0VuYWJsZWQgPSB0cnVlIH0gPSBqc29uO1xuXG4gICAgcmV0dXJuIG5ldyBCb2R5KGJvZHksIHdpZHRoLCBoZWlnaHQsIGlzRW5hYmxlZCk7XG4gIH1cbn1cbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,84 @@
|
||||
import { INITIALIZER_TYPE_ABSTRACT } from './types';
|
||||
/**
|
||||
* The base Emitter / Particle property class.
|
||||
*
|
||||
* @abstract
|
||||
*/
|
||||
|
||||
export default class Initializer {
|
||||
/**
|
||||
* Constructs an Initializer instance.
|
||||
*
|
||||
* @param {string} [type=INITIALIZER_TYPE_ABSTRACT] - The intiializer type
|
||||
* @param {boolean} [isEnabled=true] - Determines if the initializer should be enabled or not
|
||||
* @return void
|
||||
*/
|
||||
constructor(type = INITIALIZER_TYPE_ABSTRACT, isEnabled = true) {
|
||||
this.type = type;
|
||||
this.isEnabled = isEnabled;
|
||||
}
|
||||
/**
|
||||
* Initializes the property on the emitter or particle.
|
||||
*
|
||||
* @see {@link '../emitter/emitter.js'} setupParticle
|
||||
* @param {Emitter} emitter - the emitter to initialize the property on
|
||||
* @param {Particle} particle - the particle to intiialize the property on
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
init(emitter, particle) {
|
||||
if (!this.isEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (particle) {
|
||||
this.initialize(particle);
|
||||
particle.hasBeenInitialized = true;
|
||||
} else {
|
||||
this.initialize(emitter);
|
||||
emitter.hasBeenInitialized = true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @abstract
|
||||
*/
|
||||
|
||||
|
||||
reset() {}
|
||||
/**
|
||||
* Place custom property initialization code in this method in the subclass.
|
||||
*
|
||||
* @param {object} target - either an Emitter or a Particle
|
||||
* @abstract
|
||||
*/
|
||||
|
||||
|
||||
initialize(target) {} // eslint-disable-line
|
||||
|
||||
/**
|
||||
* Determines if the initializer requires a Web GL API to be provided to its constructor.
|
||||
* If true, the WebGL API will need to be provided as the first argument to the constructor
|
||||
* and fromJSON methods.
|
||||
*
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
|
||||
static requiresWebGlApi() {
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Returns a new instance of the initializer from the JSON object passed.
|
||||
*
|
||||
* @abstract
|
||||
* @param {object} json - JSON object containing the required constructor properties
|
||||
* @return {Behaviour}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json) {} // eslint-disable-line
|
||||
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9Jbml0aWFsaXplci5qcyJdLCJuYW1lcyI6WyJJTklUSUFMSVpFUl9UWVBFX0FCU1RSQUNUIiwiSW5pdGlhbGl6ZXIiLCJjb25zdHJ1Y3RvciIsInR5cGUiLCJpc0VuYWJsZWQiLCJpbml0IiwiZW1pdHRlciIsInBhcnRpY2xlIiwiaW5pdGlhbGl6ZSIsImhhc0JlZW5Jbml0aWFsaXplZCIsInJlc2V0IiwidGFyZ2V0IiwicmVxdWlyZXNXZWJHbEFwaSIsImZyb21KU09OIiwianNvbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EseUJBQVQsUUFBMEMsU0FBMUM7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsV0FBTixDQUFrQjtBQUMvQjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVFQyxFQUFBQSxXQUFXLENBQUNDLElBQUksR0FBR0gseUJBQVIsRUFBbUNJLFNBQVMsR0FBRyxJQUEvQyxFQUFxRDtBQUM5RCxTQUFLRCxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCQSxTQUFqQjtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0VDLEVBQUFBLElBQUksQ0FBQ0MsT0FBRCxFQUFVQyxRQUFWLEVBQW9CO0FBQ3RCLFFBQUksQ0FBQyxLQUFLSCxTQUFWLEVBQXFCO0FBQ25CO0FBQ0Q7O0FBRUQsUUFBSUcsUUFBSixFQUFjO0FBQ1osV0FBS0MsVUFBTCxDQUFnQkQsUUFBaEI7QUFDQUEsTUFBQUEsUUFBUSxDQUFDRSxrQkFBVCxHQUE4QixJQUE5QjtBQUNELEtBSEQsTUFHTztBQUNMLFdBQUtELFVBQUwsQ0FBZ0JGLE9BQWhCO0FBQ0FBLE1BQUFBLE9BQU8sQ0FBQ0csa0JBQVIsR0FBNkIsSUFBN0I7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBOzs7QUFDRUMsRUFBQUEsS0FBSyxHQUFHLENBQUU7QUFFVjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFRixFQUFBQSxVQUFVLENBQUNHLE1BQUQsRUFBUyxDQUFFLENBL0NVLENBK0NUOztBQUV0QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ3lCLFNBQWhCQyxnQkFBZ0IsR0FBRztBQUN4QixXQUFPLEtBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDaUIsU0FBUkMsUUFBUSxDQUFDQyxJQUFELEVBQU8sQ0FBRSxDQW5FTyxDQW1FTjs7O0FBbkVNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU5JVElBTElaRVJfVFlQRV9BQlNUUkFDVCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIEVtaXR0ZXIgLyBQYXJ0aWNsZSBwcm9wZXJ0eSBjbGFzcy5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5pdGlhbGl6ZXIge1xuICAvKipcbiAgICogQ29uc3RydWN0cyBhbiBJbml0aWFsaXplciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPUlOSVRJQUxJWkVSX1RZUEVfQUJTVFJBQ1RdIC0gVGhlIGludGlpYWxpemVyIHR5cGVcbiAgICogQHBhcmFtIHtib29sZWFufSBbaXNFbmFibGVkPXRydWVdIC0gRGV0ZXJtaW5lcyBpZiB0aGUgaW5pdGlhbGl6ZXIgc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90XG5cbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0eXBlID0gSU5JVElBTElaRVJfVFlQRV9BQlNUUkFDVCwgaXNFbmFibGVkID0gdHJ1ZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5pc0VuYWJsZWQgPSBpc0VuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnR5IG9uIHRoZSBlbWl0dGVyIG9yIHBhcnRpY2xlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayAnLi4vZW1pdHRlci9lbWl0dGVyLmpzJ30gc2V0dXBQYXJ0aWNsZVxuICAgKiBAcGFyYW0ge0VtaXR0ZXJ9IGVtaXR0ZXIgLSB0aGUgZW1pdHRlciB0byBpbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvblxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIHRoZSBwYXJ0aWNsZSB0byBpbnRpaWFsaXplIHRoZSBwcm9wZXJ0eSBvblxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGluaXQoZW1pdHRlciwgcGFydGljbGUpIHtcbiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcnRpY2xlKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemUocGFydGljbGUpO1xuICAgICAgcGFydGljbGUuaGFzQmVlbkluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0aWFsaXplKGVtaXR0ZXIpO1xuICAgICAgZW1pdHRlci5oYXNCZWVuSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIHJlc2V0KCkge31cblxuICAvKipcbiAgICogUGxhY2UgY3VzdG9tIHByb3BlcnR5IGluaXRpYWxpemF0aW9uIGNvZGUgaW4gdGhpcyBtZXRob2QgaW4gdGhlIHN1YmNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IC0gZWl0aGVyIGFuIEVtaXR0ZXIgb3IgYSBQYXJ0aWNsZVxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIGluaXRpYWxpemUodGFyZ2V0KSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGluaXRpYWxpemVyIHJlcXVpcmVzIGEgV2ViIEdMIEFQSSB0byBiZSBwcm92aWRlZCB0byBpdHMgY29uc3RydWN0b3IuXG4gICAqIElmIHRydWUsIHRoZSBXZWJHTCBBUEkgd2lsbCBuZWVkIHRvIGJlIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3JcbiAgICogYW5kIGZyb21KU09OIG1ldGhvZHMuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgcmVxdWlyZXNXZWJHbEFwaSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaW5pdGlhbGl6ZXIgZnJvbSB0aGUgSlNPTiBvYmplY3QgcGFzc2VkLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSByZXF1aXJlZCBjb25zdHJ1Y3RvciBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm4ge0JlaGF2aW91cn1cbiAgICovXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG59XG4iXX0=
|
||||
@@ -0,0 +1,48 @@
|
||||
import { Euler } from '../core/three/';
|
||||
const particleEuler = new Euler();
|
||||
export default {
|
||||
particleEuler: null,
|
||||
|
||||
/**
|
||||
* Loops through the initializers array and calls each initializer's initialize method
|
||||
* on the supplied particle. This sets the particle's initial properties.
|
||||
*
|
||||
* @see {@link '../emitter/Emitter'} setupParticle
|
||||
* @param {Emitter} emitter - The emitter that has called this method
|
||||
* @param {Particle} particle - The particle that has just been created
|
||||
* @param {array<Initializer>} initializers - All of the emitter's initializers
|
||||
* @return void
|
||||
*/
|
||||
initialize: function (emitter, particle, initializers) {
|
||||
let i = initializers.length;
|
||||
|
||||
while (i--) {
|
||||
initializers[i].init(emitter, particle);
|
||||
}
|
||||
|
||||
emitter.bindEmitter && this.bindEmitter(emitter, particle);
|
||||
},
|
||||
|
||||
/**
|
||||
* Ensures that the emitter's position, velocity and accleration are added
|
||||
* to each created particle.
|
||||
*
|
||||
* @param {Emitter} emitter - The emitter that is emitting the particles
|
||||
* @param {Particle} particle - The newly created particle
|
||||
* @return void
|
||||
*/
|
||||
bindEmitter: function (emitter, particle) {
|
||||
const {
|
||||
rotation: {
|
||||
x,
|
||||
y,
|
||||
z
|
||||
}
|
||||
} = emitter;
|
||||
particle.position.add(emitter.position);
|
||||
particle.velocity.add(emitter.velocity);
|
||||
particle.acceleration.add(emitter.acceleration);
|
||||
particle.velocity.applyEuler(particleEuler.set(x, y, z));
|
||||
}
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9Jbml0aWFsaXplclV0aWwuanMiXSwibmFtZXMiOlsiRXVsZXIiLCJwYXJ0aWNsZUV1bGVyIiwiaW5pdGlhbGl6ZSIsImVtaXR0ZXIiLCJwYXJ0aWNsZSIsImluaXRpYWxpemVycyIsImkiLCJsZW5ndGgiLCJpbml0IiwiYmluZEVtaXR0ZXIiLCJyb3RhdGlvbiIsIngiLCJ5IiwieiIsInBvc2l0aW9uIiwiYWRkIiwidmVsb2NpdHkiLCJhY2NlbGVyYXRpb24iLCJhcHBseUV1bGVyIiwic2V0Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxLQUFULFFBQXNCLGdCQUF0QjtBQUVBLE1BQU1DLGFBQWEsR0FBRyxJQUFJRCxLQUFKLEVBQXRCO0FBRUEsZUFBZTtBQUNiQyxFQUFBQSxhQUFhLEVBQUUsSUFERjs7QUFFYjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFQyxFQUFBQSxVQUFVLEVBQUUsVUFBU0MsT0FBVCxFQUFrQkMsUUFBbEIsRUFBNEJDLFlBQTVCLEVBQTBDO0FBQ3BELFFBQUlDLENBQUMsR0FBR0QsWUFBWSxDQUFDRSxNQUFyQjs7QUFFQSxXQUFPRCxDQUFDLEVBQVIsRUFBWTtBQUNWRCxNQUFBQSxZQUFZLENBQUNDLENBQUQsQ0FBWixDQUFnQkUsSUFBaEIsQ0FBcUJMLE9BQXJCLEVBQThCQyxRQUE5QjtBQUNEOztBQUVERCxJQUFBQSxPQUFPLENBQUNNLFdBQVIsSUFBdUIsS0FBS0EsV0FBTCxDQUFpQk4sT0FBakIsRUFBMEJDLFFBQTFCLENBQXZCO0FBQ0QsR0FwQlk7O0FBc0JiO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRUssRUFBQUEsV0FBVyxFQUFFLFVBQVNOLE9BQVQsRUFBa0JDLFFBQWxCLEVBQTRCO0FBQ3ZDLFVBQU07QUFDSk0sTUFBQUEsUUFBUSxFQUFFO0FBQUVDLFFBQUFBLENBQUY7QUFBS0MsUUFBQUEsQ0FBTDtBQUFRQyxRQUFBQTtBQUFSO0FBRE4sUUFFRlYsT0FGSjtBQUlBQyxJQUFBQSxRQUFRLENBQUNVLFFBQVQsQ0FBa0JDLEdBQWxCLENBQXNCWixPQUFPLENBQUNXLFFBQTlCO0FBQ0FWLElBQUFBLFFBQVEsQ0FBQ1ksUUFBVCxDQUFrQkQsR0FBbEIsQ0FBc0JaLE9BQU8sQ0FBQ2EsUUFBOUI7QUFDQVosSUFBQUEsUUFBUSxDQUFDYSxZQUFULENBQXNCRixHQUF0QixDQUEwQlosT0FBTyxDQUFDYyxZQUFsQztBQUNBYixJQUFBQSxRQUFRLENBQUNZLFFBQVQsQ0FBa0JFLFVBQWxCLENBQTZCakIsYUFBYSxDQUFDa0IsR0FBZCxDQUFrQlIsQ0FBbEIsRUFBcUJDLENBQXJCLEVBQXdCQyxDQUF4QixDQUE3QjtBQUNEO0FBdkNZLENBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdWxlciB9IGZyb20gJy4uL2NvcmUvdGhyZWUvJztcblxuY29uc3QgcGFydGljbGVFdWxlciA9IG5ldyBFdWxlcigpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHBhcnRpY2xlRXVsZXI6IG51bGwsXG4gIC8qKlxuICAgKiBMb29wcyB0aHJvdWdoIHRoZSBpbml0aWFsaXplcnMgYXJyYXkgYW5kIGNhbGxzIGVhY2ggaW5pdGlhbGl6ZXIncyBpbml0aWFsaXplIG1ldGhvZFxuICAgKiBvbiB0aGUgc3VwcGxpZWQgcGFydGljbGUuIFRoaXMgc2V0cyB0aGUgcGFydGljbGUncyBpbml0aWFsIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rICcuLi9lbWl0dGVyL0VtaXR0ZXInfSBzZXR1cFBhcnRpY2xlXG4gICAqIEBwYXJhbSB7RW1pdHRlcn0gZW1pdHRlciAtIFRoZSBlbWl0dGVyIHRoYXQgaGFzIGNhbGxlZCB0aGlzIG1ldGhvZFxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSB0aGF0IGhhcyBqdXN0IGJlZW4gY3JlYXRlZFxuICAgKiBAcGFyYW0ge2FycmF5PEluaXRpYWxpemVyPn0gaW5pdGlhbGl6ZXJzIC0gQWxsIG9mIHRoZSBlbWl0dGVyJ3MgaW5pdGlhbGl6ZXJzXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZW1pdHRlciwgcGFydGljbGUsIGluaXRpYWxpemVycykge1xuICAgIGxldCBpID0gaW5pdGlhbGl6ZXJzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGluaXRpYWxpemVyc1tpXS5pbml0KGVtaXR0ZXIsIHBhcnRpY2xlKTtcbiAgICB9XG5cbiAgICBlbWl0dGVyLmJpbmRFbWl0dGVyICYmIHRoaXMuYmluZEVtaXR0ZXIoZW1pdHRlciwgcGFydGljbGUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoYXQgdGhlIGVtaXR0ZXIncyBwb3NpdGlvbiwgdmVsb2NpdHkgYW5kIGFjY2xlcmF0aW9uIGFyZSBhZGRlZFxuICAgKiB0byBlYWNoIGNyZWF0ZWQgcGFydGljbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RW1pdHRlcn0gZW1pdHRlciAtIFRoZSBlbWl0dGVyIHRoYXQgaXMgZW1pdHRpbmcgdGhlIHBhcnRpY2xlc1xuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBuZXdseSBjcmVhdGVkIHBhcnRpY2xlXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgYmluZEVtaXR0ZXI6IGZ1bmN0aW9uKGVtaXR0ZXIsIHBhcnRpY2xlKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm90YXRpb246IHsgeCwgeSwgeiB9LFxuICAgIH0gPSBlbWl0dGVyO1xuXG4gICAgcGFydGljbGUucG9zaXRpb24uYWRkKGVtaXR0ZXIucG9zaXRpb24pO1xuICAgIHBhcnRpY2xlLnZlbG9jaXR5LmFkZChlbWl0dGVyLnZlbG9jaXR5KTtcbiAgICBwYXJ0aWNsZS5hY2NlbGVyYXRpb24uYWRkKGVtaXR0ZXIuYWNjZWxlcmF0aW9uKTtcbiAgICBwYXJ0aWNsZS52ZWxvY2l0eS5hcHBseUV1bGVyKHBhcnRpY2xlRXVsZXIuc2V0KHgsIHksIHopKTtcbiAgfSxcbn07XG4iXX0=
|
||||
@@ -0,0 +1,66 @@
|
||||
import Initializer from './Initializer';
|
||||
import { createSpan } from '../math';
|
||||
import { INITIALIZER_TYPE_LIFE as type } from './types';
|
||||
/**
|
||||
* Sets the life property on initialized particles.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class Life extends Initializer {
|
||||
/**
|
||||
* Constructs a Life property instance.
|
||||
*
|
||||
* @param {number} min - The minimum life
|
||||
* @param {number} max - The maximum life
|
||||
* @param {boolean} [center] - Determines whether to average the life value
|
||||
* @param {boolean} [isEnabled=true] - Determines if the initializer should be enabled or not
|
||||
* @return void
|
||||
*/
|
||||
constructor(min, max, center, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
/**
|
||||
* @desc The life span of the particle.
|
||||
* @type {Span}
|
||||
*/
|
||||
|
||||
this.lifePan = createSpan(min, max, center);
|
||||
}
|
||||
/**
|
||||
* Sets the particle's initial life.
|
||||
*
|
||||
* @param {Particle} particle - the particle to initialize the property on
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
initialize(particle) {
|
||||
if (this.lifePan.a == Infinity || this.lifePan.a == 'infi') {
|
||||
particle.life = Infinity;
|
||||
} else {
|
||||
particle.life = this.lifePan.getValue();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Creates a Life initializer from JSON.
|
||||
*
|
||||
* @param {object} json - The JSON to construct the instance from.
|
||||
* @param {number} json.min - The minimum life time
|
||||
* @param {number} json.max - The maximum life time
|
||||
* @param {number} json.center - The center of the life time
|
||||
* @param {boolean} [json.isEnabled=true] - Determines if the initializer should be enabled or not
|
||||
* @return {Life}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
min,
|
||||
max,
|
||||
center = false,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new Life(min, max, center, isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9MaWZlLmpzIl0sIm5hbWVzIjpbIkluaXRpYWxpemVyIiwiY3JlYXRlU3BhbiIsIklOSVRJQUxJWkVSX1RZUEVfTElGRSIsInR5cGUiLCJMaWZlIiwiY29uc3RydWN0b3IiLCJtaW4iLCJtYXgiLCJjZW50ZXIiLCJpc0VuYWJsZWQiLCJsaWZlUGFuIiwiaW5pdGlhbGl6ZSIsInBhcnRpY2xlIiwiYSIsIkluZmluaXR5IiwibGlmZSIsImdldFZhbHVlIiwiZnJvbUpTT04iLCJqc29uIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFQLE1BQXdCLGVBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixTQUEzQjtBQUNBLFNBQVNDLHFCQUFxQixJQUFJQyxJQUFsQyxRQUE4QyxTQUE5QztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsSUFBTixTQUFtQkosV0FBbkIsQ0FBK0I7QUFDNUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0VLLEVBQUFBLFdBQVcsQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLEVBQVdDLE1BQVgsRUFBbUJDLFNBQVMsR0FBRyxJQUEvQixFQUFxQztBQUM5QyxVQUFNTixJQUFOLEVBQVlNLFNBQVo7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxPQUFMLEdBQWVULFVBQVUsQ0FBQ0ssR0FBRCxFQUFNQyxHQUFOLEVBQVdDLE1BQVgsQ0FBekI7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0VHLEVBQUFBLFVBQVUsQ0FBQ0MsUUFBRCxFQUFXO0FBQ25CLFFBQUksS0FBS0YsT0FBTCxDQUFhRyxDQUFiLElBQWtCQyxRQUFsQixJQUE4QixLQUFLSixPQUFMLENBQWFHLENBQWIsSUFBa0IsTUFBcEQsRUFBNEQ7QUFDMURELE1BQUFBLFFBQVEsQ0FBQ0csSUFBVCxHQUFnQkQsUUFBaEI7QUFDRCxLQUZELE1BRU87QUFDTEYsTUFBQUEsUUFBUSxDQUFDRyxJQUFULEdBQWdCLEtBQUtMLE9BQUwsQ0FBYU0sUUFBYixFQUFoQjtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ2lCLFNBQVJDLFFBQVEsQ0FBQ0MsSUFBRCxFQUFPO0FBQ3BCLFVBQU07QUFBRVosTUFBQUEsR0FBRjtBQUFPQyxNQUFBQSxHQUFQO0FBQVlDLE1BQUFBLE1BQU0sR0FBRyxLQUFyQjtBQUE0QkMsTUFBQUEsU0FBUyxHQUFHO0FBQXhDLFFBQWlEUyxJQUF2RDtBQUVBLFdBQU8sSUFBSWQsSUFBSixDQUFTRSxHQUFULEVBQWNDLEdBQWQsRUFBbUJDLE1BQW5CLEVBQTJCQyxTQUEzQixDQUFQO0FBQ0Q7O0FBaEQyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJbml0aWFsaXplciBmcm9tICcuL0luaXRpYWxpemVyJztcbmltcG9ydCB7IGNyZWF0ZVNwYW4gfSBmcm9tICcuLi9tYXRoJztcbmltcG9ydCB7IElOSVRJQUxJWkVSX1RZUEVfTElGRSBhcyB0eXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlmZSBwcm9wZXJ0eSBvbiBpbml0aWFsaXplZCBwYXJ0aWNsZXMuXG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaWZlIGV4dGVuZHMgSW5pdGlhbGl6ZXIge1xuICAvKipcbiAgICogQ29uc3RydWN0cyBhIExpZmUgcHJvcGVydHkgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSBsaWZlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXggLSBUaGUgbWF4aW11bSBsaWZlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NlbnRlcl0gLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYXZlcmFnZSB0aGUgbGlmZSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0VuYWJsZWQ9dHJ1ZV0gLSBEZXRlcm1pbmVzIGlmIHRoZSBpbml0aWFsaXplciBzaG91bGQgYmUgZW5hYmxlZCBvciBub3RcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtaW4sIG1heCwgY2VudGVyLCBpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgc3VwZXIodHlwZSwgaXNFbmFibGVkKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBsaWZlIHNwYW4gb2YgdGhlIHBhcnRpY2xlLlxuICAgICAqIEB0eXBlIHtTcGFufVxuICAgICAqL1xuICAgIHRoaXMubGlmZVBhbiA9IGNyZWF0ZVNwYW4obWluLCBtYXgsIGNlbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGFydGljbGUncyBpbml0aWFsIGxpZmUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gdGhlIHBhcnRpY2xlIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgaW5pdGlhbGl6ZShwYXJ0aWNsZSkge1xuICAgIGlmICh0aGlzLmxpZmVQYW4uYSA9PSBJbmZpbml0eSB8fCB0aGlzLmxpZmVQYW4uYSA9PSAnaW5maScpIHtcbiAgICAgIHBhcnRpY2xlLmxpZmUgPSBJbmZpbml0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGljbGUubGlmZSA9IHRoaXMubGlmZVBhbi5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgTGlmZSBpbml0aWFsaXplciBmcm9tIEpTT04uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gVGhlIEpTT04gdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZSBmcm9tLlxuICAgKiBAcGFyYW0ge251bWJlcn0ganNvbi5taW4gLSBUaGUgbWluaW11bSBsaWZlIHRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGpzb24ubWF4IC0gVGhlIG1heGltdW0gbGlmZSB0aW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqc29uLmNlbnRlciAtIFRoZSBjZW50ZXIgb2YgdGhlIGxpZmUgdGltZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtqc29uLmlzRW5hYmxlZD10cnVlXSAtIERldGVybWluZXMgaWYgdGhlIGluaXRpYWxpemVyIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdFxuICAgKiBAcmV0dXJuIHtMaWZlfVxuICAgKi9cbiAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcbiAgICBjb25zdCB7IG1pbiwgbWF4LCBjZW50ZXIgPSBmYWxzZSwgaXNFbmFibGVkID0gdHJ1ZSB9ID0ganNvbjtcblxuICAgIHJldHVybiBuZXcgTGlmZShtaW4sIG1heCwgY2VudGVyLCBpc0VuYWJsZWQpO1xuICB9XG59XG4iXX0=
|
||||
@@ -0,0 +1,60 @@
|
||||
import Initializer from './Initializer';
|
||||
import { createSpan } from '../math';
|
||||
import { INITIALIZER_TYPE_MASS as type } from './types';
|
||||
/**
|
||||
* Sets the mass property on initialized particles.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class Mass extends Initializer {
|
||||
/**
|
||||
* Constructs a Mass initializer instance.
|
||||
*
|
||||
* @param {number} min - The minumum mass for the particle
|
||||
* @param {number} max - The maximum mass for the particle
|
||||
* @param {boolean} [center] - Determines whether to average the mass value
|
||||
* @return void
|
||||
*/
|
||||
constructor(min, max, center = false, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
/**
|
||||
* @desc The mass span which is used to set the particle mass value.
|
||||
* @type {Span}
|
||||
*/
|
||||
|
||||
this.massPan = createSpan(min, max, center);
|
||||
}
|
||||
/**
|
||||
* Sets the particle's initial mass.
|
||||
*
|
||||
* @param {Particle} particle - the particle to initialize the property on
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
initialize(particle) {
|
||||
particle.mass = this.massPan.getValue();
|
||||
}
|
||||
/**
|
||||
* Creates a Mass initializer from JSON.
|
||||
*
|
||||
* @param {object} json - The JSON to construct the instance from.
|
||||
* @property {number} json.min - The minimum mass
|
||||
* @property {number} json.max - The maximum mass
|
||||
* @property {number} json.center - The center of the mass
|
||||
* @return {Mass}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
min,
|
||||
max,
|
||||
center = false,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new Mass(min, max, center, isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9NYXNzLmpzIl0sIm5hbWVzIjpbIkluaXRpYWxpemVyIiwiY3JlYXRlU3BhbiIsIklOSVRJQUxJWkVSX1RZUEVfTUFTUyIsInR5cGUiLCJNYXNzIiwiY29uc3RydWN0b3IiLCJtaW4iLCJtYXgiLCJjZW50ZXIiLCJpc0VuYWJsZWQiLCJtYXNzUGFuIiwiaW5pdGlhbGl6ZSIsInBhcnRpY2xlIiwibWFzcyIsImdldFZhbHVlIiwiZnJvbUpTT04iLCJqc29uIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFQLE1BQXdCLGVBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixTQUEzQjtBQUNBLFNBQVNDLHFCQUFxQixJQUFJQyxJQUFsQyxRQUE4QyxTQUE5QztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsSUFBTixTQUFtQkosV0FBbkIsQ0FBK0I7QUFDNUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFSyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFXQyxNQUFNLEdBQUcsS0FBcEIsRUFBMkJDLFNBQVMsR0FBRyxJQUF2QyxFQUE2QztBQUN0RCxVQUFNTixJQUFOLEVBQVlNLFNBQVo7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxPQUFMLEdBQWVULFVBQVUsQ0FBQ0ssR0FBRCxFQUFNQyxHQUFOLEVBQVdDLE1BQVgsQ0FBekI7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0VHLEVBQUFBLFVBQVUsQ0FBQ0MsUUFBRCxFQUFXO0FBQ25CQSxJQUFBQSxRQUFRLENBQUNDLElBQVQsR0FBZ0IsS0FBS0gsT0FBTCxDQUFhSSxRQUFiLEVBQWhCO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNpQixTQUFSQyxRQUFRLENBQUNDLElBQUQsRUFBTztBQUNwQixVQUFNO0FBQUVWLE1BQUFBLEdBQUY7QUFBT0MsTUFBQUEsR0FBUDtBQUFZQyxNQUFBQSxNQUFNLEdBQUcsS0FBckI7QUFBNEJDLE1BQUFBLFNBQVMsR0FBRztBQUF4QyxRQUFpRE8sSUFBdkQ7QUFFQSxXQUFPLElBQUlaLElBQUosQ0FBU0UsR0FBVCxFQUFjQyxHQUFkLEVBQW1CQyxNQUFuQixFQUEyQkMsU0FBM0IsQ0FBUDtBQUNEOztBQTFDMkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSW5pdGlhbGl6ZXIgZnJvbSAnLi9Jbml0aWFsaXplcic7XG5pbXBvcnQgeyBjcmVhdGVTcGFuIH0gZnJvbSAnLi4vbWF0aCc7XG5pbXBvcnQgeyBJTklUSUFMSVpFUl9UWVBFX01BU1MgYXMgdHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hc3MgcHJvcGVydHkgb24gaW5pdGlhbGl6ZWQgcGFydGljbGVzLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFzcyBleHRlbmRzIEluaXRpYWxpemVyIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBNYXNzIGluaXRpYWxpemVyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWluIC0gVGhlIG1pbnVtdW0gbWFzcyBmb3IgdGhlIHBhcnRpY2xlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXggLSBUaGUgbWF4aW11bSBtYXNzIGZvciB0aGUgcGFydGljbGVcbiAgICogQHBhcmFtIHtib29sZWFufSBbY2VudGVyXSAtIERldGVybWluZXMgd2hldGhlciB0byBhdmVyYWdlIHRoZSBtYXNzIHZhbHVlXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgY29uc3RydWN0b3IobWluLCBtYXgsIGNlbnRlciA9IGZhbHNlLCBpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgc3VwZXIodHlwZSwgaXNFbmFibGVkKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBtYXNzIHNwYW4gd2hpY2ggaXMgdXNlZCB0byBzZXQgdGhlIHBhcnRpY2xlIG1hc3MgdmFsdWUuXG4gICAgICogQHR5cGUge1NwYW59XG4gICAgICovXG4gICAgdGhpcy5tYXNzUGFuID0gY3JlYXRlU3BhbihtaW4sIG1heCwgY2VudGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwYXJ0aWNsZSdzIGluaXRpYWwgbWFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSB0aGUgcGFydGljbGUgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb25cbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBpbml0aWFsaXplKHBhcnRpY2xlKSB7XG4gICAgcGFydGljbGUubWFzcyA9IHRoaXMubWFzc1Bhbi5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBNYXNzIGluaXRpYWxpemVyIGZyb20gSlNPTi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBUaGUgSlNPTiB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlIGZyb20uXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBqc29uLm1pbiAtIFRoZSBtaW5pbXVtIG1hc3NcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGpzb24ubWF4IC0gVGhlIG1heGltdW0gbWFzc1xuICAgKiBAcHJvcGVydHkge251bWJlcn0ganNvbi5jZW50ZXIgLSBUaGUgY2VudGVyIG9mIHRoZSBtYXNzXG4gICAqIEByZXR1cm4ge01hc3N9XG4gICAqL1xuICBzdGF0aWMgZnJvbUpTT04oanNvbikge1xuICAgIGNvbnN0IHsgbWluLCBtYXgsIGNlbnRlciA9IGZhbHNlLCBpc0VuYWJsZWQgPSB0cnVlIH0gPSBqc29uO1xuXG4gICAgcmV0dXJuIG5ldyBNYXNzKG1pbiwgbWF4LCBjZW50ZXIsIGlzRW5hYmxlZCk7XG4gIH1cbn1cbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,75 @@
|
||||
import Initializer from './Initializer';
|
||||
import { createSpan } from '../math';
|
||||
import { INITIALIZER_TYPE_RADIUS as type } from './types';
|
||||
/**
|
||||
* Sets the radius property on initialized particles.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class Radius extends Initializer {
|
||||
/**
|
||||
* Constructs a Radius initializer instance.
|
||||
*
|
||||
* @param {number} width - The width of the particle radius
|
||||
* @param {number} height - The height of the particle radius
|
||||
* @param {boolean} [center=false] - Determines whether to average the radius value
|
||||
* @return void
|
||||
*/
|
||||
constructor(width, height, center = false, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
/**
|
||||
* @desc The radius span which is used to set the particle radius value.
|
||||
* @type {Span}
|
||||
*/
|
||||
|
||||
this.radius = createSpan(width, height, center);
|
||||
}
|
||||
/**
|
||||
* Resets the initializer properties.
|
||||
* Clears all previously set zones and resets the zones according to args passed.
|
||||
*
|
||||
* @param {number} width - The width of the particle radius
|
||||
* @param {number} height - The height of the particle radius
|
||||
* @param {boolean} [center=false] - Determines whether to average the radius value
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
reset(width, height, center = false) {
|
||||
this.radius = createSpan(width, height, center);
|
||||
}
|
||||
/**
|
||||
* Sets the particle's initial radius.
|
||||
*
|
||||
* @param {Particle} particle - the particle to initialize the property on
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
initialize(particle) {
|
||||
particle.radius = this.radius.getValue();
|
||||
particle.transform.oldRadius = particle.radius;
|
||||
}
|
||||
/**
|
||||
* Creates a Radius initializer from JSON.
|
||||
*
|
||||
* @param {object} json - The JSON to construct the instance from.
|
||||
* @property {number} json.width - The width of the particle radius
|
||||
* @property {number} json.height - The height of the particle radius
|
||||
* @property {number} json.center - The center of the particle radius
|
||||
* @return {Radius}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
width,
|
||||
height,
|
||||
center = false,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new Radius(width, height, center, isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9SYWRpdXMuanMiXSwibmFtZXMiOlsiSW5pdGlhbGl6ZXIiLCJjcmVhdGVTcGFuIiwiSU5JVElBTElaRVJfVFlQRV9SQURJVVMiLCJ0eXBlIiwiUmFkaXVzIiwiY29uc3RydWN0b3IiLCJ3aWR0aCIsImhlaWdodCIsImNlbnRlciIsImlzRW5hYmxlZCIsInJhZGl1cyIsInJlc2V0IiwiaW5pdGlhbGl6ZSIsInBhcnRpY2xlIiwiZ2V0VmFsdWUiLCJ0cmFuc2Zvcm0iLCJvbGRSYWRpdXMiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVAsTUFBd0IsZUFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLFNBQTNCO0FBQ0EsU0FBU0MsdUJBQXVCLElBQUlDLElBQXBDLFFBQWdELFNBQWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsZUFBZSxNQUFNQyxNQUFOLFNBQXFCSixXQUFyQixDQUFpQztBQUM5QztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0VLLEVBQUFBLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxNQUFNLEdBQUcsS0FBekIsRUFBZ0NDLFNBQVMsR0FBRyxJQUE1QyxFQUFrRDtBQUMzRCxVQUFNTixJQUFOLEVBQVlNLFNBQVo7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxNQUFMLEdBQWNULFVBQVUsQ0FBQ0ssS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxNQUFoQixDQUF4QjtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRUcsRUFBQUEsS0FBSyxDQUFDTCxLQUFELEVBQVFDLE1BQVIsRUFBZ0JDLE1BQU0sR0FBRyxLQUF6QixFQUFnQztBQUNuQyxTQUFLRSxNQUFMLEdBQWNULFVBQVUsQ0FBQ0ssS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxNQUFoQixDQUF4QjtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRUksRUFBQUEsVUFBVSxDQUFDQyxRQUFELEVBQVc7QUFDbkJBLElBQUFBLFFBQVEsQ0FBQ0gsTUFBVCxHQUFrQixLQUFLQSxNQUFMLENBQVlJLFFBQVosRUFBbEI7QUFDQUQsSUFBQUEsUUFBUSxDQUFDRSxTQUFULENBQW1CQyxTQUFuQixHQUErQkgsUUFBUSxDQUFDSCxNQUF4QztBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDaUIsU0FBUk8sUUFBUSxDQUFDQyxJQUFELEVBQU87QUFDcEIsVUFBTTtBQUFFWixNQUFBQSxLQUFGO0FBQVNDLE1BQUFBLE1BQVQ7QUFBaUJDLE1BQUFBLE1BQU0sR0FBRyxLQUExQjtBQUFpQ0MsTUFBQUEsU0FBUyxHQUFHO0FBQTdDLFFBQXNEUyxJQUE1RDtBQUVBLFdBQU8sSUFBSWQsTUFBSixDQUFXRSxLQUFYLEVBQWtCQyxNQUFsQixFQUEwQkMsTUFBMUIsRUFBa0NDLFNBQWxDLENBQVA7QUFDRDs7QUF4RDZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEluaXRpYWxpemVyIGZyb20gJy4vSW5pdGlhbGl6ZXInO1xuaW1wb3J0IHsgY3JlYXRlU3BhbiB9IGZyb20gJy4uL21hdGgnO1xuaW1wb3J0IHsgSU5JVElBTElaRVJfVFlQRV9SQURJVVMgYXMgdHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuLyoqXG4gKiBTZXRzIHRoZSByYWRpdXMgcHJvcGVydHkgb24gaW5pdGlhbGl6ZWQgcGFydGljbGVzLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFkaXVzIGV4dGVuZHMgSW5pdGlhbGl6ZXIge1xuICAvKipcbiAgICogQ29uc3RydWN0cyBhIFJhZGl1cyBpbml0aWFsaXplciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBwYXJ0aWNsZSByYWRpdXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHBhcnRpY2xlIHJhZGl1c1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjZW50ZXI9ZmFsc2VdIC0gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGF2ZXJhZ2UgdGhlIHJhZGl1cyB2YWx1ZVxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIGNlbnRlciA9IGZhbHNlLCBpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgc3VwZXIodHlwZSwgaXNFbmFibGVkKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSByYWRpdXMgc3BhbiB3aGljaCBpcyB1c2VkIHRvIHNldCB0aGUgcGFydGljbGUgcmFkaXVzIHZhbHVlLlxuICAgICAqIEB0eXBlIHtTcGFufVxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gY3JlYXRlU3Bhbih3aWR0aCwgaGVpZ2h0LCBjZW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgaW5pdGlhbGl6ZXIgcHJvcGVydGllcy5cbiAgICogQ2xlYXJzIGFsbCBwcmV2aW91c2x5IHNldCB6b25lcyBhbmQgcmVzZXRzIHRoZSB6b25lcyBhY2NvcmRpbmcgdG8gYXJncyBwYXNzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcGFydGljbGUgcmFkaXVzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBwYXJ0aWNsZSByYWRpdXNcbiAgICogQHBhcmFtIHtib29sZWFufSBbY2VudGVyPWZhbHNlXSAtIERldGVybWluZXMgd2hldGhlciB0byBhdmVyYWdlIHRoZSByYWRpdXMgdmFsdWVcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICByZXNldCh3aWR0aCwgaGVpZ2h0LCBjZW50ZXIgPSBmYWxzZSkge1xuICAgIHRoaXMucmFkaXVzID0gY3JlYXRlU3Bhbih3aWR0aCwgaGVpZ2h0LCBjZW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcnRpY2xlJ3MgaW5pdGlhbCByYWRpdXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gdGhlIHBhcnRpY2xlIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgaW5pdGlhbGl6ZShwYXJ0aWNsZSkge1xuICAgIHBhcnRpY2xlLnJhZGl1cyA9IHRoaXMucmFkaXVzLmdldFZhbHVlKCk7XG4gICAgcGFydGljbGUudHJhbnNmb3JtLm9sZFJhZGl1cyA9IHBhcnRpY2xlLnJhZGl1cztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgUmFkaXVzIGluaXRpYWxpemVyIGZyb20gSlNPTi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBUaGUgSlNPTiB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlIGZyb20uXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBqc29uLndpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBwYXJ0aWNsZSByYWRpdXNcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGpzb24uaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgcGFydGljbGUgcmFkaXVzXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBqc29uLmNlbnRlciAtIFRoZSBjZW50ZXIgb2YgdGhlIHBhcnRpY2xlIHJhZGl1c1xuICAgKiBAcmV0dXJuIHtSYWRpdXN9XG4gICAqL1xuICBzdGF0aWMgZnJvbUpTT04oanNvbikge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgY2VudGVyID0gZmFsc2UsIGlzRW5hYmxlZCA9IHRydWUgfSA9IGpzb247XG5cbiAgICByZXR1cm4gbmV3IFJhZGl1cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXIsIGlzRW5hYmxlZCk7XG4gIH1cbn1cbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,54 @@
|
||||
import { Vector3 } from '../core/three';
|
||||
import Initializer from './Initializer';
|
||||
import { INITIALIZER_TYPE_ROTATION as type } from './types';
|
||||
/**
|
||||
* Sets the rotation property on initialized particles.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class Rotation extends Initializer {
|
||||
/**
|
||||
* Constructs a Rotation property instance.
|
||||
*
|
||||
* @param {number} x - X axis rotation
|
||||
* @param {number} y - Y axis rotation
|
||||
* @param {number} z - Z axis rotation
|
||||
* @param {boolean} [useEmitterRotation=true] - Determines if we should use the emitter's rotation as the starting rotation
|
||||
* @param {boolean} [isEnabled=true] - Determines if the initializer should be enabled or not
|
||||
* @return void
|
||||
*/
|
||||
constructor(x, y, z, useEmitterRotation = true, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
this.rotation = new Vector3(x, y, z);
|
||||
this.useEmitterRotation = useEmitterRotation;
|
||||
}
|
||||
/**
|
||||
* Sets the particle's initial rotation.
|
||||
*
|
||||
* @param {Particle} particle - the particle to initialize the property on
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
initialize(particle) {
|
||||
if (this.useEmitterRotation && particle.parent) {
|
||||
// set initial particle rotation to that of the particle's emitter then add our set rotation
|
||||
particle.rotation.copy(particle.parent.rotation).add(this.rotation);
|
||||
} else {
|
||||
particle.rotation.copy(this.rotation);
|
||||
}
|
||||
}
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
x,
|
||||
y,
|
||||
z,
|
||||
useEmitterRotation = true,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new Rotation(x, y, z, useEmitterRotation, isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9Sb3RhdGlvbi5qcyJdLCJuYW1lcyI6WyJWZWN0b3IzIiwiSW5pdGlhbGl6ZXIiLCJJTklUSUFMSVpFUl9UWVBFX1JPVEFUSU9OIiwidHlwZSIsIlJvdGF0aW9uIiwiY29uc3RydWN0b3IiLCJ4IiwieSIsInoiLCJ1c2VFbWl0dGVyUm90YXRpb24iLCJpc0VuYWJsZWQiLCJyb3RhdGlvbiIsImluaXRpYWxpemUiLCJwYXJ0aWNsZSIsImNvcHkiLCJwYXJlbnQiLCJhZGQiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQVQsUUFBd0IsZUFBeEI7QUFDQSxPQUFPQyxXQUFQLE1BQXdCLGVBQXhCO0FBQ0EsU0FBU0MseUJBQXlCLElBQUlDLElBQXRDLFFBQWtELFNBQWxEO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsZUFBZSxNQUFNQyxRQUFOLFNBQXVCSCxXQUF2QixDQUFtQztBQUNoRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFSSxFQUFBQSxXQUFXLENBQUNDLENBQUQsRUFBSUMsQ0FBSixFQUFPQyxDQUFQLEVBQVVDLGtCQUFrQixHQUFDLElBQTdCLEVBQW1DQyxTQUFTLEdBQUcsSUFBL0MsRUFBcUQ7QUFDOUQsVUFBTVAsSUFBTixFQUFZTyxTQUFaO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFJWCxPQUFKLENBQVlNLENBQVosRUFBY0MsQ0FBZCxFQUFnQkMsQ0FBaEIsQ0FBaEI7QUFDQSxTQUFLQyxrQkFBTCxHQUEwQkEsa0JBQTFCO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFRyxFQUFBQSxVQUFVLENBQUNDLFFBQUQsRUFBVztBQUNuQixRQUFHLEtBQUtKLGtCQUFSLEVBQ0E7QUFDRTtBQUNBSSxNQUFBQSxRQUFRLENBQUNGLFFBQVQsQ0FBa0JHLElBQWxCLENBQXVCRCxRQUFRLENBQUNFLE1BQVQsQ0FBZ0JKLFFBQXZDLEVBQWlESyxHQUFqRCxDQUFxRCxLQUFLTCxRQUExRDtBQUNELEtBSkQsTUFNQTtBQUNFRSxNQUFBQSxRQUFRLENBQUNGLFFBQVQsQ0FBa0JHLElBQWxCLENBQXVCLEtBQUtILFFBQTVCO0FBQ0Q7QUFDRjs7QUFFYyxTQUFSTSxRQUFRLENBQUNDLElBQUQsRUFBTztBQUNwQixVQUFNO0FBQUVaLE1BQUFBLENBQUY7QUFBS0MsTUFBQUEsQ0FBTDtBQUFRQyxNQUFBQSxDQUFSO0FBQVdDLE1BQUFBLGtCQUFrQixHQUFHLElBQWhDO0FBQXNDQyxNQUFBQSxTQUFTLEdBQUc7QUFBbEQsUUFBMkRRLElBQWpFO0FBRUEsV0FBTyxJQUFJZCxRQUFKLENBQWFFLENBQWIsRUFBZ0JDLENBQWhCLEVBQW1CQyxDQUFuQixFQUFzQkMsa0JBQXRCLEVBQTBDQyxTQUExQyxDQUFQO0FBQ0Q7O0FBdkMrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuLi9jb3JlL3RocmVlJztcbmltcG9ydCBJbml0aWFsaXplciBmcm9tICcuL0luaXRpYWxpemVyJztcbmltcG9ydCB7IElOSVRJQUxJWkVSX1RZUEVfUk9UQVRJT04gYXMgdHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNldHMgdGhlIHJvdGF0aW9uIHByb3BlcnR5IG9uIGluaXRpYWxpemVkIHBhcnRpY2xlcy5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdGF0aW9uIGV4dGVuZHMgSW5pdGlhbGl6ZXIge1xuICAvKipcbiAgICogQ29uc3RydWN0cyBhIFJvdGF0aW9uIHByb3BlcnR5IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFggYXhpcyByb3RhdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFkgYXhpcyByb3RhdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFogYXhpcyByb3RhdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1c2VFbWl0dGVyUm90YXRpb249dHJ1ZV0gLSBEZXRlcm1pbmVzIGlmIHdlIHNob3VsZCB1c2UgdGhlIGVtaXR0ZXIncyByb3RhdGlvbiBhcyB0aGUgc3RhcnRpbmcgcm90YXRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbaXNFbmFibGVkPXRydWVdIC0gRGV0ZXJtaW5lcyBpZiB0aGUgaW5pdGlhbGl6ZXIgc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90XG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgY29uc3RydWN0b3IoeCwgeSwgeiwgdXNlRW1pdHRlclJvdGF0aW9uPXRydWUsIGlzRW5hYmxlZCA9IHRydWUpIHtcbiAgICBzdXBlcih0eXBlLCBpc0VuYWJsZWQpO1xuICAgIHRoaXMucm90YXRpb24gPSBuZXcgVmVjdG9yMyh4LHkseik7XG4gICAgdGhpcy51c2VFbWl0dGVyUm90YXRpb24gPSB1c2VFbWl0dGVyUm90YXRpb247XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGFydGljbGUncyBpbml0aWFsIHJvdGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIHRoZSBwYXJ0aWNsZSB0byBpbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvblxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGluaXRpYWxpemUocGFydGljbGUpIHtcbiAgICBpZih0aGlzLnVzZUVtaXR0ZXJSb3RhdGlvbilcbiAgICB7XG4gICAgICAvLyBzZXQgaW5pdGlhbCBwYXJ0aWNsZSByb3RhdGlvbiB0byB0aGF0IG9mIHRoZSBwYXJ0aWNsZSdzIGVtaXR0ZXIgdGhlbiBhZGQgb3VyIHNldCByb3RhdGlvblxuICAgICAgcGFydGljbGUucm90YXRpb24uY29weShwYXJ0aWNsZS5wYXJlbnQucm90YXRpb24pLmFkZCh0aGlzLnJvdGF0aW9uKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIHBhcnRpY2xlLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcbiAgICBjb25zdCB7IHgsIHksIHosIHVzZUVtaXR0ZXJSb3RhdGlvbiA9IHRydWUsIGlzRW5hYmxlZCA9IHRydWUgfSA9IGpzb247XG5cbiAgICByZXR1cm4gbmV3IFJvdGF0aW9uKHgsIHksIHosIHVzZUVtaXR0ZXJSb3RhdGlvbiwgaXNFbmFibGVkKTtcbiAgfVxufSJdfQ==
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,65 @@
|
||||
import { DR } from '../../constants';
|
||||
import { Polar3D } from '../../math';
|
||||
import Velocity from './Velocity';
|
||||
import { INITIALIZER_TYPE_POLAR_VELOCITY as type } from '../types';
|
||||
/**
|
||||
* Sets the velocity property on initialized particles.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class PolarVelocity extends Velocity {
|
||||
/**
|
||||
* Constructs a PolarVelocity initializer.
|
||||
*
|
||||
* @param {Polar3D} polar3d - The polar vector for the velocity
|
||||
* @param {number} theta - The theta angle to use
|
||||
* @return void
|
||||
*/
|
||||
constructor(polar3d, theta, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
/**
|
||||
* @desc Theta.
|
||||
* @type {number}
|
||||
*/
|
||||
|
||||
this.tha = theta * DR;
|
||||
|
||||
this._polar = polar3d;
|
||||
/**
|
||||
* @desc Directional vector
|
||||
* @type {Vector3D}
|
||||
*/
|
||||
|
||||
this.dirVec = this._polar.toVector3D();
|
||||
/**
|
||||
* @desc Determines whether to use the directional vector or not.
|
||||
* @type {boolean}
|
||||
*/
|
||||
|
||||
this._useV = false;
|
||||
}
|
||||
/**
|
||||
* Creates a PolarVelocity initializer from JSON.
|
||||
*
|
||||
* @param {object} json - The JSON to construct the instance from.
|
||||
* @param {number} json.polarRadius - The Polar3D radius
|
||||
* @param {number} json.polarTheta - The Polar3D theta
|
||||
* @param {number} json.polarPhi - The Polar3D phi
|
||||
* @param {number} json.velocityTheta - The velocity theta
|
||||
* @return {PolarVelocity}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
polarRadius,
|
||||
polarTheta,
|
||||
polarPhi,
|
||||
velocityTheta,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new PolarVelocity(new Polar3D(polarRadius, polarTheta, polarPhi), velocityTheta, isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9WZWxvY2l0eS9Qb2xhclZlbG9jaXR5LmpzIl0sIm5hbWVzIjpbIkRSIiwiUG9sYXIzRCIsIlZlbG9jaXR5IiwiSU5JVElBTElaRVJfVFlQRV9QT0xBUl9WRUxPQ0lUWSIsInR5cGUiLCJQb2xhclZlbG9jaXR5IiwiY29uc3RydWN0b3IiLCJwb2xhcjNkIiwidGhldGEiLCJpc0VuYWJsZWQiLCJ0aGEiLCJkaXJWZWMiLCJ0b1ZlY3RvcjNEIiwiX3VzZVYiLCJmcm9tSlNPTiIsImpzb24iLCJwb2xhclJhZGl1cyIsInBvbGFyVGhldGEiLCJwb2xhclBoaSIsInZlbG9jaXR5VGhldGEiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLEVBQVQsUUFBbUIsaUJBQW5CO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixZQUF4QjtBQUNBLE9BQU9DLFFBQVAsTUFBcUIsWUFBckI7QUFDQSxTQUFTQywrQkFBK0IsSUFBSUMsSUFBNUMsUUFBd0QsVUFBeEQ7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxlQUFlLE1BQU1DLGFBQU4sU0FBNEJILFFBQTVCLENBQXFDO0FBQ2xEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0VJLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxLQUFWLEVBQWlCQyxTQUFTLEdBQUcsSUFBN0IsRUFBbUM7QUFDNUMsVUFBTUwsSUFBTixFQUFZSyxTQUFaO0FBRUE7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksU0FBS0MsR0FBTCxHQUFXRixLQUFLLEdBQUdSLEVBQW5CO0FBRUE7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksU0FBS1csTUFBTCxHQUFjSixPQUFPLENBQUNLLFVBQVIsRUFBZDtBQUVBO0FBQ0o7QUFDQTtBQUNBOztBQUNJLFNBQUtDLEtBQUwsR0FBYSxLQUFiO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ2lCLFNBQVJDLFFBQVEsQ0FBQ0MsSUFBRCxFQUFPO0FBQ3BCLFVBQU07QUFDSkMsTUFBQUEsV0FESTtBQUVKQyxNQUFBQSxVQUZJO0FBR0pDLE1BQUFBLFFBSEk7QUFJSkMsTUFBQUEsYUFKSTtBQUtKVixNQUFBQSxTQUFTLEdBQUc7QUFMUixRQU1GTSxJQU5KO0FBUUEsV0FBTyxJQUFJVixhQUFKLENBQ0wsSUFBSUosT0FBSixDQUFZZSxXQUFaLEVBQXlCQyxVQUF6QixFQUFxQ0MsUUFBckMsQ0FESyxFQUVMQyxhQUZLLEVBR0xWLFNBSEssQ0FBUDtBQUtEOztBQXREaUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQb2xhcjNEIH0gZnJvbSAnLi4vLi4vbWF0aCc7XG5pbXBvcnQgVmVsb2NpdHkgZnJvbSAnLi9WZWxvY2l0eSc7XG5pbXBvcnQgeyBJTklUSUFMSVpFUl9UWVBFX1BPTEFSX1ZFTE9DSVRZIGFzIHR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgdmVsb2NpdHkgcHJvcGVydHkgb24gaW5pdGlhbGl6ZWQgcGFydGljbGVzLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9sYXJWZWxvY2l0eSBleHRlbmRzIFZlbG9jaXR5IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBQb2xhclZlbG9jaXR5IGluaXRpYWxpemVyLlxuICAgKlxuICAgKiBAcGFyYW0ge1BvbGFyM0R9IHBvbGFyM2QgLSBUaGUgcG9sYXIgdmVjdG9yIGZvciB0aGUgdmVsb2NpdHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRoZXRhIC0gVGhlIHRoZXRhIGFuZ2xlIHRvIHVzZVxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBvbGFyM2QsIHRoZXRhLCBpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgc3VwZXIodHlwZSwgaXNFbmFibGVkKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZXRhLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50aGEgPSB0aGV0YSAqIERSO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgRGlyZWN0aW9uYWwgdmVjdG9yXG4gICAgICogQHR5cGUge1ZlY3RvcjNEfVxuICAgICAqL1xuICAgIHRoaXMuZGlyVmVjID0gcG9sYXIzZC50b1ZlY3RvcjNEKCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBkaXJlY3Rpb25hbCB2ZWN0b3Igb3Igbm90LlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuX3VzZVYgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgUG9sYXJWZWxvY2l0eSBpbml0aWFsaXplciBmcm9tIEpTT04uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gVGhlIEpTT04gdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZSBmcm9tLlxuICAgKiBAcGFyYW0ge251bWJlcn0ganNvbi5wb2xhclJhZGl1cyAtIFRoZSBQb2xhcjNEIHJhZGl1c1xuICAgKiBAcGFyYW0ge251bWJlcn0ganNvbi5wb2xhclRoZXRhIC0gVGhlIFBvbGFyM0QgdGhldGFcbiAgICogQHBhcmFtIHtudW1iZXJ9IGpzb24ucG9sYXJQaGkgLSBUaGUgUG9sYXIzRCBwaGlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGpzb24udmVsb2NpdHlUaGV0YSAtIFRoZSB2ZWxvY2l0eSB0aGV0YVxuICAgKiBAcmV0dXJuIHtQb2xhclZlbG9jaXR5fVxuICAgKi9cbiAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcbiAgICBjb25zdCB7XG4gICAgICBwb2xhclJhZGl1cyxcbiAgICAgIHBvbGFyVGhldGEsXG4gICAgICBwb2xhclBoaSxcbiAgICAgIHZlbG9jaXR5VGhldGEsXG4gICAgICBpc0VuYWJsZWQgPSB0cnVlLFxuICAgIH0gPSBqc29uO1xuXG4gICAgcmV0dXJuIG5ldyBQb2xhclZlbG9jaXR5KFxuICAgICAgbmV3IFBvbGFyM0QocG9sYXJSYWRpdXMsIHBvbGFyVGhldGEsIHBvbGFyUGhpKSxcbiAgICAgIHZlbG9jaXR5VGhldGEsXG4gICAgICBpc0VuYWJsZWRcbiAgICApO1xuICB9XG59XG4iXX0=
|
||||
@@ -0,0 +1,72 @@
|
||||
import { Vector3D, createSpan } from '../../math';
|
||||
import { DR } from '../../constants';
|
||||
import Velocity from './Velocity';
|
||||
import { INITIALIZER_TYPE_RADIAL_VELOCITY as type } from '../types';
|
||||
/**
|
||||
* Sets the velocity property on initialized particles.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class RadialVelocity extends Velocity {
|
||||
/**
|
||||
* Constructs a RadialVelocity initializer.
|
||||
*
|
||||
* @param {number|Span} radius - The velocity radius
|
||||
* @param {Vector3D} vector3d - The directional vector for the velocity
|
||||
* @param {number} theta - The theta angle to use
|
||||
* @return void
|
||||
*/
|
||||
constructor(radius, vector3d, theta, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
/**
|
||||
* @desc Velocity radius span.
|
||||
* @type {Span}
|
||||
*/
|
||||
|
||||
this.radiusPan = createSpan(radius);
|
||||
/**
|
||||
* @desc Direction vector.
|
||||
* @type {Vector3D}
|
||||
*/
|
||||
|
||||
this.dir = vector3d.clone().normalize();
|
||||
/**
|
||||
* @desc Theta.
|
||||
* @type {number}
|
||||
*/
|
||||
|
||||
this.tha = theta * DR;
|
||||
/**
|
||||
* @desc Determines whether to use the directional vector or not.
|
||||
* @type {boolean}
|
||||
*/
|
||||
|
||||
this._useV = true;
|
||||
}
|
||||
/**
|
||||
* Creates a RadialVelocity initializer from JSON.
|
||||
*
|
||||
* @param {object} json - The JSON to construct the instance from.
|
||||
* @param {number} json.radius - The velocity radius
|
||||
* @param {number} json.x - The velocity x axis direction
|
||||
* @param {number} json.y - The velocity y axis direction
|
||||
* @param {number} json.z - The velocity z axis direction
|
||||
* @param {number} json.theta - The velocity theta
|
||||
* @return {RadialVelocity}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
radius,
|
||||
x,
|
||||
y,
|
||||
z,
|
||||
theta,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new RadialVelocity(radius, new Vector3D(x, y, z), theta, isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9WZWxvY2l0eS9SYWRpYWxWZWxvY2l0eS5qcyJdLCJuYW1lcyI6WyJWZWN0b3IzRCIsImNyZWF0ZVNwYW4iLCJEUiIsIlZlbG9jaXR5IiwiSU5JVElBTElaRVJfVFlQRV9SQURJQUxfVkVMT0NJVFkiLCJ0eXBlIiwiUmFkaWFsVmVsb2NpdHkiLCJjb25zdHJ1Y3RvciIsInJhZGl1cyIsInZlY3RvcjNkIiwidGhldGEiLCJpc0VuYWJsZWQiLCJyYWRpdXNQYW4iLCJkaXIiLCJjbG9uZSIsIm5vcm1hbGl6ZSIsInRoYSIsIl91c2VWIiwiZnJvbUpTT04iLCJqc29uIiwieCIsInkiLCJ6Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFULEVBQW1CQyxVQUFuQixRQUFxQyxZQUFyQztBQUVBLFNBQVNDLEVBQVQsUUFBbUIsaUJBQW5CO0FBQ0EsT0FBT0MsUUFBUCxNQUFxQixZQUFyQjtBQUNBLFNBQVNDLGdDQUFnQyxJQUFJQyxJQUE3QyxRQUF5RCxVQUF6RDtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsY0FBTixTQUE2QkgsUUFBN0IsQ0FBc0M7QUFDbkQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFSSxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBU0MsUUFBVCxFQUFtQkMsS0FBbkIsRUFBMEJDLFNBQVMsR0FBRyxJQUF0QyxFQUE0QztBQUNyRCxVQUFNTixJQUFOLEVBQVlNLFNBQVo7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxTQUFMLEdBQWlCWCxVQUFVLENBQUNPLE1BQUQsQ0FBM0I7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLSyxHQUFMLEdBQVdKLFFBQVEsQ0FBQ0ssS0FBVCxHQUFpQkMsU0FBakIsRUFBWDtBQUVBO0FBQ0o7QUFDQTtBQUNBOztBQUNJLFNBQUtDLEdBQUwsR0FBV04sS0FBSyxHQUFHUixFQUFuQjtBQUVBO0FBQ0o7QUFDQTtBQUNBOztBQUNJLFNBQUtlLEtBQUwsR0FBYSxJQUFiO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDaUIsU0FBUkMsUUFBUSxDQUFDQyxJQUFELEVBQU87QUFDcEIsVUFBTTtBQUFFWCxNQUFBQSxNQUFGO0FBQVVZLE1BQUFBLENBQVY7QUFBYUMsTUFBQUEsQ0FBYjtBQUFnQkMsTUFBQUEsQ0FBaEI7QUFBbUJaLE1BQUFBLEtBQW5CO0FBQTBCQyxNQUFBQSxTQUFTLEdBQUc7QUFBdEMsUUFBK0NRLElBQXJEO0FBRUEsV0FBTyxJQUFJYixjQUFKLENBQW1CRSxNQUFuQixFQUEyQixJQUFJUixRQUFKLENBQWFvQixDQUFiLEVBQWdCQyxDQUFoQixFQUFtQkMsQ0FBbkIsQ0FBM0IsRUFBa0RaLEtBQWxELEVBQXlEQyxTQUF6RCxDQUFQO0FBQ0Q7O0FBcERrRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZlY3RvcjNELCBjcmVhdGVTcGFuIH0gZnJvbSAnLi4vLi4vbWF0aCc7XG5cbmltcG9ydCB7IERSIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBWZWxvY2l0eSBmcm9tICcuL1ZlbG9jaXR5JztcbmltcG9ydCB7IElOSVRJQUxJWkVSX1RZUEVfUkFESUFMX1ZFTE9DSVRZIGFzIHR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgdmVsb2NpdHkgcHJvcGVydHkgb24gaW5pdGlhbGl6ZWQgcGFydGljbGVzLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFkaWFsVmVsb2NpdHkgZXh0ZW5kcyBWZWxvY2l0eSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgUmFkaWFsVmVsb2NpdHkgaW5pdGlhbGl6ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfFNwYW59IHJhZGl1cyAtIFRoZSB2ZWxvY2l0eSByYWRpdXNcbiAgICogQHBhcmFtIHtWZWN0b3IzRH0gdmVjdG9yM2QgLSBUaGUgZGlyZWN0aW9uYWwgdmVjdG9yIGZvciB0aGUgdmVsb2NpdHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRoZXRhIC0gVGhlIHRoZXRhIGFuZ2xlIHRvIHVzZVxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJhZGl1cywgdmVjdG9yM2QsIHRoZXRhLCBpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgc3VwZXIodHlwZSwgaXNFbmFibGVkKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFZlbG9jaXR5IHJhZGl1cyBzcGFuLlxuICAgICAqIEB0eXBlIHtTcGFufVxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzUGFuID0gY3JlYXRlU3BhbihyYWRpdXMpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgRGlyZWN0aW9uIHZlY3Rvci5cbiAgICAgKiBAdHlwZSB7VmVjdG9yM0R9XG4gICAgICovXG4gICAgdGhpcy5kaXIgPSB2ZWN0b3IzZC5jbG9uZSgpLm5vcm1hbGl6ZSgpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhldGEuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnRoYSA9IHRoZXRhICogRFI7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBkaXJlY3Rpb25hbCB2ZWN0b3Igb3Igbm90LlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuX3VzZVYgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBSYWRpYWxWZWxvY2l0eSBpbml0aWFsaXplciBmcm9tIEpTT04uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gVGhlIEpTT04gdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZSBmcm9tLlxuICAgKiBAcGFyYW0ge251bWJlcn0ganNvbi5yYWRpdXMgLSBUaGUgdmVsb2NpdHkgcmFkaXVzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqc29uLnggLSBUaGUgdmVsb2NpdHkgeCBheGlzIGRpcmVjdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0ganNvbi55IC0gVGhlIHZlbG9jaXR5IHkgYXhpcyBkaXJlY3Rpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IGpzb24ueiAtIFRoZSB2ZWxvY2l0eSB6IGF4aXMgZGlyZWN0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqc29uLnRoZXRhIC0gVGhlIHZlbG9jaXR5IHRoZXRhXG4gICAqIEByZXR1cm4ge1JhZGlhbFZlbG9jaXR5fVxuICAgKi9cbiAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcbiAgICBjb25zdCB7IHJhZGl1cywgeCwgeSwgeiwgdGhldGEsIGlzRW5hYmxlZCA9IHRydWUgfSA9IGpzb247XG5cbiAgICByZXR1cm4gbmV3IFJhZGlhbFZlbG9jaXR5KHJhZGl1cywgbmV3IFZlY3RvcjNEKHgsIHksIHopLCB0aGV0YSwgaXNFbmFibGVkKTtcbiAgfVxufVxuIl19
|
||||
@@ -0,0 +1,69 @@
|
||||
import { Vector3D, createSpan } from '../../math';
|
||||
import { DR } from '../../constants';
|
||||
import Velocity from './Velocity';
|
||||
import { INITIALIZER_TYPE_VECTOR_VELOCITY as type } from '../types';
|
||||
/**
|
||||
* Sets the velocity property on initialized particles.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class VectorVelocity extends Velocity {
|
||||
/**
|
||||
* Constructs a VectorVelocity initializer.
|
||||
*
|
||||
* @param {Vector3D} vector3d - The directional vector for the velocity
|
||||
* @param {number} theta - The theta angle to use
|
||||
* @return void
|
||||
*/
|
||||
constructor(vector3d, theta, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
/**
|
||||
* @desc Velocity radius span.
|
||||
* @type {Span}
|
||||
*/
|
||||
|
||||
this.radiusPan = createSpan(1);
|
||||
/**
|
||||
* @desc Direction vector.
|
||||
* @type {Vector3D}
|
||||
*/
|
||||
|
||||
this.dir = vector3d.clone();
|
||||
/**
|
||||
* @desc Theta.
|
||||
* @type {number}
|
||||
*/
|
||||
|
||||
this.tha = theta * DR;
|
||||
/**
|
||||
* @desc Determines whether to use the directional vector or not.
|
||||
* @type {boolean}
|
||||
*/
|
||||
|
||||
this._useV = true;
|
||||
}
|
||||
/**
|
||||
* Creates a VectorVelocity initializer from JSON.
|
||||
*
|
||||
* @param {object} json - The JSON to construct the instance from.
|
||||
* @param {number} json.x - The velocity x axis direction
|
||||
* @param {number} json.y - The velocity y axis direction
|
||||
* @param {number} json.z - The velocity z axis direction
|
||||
* @param {number} json.theta - The velocity theta
|
||||
* @return {VectorVelocity}
|
||||
*/
|
||||
|
||||
|
||||
static fromJSON(json) {
|
||||
const {
|
||||
x,
|
||||
y,
|
||||
z,
|
||||
theta,
|
||||
isEnabled = true
|
||||
} = json;
|
||||
return new VectorVelocity(new Vector3D(x, y, z), theta, isEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9WZWxvY2l0eS9WZWN0b3JWZWxvY2l0eS5qcyJdLCJuYW1lcyI6WyJWZWN0b3IzRCIsImNyZWF0ZVNwYW4iLCJEUiIsIlZlbG9jaXR5IiwiSU5JVElBTElaRVJfVFlQRV9WRUNUT1JfVkVMT0NJVFkiLCJ0eXBlIiwiVmVjdG9yVmVsb2NpdHkiLCJjb25zdHJ1Y3RvciIsInZlY3RvcjNkIiwidGhldGEiLCJpc0VuYWJsZWQiLCJyYWRpdXNQYW4iLCJkaXIiLCJjbG9uZSIsInRoYSIsIl91c2VWIiwiZnJvbUpTT04iLCJqc29uIiwieCIsInkiLCJ6Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFULEVBQW1CQyxVQUFuQixRQUFxQyxZQUFyQztBQUVBLFNBQVNDLEVBQVQsUUFBbUIsaUJBQW5CO0FBQ0EsT0FBT0MsUUFBUCxNQUFxQixZQUFyQjtBQUNBLFNBQVNDLGdDQUFnQyxJQUFJQyxJQUE3QyxRQUF5RCxVQUF6RDtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsY0FBTixTQUE2QkgsUUFBN0IsQ0FBc0M7QUFDbkQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRUksRUFBQUEsV0FBVyxDQUFDQyxRQUFELEVBQVdDLEtBQVgsRUFBa0JDLFNBQVMsR0FBRyxJQUE5QixFQUFvQztBQUM3QyxVQUFNTCxJQUFOLEVBQVlLLFNBQVo7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxTQUFMLEdBQWlCVixVQUFVLENBQUMsQ0FBRCxDQUEzQjtBQUVBO0FBQ0o7QUFDQTtBQUNBOztBQUNJLFNBQUtXLEdBQUwsR0FBV0osUUFBUSxDQUFDSyxLQUFULEVBQVg7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLQyxHQUFMLEdBQVdMLEtBQUssR0FBR1AsRUFBbkI7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLYSxLQUFMLEdBQWEsSUFBYjtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNpQixTQUFSQyxRQUFRLENBQUNDLElBQUQsRUFBTztBQUNwQixVQUFNO0FBQUVDLE1BQUFBLENBQUY7QUFBS0MsTUFBQUEsQ0FBTDtBQUFRQyxNQUFBQSxDQUFSO0FBQVdYLE1BQUFBLEtBQVg7QUFBa0JDLE1BQUFBLFNBQVMsR0FBRztBQUE5QixRQUF1Q08sSUFBN0M7QUFFQSxXQUFPLElBQUlYLGNBQUosQ0FBbUIsSUFBSU4sUUFBSixDQUFha0IsQ0FBYixFQUFnQkMsQ0FBaEIsRUFBbUJDLENBQW5CLENBQW5CLEVBQTBDWCxLQUExQyxFQUFpREMsU0FBakQsQ0FBUDtBQUNEOztBQWxEa0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZWN0b3IzRCwgY3JlYXRlU3BhbiB9IGZyb20gJy4uLy4uL21hdGgnO1xuXG5pbXBvcnQgeyBEUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgVmVsb2NpdHkgZnJvbSAnLi9WZWxvY2l0eSc7XG5pbXBvcnQgeyBJTklUSUFMSVpFUl9UWVBFX1ZFQ1RPUl9WRUxPQ0lUWSBhcyB0eXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFNldHMgdGhlIHZlbG9jaXR5IHByb3BlcnR5IG9uIGluaXRpYWxpemVkIHBhcnRpY2xlcy5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlY3RvclZlbG9jaXR5IGV4dGVuZHMgVmVsb2NpdHkge1xuICAvKipcbiAgICogQ29uc3RydWN0cyBhIFZlY3RvclZlbG9jaXR5IGluaXRpYWxpemVyLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlY3RvcjNEfSB2ZWN0b3IzZCAtIFRoZSBkaXJlY3Rpb25hbCB2ZWN0b3IgZm9yIHRoZSB2ZWxvY2l0eVxuICAgKiBAcGFyYW0ge251bWJlcn0gdGhldGEgLSBUaGUgdGhldGEgYW5nbGUgdG8gdXNlXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgY29uc3RydWN0b3IodmVjdG9yM2QsIHRoZXRhLCBpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgc3VwZXIodHlwZSwgaXNFbmFibGVkKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFZlbG9jaXR5IHJhZGl1cyBzcGFuLlxuICAgICAqIEB0eXBlIHtTcGFufVxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzUGFuID0gY3JlYXRlU3BhbigxKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIERpcmVjdGlvbiB2ZWN0b3IuXG4gICAgICogQHR5cGUge1ZlY3RvcjNEfVxuICAgICAqL1xuICAgIHRoaXMuZGlyID0gdmVjdG9yM2QuY2xvbmUoKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZXRhLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50aGEgPSB0aGV0YSAqIERSO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgZGlyZWN0aW9uYWwgdmVjdG9yIG9yIG5vdC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLl91c2VWID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVmVjdG9yVmVsb2NpdHkgaW5pdGlhbGl6ZXIgZnJvbSBKU09OLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0ganNvbiAtIFRoZSBKU09OIHRvIGNvbnN0cnVjdCB0aGUgaW5zdGFuY2UgZnJvbS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGpzb24ueCAtIFRoZSB2ZWxvY2l0eSB4IGF4aXMgZGlyZWN0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqc29uLnkgLSBUaGUgdmVsb2NpdHkgeSBheGlzIGRpcmVjdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0ganNvbi56IC0gVGhlIHZlbG9jaXR5IHogYXhpcyBkaXJlY3Rpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IGpzb24udGhldGEgLSBUaGUgdmVsb2NpdHkgdGhldGFcbiAgICogQHJldHVybiB7VmVjdG9yVmVsb2NpdHl9XG4gICAqL1xuICBzdGF0aWMgZnJvbUpTT04oanNvbikge1xuICAgIGNvbnN0IHsgeCwgeSwgeiwgdGhldGEsIGlzRW5hYmxlZCA9IHRydWUgfSA9IGpzb247XG5cbiAgICByZXR1cm4gbmV3IFZlY3RvclZlbG9jaXR5KG5ldyBWZWN0b3IzRCh4LCB5LCB6KSwgdGhldGEsIGlzRW5hYmxlZCk7XG4gIH1cbn1cbiJdfQ==
|
||||
@@ -0,0 +1,52 @@
|
||||
import { MEASURE, PI } from '../../constants';
|
||||
import { MathUtils, Vector3D } from '../../math';
|
||||
import Initializer from '../Initializer';
|
||||
/**
|
||||
* Abstract class for Velocity initializers.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class Velocity extends Initializer {
|
||||
/**
|
||||
* Constructs a Velocity intitializer instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
constructor(type, isEnabled = true) {
|
||||
super(type, isEnabled);
|
||||
/**
|
||||
* @desc Directional vector
|
||||
* @type {Vector3D}
|
||||
*/
|
||||
|
||||
this.dirVec = new Vector3D(0, 0, 0);
|
||||
}
|
||||
|
||||
normalize(vr) {
|
||||
return vr * MEASURE;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Sets the particle's initial velocity.
|
||||
*
|
||||
* @singleton
|
||||
* @param {Particle} particle - the particle to initialize the property on
|
||||
* @return void
|
||||
*/
|
||||
|
||||
Velocity.prototype.initialize = function () {
|
||||
var tha;
|
||||
var normal = new Vector3D(0, 0, 1);
|
||||
var v = new Vector3D(0, 0, 0);
|
||||
return function initialize(particle) {
|
||||
tha = this.tha * Math.random();
|
||||
this._useV && this.dirVec.copy(this.dir).scalar(this.radiusPan.getValue());
|
||||
MathUtils.getNormal(this.dirVec, normal);
|
||||
v.copy(this.dirVec).applyAxisAngle(normal, tha);
|
||||
v.applyAxisAngle(this.dirVec.normalize(), Math.random() * PI * 2);
|
||||
particle.velocity.copy(v);
|
||||
return this;
|
||||
};
|
||||
}();
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9WZWxvY2l0eS9WZWxvY2l0eS5qcyJdLCJuYW1lcyI6WyJNRUFTVVJFIiwiUEkiLCJNYXRoVXRpbHMiLCJWZWN0b3IzRCIsIkluaXRpYWxpemVyIiwiVmVsb2NpdHkiLCJjb25zdHJ1Y3RvciIsInR5cGUiLCJpc0VuYWJsZWQiLCJkaXJWZWMiLCJub3JtYWxpemUiLCJ2ciIsInByb3RvdHlwZSIsImluaXRpYWxpemUiLCJ0aGEiLCJub3JtYWwiLCJ2IiwicGFydGljbGUiLCJNYXRoIiwicmFuZG9tIiwiX3VzZVYiLCJjb3B5IiwiZGlyIiwic2NhbGFyIiwicmFkaXVzUGFuIiwiZ2V0VmFsdWUiLCJnZXROb3JtYWwiLCJhcHBseUF4aXNBbmdsZSIsInZlbG9jaXR5Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxPQUFULEVBQWtCQyxFQUFsQixRQUE0QixpQkFBNUI7QUFDQSxTQUFTQyxTQUFULEVBQW9CQyxRQUFwQixRQUFvQyxZQUFwQztBQUVBLE9BQU9DLFdBQVAsTUFBd0IsZ0JBQXhCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsZUFBZSxNQUFNQyxRQUFOLFNBQXVCRCxXQUF2QixDQUFtQztBQUNoRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0VFLEVBQUFBLFdBQVcsQ0FBQ0MsSUFBRCxFQUFPQyxTQUFTLEdBQUcsSUFBbkIsRUFBeUI7QUFDbEMsVUFBTUQsSUFBTixFQUFZQyxTQUFaO0FBRUE7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksU0FBS0MsTUFBTCxHQUFjLElBQUlOLFFBQUosQ0FBYSxDQUFiLEVBQWdCLENBQWhCLEVBQW1CLENBQW5CLENBQWQ7QUFDRDs7QUFFRE8sRUFBQUEsU0FBUyxDQUFDQyxFQUFELEVBQUs7QUFDWixXQUFPQSxFQUFFLEdBQUdYLE9BQVo7QUFDRDs7QUFsQitDO0FBcUJsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQUssUUFBUSxDQUFDTyxTQUFULENBQW1CQyxVQUFuQixHQUFpQyxZQUFXO0FBQzFDLE1BQUlDLEdBQUo7QUFDQSxNQUFJQyxNQUFNLEdBQUcsSUFBSVosUUFBSixDQUFhLENBQWIsRUFBZ0IsQ0FBaEIsRUFBbUIsQ0FBbkIsQ0FBYjtBQUNBLE1BQUlhLENBQUMsR0FBRyxJQUFJYixRQUFKLENBQWEsQ0FBYixFQUFnQixDQUFoQixFQUFtQixDQUFuQixDQUFSO0FBRUEsU0FBTyxTQUFTVSxVQUFULENBQW9CSSxRQUFwQixFQUE4QjtBQUNuQ0gsSUFBQUEsR0FBRyxHQUFHLEtBQUtBLEdBQUwsR0FBV0ksSUFBSSxDQUFDQyxNQUFMLEVBQWpCO0FBQ0EsU0FBS0MsS0FBTCxJQUFjLEtBQUtYLE1BQUwsQ0FBWVksSUFBWixDQUFpQixLQUFLQyxHQUF0QixFQUEyQkMsTUFBM0IsQ0FBa0MsS0FBS0MsU0FBTCxDQUFlQyxRQUFmLEVBQWxDLENBQWQ7QUFFQXZCLElBQUFBLFNBQVMsQ0FBQ3dCLFNBQVYsQ0FBb0IsS0FBS2pCLE1BQXpCLEVBQWlDTSxNQUFqQztBQUNBQyxJQUFBQSxDQUFDLENBQUNLLElBQUYsQ0FBTyxLQUFLWixNQUFaLEVBQW9Ca0IsY0FBcEIsQ0FBbUNaLE1BQW5DLEVBQTJDRCxHQUEzQztBQUNBRSxJQUFBQSxDQUFDLENBQUNXLGNBQUYsQ0FBaUIsS0FBS2xCLE1BQUwsQ0FBWUMsU0FBWixFQUFqQixFQUEwQ1EsSUFBSSxDQUFDQyxNQUFMLEtBQWdCbEIsRUFBaEIsR0FBcUIsQ0FBL0Q7QUFFQWdCLElBQUFBLFFBQVEsQ0FBQ1csUUFBVCxDQUFrQlAsSUFBbEIsQ0FBdUJMLENBQXZCO0FBRUEsV0FBTyxJQUFQO0FBQ0QsR0FYRDtBQVlELENBakIrQixFQUFoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1FQVNVUkUsIFBJIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1hdGhVdGlscywgVmVjdG9yM0QgfSBmcm9tICcuLi8uLi9tYXRoJztcblxuaW1wb3J0IEluaXRpYWxpemVyIGZyb20gJy4uL0luaXRpYWxpemVyJztcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgVmVsb2NpdHkgaW5pdGlhbGl6ZXJzLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2NpdHkgZXh0ZW5kcyBJbml0aWFsaXplciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgVmVsb2NpdHkgaW50aXRpYWxpemVyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHR5cGUsIGlzRW5hYmxlZCA9IHRydWUpIHtcbiAgICBzdXBlcih0eXBlLCBpc0VuYWJsZWQpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgRGlyZWN0aW9uYWwgdmVjdG9yXG4gICAgICogQHR5cGUge1ZlY3RvcjNEfVxuICAgICAqL1xuICAgIHRoaXMuZGlyVmVjID0gbmV3IFZlY3RvcjNEKDAsIDAsIDApO1xuICB9XG5cbiAgbm9ybWFsaXplKHZyKSB7XG4gICAgcmV0dXJuIHZyICogTUVBU1VSRTtcbiAgfVxufVxuXG4vKipcbiAqIFNldHMgdGhlIHBhcnRpY2xlJ3MgaW5pdGlhbCB2ZWxvY2l0eS5cbiAqXG4gKiBAc2luZ2xldG9uXG4gKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIHRoZSBwYXJ0aWNsZSB0byBpbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvblxuICogQHJldHVybiB2b2lkXG4gKi9cblZlbG9jaXR5LnByb3RvdHlwZS5pbml0aWFsaXplID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdGhhO1xuICB2YXIgbm9ybWFsID0gbmV3IFZlY3RvcjNEKDAsIDAsIDEpO1xuICB2YXIgdiA9IG5ldyBWZWN0b3IzRCgwLCAwLCAwKTtcblxuICByZXR1cm4gZnVuY3Rpb24gaW5pdGlhbGl6ZShwYXJ0aWNsZSkge1xuICAgIHRoYSA9IHRoaXMudGhhICogTWF0aC5yYW5kb20oKTtcbiAgICB0aGlzLl91c2VWICYmIHRoaXMuZGlyVmVjLmNvcHkodGhpcy5kaXIpLnNjYWxhcih0aGlzLnJhZGl1c1Bhbi5nZXRWYWx1ZSgpKTtcblxuICAgIE1hdGhVdGlscy5nZXROb3JtYWwodGhpcy5kaXJWZWMsIG5vcm1hbCk7XG4gICAgdi5jb3B5KHRoaXMuZGlyVmVjKS5hcHBseUF4aXNBbmdsZShub3JtYWwsIHRoYSk7XG4gICAgdi5hcHBseUF4aXNBbmdsZSh0aGlzLmRpclZlYy5ub3JtYWxpemUoKSwgTWF0aC5yYW5kb20oKSAqIFBJICogMik7XG5cbiAgICBwYXJ0aWNsZS52ZWxvY2l0eS5jb3B5KHYpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59KSgpO1xuIl19
|
||||
@@ -0,0 +1,4 @@
|
||||
export { default as PolarVelocity } from './PolarVelocity';
|
||||
export { default as RadialVelocity } from './RadialVelocity';
|
||||
export { default as VectorVelocity } from './VectorVelocity';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9WZWxvY2l0eS9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0IiwiUG9sYXJWZWxvY2l0eSIsIlJhZGlhbFZlbG9jaXR5IiwiVmVjdG9yVmVsb2NpdHkiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sSUFBSUMsYUFBcEIsUUFBeUMsaUJBQXpDO0FBQ0EsU0FBU0QsT0FBTyxJQUFJRSxjQUFwQixRQUEwQyxrQkFBMUM7QUFDQSxTQUFTRixPQUFPLElBQUlHLGNBQXBCLFFBQTBDLGtCQUExQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgUG9sYXJWZWxvY2l0eSB9IGZyb20gJy4vUG9sYXJWZWxvY2l0eSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJhZGlhbFZlbG9jaXR5IH0gZnJvbSAnLi9SYWRpYWxWZWxvY2l0eSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZlY3RvclZlbG9jaXR5IH0gZnJvbSAnLi9WZWN0b3JWZWxvY2l0eSc7XG4iXX0=
|
||||
@@ -0,0 +1,26 @@
|
||||
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
||||
|
||||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||||
|
||||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||||
|
||||
import { AdditiveBlending, CustomBlending, MultiplyBlending, NoBlending, NormalBlending, SubtractiveBlending } from '../core/three/';
|
||||
export const SUPPORTED_MATERIAL_BLENDING_MODES = {
|
||||
AdditiveBlending,
|
||||
CustomBlending,
|
||||
MultiplyBlending,
|
||||
NoBlending,
|
||||
NormalBlending,
|
||||
SubtractiveBlending
|
||||
};
|
||||
export const DEFAULT_MATERIAL_PROPERTIES = {
|
||||
color: 0xff0000,
|
||||
blending: AdditiveBlending,
|
||||
fog: true
|
||||
};
|
||||
export const DEFAULT_JSON_MATERIAL_PROPERTIES = _objectSpread(_objectSpread({}, DEFAULT_MATERIAL_PROPERTIES), {}, {
|
||||
blending: 'AdditiveBlending'
|
||||
});
|
||||
export const DEFAULT_RATE_NUM_PAN = 1;
|
||||
export const DEFAULT_RATE_TIME_PAN = 1;
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiQWRkaXRpdmVCbGVuZGluZyIsIkN1c3RvbUJsZW5kaW5nIiwiTXVsdGlwbHlCbGVuZGluZyIsIk5vQmxlbmRpbmciLCJOb3JtYWxCbGVuZGluZyIsIlN1YnRyYWN0aXZlQmxlbmRpbmciLCJTVVBQT1JURURfTUFURVJJQUxfQkxFTkRJTkdfTU9ERVMiLCJERUZBVUxUX01BVEVSSUFMX1BST1BFUlRJRVMiLCJjb2xvciIsImJsZW5kaW5nIiwiZm9nIiwiREVGQVVMVF9KU09OX01BVEVSSUFMX1BST1BFUlRJRVMiLCJERUZBVUxUX1JBVEVfTlVNX1BBTiIsIkRFRkFVTFRfUkFURV9USU1FX1BBTiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FDRUEsZ0JBREYsRUFFRUMsY0FGRixFQUdFQyxnQkFIRixFQUlFQyxVQUpGLEVBS0VDLGNBTEYsRUFNRUMsbUJBTkYsUUFPTyxnQkFQUDtBQVNBLE9BQU8sTUFBTUMsaUNBQWlDLEdBQUc7QUFDL0NOLEVBQUFBLGdCQUQrQztBQUUvQ0MsRUFBQUEsY0FGK0M7QUFHL0NDLEVBQUFBLGdCQUgrQztBQUkvQ0MsRUFBQUEsVUFKK0M7QUFLL0NDLEVBQUFBLGNBTCtDO0FBTS9DQyxFQUFBQTtBQU4rQyxDQUExQztBQVNQLE9BQU8sTUFBTUUsMkJBQTJCLEdBQUc7QUFDekNDLEVBQUFBLEtBQUssRUFBRSxRQURrQztBQUV6Q0MsRUFBQUEsUUFBUSxFQUFFVCxnQkFGK0I7QUFHekNVLEVBQUFBLEdBQUcsRUFBRTtBQUhvQyxDQUFwQztBQUtQLE9BQU8sTUFBTUMsZ0NBQWdDLG1DQUN4Q0osMkJBRHdDO0FBRTNDRSxFQUFBQSxRQUFRLEVBQUU7QUFGaUMsRUFBdEM7QUFJUCxPQUFPLE1BQU1HLG9CQUFvQixHQUFHLENBQTdCO0FBQ1AsT0FBTyxNQUFNQyxxQkFBcUIsR0FBRyxDQUE5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFkZGl0aXZlQmxlbmRpbmcsXG4gIEN1c3RvbUJsZW5kaW5nLFxuICBNdWx0aXBseUJsZW5kaW5nLFxuICBOb0JsZW5kaW5nLFxuICBOb3JtYWxCbGVuZGluZyxcbiAgU3VidHJhY3RpdmVCbGVuZGluZyxcbn0gZnJvbSAnLi4vY29yZS90aHJlZS8nO1xuXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX01BVEVSSUFMX0JMRU5ESU5HX01PREVTID0ge1xuICBBZGRpdGl2ZUJsZW5kaW5nLFxuICBDdXN0b21CbGVuZGluZyxcbiAgTXVsdGlwbHlCbGVuZGluZyxcbiAgTm9CbGVuZGluZyxcbiAgTm9ybWFsQmxlbmRpbmcsXG4gIFN1YnRyYWN0aXZlQmxlbmRpbmcsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVRFUklBTF9QUk9QRVJUSUVTID0ge1xuICBjb2xvcjogMHhmZjAwMDAsXG4gIGJsZW5kaW5nOiBBZGRpdGl2ZUJsZW5kaW5nLFxuICBmb2c6IHRydWUsXG59O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSlNPTl9NQVRFUklBTF9QUk9QRVJUSUVTID0ge1xuICAuLi5ERUZBVUxUX01BVEVSSUFMX1BST1BFUlRJRVMsXG4gIGJsZW5kaW5nOiAnQWRkaXRpdmVCbGVuZGluZycsXG59O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkFURV9OVU1fUEFOID0gMTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JBVEVfVElNRV9QQU4gPSAxO1xuIl19
|
||||
@@ -0,0 +1,12 @@
|
||||
export { default as Body } from './Body';
|
||||
export { default as BodySprite } from './BodySprite';
|
||||
export { default as InitializerUtil } from './InitializerUtil';
|
||||
export { default as Life } from './Life';
|
||||
export { default as Mass } from './Mass';
|
||||
export { default as Position } from './Position';
|
||||
export { default as Rotation } from './Rotation';
|
||||
export { default as Radius } from './Radius';
|
||||
export { default as Rate } from './Rate';
|
||||
export { default as Texture } from './Texture';
|
||||
export { VectorVelocity, PolarVelocity, RadialVelocity } from './Velocity';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0IiwiQm9keSIsIkJvZHlTcHJpdGUiLCJJbml0aWFsaXplclV0aWwiLCJMaWZlIiwiTWFzcyIsIlBvc2l0aW9uIiwiUm90YXRpb24iLCJSYWRpdXMiLCJSYXRlIiwiVGV4dHVyZSIsIlZlY3RvclZlbG9jaXR5IiwiUG9sYXJWZWxvY2l0eSIsIlJhZGlhbFZlbG9jaXR5Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxPQUFPLElBQUlDLElBQXBCLFFBQWdDLFFBQWhDO0FBQ0EsU0FBU0QsT0FBTyxJQUFJRSxVQUFwQixRQUFzQyxjQUF0QztBQUNBLFNBQVNGLE9BQU8sSUFBSUcsZUFBcEIsUUFBMkMsbUJBQTNDO0FBQ0EsU0FBU0gsT0FBTyxJQUFJSSxJQUFwQixRQUFnQyxRQUFoQztBQUNBLFNBQVNKLE9BQU8sSUFBSUssSUFBcEIsUUFBZ0MsUUFBaEM7QUFDQSxTQUFTTCxPQUFPLElBQUlNLFFBQXBCLFFBQW9DLFlBQXBDO0FBQ0EsU0FBU04sT0FBTyxJQUFJTyxRQUFwQixRQUFvQyxZQUFwQztBQUNBLFNBQVNQLE9BQU8sSUFBSVEsTUFBcEIsUUFBa0MsVUFBbEM7QUFDQSxTQUFTUixPQUFPLElBQUlTLElBQXBCLFFBQWdDLFFBQWhDO0FBQ0EsU0FBU1QsT0FBTyxJQUFJVSxPQUFwQixRQUFtQyxXQUFuQztBQUNBLFNBQVNDLGNBQVQsRUFBeUJDLGFBQXpCLEVBQXdDQyxjQUF4QyxRQUE4RCxZQUE5RCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgQm9keSB9IGZyb20gJy4vQm9keSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvZHlTcHJpdGUgfSBmcm9tICcuL0JvZHlTcHJpdGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbml0aWFsaXplclV0aWwgfSBmcm9tICcuL0luaXRpYWxpemVyVXRpbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpZmUgfSBmcm9tICcuL0xpZmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXNzIH0gZnJvbSAnLi9NYXNzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUG9zaXRpb24gfSBmcm9tICcuL1Bvc2l0aW9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm90YXRpb24gfSBmcm9tICcuL1JvdGF0aW9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmFkaXVzIH0gZnJvbSAnLi9SYWRpdXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSYXRlIH0gZnJvbSAnLi9SYXRlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dHVyZSB9IGZyb20gJy4vVGV4dHVyZSc7XG5leHBvcnQgeyBWZWN0b3JWZWxvY2l0eSwgUG9sYXJWZWxvY2l0eSwgUmFkaWFsVmVsb2NpdHkgfSBmcm9tICcuL1ZlbG9jaXR5JztcbiJdfQ==
|
||||
@@ -0,0 +1,16 @@
|
||||
export const INITIALIZER_TYPE_ABSTRACT = 'Initializer';
|
||||
export const INITIALIZER_TYPE_BODY = 'Body';
|
||||
export const INITIALIZER_TYPE_BODY_SPRITE = 'BodySprite';
|
||||
export const INITIALIZER_TYPE_TEXTURE = 'Texture';
|
||||
export const INITIALIZER_TYPE_LIFE = 'Life';
|
||||
export const INITIALIZER_TYPE_MASS = 'Mass';
|
||||
export const INITIALIZER_TYPE_POSITION = 'Position';
|
||||
export const INITIALIZER_TYPE_ROTATION = 'Rotation';
|
||||
export const INITIALIZER_TYPE_RADIUS = 'Radius';
|
||||
export const INITIALIZER_TYPE_ZONE = 'Zone';
|
||||
export const INITIALIZER_TYPE_VECTOR_VELOCITY = 'VectorVelocity';
|
||||
export const INITIALIZER_TYPE_POLAR_VELOCITY = 'PolarVelocity';
|
||||
export const INITIALIZER_TYPE_RADIAL_VELOCITY = 'RadialVelocity';
|
||||
export const INITIALIZER_TYPE_RATE = 'Rate';
|
||||
export const INITIALIZER_TYPES_THAT_REQUIRE_THREE = [INITIALIZER_TYPE_BODY_SPRITE, INITIALIZER_TYPE_TEXTURE];
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci90eXBlcy5qcyJdLCJuYW1lcyI6WyJJTklUSUFMSVpFUl9UWVBFX0FCU1RSQUNUIiwiSU5JVElBTElaRVJfVFlQRV9CT0RZIiwiSU5JVElBTElaRVJfVFlQRV9CT0RZX1NQUklURSIsIklOSVRJQUxJWkVSX1RZUEVfVEVYVFVSRSIsIklOSVRJQUxJWkVSX1RZUEVfTElGRSIsIklOSVRJQUxJWkVSX1RZUEVfTUFTUyIsIklOSVRJQUxJWkVSX1RZUEVfUE9TSVRJT04iLCJJTklUSUFMSVpFUl9UWVBFX1JPVEFUSU9OIiwiSU5JVElBTElaRVJfVFlQRV9SQURJVVMiLCJJTklUSUFMSVpFUl9UWVBFX1pPTkUiLCJJTklUSUFMSVpFUl9UWVBFX1ZFQ1RPUl9WRUxPQ0lUWSIsIklOSVRJQUxJWkVSX1RZUEVfUE9MQVJfVkVMT0NJVFkiLCJJTklUSUFMSVpFUl9UWVBFX1JBRElBTF9WRUxPQ0lUWSIsIklOSVRJQUxJWkVSX1RZUEVfUkFURSIsIklOSVRJQUxJWkVSX1RZUEVTX1RIQVRfUkVRVUlSRV9USFJFRSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSx5QkFBeUIsR0FBRyxhQUFsQztBQUNQLE9BQU8sTUFBTUMscUJBQXFCLEdBQUcsTUFBOUI7QUFDUCxPQUFPLE1BQU1DLDRCQUE0QixHQUFHLFlBQXJDO0FBQ1AsT0FBTyxNQUFNQyx3QkFBd0IsR0FBRyxTQUFqQztBQUNQLE9BQU8sTUFBTUMscUJBQXFCLEdBQUcsTUFBOUI7QUFDUCxPQUFPLE1BQU1DLHFCQUFxQixHQUFHLE1BQTlCO0FBQ1AsT0FBTyxNQUFNQyx5QkFBeUIsR0FBRyxVQUFsQztBQUNQLE9BQU8sTUFBTUMseUJBQXlCLEdBQUcsVUFBbEM7QUFDUCxPQUFPLE1BQU1DLHVCQUF1QixHQUFHLFFBQWhDO0FBQ1AsT0FBTyxNQUFNQyxxQkFBcUIsR0FBRyxNQUE5QjtBQUNQLE9BQU8sTUFBTUMsZ0NBQWdDLEdBQUcsZ0JBQXpDO0FBQ1AsT0FBTyxNQUFNQywrQkFBK0IsR0FBRyxlQUF4QztBQUNQLE9BQU8sTUFBTUMsZ0NBQWdDLEdBQUcsZ0JBQXpDO0FBQ1AsT0FBTyxNQUFNQyxxQkFBcUIsR0FBRyxNQUE5QjtBQUNQLE9BQU8sTUFBTUMsb0NBQW9DLEdBQUcsQ0FDbERaLDRCQURrRCxFQUVsREMsd0JBRmtELENBQTdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfQUJTVFJBQ1QgPSAnSW5pdGlhbGl6ZXInO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfQk9EWSA9ICdCb2R5JztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX0JPRFlfU1BSSVRFID0gJ0JvZHlTcHJpdGUnO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfVEVYVFVSRSA9ICdUZXh0dXJlJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX0xJRkUgPSAnTGlmZSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9NQVNTID0gJ01hc3MnO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfUE9TSVRJT04gPSAnUG9zaXRpb24nO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfUk9UQVRJT04gPSAnUm90YXRpb24nO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfUkFESVVTID0gJ1JhZGl1cyc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9aT05FID0gJ1pvbmUnO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfVkVDVE9SX1ZFTE9DSVRZID0gJ1ZlY3RvclZlbG9jaXR5JztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX1BPTEFSX1ZFTE9DSVRZID0gJ1BvbGFyVmVsb2NpdHknO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfUkFESUFMX1ZFTE9DSVRZID0gJ1JhZGlhbFZlbG9jaXR5JztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX1JBVEUgPSAnUmF0ZSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRVNfVEhBVF9SRVFVSVJFX1RIUkVFID0gW1xuICBJTklUSUFMSVpFUl9UWVBFX0JPRFlfU1BSSVRFLFxuICBJTklUSUFMSVpFUl9UWVBFX1RFWFRVUkUsXG5dO1xuIl19
|
||||
@@ -0,0 +1,62 @@
|
||||
import Span from './Span';
|
||||
import sample from '../utils/sample.js';
|
||||
import { MATH_TYPE_ARRAY_SPAN as type } from './types';
|
||||
/**
|
||||
* Class for storing items of mixed type and fetching a randomised
|
||||
* value from these items.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class ArraySpan extends Span {
|
||||
/**
|
||||
* Constructs an ArraySpan instance.
|
||||
*
|
||||
* @param {mixed|array<mixed>} items - Items
|
||||
* @return void
|
||||
*/
|
||||
constructor(items) {
|
||||
super();
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
this.type = type;
|
||||
/**
|
||||
* @desc An array of colors
|
||||
* @type {array}
|
||||
*/
|
||||
|
||||
this.items = Array.isArray(items) ? items : [items];
|
||||
}
|
||||
/**
|
||||
* Gets a random item.
|
||||
*
|
||||
* @return {mixed}
|
||||
*/
|
||||
|
||||
|
||||
getValue() {
|
||||
return sample(this.items);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Attempts to create an ArraySpan from the items provided.
|
||||
*
|
||||
* @param {mixed} items - Items to try and create an ArraySpan from
|
||||
* @return {?ArraySpan}
|
||||
*/
|
||||
|
||||
export const createArraySpan = items => {
|
||||
if (!items) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (items instanceof ArraySpan) {
|
||||
return items;
|
||||
}
|
||||
|
||||
return new ArraySpan(items);
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL0FycmF5U3Bhbi5qcyJdLCJuYW1lcyI6WyJTcGFuIiwic2FtcGxlIiwiTUFUSF9UWVBFX0FSUkFZX1NQQU4iLCJ0eXBlIiwiQXJyYXlTcGFuIiwiY29uc3RydWN0b3IiLCJpdGVtcyIsIkFycmF5IiwiaXNBcnJheSIsImdldFZhbHVlIiwiY3JlYXRlQXJyYXlTcGFuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxJQUFQLE1BQWlCLFFBQWpCO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixlQUFuQjtBQUNBLFNBQVNDLG9CQUFvQixJQUFJQyxJQUFqQyxRQUE2QyxTQUE3QztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsZUFBZSxNQUFNQyxTQUFOLFNBQXdCSixJQUF4QixDQUE2QjtBQUMxQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRUssRUFBQUEsV0FBVyxDQUFDQyxLQUFELEVBQVE7QUFDakI7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLSCxJQUFMLEdBQVlBLElBQVo7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLRyxLQUFMLEdBQWFDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixLQUFkLElBQXVCQSxLQUF2QixHQUErQixDQUFDQSxLQUFELENBQTVDO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRUcsRUFBQUEsUUFBUSxHQUFHO0FBQ1QsV0FBT1IsTUFBTSxDQUFDLEtBQUtLLEtBQU4sQ0FBYjtBQUNEOztBQTlCeUM7QUFpQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1JLGVBQWUsR0FBR0osS0FBSyxJQUFJO0FBQ3RDLE1BQUksQ0FBQ0EsS0FBTCxFQUFZO0FBQ1YsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsTUFBSUEsS0FBSyxZQUFZRixTQUFyQixFQUFnQztBQUM5QixXQUFPRSxLQUFQO0FBQ0Q7O0FBRUQsU0FBTyxJQUFJRixTQUFKLENBQWNFLEtBQWQsQ0FBUDtBQUNELENBVk0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3BhbiBmcm9tICcuL1NwYW4nO1xuaW1wb3J0IHNhbXBsZSBmcm9tICdsb2Rhc2gvc2FtcGxlJztcbmltcG9ydCB7IE1BVEhfVFlQRV9BUlJBWV9TUEFOIGFzIHR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBDbGFzcyBmb3Igc3RvcmluZyBpdGVtcyBvZiBtaXhlZCB0eXBlIGFuZCBmZXRjaGluZyBhIHJhbmRvbWlzZWRcbiAqIHZhbHVlIGZyb20gdGhlc2UgaXRlbXMuXG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcnJheVNwYW4gZXh0ZW5kcyBTcGFuIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYW4gQXJyYXlTcGFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge21peGVkfGFycmF5PG1peGVkPn0gaXRlbXMgLSBJdGVtc1xuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGl0ZW1zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBjbGFzcyB0eXBlLlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIEFuIGFycmF5IG9mIGNvbG9yc1xuICAgICAqIEB0eXBlIHthcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLml0ZW1zID0gQXJyYXkuaXNBcnJheShpdGVtcykgPyBpdGVtcyA6IFtpdGVtc107XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHJhbmRvbSBpdGVtLlxuICAgKlxuICAgKiBAcmV0dXJuIHttaXhlZH1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiBzYW1wbGUodGhpcy5pdGVtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBjcmVhdGUgYW4gQXJyYXlTcGFuIGZyb20gdGhlIGl0ZW1zIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSB7bWl4ZWR9IGl0ZW1zIC0gSXRlbXMgdG8gdHJ5IGFuZCBjcmVhdGUgYW4gQXJyYXlTcGFuIGZyb21cbiAqIEByZXR1cm4gez9BcnJheVNwYW59XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBcnJheVNwYW4gPSBpdGVtcyA9PiB7XG4gIGlmICghaXRlbXMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpdGVtcyBpbnN0YW5jZW9mIEFycmF5U3Bhbikge1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHJldHVybiBuZXcgQXJyYXlTcGFuKGl0ZW1zKTtcbn07XG4iXX0=
|
||||
@@ -0,0 +1,25 @@
|
||||
import { MATH_TYPE_BOX as type } from './types';
|
||||
export default class Box {
|
||||
constructor(x, y, z, w, h, d) {
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
this.type = type;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.width = w;
|
||||
this.height = h;
|
||||
this.depth = d;
|
||||
this.bottom = this.y + this.height;
|
||||
this.right = this.x + this.width;
|
||||
this.right = this.x + this.width;
|
||||
}
|
||||
|
||||
contains(x, y, z) {
|
||||
if (x <= this.right && x >= this.x && y <= this.bottom && y >= this.y && z <= this.depth && z >= this.z) return true;else return false;
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL0JveC5qcyJdLCJuYW1lcyI6WyJNQVRIX1RZUEVfQk9YIiwidHlwZSIsIkJveCIsImNvbnN0cnVjdG9yIiwieCIsInkiLCJ6IiwidyIsImgiLCJkIiwid2lkdGgiLCJoZWlnaHQiLCJkZXB0aCIsImJvdHRvbSIsInJpZ2h0IiwiY29udGFpbnMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsSUFBSUMsSUFBMUIsUUFBc0MsU0FBdEM7QUFFQSxlQUFlLE1BQU1DLEdBQU4sQ0FBVTtBQUN2QkMsRUFBQUEsV0FBVyxDQUFDQyxDQUFELEVBQUlDLENBQUosRUFBT0MsQ0FBUCxFQUFVQyxDQUFWLEVBQWFDLENBQWIsRUFBZ0JDLENBQWhCLEVBQW1CO0FBQzVCO0FBQ0o7QUFDQTtBQUNBO0FBQ0ksU0FBS1IsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0csQ0FBTCxHQUFTQSxDQUFUO0FBQ0EsU0FBS0MsQ0FBTCxHQUFTQSxDQUFUO0FBQ0EsU0FBS0MsQ0FBTCxHQUFTQSxDQUFUO0FBQ0EsU0FBS0ksS0FBTCxHQUFhSCxDQUFiO0FBQ0EsU0FBS0ksTUFBTCxHQUFjSCxDQUFkO0FBQ0EsU0FBS0ksS0FBTCxHQUFhSCxDQUFiO0FBQ0EsU0FBS0ksTUFBTCxHQUFjLEtBQUtSLENBQUwsR0FBUyxLQUFLTSxNQUE1QjtBQUNBLFNBQUtHLEtBQUwsR0FBYSxLQUFLVixDQUFMLEdBQVMsS0FBS00sS0FBM0I7QUFDQSxTQUFLSSxLQUFMLEdBQWEsS0FBS1YsQ0FBTCxHQUFTLEtBQUtNLEtBQTNCO0FBQ0Q7O0FBRURLLEVBQUFBLFFBQVEsQ0FBQ1gsQ0FBRCxFQUFJQyxDQUFKLEVBQU9DLENBQVAsRUFBVTtBQUNoQixRQUNFRixDQUFDLElBQUksS0FBS1UsS0FBVixJQUNBVixDQUFDLElBQUksS0FBS0EsQ0FEVixJQUVBQyxDQUFDLElBQUksS0FBS1EsTUFGVixJQUdBUixDQUFDLElBQUksS0FBS0EsQ0FIVixJQUlBQyxDQUFDLElBQUksS0FBS00sS0FKVixJQUtBTixDQUFDLElBQUksS0FBS0EsQ0FOWixFQVFFLE9BQU8sSUFBUCxDQVJGLEtBU0ssT0FBTyxLQUFQO0FBQ047O0FBN0JzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVEhfVFlQRV9CT1ggYXMgdHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3gge1xuICBjb25zdHJ1Y3Rvcih4LCB5LCB6LCB3LCBoLCBkKSB7XG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIGNsYXNzIHR5cGUuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgICB0aGlzLnogPSB6O1xuICAgIHRoaXMud2lkdGggPSB3O1xuICAgIHRoaXMuaGVpZ2h0ID0gaDtcbiAgICB0aGlzLmRlcHRoID0gZDtcbiAgICB0aGlzLmJvdHRvbSA9IHRoaXMueSArIHRoaXMuaGVpZ2h0O1xuICAgIHRoaXMucmlnaHQgPSB0aGlzLnggKyB0aGlzLndpZHRoO1xuICAgIHRoaXMucmlnaHQgPSB0aGlzLnggKyB0aGlzLndpZHRoO1xuICB9XG5cbiAgY29udGFpbnMoeCwgeSwgeikge1xuICAgIGlmIChcbiAgICAgIHggPD0gdGhpcy5yaWdodCAmJlxuICAgICAgeCA+PSB0aGlzLnggJiZcbiAgICAgIHkgPD0gdGhpcy5ib3R0b20gJiZcbiAgICAgIHkgPj0gdGhpcy55ICYmXG4gICAgICB6IDw9IHRoaXMuZGVwdGggJiZcbiAgICAgIHogPj0gdGhpcy56XG4gICAgKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
||||
@@ -0,0 +1,71 @@
|
||||
import MathUtils from './MathUtils';
|
||||
import Span from './Span';
|
||||
import sample from '../utils/sample.js';
|
||||
import { MATH_TYPE_COLOR_SPAN as type } from './types';
|
||||
/**
|
||||
* Class for storing and interacting with an array of colours.
|
||||
*
|
||||
*/
|
||||
|
||||
export default class ColorSpan extends Span {
|
||||
/**
|
||||
* Constructs a ColorSpan instance.
|
||||
*
|
||||
* @param {string|array<string>} colors - A color or array of colors. If the
|
||||
* string 'random' is provided, a random color will be returned from getValue
|
||||
* @return void
|
||||
*/
|
||||
constructor(colors) {
|
||||
super();
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
this.type = type;
|
||||
/**
|
||||
* @desc Determines if a random color should be returned from the getValue method.
|
||||
* @type {boolean}
|
||||
*/
|
||||
|
||||
this.shouldRandomize = colors === 'random' ? true : false;
|
||||
/**
|
||||
* @desc An array of colors to select from
|
||||
* @type {array<string>}
|
||||
*/
|
||||
|
||||
this.colors = Array.isArray(colors) ? colors : [colors];
|
||||
}
|
||||
/**
|
||||
* Gets a color from the color array
|
||||
* or a random color if this.shouldRandomize is true.
|
||||
*
|
||||
* @return {string} a hex color
|
||||
*/
|
||||
|
||||
|
||||
getValue() {
|
||||
return this.shouldRandomize ? MathUtils.randomColor() : sample(this.colors);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Attempts to create an ArraySpan from the colors provided.
|
||||
*
|
||||
* @param {mixed} colors - colors to try and create an ArraySpan from
|
||||
* @return {?ColorSpan}
|
||||
*/
|
||||
|
||||
export const createColorSpan = colors => {
|
||||
if (!colors) {
|
||||
console.warn(`Invalid colors argument ${colors} passed to createColorSpan. Defaulting to 'random'.`);
|
||||
colors = 'random';
|
||||
}
|
||||
|
||||
if (colors instanceof ColorSpan) {
|
||||
return colors;
|
||||
}
|
||||
|
||||
return new ColorSpan(colors);
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL0NvbG9yU3Bhbi5qcyJdLCJuYW1lcyI6WyJNYXRoVXRpbHMiLCJTcGFuIiwic2FtcGxlIiwiTUFUSF9UWVBFX0NPTE9SX1NQQU4iLCJ0eXBlIiwiQ29sb3JTcGFuIiwiY29uc3RydWN0b3IiLCJjb2xvcnMiLCJzaG91bGRSYW5kb21pemUiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRWYWx1ZSIsInJhbmRvbUNvbG9yIiwiY3JlYXRlQ29sb3JTcGFuIiwiY29uc29sZSIsIndhcm4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFNBQVAsTUFBc0IsYUFBdEI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLFFBQWpCO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixlQUFuQjtBQUNBLFNBQVNDLG9CQUFvQixJQUFJQyxJQUFqQyxRQUE2QyxTQUE3QztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsU0FBTixTQUF3QkosSUFBeEIsQ0FBNkI7QUFDMUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRUssRUFBQUEsV0FBVyxDQUFDQyxNQUFELEVBQVM7QUFDbEI7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLSCxJQUFMLEdBQVlBLElBQVo7QUFFQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxTQUFLSSxlQUFMLEdBQXVCRCxNQUFNLEtBQUssUUFBWCxHQUFzQixJQUF0QixHQUE2QixLQUFwRDtBQUVBO0FBQ0o7QUFDQTtBQUNBOztBQUNJLFNBQUtBLE1BQUwsR0FBY0UsS0FBSyxDQUFDQyxPQUFOLENBQWNILE1BQWQsSUFBd0JBLE1BQXhCLEdBQWlDLENBQUNBLE1BQUQsQ0FBL0M7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0VJLEVBQUFBLFFBQVEsR0FBRztBQUNULFdBQU8sS0FBS0gsZUFBTCxHQUF1QlIsU0FBUyxDQUFDWSxXQUFWLEVBQXZCLEdBQWlEVixNQUFNLENBQUMsS0FBS0ssTUFBTixDQUE5RDtBQUNEOztBQXRDeUM7QUF5QzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1NLGVBQWUsR0FBR04sTUFBTSxJQUFJO0FBQ3ZDLE1BQUksQ0FBQ0EsTUFBTCxFQUFhO0FBQ1hPLElBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUNHLDJCQUEwQlIsTUFBTyxxREFEcEM7QUFJQUEsSUFBQUEsTUFBTSxHQUFHLFFBQVQ7QUFDRDs7QUFFRCxNQUFJQSxNQUFNLFlBQVlGLFNBQXRCLEVBQWlDO0FBQy9CLFdBQU9FLE1BQVA7QUFDRDs7QUFFRCxTQUFPLElBQUlGLFNBQUosQ0FBY0UsTUFBZCxDQUFQO0FBQ0QsQ0FkTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xuaW1wb3J0IFNwYW4gZnJvbSAnLi9TcGFuJztcbmltcG9ydCBzYW1wbGUgZnJvbSAnbG9kYXNoL3NhbXBsZSc7XG5pbXBvcnQgeyBNQVRIX1RZUEVfQ09MT1JfU1BBTiBhcyB0eXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIHN0b3JpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggYW4gYXJyYXkgb2YgY29sb3Vycy5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbG9yU3BhbiBleHRlbmRzIFNwYW4ge1xuICAvKipcbiAgICogQ29uc3RydWN0cyBhIENvbG9yU3BhbiBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8YXJyYXk8c3RyaW5nPn0gY29sb3JzIC0gQSBjb2xvciBvciBhcnJheSBvZiBjb2xvcnMuIElmIHRoZVxuICAgKiBzdHJpbmcgJ3JhbmRvbScgaXMgcHJvdmlkZWQsIGEgcmFuZG9tIGNvbG9yIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBnZXRWYWx1ZVxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbG9ycykge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBUaGUgY2xhc3MgdHlwZS5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBEZXRlcm1pbmVzIGlmIGEgcmFuZG9tIGNvbG9yIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSBnZXRWYWx1ZSBtZXRob2QuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5zaG91bGRSYW5kb21pemUgPSBjb2xvcnMgPT09ICdyYW5kb20nID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgQW4gYXJyYXkgb2YgY29sb3JzIHRvIHNlbGVjdCBmcm9tXG4gICAgICogQHR5cGUge2FycmF5PHN0cmluZz59XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBBcnJheS5pc0FycmF5KGNvbG9ycykgPyBjb2xvcnMgOiBbY29sb3JzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgY29sb3IgZnJvbSB0aGUgY29sb3IgYXJyYXlcbiAgICogb3IgYSByYW5kb20gY29sb3IgaWYgdGhpcy5zaG91bGRSYW5kb21pemUgaXMgdHJ1ZS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBhIGhleCBjb2xvclxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkUmFuZG9taXplID8gTWF0aFV0aWxzLnJhbmRvbUNvbG9yKCkgOiBzYW1wbGUodGhpcy5jb2xvcnMpO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gY3JlYXRlIGFuIEFycmF5U3BhbiBmcm9tIHRoZSBjb2xvcnMgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIHttaXhlZH0gY29sb3JzIC0gY29sb3JzIHRvIHRyeSBhbmQgY3JlYXRlIGFuIEFycmF5U3BhbiBmcm9tXG4gKiBAcmV0dXJuIHs/Q29sb3JTcGFufVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ29sb3JTcGFuID0gY29sb3JzID0+IHtcbiAgaWYgKCFjb2xvcnMpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgSW52YWxpZCBjb2xvcnMgYXJndW1lbnQgJHtjb2xvcnN9IHBhc3NlZCB0byBjcmVhdGVDb2xvclNwYW4uIERlZmF1bHRpbmcgdG8gJ3JhbmRvbScuYFxuICAgICk7XG5cbiAgICBjb2xvcnMgPSAncmFuZG9tJztcbiAgfVxuXG4gIGlmIChjb2xvcnMgaW5zdGFuY2VvZiBDb2xvclNwYW4pIHtcbiAgICByZXR1cm4gY29sb3JzO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDb2xvclNwYW4oY29sb3JzKTtcbn07XG4iXX0=
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,63 @@
|
||||
import MathUtils from './MathUtils';
|
||||
import Util from '../utils/Util';
|
||||
import { MATH_TYPE_SPAN as type } from './types';
|
||||
export default class Span {
|
||||
/**
|
||||
* Span Class. Get a random Number from a to b. Or from c-a to c+b
|
||||
* @param {Number|Array} a - min number
|
||||
* @param {Number} b - max number
|
||||
* @param {Number} center - the center's z value
|
||||
* @example
|
||||
* var span = new Span(0,30);
|
||||
* or
|
||||
* var span = new Span(["#fff","#ff0","#000"]);
|
||||
* or
|
||||
* var span = new Span(5,1,"center");
|
||||
* @extends {Zone}
|
||||
* @constructor
|
||||
*/
|
||||
constructor(a, b, center = false) {
|
||||
this._isArray = false;
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
this.type = type;
|
||||
|
||||
if (Util.isArray(a)) {
|
||||
this._isArray = true;
|
||||
this.a = a;
|
||||
} else {
|
||||
this.a = Util.initValue(a, 1);
|
||||
this.b = Util.initValue(b, this.a);
|
||||
this._center = Util.initValue(center, false);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Span.getValue function
|
||||
* @name get a random Number from a to b. Or get a random Number from c-a to c+b
|
||||
* @param {number} INT or int
|
||||
* @return {number} a random Number
|
||||
*/
|
||||
|
||||
|
||||
getValue(INT) {
|
||||
if (this._isArray) {
|
||||
return this.a[this.a.length * Math.random() >> 0];
|
||||
} else {
|
||||
if (!this._center) return MathUtils.randomAToB(this.a, this.b, INT);else return MathUtils.randomFloating(this.a, this.b, INT);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
export const createSpan = (a, b, c) => {
|
||||
if (a instanceof Span) return a;
|
||||
|
||||
if (b === undefined) {
|
||||
return new Span(a);
|
||||
} else {
|
||||
if (c === undefined) return new Span(a, b);else return new Span(a, b, c);
|
||||
}
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL1NwYW4uanMiXSwibmFtZXMiOlsiTWF0aFV0aWxzIiwiVXRpbCIsIk1BVEhfVFlQRV9TUEFOIiwidHlwZSIsIlNwYW4iLCJjb25zdHJ1Y3RvciIsImEiLCJiIiwiY2VudGVyIiwiX2lzQXJyYXkiLCJpc0FycmF5IiwiaW5pdFZhbHVlIiwiX2NlbnRlciIsImdldFZhbHVlIiwiSU5UIiwibGVuZ3RoIiwiTWF0aCIsInJhbmRvbSIsInJhbmRvbUFUb0IiLCJyYW5kb21GbG9hdGluZyIsImNyZWF0ZVNwYW4iLCJjIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxTQUFQLE1BQXNCLGFBQXRCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixlQUFqQjtBQUNBLFNBQVNDLGNBQWMsSUFBSUMsSUFBM0IsUUFBdUMsU0FBdkM7QUFFQSxlQUFlLE1BQU1DLElBQU4sQ0FBVztBQUN4QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0VDLEVBQUFBLFdBQVcsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQU9DLE1BQVAsRUFBZTtBQUN4QixTQUFLQyxRQUFMLEdBQWdCLEtBQWhCO0FBRUE7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksU0FBS04sSUFBTCxHQUFZQSxJQUFaOztBQUVBLFFBQUlGLElBQUksQ0FBQ1MsT0FBTCxDQUFhSixDQUFiLENBQUosRUFBcUI7QUFDbkIsV0FBS0csUUFBTCxHQUFnQixJQUFoQjtBQUNBLFdBQUtILENBQUwsR0FBU0EsQ0FBVDtBQUNELEtBSEQsTUFHTztBQUNMLFdBQUtBLENBQUwsR0FBU0wsSUFBSSxDQUFDVSxTQUFMLENBQWVMLENBQWYsRUFBa0IsQ0FBbEIsQ0FBVDtBQUNBLFdBQUtDLENBQUwsR0FBU04sSUFBSSxDQUFDVSxTQUFMLENBQWVKLENBQWYsRUFBa0IsS0FBS0QsQ0FBdkIsQ0FBVDtBQUNBLFdBQUtNLE9BQUwsR0FBZVgsSUFBSSxDQUFDVSxTQUFMLENBQWVILE1BQWYsRUFBdUIsS0FBdkIsQ0FBZjtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFSyxFQUFBQSxRQUFRLENBQUNDLEdBQUQsRUFBTTtBQUNaLFFBQUksS0FBS0wsUUFBVCxFQUFtQjtBQUNqQixhQUFPLEtBQUtILENBQUwsQ0FBUSxLQUFLQSxDQUFMLENBQU9TLE1BQVAsR0FBZ0JDLElBQUksQ0FBQ0MsTUFBTCxFQUFqQixJQUFtQyxDQUExQyxDQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsVUFBSSxDQUFDLEtBQUtMLE9BQVYsRUFBbUIsT0FBT1osU0FBUyxDQUFDa0IsVUFBVixDQUFxQixLQUFLWixDQUExQixFQUE2QixLQUFLQyxDQUFsQyxFQUFxQ08sR0FBckMsQ0FBUCxDQUFuQixLQUNLLE9BQU9kLFNBQVMsQ0FBQ21CLGNBQVYsQ0FBeUIsS0FBS2IsQ0FBOUIsRUFBaUMsS0FBS0MsQ0FBdEMsRUFBeUNPLEdBQXpDLENBQVA7QUFDTjtBQUNGOztBQS9DdUI7QUFrRDFCLE9BQU8sTUFBTU0sVUFBVSxHQUFHLENBQUNkLENBQUQsRUFBSUMsQ0FBSixFQUFPYyxDQUFQLEtBQWE7QUFDckMsTUFBSWYsQ0FBQyxZQUFZRixJQUFqQixFQUF1QixPQUFPRSxDQUFQOztBQUV2QixNQUFJQyxDQUFDLEtBQUtlLFNBQVYsRUFBcUI7QUFDbkIsV0FBTyxJQUFJbEIsSUFBSixDQUFTRSxDQUFULENBQVA7QUFDRCxHQUZELE1BRU87QUFDTCxRQUFJZSxDQUFDLEtBQUtDLFNBQVYsRUFBcUIsT0FBTyxJQUFJbEIsSUFBSixDQUFTRSxDQUFULEVBQVlDLENBQVosQ0FBUCxDQUFyQixLQUNLLE9BQU8sSUFBSUgsSUFBSixDQUFTRSxDQUFULEVBQVlDLENBQVosRUFBZWMsQ0FBZixDQUFQO0FBQ047QUFDRixDQVRNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdGhVdGlscyBmcm9tICcuL01hdGhVdGlscyc7XG5pbXBvcnQgVXRpbCBmcm9tICcuLi91dGlscy9VdGlsJztcbmltcG9ydCB7IE1BVEhfVFlQRV9TUEFOIGFzIHR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BhbiB7XG4gIC8qKlxuICAgKiBTcGFuIENsYXNzLiBHZXQgYSByYW5kb20gTnVtYmVyIGZyb20gYSB0byBiLiBPciBmcm9tIGMtYSB0byBjK2JcbiAgICogQHBhcmFtIHtOdW1iZXJ8QXJyYXl9IGEgLSBtaW4gbnVtYmVyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBiIC0gbWF4IG51bWJlclxuICAgKiBAcGFyYW0ge051bWJlcn0gY2VudGVyIC0gdGhlIGNlbnRlcidzIHogdmFsdWVcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIHNwYW4gPSBuZXcgU3BhbigwLDMwKTtcbiAgICogb3JcbiAgICogdmFyIHNwYW4gPSBuZXcgU3BhbihbXCIjZmZmXCIsXCIjZmYwXCIsXCIjMDAwXCJdKTtcbiAgICogb3JcbiAgICogdmFyIHNwYW4gPSBuZXcgU3Bhbig1LDEsXCJjZW50ZXJcIik7XG4gICAqIEBleHRlbmRzIHtab25lfVxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKGEsIGIsIGNlbnRlcikge1xuICAgIHRoaXMuX2lzQXJyYXkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBjbGFzcyB0eXBlLlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgIGlmIChVdGlsLmlzQXJyYXkoYSkpIHtcbiAgICAgIHRoaXMuX2lzQXJyYXkgPSB0cnVlO1xuICAgICAgdGhpcy5hID0gYTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hID0gVXRpbC5pbml0VmFsdWUoYSwgMSk7XG4gICAgICB0aGlzLmIgPSBVdGlsLmluaXRWYWx1ZShiLCB0aGlzLmEpO1xuICAgICAgdGhpcy5fY2VudGVyID0gVXRpbC5pbml0VmFsdWUoY2VudGVyLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNwYW4uZ2V0VmFsdWUgZnVuY3Rpb25cbiAgICogQG5hbWUgZ2V0IGEgcmFuZG9tIE51bWJlciBmcm9tIGEgdG8gYi4gT3IgZ2V0IGEgcmFuZG9tIE51bWJlciBmcm9tIGMtYSB0byBjK2JcbiAgICogQHBhcmFtIHtudW1iZXJ9IElOVCBvciBpbnRcbiAgICogQHJldHVybiB7bnVtYmVyfSBhIHJhbmRvbSBOdW1iZXJcbiAgICovXG4gIGdldFZhbHVlKElOVCkge1xuICAgIGlmICh0aGlzLl9pc0FycmF5KSB7XG4gICAgICByZXR1cm4gdGhpcy5hWyh0aGlzLmEubGVuZ3RoICogTWF0aC5yYW5kb20oKSkgPj4gMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5fY2VudGVyKSByZXR1cm4gTWF0aFV0aWxzLnJhbmRvbUFUb0IodGhpcy5hLCB0aGlzLmIsIElOVCk7XG4gICAgICBlbHNlIHJldHVybiBNYXRoVXRpbHMucmFuZG9tRmxvYXRpbmcodGhpcy5hLCB0aGlzLmIsIElOVCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTcGFuID0gKGEsIGIsIGMpID0+IHtcbiAgaWYgKGEgaW5zdGFuY2VvZiBTcGFuKSByZXR1cm4gYTtcblxuICBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBTcGFuKGEpO1xuICB9IGVsc2Uge1xuICAgIGlmIChjID09PSB1bmRlZmluZWQpIHJldHVybiBuZXcgU3BhbihhLCBiKTtcbiAgICBlbHNlIHJldHVybiBuZXcgU3BhbihhLCBiLCBjKTtcbiAgfVxufTtcbiJdfQ==
|
||||
@@ -0,0 +1,34 @@
|
||||
import { Euler, Vector3 } from '../core/three/';
|
||||
export default class Vector3D extends Vector3 {
|
||||
clear() {
|
||||
this.x = 0.0;
|
||||
this.y = 0.0;
|
||||
this.z = 0.0;
|
||||
return this;
|
||||
}
|
||||
|
||||
scalar(s) {
|
||||
this.x *= s;
|
||||
this.y *= s;
|
||||
this.z *= s;
|
||||
return this;
|
||||
}
|
||||
|
||||
addValue(a, b, c) {
|
||||
this.x += a;
|
||||
this.y += b;
|
||||
this.z += c;
|
||||
return this;
|
||||
}
|
||||
|
||||
toString() {
|
||||
return 'x:' + this.x + 'y:' + this.y + 'z:' + this.z;
|
||||
}
|
||||
|
||||
eulerFromDir(vector3D) {
|
||||
const euler = new Euler();
|
||||
return euler.setFromVector3(vector3D);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL1ZlY3RvcjNELmpzIl0sIm5hbWVzIjpbIkV1bGVyIiwiVmVjdG9yMyIsIlZlY3RvcjNEIiwiY2xlYXIiLCJ4IiwieSIsInoiLCJzY2FsYXIiLCJzIiwiYWRkVmFsdWUiLCJhIiwiYiIsImMiLCJ0b1N0cmluZyIsImV1bGVyRnJvbURpciIsInZlY3RvcjNEIiwiZXVsZXIiLCJzZXRGcm9tVmVjdG9yMyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsS0FBVCxFQUFnQkMsT0FBaEIsUUFBK0IsZ0JBQS9CO0FBRUEsZUFBZSxNQUFNQyxRQUFOLFNBQXVCRCxPQUF2QixDQUErQjtBQUM1Q0UsRUFBQUEsS0FBSyxHQUFHO0FBQ04sU0FBS0MsQ0FBTCxHQUFTLEdBQVQ7QUFDQSxTQUFLQyxDQUFMLEdBQVMsR0FBVDtBQUNBLFNBQUtDLENBQUwsR0FBUyxHQUFUO0FBRUEsV0FBTyxJQUFQO0FBQ0Q7O0FBRURDLEVBQUFBLE1BQU0sQ0FBQ0MsQ0FBRCxFQUFJO0FBQ1IsU0FBS0osQ0FBTCxJQUFVSSxDQUFWO0FBQ0EsU0FBS0gsQ0FBTCxJQUFVRyxDQUFWO0FBQ0EsU0FBS0YsQ0FBTCxJQUFVRSxDQUFWO0FBRUEsV0FBTyxJQUFQO0FBQ0Q7O0FBRURDLEVBQUFBLFFBQVEsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQU9DLENBQVAsRUFBVTtBQUNoQixTQUFLUixDQUFMLElBQVVNLENBQVY7QUFDQSxTQUFLTCxDQUFMLElBQVVNLENBQVY7QUFDQSxTQUFLTCxDQUFMLElBQVVNLENBQVY7QUFFQSxXQUFPLElBQVA7QUFDRDs7QUFFREMsRUFBQUEsUUFBUSxHQUFHO0FBQ1QsV0FBTyxPQUFPLEtBQUtULENBQVosR0FBZ0IsSUFBaEIsR0FBdUIsS0FBS0MsQ0FBNUIsR0FBZ0MsSUFBaEMsR0FBdUMsS0FBS0MsQ0FBbkQ7QUFDRDs7QUFFRFEsRUFBQUEsWUFBWSxDQUFDQyxRQUFELEVBQVc7QUFDckIsVUFBTUMsS0FBSyxHQUFHLElBQUloQixLQUFKLEVBQWQ7QUFFQSxXQUFPZ0IsS0FBSyxDQUFDQyxjQUFOLENBQXFCRixRQUFyQixDQUFQO0FBQ0Q7O0FBakMyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV1bGVyLCBWZWN0b3IzIH0gZnJvbSAnLi4vY29yZS90aHJlZS8nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWN0b3IzRCBleHRlbmRzIFZlY3RvcjMge1xuICBjbGVhcigpIHtcbiAgICB0aGlzLnggPSAwLjA7XG4gICAgdGhpcy55ID0gMC4wO1xuICAgIHRoaXMueiA9IDAuMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2NhbGFyKHMpIHtcbiAgICB0aGlzLnggKj0gcztcbiAgICB0aGlzLnkgKj0gcztcbiAgICB0aGlzLnogKj0gcztcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkVmFsdWUoYSwgYiwgYykge1xuICAgIHRoaXMueCArPSBhO1xuICAgIHRoaXMueSArPSBiO1xuICAgIHRoaXMueiArPSBjO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ3g6JyArIHRoaXMueCArICd5OicgKyB0aGlzLnkgKyAnejonICsgdGhpcy56O1xuICB9XG5cbiAgZXVsZXJGcm9tRGlyKHZlY3RvcjNEKSB7XG4gICAgY29uc3QgZXVsZXIgPSBuZXcgRXVsZXIoKTtcblxuICAgIHJldHVybiBldWxlci5zZXRGcm9tVmVjdG9yMyh2ZWN0b3IzRCk7XG4gIH1cbn1cbiJdfQ==
|
||||
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* @see https://en.wikipedia.org/wiki/Euler_method
|
||||
* @type {string}
|
||||
*/
|
||||
export const INTEGRATION_TYPE_EULER = 'EULER';
|
||||
/**
|
||||
* @see http://web.mit.edu/10.001/Web/Course_Notes/Differential_Equations_Notes/node5.html
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
export const INTEGRATION_TYPE_RK2 = 'RUNGE_KUTTA_2';
|
||||
/**
|
||||
* @see http://web.mit.edu/10.001/Web/Course_Notes/Differential_Equations_Notes/node5.html
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
export const INTEGRATION_TYPE_RK4 = 'RUNGE_KUTTA_4';
|
||||
/**
|
||||
* @see https://en.wikipedia.org/wiki/Verlet_integration
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
export const INTEGRATION_TYPE_VERLET = 'VERLET';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL2NvbnN0YW50cy5qcyJdLCJuYW1lcyI6WyJJTlRFR1JBVElPTl9UWVBFX0VVTEVSIiwiSU5URUdSQVRJT05fVFlQRV9SSzIiLCJJTlRFR1JBVElPTl9UWVBFX1JLNCIsIklOVEVHUkFUSU9OX1RZUEVfVkVSTEVUIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTUEsc0JBQXNCLEdBQUcsT0FBL0I7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLG9CQUFvQixHQUFHLGVBQTdCO0FBRVA7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxNQUFNQyxvQkFBb0IsR0FBRyxlQUE3QjtBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE9BQU8sTUFBTUMsdUJBQXVCLEdBQUcsUUFBaEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVsZXJfbWV0aG9kXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgSU5URUdSQVRJT05fVFlQRV9FVUxFUiA9ICdFVUxFUic7XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd2ViLm1pdC5lZHUvMTAuMDAxL1dlYi9Db3Vyc2VfTm90ZXMvRGlmZmVyZW50aWFsX0VxdWF0aW9uc19Ob3Rlcy9ub2RlNS5odG1sXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgSU5URUdSQVRJT05fVFlQRV9SSzIgPSAnUlVOR0VfS1VUVEFfMic7XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd2ViLm1pdC5lZHUvMTAuMDAxL1dlYi9Db3Vyc2VfTm90ZXMvRGlmZmVyZW50aWFsX0VxdWF0aW9uc19Ob3Rlcy9ub2RlNS5odG1sXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgSU5URUdSQVRJT05fVFlQRV9SSzQgPSAnUlVOR0VfS1VUVEFfNCc7XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WZXJsZXRfaW50ZWdyYXRpb25cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBJTlRFR1JBVElPTl9UWVBFX1ZFUkxFVCA9ICdWRVJMRVQnO1xuIl19
|
||||
@@ -0,0 +1,10 @@
|
||||
export { default as ArraySpan, createArraySpan } from './ArraySpan';
|
||||
export { default as ColorSpan, createColorSpan } from './ColorSpan';
|
||||
export { default as Box } from './Box';
|
||||
export { integrate } from './integration';
|
||||
export { default as MathUtils } from './MathUtils';
|
||||
export { default as Polar3D } from './Polar3D';
|
||||
export { default as Span, createSpan } from './Span';
|
||||
export { default as Vector3D } from './Vector3D';
|
||||
export { INTEGRATION_TYPE_EULER, INTEGRATION_TYPE_RK2, INTEGRATION_TYPE_RK4, INTEGRATION_TYPE_VERLET } from './constants';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL2luZGV4LmpzIl0sIm5hbWVzIjpbImRlZmF1bHQiLCJBcnJheVNwYW4iLCJjcmVhdGVBcnJheVNwYW4iLCJDb2xvclNwYW4iLCJjcmVhdGVDb2xvclNwYW4iLCJCb3giLCJpbnRlZ3JhdGUiLCJNYXRoVXRpbHMiLCJQb2xhcjNEIiwiU3BhbiIsImNyZWF0ZVNwYW4iLCJWZWN0b3IzRCIsIklOVEVHUkFUSU9OX1RZUEVfRVVMRVIiLCJJTlRFR1JBVElPTl9UWVBFX1JLMiIsIklOVEVHUkFUSU9OX1RZUEVfUks0IiwiSU5URUdSQVRJT05fVFlQRV9WRVJMRVQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sSUFBSUMsU0FBcEIsRUFBK0JDLGVBQS9CLFFBQXNELGFBQXREO0FBQ0EsU0FBU0YsT0FBTyxJQUFJRyxTQUFwQixFQUErQkMsZUFBL0IsUUFBc0QsYUFBdEQ7QUFDQSxTQUFTSixPQUFPLElBQUlLLEdBQXBCLFFBQStCLE9BQS9CO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQixlQUExQjtBQUNBLFNBQVNOLE9BQU8sSUFBSU8sU0FBcEIsUUFBcUMsYUFBckM7QUFDQSxTQUFTUCxPQUFPLElBQUlRLE9BQXBCLFFBQW1DLFdBQW5DO0FBQ0EsU0FBU1IsT0FBTyxJQUFJUyxJQUFwQixFQUEwQkMsVUFBMUIsUUFBNEMsUUFBNUM7QUFDQSxTQUFTVixPQUFPLElBQUlXLFFBQXBCLFFBQW9DLFlBQXBDO0FBQ0EsU0FDRUMsc0JBREYsRUFFRUMsb0JBRkYsRUFHRUMsb0JBSEYsRUFJRUMsdUJBSkYsUUFLTyxhQUxQIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJheVNwYW4sIGNyZWF0ZUFycmF5U3BhbiB9IGZyb20gJy4vQXJyYXlTcGFuJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTcGFuLCBjcmVhdGVDb2xvclNwYW4gfSBmcm9tICcuL0NvbG9yU3Bhbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJveCB9IGZyb20gJy4vQm94JztcbmV4cG9ydCB7IGludGVncmF0ZSB9IGZyb20gJy4vaW50ZWdyYXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXRoVXRpbHMgfSBmcm9tICcuL01hdGhVdGlscyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBvbGFyM0QgfSBmcm9tICcuL1BvbGFyM0QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTcGFuLCBjcmVhdGVTcGFuIH0gZnJvbSAnLi9TcGFuJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmVjdG9yM0QgfSBmcm9tICcuL1ZlY3RvcjNEJztcbmV4cG9ydCB7XG4gIElOVEVHUkFUSU9OX1RZUEVfRVVMRVIsXG4gIElOVEVHUkFUSU9OX1RZUEVfUksyLFxuICBJTlRFR1JBVElPTl9UWVBFX1JLNCxcbiAgSU5URUdSQVRJT05fVFlQRV9WRVJMRVRcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuIl19
|
||||
@@ -0,0 +1,47 @@
|
||||
import { INTEGRATION_TYPE_EULER } from './constants';
|
||||
import { DEFAULT_SYSTEM_DELTA } from '../core/constants';
|
||||
/**
|
||||
* Performs euler integration on the particle.
|
||||
*
|
||||
* @param {Particle} particle - The particle to integrate
|
||||
* @param {number} time - The factor of time to use
|
||||
* @param {number} damping - The damping to use
|
||||
* @return void
|
||||
*/
|
||||
|
||||
const eulerIntegration = (particle, time, damping) => {
|
||||
if (particle.sleep) {
|
||||
return;
|
||||
}
|
||||
|
||||
particle.old.position.copy(particle.position);
|
||||
particle.old.velocity.copy(particle.velocity);
|
||||
particle.acceleration.scalar(1 / particle.mass);
|
||||
particle.velocity.add(particle.acceleration.scalar(time));
|
||||
particle.position.add(particle.old.velocity.scalar(time));
|
||||
damping && particle.velocity.scalar(Math.pow(damping, time / DEFAULT_SYSTEM_DELTA));
|
||||
particle.acceleration.clear();
|
||||
};
|
||||
/**
|
||||
* Performs the chosen integration on the particle.
|
||||
* Defaults to euler integration.
|
||||
*
|
||||
* @param {Particle} particle - The particle to integrate
|
||||
* @param {number} time - The factor of time to use
|
||||
* @param {number} damping - The damping to use
|
||||
* @param {string} [type=INTEGRATION_TYPE_EULER] - The algorithm to use
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
export const integrate = (particle, time, damping, type = INTEGRATION_TYPE_EULER) => {
|
||||
switch (type) {
|
||||
case INTEGRATION_TYPE_EULER:
|
||||
eulerIntegration(particle, time, damping);
|
||||
break;
|
||||
|
||||
default:
|
||||
eulerIntegration(particle, time, damping);
|
||||
}
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL2ludGVncmF0aW9uLmpzIl0sIm5hbWVzIjpbIklOVEVHUkFUSU9OX1RZUEVfRVVMRVIiLCJERUZBVUxUX1NZU1RFTV9ERUxUQSIsImV1bGVySW50ZWdyYXRpb24iLCJwYXJ0aWNsZSIsInRpbWUiLCJkYW1waW5nIiwic2xlZXAiLCJvbGQiLCJwb3NpdGlvbiIsImNvcHkiLCJ2ZWxvY2l0eSIsImFjY2VsZXJhdGlvbiIsInNjYWxhciIsIm1hc3MiLCJhZGQiLCJNYXRoIiwicG93IiwiY2xlYXIiLCJpbnRlZ3JhdGUiLCJ0eXBlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxzQkFBVCxRQUF1QyxhQUF2QztBQUNBLFNBQVNDLG9CQUFULFFBQXFDLG1CQUFyQztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsQ0FBQ0MsUUFBRCxFQUFXQyxJQUFYLEVBQWlCQyxPQUFqQixLQUE2QjtBQUNwRCxNQUFJRixRQUFRLENBQUNHLEtBQWIsRUFBb0I7QUFDbEI7QUFDRDs7QUFFREgsRUFBQUEsUUFBUSxDQUFDSSxHQUFULENBQWFDLFFBQWIsQ0FBc0JDLElBQXRCLENBQTJCTixRQUFRLENBQUNLLFFBQXBDO0FBQ0FMLEVBQUFBLFFBQVEsQ0FBQ0ksR0FBVCxDQUFhRyxRQUFiLENBQXNCRCxJQUF0QixDQUEyQk4sUUFBUSxDQUFDTyxRQUFwQztBQUNBUCxFQUFBQSxRQUFRLENBQUNRLFlBQVQsQ0FBc0JDLE1BQXRCLENBQTZCLElBQUlULFFBQVEsQ0FBQ1UsSUFBMUM7QUFDQVYsRUFBQUEsUUFBUSxDQUFDTyxRQUFULENBQWtCSSxHQUFsQixDQUFzQlgsUUFBUSxDQUFDUSxZQUFULENBQXNCQyxNQUF0QixDQUE2QlIsSUFBN0IsQ0FBdEI7QUFDQUQsRUFBQUEsUUFBUSxDQUFDSyxRQUFULENBQWtCTSxHQUFsQixDQUFzQlgsUUFBUSxDQUFDSSxHQUFULENBQWFHLFFBQWIsQ0FBc0JFLE1BQXRCLENBQTZCUixJQUE3QixDQUF0QjtBQUNBQyxFQUFBQSxPQUFPLElBQ0xGLFFBQVEsQ0FBQ08sUUFBVCxDQUFrQkUsTUFBbEIsQ0FBeUJHLElBQUksQ0FBQ0MsR0FBTCxDQUFTWCxPQUFULEVBQWtCRCxJQUFJLEdBQUdILG9CQUF6QixDQUF6QixDQURGO0FBRUFFLEVBQUFBLFFBQVEsQ0FBQ1EsWUFBVCxDQUFzQk0sS0FBdEI7QUFDRCxDQWJEO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLE9BQU8sTUFBTUMsU0FBUyxHQUFHLENBQ3ZCZixRQUR1QixFQUV2QkMsSUFGdUIsRUFHdkJDLE9BSHVCLEVBSXZCYyxJQUFJLEdBQUduQixzQkFKZ0IsS0FLcEI7QUFDSCxVQUFRbUIsSUFBUjtBQUNFLFNBQUtuQixzQkFBTDtBQUNFRSxNQUFBQSxnQkFBZ0IsQ0FBQ0MsUUFBRCxFQUFXQyxJQUFYLEVBQWlCQyxPQUFqQixDQUFoQjtBQUNBOztBQUNGO0FBQ0VILE1BQUFBLGdCQUFnQixDQUFDQyxRQUFELEVBQVdDLElBQVgsRUFBaUJDLE9BQWpCLENBQWhCO0FBTEo7QUFPRCxDQWJNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU5URUdSQVRJT05fVFlQRV9FVUxFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IERFRkFVTFRfU1lTVEVNX0RFTFRBIH0gZnJvbSAnLi4vY29yZS9jb25zdGFudHMnO1xuXG4vKipcbiAqIFBlcmZvcm1zIGV1bGVyIGludGVncmF0aW9uIG9uIHRoZSBwYXJ0aWNsZS5cbiAqXG4gKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSB0byBpbnRlZ3JhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGZhY3RvciBvZiB0aW1lIHRvIHVzZVxuICogQHBhcmFtIHtudW1iZXJ9IGRhbXBpbmcgLSBUaGUgZGFtcGluZyB0byB1c2VcbiAqIEByZXR1cm4gdm9pZFxuICovXG5jb25zdCBldWxlckludGVncmF0aW9uID0gKHBhcnRpY2xlLCB0aW1lLCBkYW1waW5nKSA9PiB7XG4gIGlmIChwYXJ0aWNsZS5zbGVlcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBhcnRpY2xlLm9sZC5wb3NpdGlvbi5jb3B5KHBhcnRpY2xlLnBvc2l0aW9uKTtcbiAgcGFydGljbGUub2xkLnZlbG9jaXR5LmNvcHkocGFydGljbGUudmVsb2NpdHkpO1xuICBwYXJ0aWNsZS5hY2NlbGVyYXRpb24uc2NhbGFyKDEgLyBwYXJ0aWNsZS5tYXNzKTtcbiAgcGFydGljbGUudmVsb2NpdHkuYWRkKHBhcnRpY2xlLmFjY2VsZXJhdGlvbi5zY2FsYXIodGltZSkpO1xuICBwYXJ0aWNsZS5wb3NpdGlvbi5hZGQocGFydGljbGUub2xkLnZlbG9jaXR5LnNjYWxhcih0aW1lKSk7XG4gIGRhbXBpbmcgJiZcbiAgICBwYXJ0aWNsZS52ZWxvY2l0eS5zY2FsYXIoTWF0aC5wb3coZGFtcGluZywgdGltZSAvIERFRkFVTFRfU1lTVEVNX0RFTFRBKSk7XG4gIHBhcnRpY2xlLmFjY2VsZXJhdGlvbi5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgY2hvc2VuIGludGVncmF0aW9uIG9uIHRoZSBwYXJ0aWNsZS5cbiAqIERlZmF1bHRzIHRvIGV1bGVyIGludGVncmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIHRvIGludGVncmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgZmFjdG9yIG9mIHRpbWUgdG8gdXNlXG4gKiBAcGFyYW0ge251bWJlcn0gZGFtcGluZyAtIFRoZSBkYW1waW5nIHRvIHVzZVxuICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPUlOVEVHUkFUSU9OX1RZUEVfRVVMRVJdIC0gVGhlIGFsZ29yaXRobSB0byB1c2VcbiAqIEByZXR1cm4gdm9pZFxuICovXG5leHBvcnQgY29uc3QgaW50ZWdyYXRlID0gKFxuICBwYXJ0aWNsZSxcbiAgdGltZSxcbiAgZGFtcGluZyxcbiAgdHlwZSA9IElOVEVHUkFUSU9OX1RZUEVfRVVMRVJcbikgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIElOVEVHUkFUSU9OX1RZUEVfRVVMRVI6XG4gICAgICBldWxlckludGVncmF0aW9uKHBhcnRpY2xlLCB0aW1lLCBkYW1waW5nKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBldWxlckludGVncmF0aW9uKHBhcnRpY2xlLCB0aW1lLCBkYW1waW5nKTtcbiAgfVxufTtcbiJdfQ==
|
||||
@@ -0,0 +1,7 @@
|
||||
export const MATH_TYPE_ARRAY_SPAN = 'ArraySpan';
|
||||
export const MATH_TYPE_COLOR_SPAN = 'ColorSpan';
|
||||
export const MATH_TYPE_BOX = 'Box';
|
||||
export const MATH_TYPE_POLAR_3D = 'Polar3D';
|
||||
export const MATH_TYPE_SPAN = 'Span';
|
||||
export const MATH_TYPE_VECTOR_3D = 'Vector3D';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXRoL3R5cGVzLmpzIl0sIm5hbWVzIjpbIk1BVEhfVFlQRV9BUlJBWV9TUEFOIiwiTUFUSF9UWVBFX0NPTE9SX1NQQU4iLCJNQVRIX1RZUEVfQk9YIiwiTUFUSF9UWVBFX1BPTEFSXzNEIiwiTUFUSF9UWVBFX1NQQU4iLCJNQVRIX1RZUEVfVkVDVE9SXzNEIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU1BLG9CQUFvQixHQUFHLFdBQTdCO0FBQ1AsT0FBTyxNQUFNQyxvQkFBb0IsR0FBRyxXQUE3QjtBQUNQLE9BQU8sTUFBTUMsYUFBYSxHQUFHLEtBQXRCO0FBQ1AsT0FBTyxNQUFNQyxrQkFBa0IsR0FBRyxTQUEzQjtBQUNQLE9BQU8sTUFBTUMsY0FBYyxHQUFHLE1BQXZCO0FBQ1AsT0FBTyxNQUFNQyxtQkFBbUIsR0FBRyxVQUE1QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBNQVRIX1RZUEVfQVJSQVlfU1BBTiA9ICdBcnJheVNwYW4nO1xuZXhwb3J0IGNvbnN0IE1BVEhfVFlQRV9DT0xPUl9TUEFOID0gJ0NvbG9yU3Bhbic7XG5leHBvcnQgY29uc3QgTUFUSF9UWVBFX0JPWCA9ICdCb3gnO1xuZXhwb3J0IGNvbnN0IE1BVEhfVFlQRV9QT0xBUl8zRCA9ICdQb2xhcjNEJztcbmV4cG9ydCBjb25zdCBNQVRIX1RZUEVfU1BBTiA9ICdTcGFuJztcbmV4cG9ydCBjb25zdCBNQVRIX1RZUEVfVkVDVE9SXzNEID0gJ1ZlY3RvcjNEJztcbiJdfQ==
|
||||
@@ -0,0 +1,76 @@
|
||||
import { PARTICLE_CREATED, PARTICLE_DEAD, PARTICLE_UPDATE, SYSTEM_UPDATE } from '../events/constants';
|
||||
import { RENDERER_TYPE_BASE } from './types';
|
||||
import { __DEV__ } from '../constants';
|
||||
export default class BaseRenderer {
|
||||
constructor(type = RENDERER_TYPE_BASE) {
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
init(system) {
|
||||
var self = this;
|
||||
this.system = system;
|
||||
this.system.eventDispatcher.addEventListener(SYSTEM_UPDATE, function (system) {
|
||||
self.onSystemUpdate.call(self, system);
|
||||
});
|
||||
this.system.eventDispatcher.addEventListener(PARTICLE_CREATED, function (particle) {
|
||||
self.onParticleCreated.call(self, particle);
|
||||
});
|
||||
this.system.eventDispatcher.addEventListener(PARTICLE_UPDATE, function (particle) {
|
||||
self.onParticleUpdate.call(self, particle);
|
||||
});
|
||||
this.system.eventDispatcher.addEventListener(PARTICLE_DEAD, function (particle) {
|
||||
self.onParticleDead.call(self, particle);
|
||||
});
|
||||
this.logRendererType();
|
||||
}
|
||||
|
||||
remove() {
|
||||
this.system = null;
|
||||
}
|
||||
/**
|
||||
* @abstract
|
||||
*/
|
||||
|
||||
|
||||
onParticleCreated(particle) {} // eslint-disable-line
|
||||
|
||||
/**
|
||||
* @abstract
|
||||
*/
|
||||
|
||||
|
||||
onParticleUpdate(particle) {} // eslint-disable-line
|
||||
|
||||
/**
|
||||
* @abstract
|
||||
*/
|
||||
|
||||
|
||||
onParticleDead(particle) {} // eslint-disable-line
|
||||
|
||||
/**
|
||||
* @abstract
|
||||
*/
|
||||
|
||||
|
||||
onSystemUpdate(system) {} // eslint-disable-line
|
||||
|
||||
/**
|
||||
* Logs the renderer type being used when in development mode.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
|
||||
logRendererType() {
|
||||
if (!__DEV__) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW5kZXJlci9CYXNlUmVuZGVyZXIuanMiXSwibmFtZXMiOlsiUEFSVElDTEVfQ1JFQVRFRCIsIlBBUlRJQ0xFX0RFQUQiLCJQQVJUSUNMRV9VUERBVEUiLCJTWVNURU1fVVBEQVRFIiwiUkVOREVSRVJfVFlQRV9CQVNFIiwiX19ERVZfXyIsIkJhc2VSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwidHlwZSIsImluaXQiLCJzeXN0ZW0iLCJzZWxmIiwiZXZlbnREaXNwYXRjaGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uU3lzdGVtVXBkYXRlIiwiY2FsbCIsInBhcnRpY2xlIiwib25QYXJ0aWNsZUNyZWF0ZWQiLCJvblBhcnRpY2xlVXBkYXRlIiwib25QYXJ0aWNsZURlYWQiLCJsb2dSZW5kZXJlclR5cGUiLCJyZW1vdmUiLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxnQkFERixFQUVFQyxhQUZGLEVBR0VDLGVBSEYsRUFJRUMsYUFKRixRQUtPLHFCQUxQO0FBT0EsU0FBU0Msa0JBQVQsUUFBbUMsU0FBbkM7QUFDQSxTQUFTQyxPQUFULFFBQXdCLGNBQXhCO0FBRUEsZUFBZSxNQUFNQyxZQUFOLENBQW1CO0FBQ2hDQyxFQUFBQSxXQUFXLENBQUNDLElBQUksR0FBR0osa0JBQVIsRUFBNEI7QUFDckM7QUFDSjtBQUNBO0FBQ0E7QUFDSSxTQUFLSSxJQUFMLEdBQVlBLElBQVo7QUFDRDs7QUFFREMsRUFBQUEsSUFBSSxDQUFDQyxNQUFELEVBQVM7QUFDWCxRQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUVBLFNBQUtELE1BQUwsR0FBY0EsTUFBZDtBQUVBLFNBQUtBLE1BQUwsQ0FBWUUsZUFBWixDQUE0QkMsZ0JBQTVCLENBQTZDVixhQUE3QyxFQUE0RCxVQUMxRE8sTUFEMEQsRUFFMUQ7QUFDQUMsTUFBQUEsSUFBSSxDQUFDRyxjQUFMLENBQW9CQyxJQUFwQixDQUF5QkosSUFBekIsRUFBK0JELE1BQS9CO0FBQ0QsS0FKRDtBQU1BLFNBQUtBLE1BQUwsQ0FBWUUsZUFBWixDQUE0QkMsZ0JBQTVCLENBQTZDYixnQkFBN0MsRUFBK0QsVUFDN0RnQixRQUQ2RCxFQUU3RDtBQUNBTCxNQUFBQSxJQUFJLENBQUNNLGlCQUFMLENBQXVCRixJQUF2QixDQUE0QkosSUFBNUIsRUFBa0NLLFFBQWxDO0FBQ0QsS0FKRDtBQU1BLFNBQUtOLE1BQUwsQ0FBWUUsZUFBWixDQUE0QkMsZ0JBQTVCLENBQTZDWCxlQUE3QyxFQUE4RCxVQUM1RGMsUUFENEQsRUFFNUQ7QUFDQUwsTUFBQUEsSUFBSSxDQUFDTyxnQkFBTCxDQUFzQkgsSUFBdEIsQ0FBMkJKLElBQTNCLEVBQWlDSyxRQUFqQztBQUNELEtBSkQ7QUFNQSxTQUFLTixNQUFMLENBQVlFLGVBQVosQ0FBNEJDLGdCQUE1QixDQUE2Q1osYUFBN0MsRUFBNEQsVUFDMURlLFFBRDBELEVBRTFEO0FBQ0FMLE1BQUFBLElBQUksQ0FBQ1EsY0FBTCxDQUFvQkosSUFBcEIsQ0FBeUJKLElBQXpCLEVBQStCSyxRQUEvQjtBQUNELEtBSkQ7QUFNQSxTQUFLSSxlQUFMO0FBQ0Q7O0FBRURDLEVBQUFBLE1BQU0sR0FBRztBQUNQLFNBQUtYLE1BQUwsR0FBYyxJQUFkO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNFTyxFQUFBQSxpQkFBaUIsQ0FBQ0QsUUFBRCxFQUFXLENBQUUsQ0FoREUsQ0FnREQ7O0FBRS9CO0FBQ0Y7QUFDQTs7O0FBQ0VFLEVBQUFBLGdCQUFnQixDQUFDRixRQUFELEVBQVcsQ0FBRSxDQXJERyxDQXFERjs7QUFFOUI7QUFDRjtBQUNBOzs7QUFDRUcsRUFBQUEsY0FBYyxDQUFDSCxRQUFELEVBQVcsQ0FBRSxDQTFESyxDQTBESjs7QUFFNUI7QUFDRjtBQUNBOzs7QUFDRUYsRUFBQUEsY0FBYyxDQUFDSixNQUFELEVBQVMsQ0FBRSxDQS9ETyxDQStETjs7QUFFMUI7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0VVLEVBQUFBLGVBQWUsR0FBRztBQUNoQixRQUFJLENBQUNmLE9BQUwsRUFBYztBQUNaO0FBQ0Q7O0FBRURpQixJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBYSxHQUFFLEtBQUtmLElBQUssRUFBekI7QUFDRDs7QUE1RStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUEFSVElDTEVfQ1JFQVRFRCxcbiAgUEFSVElDTEVfREVBRCxcbiAgUEFSVElDTEVfVVBEQVRFLFxuICBTWVNURU1fVVBEQVRFLFxufSBmcm9tICcuLi9ldmVudHMvY29uc3RhbnRzJztcblxuaW1wb3J0IHsgUkVOREVSRVJfVFlQRV9CQVNFIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBfX0RFVl9fIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZVJlbmRlcmVyIHtcbiAgY29uc3RydWN0b3IodHlwZSA9IFJFTkRFUkVSX1RZUEVfQkFTRSkge1xuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoZSBjbGFzcyB0eXBlLlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIGluaXQoc3lzdGVtKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5zeXN0ZW0gPSBzeXN0ZW07XG5cbiAgICB0aGlzLnN5c3RlbS5ldmVudERpc3BhdGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihTWVNURU1fVVBEQVRFLCBmdW5jdGlvbihcbiAgICAgIHN5c3RlbVxuICAgICkge1xuICAgICAgc2VsZi5vblN5c3RlbVVwZGF0ZS5jYWxsKHNlbGYsIHN5c3RlbSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN5c3RlbS5ldmVudERpc3BhdGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihQQVJUSUNMRV9DUkVBVEVELCBmdW5jdGlvbihcbiAgICAgIHBhcnRpY2xlXG4gICAgKSB7XG4gICAgICBzZWxmLm9uUGFydGljbGVDcmVhdGVkLmNhbGwoc2VsZiwgcGFydGljbGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zeXN0ZW0uZXZlbnREaXNwYXRjaGVyLmFkZEV2ZW50TGlzdGVuZXIoUEFSVElDTEVfVVBEQVRFLCBmdW5jdGlvbihcbiAgICAgIHBhcnRpY2xlXG4gICAgKSB7XG4gICAgICBzZWxmLm9uUGFydGljbGVVcGRhdGUuY2FsbChzZWxmLCBwYXJ0aWNsZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN5c3RlbS5ldmVudERpc3BhdGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihQQVJUSUNMRV9ERUFELCBmdW5jdGlvbihcbiAgICAgIHBhcnRpY2xlXG4gICAgKSB7XG4gICAgICBzZWxmLm9uUGFydGljbGVEZWFkLmNhbGwoc2VsZiwgcGFydGljbGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sb2dSZW5kZXJlclR5cGUoKTtcbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLnN5c3RlbSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqL1xuICBvblBhcnRpY2xlQ3JlYXRlZChwYXJ0aWNsZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIG9uUGFydGljbGVVcGRhdGUocGFydGljbGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqL1xuICBvblBhcnRpY2xlRGVhZChwYXJ0aWNsZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIG9uU3lzdGVtVXBkYXRlKHN5c3RlbSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8qKlxuICAgKiBMb2dzIHRoZSByZW5kZXJlciB0eXBlIGJlaW5nIHVzZWQgd2hlbiBpbiBkZXZlbG9wbWVudCBtb2RlLlxuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGxvZ1JlbmRlcmVyVHlwZSgpIHtcbiAgICBpZiAoIV9fREVWX18pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgJHt0aGlzLnR5cGV9YCk7XG4gIH1cbn1cbiJdfQ==
|
||||
@@ -0,0 +1,23 @@
|
||||
import BaseRenderer from './BaseRenderer';
|
||||
import { Pool } from '../core';
|
||||
import { RENDERER_TYPE_CUSTOM as type } from './types';
|
||||
export default class CustomRenderer extends BaseRenderer {
|
||||
constructor() {
|
||||
super(type);
|
||||
this.targetPool = new Pool();
|
||||
this.materialPool = new Pool();
|
||||
}
|
||||
|
||||
onSystemUpdate() {}
|
||||
|
||||
onParticleCreated(particle) {} // eslint-disable-line
|
||||
|
||||
|
||||
onParticleUpdate(particle) {} // eslint-disable-line
|
||||
|
||||
|
||||
onParticleDead(particle) {} // eslint-disable-line
|
||||
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW5kZXJlci9DdXN0b21SZW5kZXJlci5qcyJdLCJuYW1lcyI6WyJCYXNlUmVuZGVyZXIiLCJQb29sIiwiUkVOREVSRVJfVFlQRV9DVVNUT00iLCJ0eXBlIiwiQ3VzdG9tUmVuZGVyZXIiLCJjb25zdHJ1Y3RvciIsInRhcmdldFBvb2wiLCJtYXRlcmlhbFBvb2wiLCJvblN5c3RlbVVwZGF0ZSIsIm9uUGFydGljbGVDcmVhdGVkIiwicGFydGljbGUiLCJvblBhcnRpY2xlVXBkYXRlIiwib25QYXJ0aWNsZURlYWQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVAsTUFBeUIsZ0JBQXpCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixTQUFyQjtBQUNBLFNBQVNDLG9CQUFvQixJQUFJQyxJQUFqQyxRQUE2QyxTQUE3QztBQUVBLGVBQWUsTUFBTUMsY0FBTixTQUE2QkosWUFBN0IsQ0FBMEM7QUFDdkRLLEVBQUFBLFdBQVcsR0FBRztBQUNaLFVBQU1GLElBQU47QUFFQSxTQUFLRyxVQUFMLEdBQWtCLElBQUlMLElBQUosRUFBbEI7QUFDQSxTQUFLTSxZQUFMLEdBQW9CLElBQUlOLElBQUosRUFBcEI7QUFDRDs7QUFFRE8sRUFBQUEsY0FBYyxHQUFHLENBQUU7O0FBRW5CQyxFQUFBQSxpQkFBaUIsQ0FBQ0MsUUFBRCxFQUFXLENBQUUsQ0FWeUIsQ0FVeEI7OztBQUUvQkMsRUFBQUEsZ0JBQWdCLENBQUNELFFBQUQsRUFBVyxDQUFFLENBWjBCLENBWXpCOzs7QUFFOUJFLEVBQUFBLGNBQWMsQ0FBQ0YsUUFBRCxFQUFXLENBQUUsQ0FkNEIsQ0FjM0I7OztBQWQyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlUmVuZGVyZXIgZnJvbSAnLi9CYXNlUmVuZGVyZXInO1xuaW1wb3J0IHsgUG9vbCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgUkVOREVSRVJfVFlQRV9DVVNUT00gYXMgdHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21SZW5kZXJlciBleHRlbmRzIEJhc2VSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy50YXJnZXRQb29sID0gbmV3IFBvb2woKTtcbiAgICB0aGlzLm1hdGVyaWFsUG9vbCA9IG5ldyBQb29sKCk7XG4gIH1cblxuICBvblN5c3RlbVVwZGF0ZSgpIHt9XG5cbiAgb25QYXJ0aWNsZUNyZWF0ZWQocGFydGljbGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBvblBhcnRpY2xlVXBkYXRlKHBhcnRpY2xlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgb25QYXJ0aWNsZURlYWQocGFydGljbGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbn1cbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
+30
@@ -0,0 +1,30 @@
|
||||
export const fragmentShader = () => {
|
||||
return `
|
||||
uniform vec3 baseColor;
|
||||
uniform sampler2D uTexture;
|
||||
uniform sampler2D atlasIndex;
|
||||
|
||||
varying float vRotation;
|
||||
varying vec3 targetColor;
|
||||
varying float targetAlpha;
|
||||
varying vec4 tileRect;
|
||||
varying float tileID;
|
||||
|
||||
void main() {
|
||||
gl_FragColor = vec4(baseColor * targetColor, targetAlpha);
|
||||
|
||||
vec2 uv = gl_PointCoord;
|
||||
uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);
|
||||
|
||||
float mid = 0.5;
|
||||
uv = vec2(
|
||||
cos(vRotation) * (uv.x - mid) - sin(vRotation) * (uv.y - mid) + mid,
|
||||
cos(vRotation) * (uv.y - mid) + sin(vRotation) * (uv.x - mid) + mid
|
||||
);
|
||||
|
||||
gl_FragColor = gl_FragColor * texture2D(uTexture, uv);
|
||||
|
||||
}
|
||||
`;
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL3NoYWRlcnMvZnJhZ21lbnRTaGFkZXIuanMiXSwibmFtZXMiOlsiZnJhZ21lbnRTaGFkZXIiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTUEsY0FBYyxHQUFHLE1BQU07QUFDbEMsU0FBUTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0ExQkU7QUEyQkQsQ0E1Qk0iLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSAoKSA9PiB7XG4gIHJldHVybiBgXG4gICAgdW5pZm9ybSB2ZWMzIGJhc2VDb2xvcjtcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCBhdGxhc0luZGV4O1xuXG4gICAgdmFyeWluZyBmbG9hdCB2Um90YXRpb247XG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuICAgIHZhcnlpbmcgZmxvYXQgdGlsZUlEO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IgKiB0YXJnZXRDb2xvciwgdGFyZ2V0QWxwaGEpO1xuXG4gICAgICB2ZWMyIHV2ID0gZ2xfUG9pbnRDb29yZDtcbiAgICAgIHV2ID0gbWl4KHRpbGVSZWN0Lnh5LCB0aWxlUmVjdC56dywgZ2xfUG9pbnRDb29yZCk7XG5cbiAgICAgIGZsb2F0IG1pZCA9IDAuNTtcbiAgICAgIHV2ID0gdmVjMihcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueCAtIG1pZCkgLSBzaW4odlJvdGF0aW9uKSAqICh1di55IC0gbWlkKSArIG1pZCxcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueSAtIG1pZCkgKyBzaW4odlJvdGF0aW9uKSAqICh1di54IC0gbWlkKSArIG1pZFxuICAgICAgKTtcblxuICAgICAgZ2xfRnJhZ0NvbG9yID0gZ2xfRnJhZ0NvbG9yICogdGV4dHVyZTJEKHVUZXh0dXJlLCB1dik7XG5cbiAgICB9XG5gO1xufTtcbiJdfQ==
|
||||
@@ -0,0 +1,3 @@
|
||||
export { fragmentShader } from './fragmentShader';
|
||||
export { vertexShader } from './vertexShader';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL3NoYWRlcnMvaW5kZXguanMiXSwibmFtZXMiOlsiZnJhZ21lbnRTaGFkZXIiLCJ2ZXJ0ZXhTaGFkZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGNBQVQsUUFBK0Isa0JBQS9CO0FBQ0EsU0FBU0MsWUFBVCxRQUE2QixnQkFBN0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBmcmFnbWVudFNoYWRlciB9IGZyb20gJy4vZnJhZ21lbnRTaGFkZXInO1xuZXhwb3J0IHsgdmVydGV4U2hhZGVyIH0gZnJvbSAnLi92ZXJ0ZXhTaGFkZXInO1xuIl19
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
import { DATA_TEXTURE_SIZE } from '../../common/TextureAtlas/constants';
|
||||
import { SIZE_ATTENUATION_FACTOR } from '../../common/shaders/constants';
|
||||
export const vertexShader = () => {
|
||||
return `
|
||||
uniform sampler2D uTexture;
|
||||
//atlasIndex is a 256x1 float texture of tile rectangles as r=minx g=miny b=maxx a=maxy
|
||||
uniform sampler2D atlasIndex;
|
||||
|
||||
attribute float size;
|
||||
attribute vec3 color;
|
||||
attribute float alpha;
|
||||
attribute float texID;
|
||||
attribute float rotation;
|
||||
|
||||
varying float vRotation;
|
||||
varying vec3 targetColor;
|
||||
varying float targetAlpha;
|
||||
varying vec4 tileRect;
|
||||
varying float tileID;
|
||||
|
||||
void main() {
|
||||
vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
|
||||
targetColor = color;
|
||||
targetAlpha = alpha;
|
||||
vRotation = rotation;
|
||||
|
||||
tileID = texID;
|
||||
//get the tile rectangle from the atlasIndex texture..
|
||||
tileRect = texture2D(atlasIndex, vec2((tileID + 0.5) / ${DATA_TEXTURE_SIZE}.0, 0.5));
|
||||
|
||||
gl_PointSize = ((size * ${SIZE_ATTENUATION_FACTOR}) / -mvPosition.z);
|
||||
gl_Position = projectionMatrix * mvPosition;
|
||||
}
|
||||
`;
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL3NoYWRlcnMvdmVydGV4U2hhZGVyLmpzIl0sIm5hbWVzIjpbIkRBVEFfVEVYVFVSRV9TSVpFIiwiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiLCJ2ZXJ0ZXhTaGFkZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGlCQUFULFFBQWtDLHFDQUFsQztBQUNBLFNBQVNDLHVCQUFULFFBQXdDLGdDQUF4QztBQUVBLE9BQU8sTUFBTUMsWUFBWSxHQUFHLE1BQU07QUFDaEMsU0FBUTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErREYsaUJBQWtCO0FBQ2pGO0FBQ0EsZ0NBQWdDQyx1QkFBd0I7QUFDeEQ7QUFDQTtBQUNBLENBOUJFO0FBK0JELENBaENNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREFUQV9URVhUVVJFX1NJWkUgfSBmcm9tICcuLi8uLi9jb21tb24vVGV4dHVyZUF0bGFzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTSVpFX0FUVEVOVUFUSU9OX0ZBQ1RPUiB9IGZyb20gJy4uLy4uL2NvbW1vbi9zaGFkZXJzL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSAoKSA9PiB7XG4gIHJldHVybiBgXG4gICAgdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmU7XG4gICAgLy9hdGxhc0luZGV4IGlzIGEgMjU2eDEgZmxvYXQgdGV4dHVyZSBvZiB0aWxlIHJlY3RhbmdsZXMgYXMgcj1taW54IGc9bWlueSBiPW1heHggYT1tYXh5XG4gICAgdW5pZm9ybSBzYW1wbGVyMkQgYXRsYXNJbmRleDtcblxuICAgIGF0dHJpYnV0ZSBmbG9hdCBzaXplO1xuICAgIGF0dHJpYnV0ZSB2ZWMzIGNvbG9yO1xuICAgIGF0dHJpYnV0ZSBmbG9hdCBhbHBoYTtcbiAgICBhdHRyaWJ1dGUgZmxvYXQgdGV4SUQ7XG4gICAgYXR0cmlidXRlIGZsb2F0IHJvdGF0aW9uO1xuXG4gICAgdmFyeWluZyBmbG9hdCB2Um90YXRpb247XG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuICAgIHZhcnlpbmcgZmxvYXQgdGlsZUlEO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgIHRhcmdldENvbG9yID0gY29sb3I7XG4gICAgICB0YXJnZXRBbHBoYSA9IGFscGhhO1xuICAgICAgdlJvdGF0aW9uID0gcm90YXRpb247XG5cbiAgICAgIHRpbGVJRCA9IHRleElEO1xuICAgICAgLy9nZXQgdGhlIHRpbGUgcmVjdGFuZ2xlIGZyb20gdGhlIGF0bGFzSW5kZXggdGV4dHVyZS4uXG4gICAgICB0aWxlUmVjdCA9IHRleHR1cmUyRChhdGxhc0luZGV4LCB2ZWMyKCh0aWxlSUQgKyAwLjUpIC8gJHtEQVRBX1RFWFRVUkVfU0laRX0uMCwgMC41KSk7XG5cbiAgICAgIGdsX1BvaW50U2l6ZSA9ICgoc2l6ZSAqICR7U0laRV9BVFRFTlVBVElPTl9GQUNUT1J9KSAvIC1tdlBvc2l0aW9uLnopO1xuICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcbiAgICB9XG5gO1xufTtcbiJdfQ==
|
||||
File diff suppressed because one or more lines are too long
+27
@@ -0,0 +1,27 @@
|
||||
export const fragmentShader = () => {
|
||||
return `
|
||||
uniform vec3 baseColor;
|
||||
uniform sampler2D uTexture;
|
||||
|
||||
varying float vRotation;
|
||||
varying vec3 targetColor;
|
||||
varying float targetAlpha;
|
||||
varying vec4 tileRect;
|
||||
|
||||
void main() {
|
||||
gl_FragColor = vec4(baseColor * targetColor, targetAlpha);
|
||||
|
||||
vec2 uv = gl_PointCoord;
|
||||
uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);
|
||||
|
||||
float mid = 0.5;
|
||||
uv = vec2(
|
||||
cos(vRotation) * (uv.x - mid) - sin(vRotation) * (uv.y - mid) + mid,
|
||||
cos(vRotation) * (uv.y - mid) + sin(vRotation) * (uv.x - mid) + mid
|
||||
);
|
||||
|
||||
gl_FragColor = gl_FragColor * texture2D(uTexture, uv);
|
||||
}
|
||||
`;
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy9mcmFnbWVudFNoYWRlci5qcyJdLCJuYW1lcyI6WyJmcmFnbWVudFNoYWRlciJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxjQUFjLEdBQUcsTUFBTTtBQUNsQyxTQUFRO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQXZCRTtBQXdCRCxDQXpCTSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBmcmFnbWVudFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHZlYzMgYmFzZUNvbG9yO1xuICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlO1xuXG4gICAgdmFyeWluZyBmbG9hdCB2Um90YXRpb247XG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IgKiB0YXJnZXRDb2xvciwgdGFyZ2V0QWxwaGEpO1xuXG4gICAgICB2ZWMyIHV2ID0gZ2xfUG9pbnRDb29yZDtcbiAgICAgIHV2ID0gbWl4KHRpbGVSZWN0Lnh5LCB0aWxlUmVjdC56dywgZ2xfUG9pbnRDb29yZCk7XG5cbiAgICAgIGZsb2F0IG1pZCA9IDAuNTtcbiAgICAgIHV2ID0gdmVjMihcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueCAtIG1pZCkgLSBzaW4odlJvdGF0aW9uKSAqICh1di55IC0gbWlkKSArIG1pZCxcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueSAtIG1pZCkgKyBzaW4odlJvdGF0aW9uKSAqICh1di54IC0gbWlkKSArIG1pZFxuICAgICAgKTtcbiAgICAgIFxuICAgICAgZ2xfRnJhZ0NvbG9yID0gZ2xfRnJhZ0NvbG9yICogdGV4dHVyZTJEKHVUZXh0dXJlLCB1dik7XG4gICAgfVxuYDtcbn07XG4iXX0=
|
||||
@@ -0,0 +1,3 @@
|
||||
export { fragmentShader } from './fragmentShader';
|
||||
export { vertexShader } from './vertexShader';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcmFnbWVudFNoYWRlciIsInZlcnRleFNoYWRlciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsY0FBVCxRQUErQixrQkFBL0I7QUFDQSxTQUFTQyxZQUFULFFBQTZCLGdCQUE3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGZyYWdtZW50U2hhZGVyIH0gZnJvbSAnLi9mcmFnbWVudFNoYWRlcic7XG5leHBvcnQgeyB2ZXJ0ZXhTaGFkZXIgfSBmcm9tICcuL3ZlcnRleFNoYWRlcic7XG4iXX0=
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
import { SIZE_ATTENUATION_FACTOR } from '../../common/shaders/constants';
|
||||
export const vertexShader = () => {
|
||||
return `
|
||||
uniform sampler2D uTexture;
|
||||
uniform vec2 atlasDim;
|
||||
|
||||
attribute float size;
|
||||
attribute vec3 color;
|
||||
attribute float alpha;
|
||||
attribute vec2 texID;
|
||||
attribute float rotation;
|
||||
|
||||
varying float vRotation;
|
||||
varying vec3 targetColor;
|
||||
varying float targetAlpha;
|
||||
varying vec4 tileRect;
|
||||
|
||||
void main() {
|
||||
vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
|
||||
targetColor = color;
|
||||
targetAlpha = alpha;
|
||||
vRotation = rotation;
|
||||
|
||||
vec2 tmin = floor(texID) / atlasDim;
|
||||
vec2 tmax = fract(texID);
|
||||
tileRect = vec4(tmin,tmax);
|
||||
|
||||
gl_PointSize = ((size * ${SIZE_ATTENUATION_FACTOR}) / -mvPosition.z);
|
||||
gl_Position = projectionMatrix * mvPosition;
|
||||
}
|
||||
`;
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy92ZXJ0ZXhTaGFkZXIuanMiXSwibmFtZXMiOlsiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiLCJ2ZXJ0ZXhTaGFkZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLHVCQUFULFFBQXdDLGdDQUF4QztBQUVBLE9BQU8sTUFBTUMsWUFBWSxHQUFHLE1BQU07QUFDaEMsU0FBUTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQ0QsdUJBQXdCO0FBQ3hEO0FBQ0E7QUFDQSxDQTVCRTtBQTZCRCxDQTlCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNJWkVfQVRURU5VQVRJT05fRkFDVE9SIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NoYWRlcnMvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IHZlcnRleFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcbiAgICB1bmlmb3JtIHZlYzIgYXRsYXNEaW07XG5cbiAgICBhdHRyaWJ1dGUgZmxvYXQgc2l6ZTtcbiAgICBhdHRyaWJ1dGUgdmVjMyBjb2xvcjtcbiAgICBhdHRyaWJ1dGUgZmxvYXQgYWxwaGE7XG4gICAgYXR0cmlidXRlIHZlYzIgdGV4SUQ7XG4gICAgYXR0cmlidXRlIGZsb2F0IHJvdGF0aW9uO1xuXG4gICAgdmFyeWluZyBmbG9hdCB2Um90YXRpb247XG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgIHRhcmdldENvbG9yID0gY29sb3I7XG4gICAgICB0YXJnZXRBbHBoYSA9IGFscGhhO1xuICAgICAgdlJvdGF0aW9uID0gcm90YXRpb247XG5cbiAgICAgIHZlYzIgdG1pbiA9IGZsb29yKHRleElEKSAvIGF0bGFzRGltO1xuICAgICAgdmVjMiB0bWF4ID0gZnJhY3QodGV4SUQpO1xuICAgICAgdGlsZVJlY3QgPSB2ZWM0KHRtaW4sdG1heCk7XG5cbiAgICAgIGdsX1BvaW50U2l6ZSA9ICgoc2l6ZSAqICR7U0laRV9BVFRFTlVBVElPTl9GQUNUT1J9KSAvIC1tdlBvc2l0aW9uLnopO1xuICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcbiAgICB9XG5gO1xufTtcbiJdfQ==
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// Primitives
|
||||
export const DEFAULT_MAX_PARTICLES = 10000;
|
||||
export const VECTOR_3_SIZE = ['x', 'y', 'z'].length;
|
||||
export const RGBA_SIZE = ['r', 'g', 'b', 'a'].length;
|
||||
export const FLOAT_BYTE_SIZE = 4; // Byte sizes
|
||||
|
||||
export const POSITION_BYTE_SIZE = VECTOR_3_SIZE * FLOAT_BYTE_SIZE;
|
||||
export const ROTATION_BYTE_SIZE = FLOAT_BYTE_SIZE;
|
||||
export const SIZE_BYTE_SIZE = FLOAT_BYTE_SIZE;
|
||||
export const RGBA_BYTE_SIZE = RGBA_SIZE * FLOAT_BYTE_SIZE;
|
||||
export const ALL_BYTE_SIZES = [POSITION_BYTE_SIZE, ROTATION_BYTE_SIZE, SIZE_BYTE_SIZE, RGBA_BYTE_SIZE];
|
||||
export const PARTICLE_BYTE_SIZE = ALL_BYTE_SIZES.reduce((cur, acc) => cur + acc); // Attributes
|
||||
|
||||
export const POSITION_ATTRIBUTE_BUFFER_SIZE = VECTOR_3_SIZE;
|
||||
export const ROTATION_ATTRIBUTE_BUFFER_SIZE = 1;
|
||||
export const SIZE_ATTRIBUTE_BUFFER_SIZE = 1;
|
||||
export const RGBA_ATTRIBUTE_BUFFER_SIZE = RGBA_SIZE;
|
||||
export const ALPHA_ATTRIBUTE_BUFFER_SIZE = 1;
|
||||
export const TEXID_ATTRIBUTE_BUFFER_SIZE = 2;
|
||||
export const ATTRIBUTE_TO_SIZE_MAP = {
|
||||
position: POSITION_ATTRIBUTE_BUFFER_SIZE,
|
||||
rotation: ROTATION_ATTRIBUTE_BUFFER_SIZE,
|
||||
size: SIZE_ATTRIBUTE_BUFFER_SIZE,
|
||||
// THREE.Color does not contain alpha, so we will have separate attributes for these
|
||||
color: RGBA_ATTRIBUTE_BUFFER_SIZE,
|
||||
alpha: ALPHA_ATTRIBUTE_BUFFER_SIZE,
|
||||
texID: TEXID_ATTRIBUTE_BUFFER_SIZE
|
||||
};
|
||||
export const PARTICLE_STRIDE = [POSITION_ATTRIBUTE_BUFFER_SIZE, ROTATION_ATTRIBUTE_BUFFER_SIZE, SIZE_ATTRIBUTE_BUFFER_SIZE, RGBA_ATTRIBUTE_BUFFER_SIZE, ALPHA_ATTRIBUTE_BUFFER_SIZE, TEXID_ATTRIBUTE_BUFFER_SIZE].reduce((cur, acc) => cur + acc);
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vUGFydGljbGVCdWZmZXIvY29uc3RhbnRzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfTUFYX1BBUlRJQ0xFUyIsIlZFQ1RPUl8zX1NJWkUiLCJsZW5ndGgiLCJSR0JBX1NJWkUiLCJGTE9BVF9CWVRFX1NJWkUiLCJQT1NJVElPTl9CWVRFX1NJWkUiLCJST1RBVElPTl9CWVRFX1NJWkUiLCJTSVpFX0JZVEVfU0laRSIsIlJHQkFfQllURV9TSVpFIiwiQUxMX0JZVEVfU0laRVMiLCJQQVJUSUNMRV9CWVRFX1NJWkUiLCJyZWR1Y2UiLCJjdXIiLCJhY2MiLCJQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUiLCJST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUiLCJTSVpFX0FUVFJJQlVURV9CVUZGRVJfU0laRSIsIlJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQVRUUklCVVRFX1RPX1NJWkVfTUFQIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsInNpemUiLCJjb2xvciIsImFscGhhIiwidGV4SUQiLCJQQVJUSUNMRV9TVFJJREUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsT0FBTyxNQUFNQSxxQkFBcUIsR0FBRyxLQUE5QjtBQUNQLE9BQU8sTUFBTUMsYUFBYSxHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCQyxNQUF0QztBQUNQLE9BQU8sTUFBTUMsU0FBUyxHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLEdBQWhCLEVBQXFCRCxNQUF2QztBQUNQLE9BQU8sTUFBTUUsZUFBZSxHQUFHLENBQXhCLEMsQ0FFUDs7QUFDQSxPQUFPLE1BQU1DLGtCQUFrQixHQUFHSixhQUFhLEdBQUdHLGVBQTNDO0FBQ1AsT0FBTyxNQUFNRSxrQkFBa0IsR0FBR0YsZUFBM0I7QUFDUCxPQUFPLE1BQU1HLGNBQWMsR0FBR0gsZUFBdkI7QUFDUCxPQUFPLE1BQU1JLGNBQWMsR0FBR0wsU0FBUyxHQUFHQyxlQUFuQztBQUNQLE9BQU8sTUFBTUssY0FBYyxHQUFHLENBQzVCSixrQkFENEIsRUFFNUJDLGtCQUY0QixFQUc1QkMsY0FINEIsRUFJNUJDLGNBSjRCLENBQXZCO0FBTVAsT0FBTyxNQUFNRSxrQkFBa0IsR0FBR0QsY0FBYyxDQUFDRSxNQUFmLENBQ2hDLENBQUNDLEdBQUQsRUFBTUMsR0FBTixLQUFjRCxHQUFHLEdBQUdDLEdBRFksQ0FBM0IsQyxDQUlQOztBQUNBLE9BQU8sTUFBTUMsOEJBQThCLEdBQUdiLGFBQXZDO0FBQ1AsT0FBTyxNQUFNYyw4QkFBOEIsR0FBRyxDQUF2QztBQUNQLE9BQU8sTUFBTUMsMEJBQTBCLEdBQUcsQ0FBbkM7QUFDUCxPQUFPLE1BQU1DLDBCQUEwQixHQUFHZCxTQUFuQztBQUNQLE9BQU8sTUFBTWUsMkJBQTJCLEdBQUcsQ0FBcEM7QUFDUCxPQUFPLE1BQU1DLDJCQUEyQixHQUFHLENBQXBDO0FBRVAsT0FBTyxNQUFNQyxxQkFBcUIsR0FBRztBQUNuQ0MsRUFBQUEsUUFBUSxFQUFFUCw4QkFEeUI7QUFFbkNRLEVBQUFBLFFBQVEsRUFBRVAsOEJBRnlCO0FBR25DUSxFQUFBQSxJQUFJLEVBQUVQLDBCQUg2QjtBQUluQztBQUNBUSxFQUFBQSxLQUFLLEVBQUVQLDBCQUw0QjtBQU1uQ1EsRUFBQUEsS0FBSyxFQUFFUCwyQkFONEI7QUFPbkNRLEVBQUFBLEtBQUssRUFBRVA7QUFQNEIsQ0FBOUI7QUFVUCxPQUFPLE1BQU1RLGVBQWUsR0FBRyxDQUM3QmIsOEJBRDZCLEVBRTdCQyw4QkFGNkIsRUFHN0JDLDBCQUg2QixFQUk3QkMsMEJBSjZCLEVBSzdCQywyQkFMNkIsRUFNN0JDLDJCQU42QixFQU83QlIsTUFQNkIsQ0FPdEIsQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLEtBQWNELEdBQUcsR0FBR0MsR0FQRSxDQUF4QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFByaW1pdGl2ZXNcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9QQVJUSUNMRVMgPSAxMDAwMDtcbmV4cG9ydCBjb25zdCBWRUNUT1JfM19TSVpFID0gWyd4JywgJ3knLCAneiddLmxlbmd0aDtcbmV4cG9ydCBjb25zdCBSR0JBX1NJWkUgPSBbJ3InLCAnZycsICdiJywgJ2EnXS5sZW5ndGg7XG5leHBvcnQgY29uc3QgRkxPQVRfQllURV9TSVpFID0gNDtcblxuLy8gQnl0ZSBzaXplc1xuZXhwb3J0IGNvbnN0IFBPU0lUSU9OX0JZVEVfU0laRSA9IFZFQ1RPUl8zX1NJWkUgKiBGTE9BVF9CWVRFX1NJWkU7XG5leHBvcnQgY29uc3QgUk9UQVRJT05fQllURV9TSVpFID0gRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IFNJWkVfQllURV9TSVpFID0gRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IFJHQkFfQllURV9TSVpFID0gUkdCQV9TSVpFICogRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IEFMTF9CWVRFX1NJWkVTID0gW1xuICBQT1NJVElPTl9CWVRFX1NJWkUsXG4gIFJPVEFUSU9OX0JZVEVfU0laRSxcbiAgU0laRV9CWVRFX1NJWkUsXG4gIFJHQkFfQllURV9TSVpFLFxuXTtcbmV4cG9ydCBjb25zdCBQQVJUSUNMRV9CWVRFX1NJWkUgPSBBTExfQllURV9TSVpFUy5yZWR1Y2UoXG4gIChjdXIsIGFjYykgPT4gY3VyICsgYWNjXG4pO1xuXG4vLyBBdHRyaWJ1dGVzXG5leHBvcnQgY29uc3QgUE9TSVRJT05fQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gVkVDVE9SXzNfU0laRTtcbmV4cG9ydCBjb25zdCBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSAxO1xuZXhwb3J0IGNvbnN0IFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gMTtcbmV4cG9ydCBjb25zdCBSR0JBX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IFJHQkFfU0laRTtcbmV4cG9ydCBjb25zdCBBTFBIQV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSAxO1xuZXhwb3J0IGNvbnN0IFRFWElEX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IDI7XG5cbmV4cG9ydCBjb25zdCBBVFRSSUJVVEVfVE9fU0laRV9NQVAgPSB7XG4gIHBvc2l0aW9uOiBQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIHJvdGF0aW9uOiBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIHNpemU6IFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICAvLyBUSFJFRS5Db2xvciBkb2VzIG5vdCBjb250YWluIGFscGhhLCBzbyB3ZSB3aWxsIGhhdmUgc2VwYXJhdGUgYXR0cmlidXRlcyBmb3IgdGhlc2VcbiAgY29sb3I6IFJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBhbHBoYTogQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICB0ZXhJRDogVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxufTtcblxuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX1NUUklERSA9IFtcbiAgUE9TSVRJT05fQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBSR0JBX0FUVFJJQlVURV9CVUZGRVJfU0laRSxcbiAgQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBURVhJRF9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG5dLnJlZHVjZSgoY3VyLCBhY2MpID0+IGN1ciArIGFjYyk7XG4iXX0=
|
||||
+70
File diff suppressed because one or more lines are too long
+2
@@ -0,0 +1,2 @@
|
||||
export const DATA_TEXTURE_SIZE = 256;
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vVGV4dHVyZUF0bGFzL2NvbnN0YW50cy5qcyJdLCJuYW1lcyI6WyJEQVRBX1RFWFRVUkVfU0laRSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxpQkFBaUIsR0FBRyxHQUExQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBEQVRBX1RFWFRVUkVfU0laRSA9IDI1NjtcbiJdfQ==
|
||||
+207
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
|
||||
import { DEFAULT_MAX_PARTICLES } from './ParticleBuffer/constants';
|
||||
export const DEFAULT_RENDERER_OPTIONS = {
|
||||
blending: 'AdditiveBlending',
|
||||
baseColor: 0xffffff,
|
||||
depthTest: true,
|
||||
depthWrite: false,
|
||||
transparent: true,
|
||||
maxParticles: DEFAULT_MAX_PARTICLES,
|
||||
shouldDebugTextureAtlas: false,
|
||||
shouldForceDesktopRenderer: false,
|
||||
shouldForceMobileRenderer: false
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vY29uc3RhbnRzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfTUFYX1BBUlRJQ0xFUyIsIkRFRkFVTFRfUkVOREVSRVJfT1BUSU9OUyIsImJsZW5kaW5nIiwiYmFzZUNvbG9yIiwiZGVwdGhUZXN0IiwiZGVwdGhXcml0ZSIsInRyYW5zcGFyZW50IiwibWF4UGFydGljbGVzIiwic2hvdWxkRGVidWdUZXh0dXJlQXRsYXMiLCJzaG91bGRGb3JjZURlc2t0b3BSZW5kZXJlciIsInNob3VsZEZvcmNlTW9iaWxlUmVuZGVyZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLHFCQUFULFFBQXNDLDRCQUF0QztBQUVBLE9BQU8sTUFBTUMsd0JBQXdCLEdBQUc7QUFDdENDLEVBQUFBLFFBQVEsRUFBRSxrQkFENEI7QUFFdENDLEVBQUFBLFNBQVMsRUFBRSxRQUYyQjtBQUd0Q0MsRUFBQUEsU0FBUyxFQUFFLElBSDJCO0FBSXRDQyxFQUFBQSxVQUFVLEVBQUUsS0FKMEI7QUFLdENDLEVBQUFBLFdBQVcsRUFBRSxJQUx5QjtBQU10Q0MsRUFBQUEsWUFBWSxFQUFFUCxxQkFOd0I7QUFPdENRLEVBQUFBLHVCQUF1QixFQUFFLEtBUGE7QUFRdENDLEVBQUFBLDBCQUEwQixFQUFFLEtBUlU7QUFTdENDLEVBQUFBLHlCQUF5QixFQUFFO0FBVFcsQ0FBakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUZBVUxUX01BWF9QQVJUSUNMRVMgfSBmcm9tICcuL1BhcnRpY2xlQnVmZmVyL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFTkRFUkVSX09QVElPTlMgPSB7XG4gIGJsZW5kaW5nOiAnQWRkaXRpdmVCbGVuZGluZycsXG4gIGJhc2VDb2xvcjogMHhmZmZmZmYsXG4gIGRlcHRoVGVzdDogdHJ1ZSxcbiAgZGVwdGhXcml0ZTogZmFsc2UsXG4gIHRyYW5zcGFyZW50OiB0cnVlLFxuICBtYXhQYXJ0aWNsZXM6IERFRkFVTFRfTUFYX1BBUlRJQ0xFUyxcbiAgc2hvdWxkRGVidWdUZXh0dXJlQXRsYXM6IGZhbHNlLFxuICBzaG91bGRGb3JjZURlc2t0b3BSZW5kZXJlcjogZmFsc2UsXG4gIHNob3VsZEZvcmNlTW9iaWxlUmVuZGVyZXI6IGZhbHNlLFxufTtcbiJdfQ==
|
||||
@@ -0,0 +1,4 @@
|
||||
export { Target, UniqueList } from './stores';
|
||||
export { default as ParticleBuffer } from './ParticleBuffer';
|
||||
export { default as TextureAtlas } from './TextureAtlas';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vaW5kZXguanMiXSwibmFtZXMiOlsiVGFyZ2V0IiwiVW5pcXVlTGlzdCIsImRlZmF1bHQiLCJQYXJ0aWNsZUJ1ZmZlciIsIlRleHR1cmVBdGxhcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBVCxFQUFpQkMsVUFBakIsUUFBbUMsVUFBbkM7QUFDQSxTQUFTQyxPQUFPLElBQUlDLGNBQXBCLFFBQTBDLGtCQUExQztBQUNBLFNBQVNELE9BQU8sSUFBSUUsWUFBcEIsUUFBd0MsZ0JBQXhDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgVGFyZ2V0LCBVbmlxdWVMaXN0IH0gZnJvbSAnLi9zdG9yZXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0aWNsZUJ1ZmZlciB9IGZyb20gJy4vUGFydGljbGVCdWZmZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0dXJlQXRsYXMgfSBmcm9tICcuL1RleHR1cmVBdGxhcyc7XG4iXX0=
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
export const SIZE_ATTENUATION_FACTOR = '600.0';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vc2hhZGVycy9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTUEsdUJBQXVCLEdBQUcsT0FBaEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU0laRV9BVFRFTlVBVElPTl9GQUNUT1IgPSAnNjAwLjAnO1xuIl19
|
||||
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Simple class that stores the particle's "target" or "next" state.
|
||||
*
|
||||
*/
|
||||
export class Target {
|
||||
constructor(THREE) {
|
||||
this.position = new THREE.Vector3();
|
||||
this.rotation = new THREE.Vector3();
|
||||
this.size = 0;
|
||||
this.color = new THREE.Color();
|
||||
this.alpha = 0;
|
||||
this.texture = null;
|
||||
this.index = 0;
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.position.set(0, 0, 0);
|
||||
this.rotation.set(0, 0, 0);
|
||||
this.size = 0;
|
||||
this.color.setRGB(0, 0, 0);
|
||||
this.alpha = 0;
|
||||
this.texture = null;
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vc3RvcmVzL1RhcmdldC5qcyJdLCJuYW1lcyI6WyJUYXJnZXQiLCJjb25zdHJ1Y3RvciIsIlRIUkVFIiwicG9zaXRpb24iLCJWZWN0b3IzIiwicm90YXRpb24iLCJzaXplIiwiY29sb3IiLCJDb2xvciIsImFscGhhIiwidGV4dHVyZSIsImluZGV4IiwicmVzZXQiLCJzZXQiLCJzZXRSR0IiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNQSxNQUFOLENBQWE7QUFDbEJDLEVBQUFBLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2pCLFNBQUtDLFFBQUwsR0FBZ0IsSUFBSUQsS0FBSyxDQUFDRSxPQUFWLEVBQWhCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFJSCxLQUFLLENBQUNFLE9BQVYsRUFBaEI7QUFDQSxTQUFLRSxJQUFMLEdBQVksQ0FBWjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxJQUFJTCxLQUFLLENBQUNNLEtBQVYsRUFBYjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxDQUFiO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLElBQWY7QUFDQSxTQUFLQyxLQUFMLEdBQWEsQ0FBYjtBQUNEOztBQUVEQyxFQUFBQSxLQUFLLEdBQUc7QUFDTixTQUFLVCxRQUFMLENBQWNVLEdBQWQsQ0FBa0IsQ0FBbEIsRUFBcUIsQ0FBckIsRUFBd0IsQ0FBeEI7QUFDQSxTQUFLUixRQUFMLENBQWNRLEdBQWQsQ0FBa0IsQ0FBbEIsRUFBcUIsQ0FBckIsRUFBd0IsQ0FBeEI7QUFDQSxTQUFLUCxJQUFMLEdBQVksQ0FBWjtBQUNBLFNBQUtDLEtBQUwsQ0FBV08sTUFBWCxDQUFrQixDQUFsQixFQUFxQixDQUFyQixFQUF3QixDQUF4QjtBQUNBLFNBQUtMLEtBQUwsR0FBYSxDQUFiO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLElBQWY7QUFDRDs7QUFsQmlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaW1wbGUgY2xhc3MgdGhhdCBzdG9yZXMgdGhlIHBhcnRpY2xlJ3MgXCJ0YXJnZXRcIiBvciBcIm5leHRcIiBzdGF0ZS5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXJnZXQge1xuICBjb25zdHJ1Y3RvcihUSFJFRSkge1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHRoaXMucm90YXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgdGhpcy5jb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpO1xuICAgIHRoaXMuYWxwaGEgPSAwO1xuICAgIHRoaXMudGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5pbmRleCA9IDA7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcbiAgICB0aGlzLnJvdGF0aW9uLnNldCgwLCAwLCAwKTtcbiAgICB0aGlzLnNpemUgPSAwO1xuICAgIHRoaXMuY29sb3Iuc2V0UkdCKDAsIDAsIDApO1xuICAgIHRoaXMuYWxwaGEgPSAwO1xuICAgIHRoaXMudGV4dHVyZSA9IG51bGw7XG4gIH1cbn1cbiJdfQ==
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Map of particle IDs to integer ids
|
||||
*/
|
||||
export class UniqueList {
|
||||
constructor(max = Infinity) {
|
||||
this.max = max;
|
||||
this.count = 0;
|
||||
this._items = {};
|
||||
}
|
||||
|
||||
add(item) {
|
||||
if (this._items[item] !== undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._items[item] = this.count++;
|
||||
}
|
||||
|
||||
find(item) {
|
||||
return this._items[item];
|
||||
}
|
||||
|
||||
destroy() {
|
||||
this._items = {};
|
||||
this.count = 0;
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vc3RvcmVzL1VuaXF1ZUxpc3QuanMiXSwibmFtZXMiOlsiVW5pcXVlTGlzdCIsImNvbnN0cnVjdG9yIiwibWF4IiwiSW5maW5pdHkiLCJjb3VudCIsIl9pdGVtcyIsImFkZCIsIml0ZW0iLCJ1bmRlZmluZWQiLCJmaW5kIiwiZGVzdHJveSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNQSxVQUFOLENBQWlCO0FBQ3RCQyxFQUFBQSxXQUFXLENBQUNDLEdBQUcsR0FBR0MsUUFBUCxFQUFpQjtBQUMxQixTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLRSxLQUFMLEdBQWEsQ0FBYjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxFQUFkO0FBQ0Q7O0FBRURDLEVBQUFBLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPO0FBQ1IsUUFBSSxLQUFLRixNQUFMLENBQVlFLElBQVosTUFBc0JDLFNBQTFCLEVBQXFDO0FBQ25DO0FBQ0Q7O0FBRUQsU0FBS0gsTUFBTCxDQUFZRSxJQUFaLElBQW9CLEtBQUtILEtBQUwsRUFBcEI7QUFDRDs7QUFFREssRUFBQUEsSUFBSSxDQUFDRixJQUFELEVBQU87QUFDVCxXQUFPLEtBQUtGLE1BQUwsQ0FBWUUsSUFBWixDQUFQO0FBQ0Q7O0FBRURHLEVBQUFBLE9BQU8sR0FBRztBQUNSLFNBQUtMLE1BQUwsR0FBYyxFQUFkO0FBQ0EsU0FBS0QsS0FBTCxHQUFhLENBQWI7QUFDRDs7QUF0QnFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXAgb2YgcGFydGljbGUgSURzIHRvIGludGVnZXIgaWRzXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmlxdWVMaXN0IHtcbiAgY29uc3RydWN0b3IobWF4ID0gSW5maW5pdHkpIHtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLl9pdGVtcyA9IHt9O1xuICB9XG5cbiAgYWRkKGl0ZW0pIHtcbiAgICBpZiAodGhpcy5faXRlbXNbaXRlbV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2l0ZW1zW2l0ZW1dID0gdGhpcy5jb3VudCsrO1xuICB9XG5cbiAgZmluZChpdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zW2l0ZW1dO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9pdGVtcyA9IHt9O1xuICAgIHRoaXMuY291bnQgPSAwO1xuICB9XG59XG4iXX0=
|
||||
@@ -0,0 +1,3 @@
|
||||
export { Target } from './Target';
|
||||
export { UniqueList } from './UniqueList';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vc3RvcmVzL2luZGV4LmpzIl0sIm5hbWVzIjpbIlRhcmdldCIsIlVuaXF1ZUxpc3QiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQVQsUUFBdUIsVUFBdkI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGNBQTNCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi9UYXJnZXQnO1xuZXhwb3J0IHsgVW5pcXVlTGlzdCB9IGZyb20gJy4vVW5pcXVlTGlzdCc7XG4iXX0=
|
||||
@@ -0,0 +1,57 @@
|
||||
import BaseRenderer from '../BaseRenderer';
|
||||
import { DEFAULT_RENDERER_OPTIONS } from './common/constants';
|
||||
import DesktopGPURenderer from './Desktop';
|
||||
import MobileGPURenderer from './Mobile';
|
||||
import { RENDERER_TYPE_GPU } from '../types';
|
||||
/**
|
||||
* Performant particle renderer that uses THREE.Points to propagate particle (postiion, rgba etc.,) properties to
|
||||
* vertices in a ParticleBufferGeometry.
|
||||
* Uses a dynamic texture atlas to support systems with mutliple sprites in a performant way.
|
||||
*
|
||||
* NOTE! This is an experimental renderer and is currently not covered by tests, coverage will be added when the API
|
||||
* is more stable. Currently only compatible with sprite/texture based systems. Meshes are not yet supported.
|
||||
*
|
||||
* @author thrax <manthrax@gmail.com>
|
||||
* @author rohan-deshpande <rohan@creativelifeform.com>
|
||||
*/
|
||||
|
||||
export default class GPURenderer extends BaseRenderer {
|
||||
constructor(container, THREE, options = DEFAULT_RENDERER_OPTIONS) {
|
||||
super(RENDERER_TYPE_GPU);
|
||||
const {
|
||||
shouldForceDesktopRenderer,
|
||||
shouldForceMobileRenderer
|
||||
} = options;
|
||||
const args = [container, THREE, options];
|
||||
|
||||
if (shouldForceDesktopRenderer) {
|
||||
return new DesktopGPURenderer(...args);
|
||||
}
|
||||
|
||||
if (shouldForceMobileRenderer) {
|
||||
return new MobileGPURenderer(...args);
|
||||
}
|
||||
|
||||
if (!this.isFloatingPointTextureSupported()) {
|
||||
return new MobileGPURenderer(...args);
|
||||
}
|
||||
|
||||
return new DesktopGPURenderer(...args);
|
||||
}
|
||||
|
||||
isFloatingPointTextureSupported() {
|
||||
const canvas = document.createElement('canvas');
|
||||
|
||||
if (window.WebGL2RenderingContext && canvas.getContext('webgl2')) {
|
||||
// return false here to test the mobile renderer on desktop
|
||||
return true;
|
||||
}
|
||||
|
||||
const gl = canvas.getContext('webgl');
|
||||
const support = !!gl.getExtension('OES_texture_float');
|
||||
canvas.remove();
|
||||
return support;
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9pbmRleC5qcyJdLCJuYW1lcyI6WyJCYXNlUmVuZGVyZXIiLCJERUZBVUxUX1JFTkRFUkVSX09QVElPTlMiLCJEZXNrdG9wR1BVUmVuZGVyZXIiLCJNb2JpbGVHUFVSZW5kZXJlciIsIlJFTkRFUkVSX1RZUEVfR1BVIiwiR1BVUmVuZGVyZXIiLCJjb25zdHJ1Y3RvciIsImNvbnRhaW5lciIsIlRIUkVFIiwib3B0aW9ucyIsInNob3VsZEZvcmNlRGVza3RvcFJlbmRlcmVyIiwic2hvdWxkRm9yY2VNb2JpbGVSZW5kZXJlciIsImFyZ3MiLCJpc0Zsb2F0aW5nUG9pbnRUZXh0dXJlU3VwcG9ydGVkIiwiY2FudmFzIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2luZG93IiwiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIsImdldENvbnRleHQiLCJnbCIsInN1cHBvcnQiLCJnZXRFeHRlbnNpb24iLCJyZW1vdmUiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVAsTUFBeUIsaUJBQXpCO0FBQ0EsU0FBU0Msd0JBQVQsUUFBeUMsb0JBQXpDO0FBQ0EsT0FBT0Msa0JBQVAsTUFBK0IsV0FBL0I7QUFDQSxPQUFPQyxpQkFBUCxNQUE4QixVQUE5QjtBQUNBLFNBQVNDLGlCQUFULFFBQWtDLFVBQWxDO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxlQUFlLE1BQU1DLFdBQU4sU0FBMEJMLFlBQTFCLENBQXVDO0FBQ3BETSxFQUFBQSxXQUFXLENBQUNDLFNBQUQsRUFBWUMsS0FBWixFQUFtQkMsT0FBTyxHQUFHUix3QkFBN0IsRUFBdUQ7QUFDaEUsVUFBTUcsaUJBQU47QUFFQSxVQUFNO0FBQUVNLE1BQUFBLDBCQUFGO0FBQThCQyxNQUFBQTtBQUE5QixRQUE0REYsT0FBbEU7QUFDQSxVQUFNRyxJQUFJLEdBQUcsQ0FBQ0wsU0FBRCxFQUFZQyxLQUFaLEVBQW1CQyxPQUFuQixDQUFiOztBQUVBLFFBQUlDLDBCQUFKLEVBQWdDO0FBQzlCLGFBQU8sSUFBSVIsa0JBQUosQ0FBdUIsR0FBR1UsSUFBMUIsQ0FBUDtBQUNEOztBQUVELFFBQUlELHlCQUFKLEVBQStCO0FBQzdCLGFBQU8sSUFBSVIsaUJBQUosQ0FBc0IsR0FBR1MsSUFBekIsQ0FBUDtBQUNEOztBQUVELFFBQUksQ0FBQyxLQUFLQywrQkFBTCxFQUFMLEVBQTZDO0FBQzNDLGFBQU8sSUFBSVYsaUJBQUosQ0FBc0IsR0FBR1MsSUFBekIsQ0FBUDtBQUNEOztBQUVELFdBQU8sSUFBSVYsa0JBQUosQ0FBdUIsR0FBR1UsSUFBMUIsQ0FBUDtBQUNEOztBQUVEQyxFQUFBQSwrQkFBK0IsR0FBRztBQUNoQyxVQUFNQyxNQUFNLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixRQUF2QixDQUFmOztBQUVBLFFBQUlDLE1BQU0sQ0FBQ0Msc0JBQVAsSUFBaUNKLE1BQU0sQ0FBQ0ssVUFBUCxDQUFrQixRQUFsQixDQUFyQyxFQUFrRTtBQUNoRTtBQUNBLGFBQU8sSUFBUDtBQUNEOztBQUVELFVBQU1DLEVBQUUsR0FBR04sTUFBTSxDQUFDSyxVQUFQLENBQWtCLE9BQWxCLENBQVg7QUFDQSxVQUFNRSxPQUFPLEdBQUcsQ0FBQyxDQUFDRCxFQUFFLENBQUNFLFlBQUgsQ0FBZ0IsbUJBQWhCLENBQWxCO0FBRUFSLElBQUFBLE1BQU0sQ0FBQ1MsTUFBUDtBQUVBLFdBQU9GLE9BQVA7QUFDRDs7QUFwQ21EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VSZW5kZXJlciBmcm9tICcuLi9CYXNlUmVuZGVyZXInO1xuaW1wb3J0IHsgREVGQVVMVF9SRU5ERVJFUl9PUFRJT05TIH0gZnJvbSAnLi9jb21tb24vY29uc3RhbnRzJztcbmltcG9ydCBEZXNrdG9wR1BVUmVuZGVyZXIgZnJvbSAnLi9EZXNrdG9wJztcbmltcG9ydCBNb2JpbGVHUFVSZW5kZXJlciBmcm9tICcuL01vYmlsZSc7XG5pbXBvcnQgeyBSRU5ERVJFUl9UWVBFX0dQVSB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBQZXJmb3JtYW50IHBhcnRpY2xlIHJlbmRlcmVyIHRoYXQgdXNlcyBUSFJFRS5Qb2ludHMgdG8gcHJvcGFnYXRlIHBhcnRpY2xlIChwb3N0aWlvbiwgcmdiYSBldGMuLCkgcHJvcGVydGllcyB0b1xuICogdmVydGljZXMgaW4gYSBQYXJ0aWNsZUJ1ZmZlckdlb21ldHJ5LlxuICogVXNlcyBhIGR5bmFtaWMgdGV4dHVyZSBhdGxhcyB0byBzdXBwb3J0IHN5c3RlbXMgd2l0aCBtdXRsaXBsZSBzcHJpdGVzIGluIGEgcGVyZm9ybWFudCB3YXkuXG4gKlxuICogTk9URSEgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgcmVuZGVyZXIgYW5kIGlzIGN1cnJlbnRseSBub3QgY292ZXJlZCBieSB0ZXN0cywgY292ZXJhZ2Ugd2lsbCBiZSBhZGRlZCB3aGVuIHRoZSBBUElcbiAqIGlzIG1vcmUgc3RhYmxlLiBDdXJyZW50bHkgb25seSBjb21wYXRpYmxlIHdpdGggc3ByaXRlL3RleHR1cmUgYmFzZWQgc3lzdGVtcy4gTWVzaGVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZC5cbiAqXG4gKiBAYXV0aG9yIHRocmF4IDxtYW50aHJheEBnbWFpbC5jb20+XG4gKiBAYXV0aG9yIHJvaGFuLWRlc2hwYW5kZSA8cm9oYW5AY3JlYXRpdmVsaWZlZm9ybS5jb20+XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdQVVJlbmRlcmVyIGV4dGVuZHMgQmFzZVJlbmRlcmVyIHtcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBUSFJFRSwgb3B0aW9ucyA9IERFRkFVTFRfUkVOREVSRVJfT1BUSU9OUykge1xuICAgIHN1cGVyKFJFTkRFUkVSX1RZUEVfR1BVKTtcblxuICAgIGNvbnN0IHsgc2hvdWxkRm9yY2VEZXNrdG9wUmVuZGVyZXIsIHNob3VsZEZvcmNlTW9iaWxlUmVuZGVyZXIgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgYXJncyA9IFtjb250YWluZXIsIFRIUkVFLCBvcHRpb25zXTtcblxuICAgIGlmIChzaG91bGRGb3JjZURlc2t0b3BSZW5kZXJlcikge1xuICAgICAgcmV0dXJuIG5ldyBEZXNrdG9wR1BVUmVuZGVyZXIoLi4uYXJncyk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZEZvcmNlTW9iaWxlUmVuZGVyZXIpIHtcbiAgICAgIHJldHVybiBuZXcgTW9iaWxlR1BVUmVuZGVyZXIoLi4uYXJncyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzRmxvYXRpbmdQb2ludFRleHR1cmVTdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuIG5ldyBNb2JpbGVHUFVSZW5kZXJlciguLi5hcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERlc2t0b3BHUFVSZW5kZXJlciguLi5hcmdzKTtcbiAgfVxuXG4gIGlzRmxvYXRpbmdQb2ludFRleHR1cmVTdXBwb3J0ZWQoKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICBpZiAod2luZG93LldlYkdMMlJlbmRlcmluZ0NvbnRleHQgJiYgY2FudmFzLmdldENvbnRleHQoJ3dlYmdsMicpKSB7XG4gICAgICAvLyByZXR1cm4gZmFsc2UgaGVyZSB0byB0ZXN0IHRoZSBtb2JpbGUgcmVuZGVyZXIgb24gZGVza3RvcFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnKTtcbiAgICBjb25zdCBzdXBwb3J0ID0gISFnbC5nZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2Zsb2F0Jyk7XG5cbiAgICBjYW52YXMucmVtb3ZlKCk7XG5cbiAgICByZXR1cm4gc3VwcG9ydDtcbiAgfVxufVxuIl19
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,30 @@
|
||||
import MeshRenderer from './MeshRenderer';
|
||||
import { RENDERER_TYPE_SPRITE as type } from './types';
|
||||
/**
|
||||
* @requires THREE - { Mesh, BoxGeometry, MeshLambertMaterial, Sprite, SpriteMaterial }
|
||||
*/
|
||||
|
||||
export default class SpriteRenderer extends MeshRenderer {
|
||||
constructor(container, THREE) {
|
||||
super(container, THREE);
|
||||
/**
|
||||
* @desc The class type.
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
this.type = type;
|
||||
this._body = new THREE.Sprite(new THREE.SpriteMaterial({
|
||||
color: 0xffffff
|
||||
}));
|
||||
}
|
||||
|
||||
rotate(particle) {
|
||||
particle.target.material.rotation = particle.rotation.z;
|
||||
}
|
||||
|
||||
scale(particle) {
|
||||
particle.target.scale.set(particle.scale * particle.radius, particle.scale * particle.radius, 1);
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW5kZXJlci9TcHJpdGVSZW5kZXJlci5qcyJdLCJuYW1lcyI6WyJNZXNoUmVuZGVyZXIiLCJSRU5ERVJFUl9UWVBFX1NQUklURSIsInR5cGUiLCJTcHJpdGVSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwiY29udGFpbmVyIiwiVEhSRUUiLCJfYm9keSIsIlNwcml0ZSIsIlNwcml0ZU1hdGVyaWFsIiwiY29sb3IiLCJyb3RhdGUiLCJwYXJ0aWNsZSIsInRhcmdldCIsIm1hdGVyaWFsIiwicm90YXRpb24iLCJ6Iiwic2NhbGUiLCJzZXQiLCJyYWRpdXMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVAsTUFBeUIsZ0JBQXpCO0FBQ0EsU0FBU0Msb0JBQW9CLElBQUlDLElBQWpDLFFBQTZDLFNBQTdDO0FBRUE7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsY0FBTixTQUE2QkgsWUFBN0IsQ0FBMEM7QUFDdkRJLEVBQUFBLFdBQVcsQ0FBQ0MsU0FBRCxFQUFZQyxLQUFaLEVBQW1CO0FBQzVCLFVBQU1ELFNBQU4sRUFBaUJDLEtBQWpCO0FBRUE7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksU0FBS0osSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0ssS0FBTCxHQUFhLElBQUlELEtBQUssQ0FBQ0UsTUFBVixDQUNYLElBQUlGLEtBQUssQ0FBQ0csY0FBVixDQUF5QjtBQUFFQyxNQUFBQSxLQUFLLEVBQUU7QUFBVCxLQUF6QixDQURXLENBQWI7QUFHRDs7QUFFREMsRUFBQUEsTUFBTSxDQUFDQyxRQUFELEVBQVc7QUFDZkEsSUFBQUEsUUFBUSxDQUFDQyxNQUFULENBQWdCQyxRQUFoQixDQUF5QkMsUUFBekIsR0FBb0NILFFBQVEsQ0FBQ0csUUFBVCxDQUFrQkMsQ0FBdEQ7QUFDRDs7QUFFREMsRUFBQUEsS0FBSyxDQUFDTCxRQUFELEVBQVc7QUFDZEEsSUFBQUEsUUFBUSxDQUFDQyxNQUFULENBQWdCSSxLQUFoQixDQUFzQkMsR0FBdEIsQ0FDRU4sUUFBUSxDQUFDSyxLQUFULEdBQWlCTCxRQUFRLENBQUNPLE1BRDVCLEVBRUVQLFFBQVEsQ0FBQ0ssS0FBVCxHQUFpQkwsUUFBUSxDQUFDTyxNQUY1QixFQUdFLENBSEY7QUFLRDs7QUF4QnNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1lc2hSZW5kZXJlciBmcm9tICcuL01lc2hSZW5kZXJlcic7XG5pbXBvcnQgeyBSRU5ERVJFUl9UWVBFX1NQUklURSBhcyB0eXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQHJlcXVpcmVzIFRIUkVFIC0geyBNZXNoLCBCb3hHZW9tZXRyeSwgTWVzaExhbWJlcnRNYXRlcmlhbCwgU3ByaXRlLCBTcHJpdGVNYXRlcmlhbCB9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwcml0ZVJlbmRlcmVyIGV4dGVuZHMgTWVzaFJlbmRlcmVyIHtcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBUSFJFRSkge1xuICAgIHN1cGVyKGNvbnRhaW5lciwgVEhSRUUpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2MgVGhlIGNsYXNzIHR5cGUuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuX2JvZHkgPSBuZXcgVEhSRUUuU3ByaXRlKFxuICAgICAgbmV3IFRIUkVFLlNwcml0ZU1hdGVyaWFsKHsgY29sb3I6IDB4ZmZmZmZmIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJvdGF0ZShwYXJ0aWNsZSkge1xuICAgIHBhcnRpY2xlLnRhcmdldC5tYXRlcmlhbC5yb3RhdGlvbiA9IHBhcnRpY2xlLnJvdGF0aW9uLno7XG4gIH1cblxuICBzY2FsZShwYXJ0aWNsZSkge1xuICAgIHBhcnRpY2xlLnRhcmdldC5zY2FsZS5zZXQoXG4gICAgICBwYXJ0aWNsZS5zY2FsZSAqIHBhcnRpY2xlLnJhZGl1cyxcbiAgICAgIHBhcnRpY2xlLnNjYWxlICogcGFydGljbGUucmFkaXVzLFxuICAgICAgMVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
||||
@@ -0,0 +1,5 @@
|
||||
export { default as CustomRenderer } from './CustomRenderer';
|
||||
export { default as MeshRenderer } from './MeshRenderer';
|
||||
export { default as SpriteRenderer } from './SpriteRenderer';
|
||||
export { default as GPURenderer } from './GPURenderer';
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW5kZXJlci9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0IiwiQ3VzdG9tUmVuZGVyZXIiLCJNZXNoUmVuZGVyZXIiLCJTcHJpdGVSZW5kZXJlciIsIkdQVVJlbmRlcmVyIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxPQUFPLElBQUlDLGNBQXBCLFFBQTBDLGtCQUExQztBQUNBLFNBQVNELE9BQU8sSUFBSUUsWUFBcEIsUUFBd0MsZ0JBQXhDO0FBQ0EsU0FBU0YsT0FBTyxJQUFJRyxjQUFwQixRQUEwQyxrQkFBMUM7QUFDQSxTQUFTSCxPQUFPLElBQUlJLFdBQXBCLFFBQXVDLGVBQXZDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21SZW5kZXJlciB9IGZyb20gJy4vQ3VzdG9tUmVuZGVyZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXNoUmVuZGVyZXIgfSBmcm9tICcuL01lc2hSZW5kZXJlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNwcml0ZVJlbmRlcmVyIH0gZnJvbSAnLi9TcHJpdGVSZW5kZXJlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdQVVJlbmRlcmVyIH0gZnJvbSAnLi9HUFVSZW5kZXJlcic7XG4iXX0=
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user