mirror of
https://github.com/overte-org/overte.git
synced 2025-04-23 18:13:29 +02:00
Sanitize particle properties and their use
Excluding animationSetings because it's unused and will be removed.
This commit is contained in:
parent
454a86d7ff
commit
67a497cda3
2 changed files with 140 additions and 31 deletions
|
@ -52,24 +52,48 @@ const float ParticleEffectEntityItem::DEFAULT_ALPHA = 1.0f;
|
|||
const float ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD = 0.0f;
|
||||
const float ParticleEffectEntityItem::DEFAULT_ALPHA_START = DEFAULT_ALPHA;
|
||||
const float ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH = DEFAULT_ALPHA;
|
||||
const float ParticleEffectEntityItem::MINIMUM_ALPHA = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_ALPHA = 1.0f;
|
||||
const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FRAME_INDEX = 0.0f;
|
||||
const bool ParticleEffectEntityItem::DEFAULT_ANIMATION_IS_PLAYING = false;
|
||||
const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FPS = 30.0f;
|
||||
const quint32 ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES = 1000;
|
||||
const quint32 ParticleEffectEntityItem::MINIMUM_MAX_PARTICLES = 1;
|
||||
const quint32 ParticleEffectEntityItem::MAXIMUM_MAX_PARTICLES = 10000;
|
||||
const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f;
|
||||
const float ParticleEffectEntityItem::MINIMUM_LIFESPAN = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_LIFESPAN = 86400.0f; // 1 day
|
||||
const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f;
|
||||
const float ParticleEffectEntityItem::MINIMUM_EMIT_RATE = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_EMIT_RATE = 1000.0f;
|
||||
const float ParticleEffectEntityItem::DEFAULT_EMIT_SPEED = 5.0f;
|
||||
const float ParticleEffectEntityItem::MINIMUM_EMIT_SPEED = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_EMIT_SPEED = 343.2f; // Speed of sound
|
||||
const float ParticleEffectEntityItem::DEFAULT_SPEED_SPREAD = 1.0f;
|
||||
const glm::quat ParticleEffectEntityItem::DEFAULT_EMIT_ORIENTATION = glm::angleAxis(-PI_OVER_TWO, X_AXIS); // Vertical
|
||||
const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_DIMENSIONS = glm::vec3(0.0f, 0.0f, 0.0f); // Emit from point
|
||||
const float ParticleEffectEntityItem::MINIMUM_EMIT_DIMENSION = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_EMIT_DIMENSION = (float)TREE_SCALE;
|
||||
const float ParticleEffectEntityItem::DEFAULT_EMIT_RADIUS_START = 1.0f; // Emit from surface (when emitDimensions > 0)
|
||||
const float ParticleEffectEntityItem::MINIMUM_EMIT_RADIUS_START = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_EMIT_RADIUS_START = 1.0f;
|
||||
const float ParticleEffectEntityItem::MINIMUM_POLAR = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_POLAR = PI;
|
||||
const float ParticleEffectEntityItem::DEFAULT_POLAR_START = 0.0f; // Emit along z-axis
|
||||
const float ParticleEffectEntityItem::DEFAULT_POLAR_FINISH = 0.0f; // ""
|
||||
const float ParticleEffectEntityItem::MINIMUM_AZIMUTH = -PI;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_AZIMUTH = PI;
|
||||
const float ParticleEffectEntityItem::DEFAULT_AZIMUTH_START = -PI; // Emit full circumference (when polarFinish > 0)
|
||||
const float ParticleEffectEntityItem::DEFAULT_AZIMUTH_FINISH = PI; // ""
|
||||
const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, -9.8f, 0.0f);
|
||||
const float ParticleEffectEntityItem::MINIMUM_EMIT_ACCELERATION = -100.0f; // ~ 10g
|
||||
const float ParticleEffectEntityItem::MAXIMUM_EMIT_ACCELERATION = 100.0f;
|
||||
const glm::vec3 ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD(0.0f, 0.0f, 0.0f);
|
||||
const float ParticleEffectEntityItem::MINIMUM_ACCELERATION_SPREAD = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_ACCELERATION_SPREAD = 100.0f;
|
||||
const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f;
|
||||
const float ParticleEffectEntityItem::MINIMUM_PARTICLE_RADIUS = 0.0f;
|
||||
const float ParticleEffectEntityItem::MAXIMUM_PARTICLE_RADIUS = (float)TREE_SCALE;
|
||||
const float ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD = 0.0f;
|
||||
const float ParticleEffectEntityItem::DEFAULT_RADIUS_START = DEFAULT_PARTICLE_RADIUS;
|
||||
const float ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH = DEFAULT_PARTICLE_RADIUS;
|
||||
|
@ -114,37 +138,82 @@ ParticleEffectEntityItem::~ParticleEffectEntityItem() {
|
|||
}
|
||||
|
||||
|
||||
void ParticleEffectEntityItem::setAlphaStart(float alphaStart) {
|
||||
_alphaStart = glm::clamp(alphaStart, MINIMUM_ALPHA, MAXIMUM_ALPHA);
|
||||
_isAlphaStartInitialized = true;
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setAlphaFinish(float alphaFinish) {
|
||||
_alphaFinish = glm::clamp(alphaFinish, MINIMUM_ALPHA, MAXIMUM_ALPHA);
|
||||
_isAlphaFinishInitialized = true;
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setEmitSpeed(float emitSpeed) {
|
||||
_emitSpeed = emitSpeed;
|
||||
_emitSpeed = glm::clamp(emitSpeed, MINIMUM_EMIT_SPEED, MAXIMUM_EMIT_SPEED);
|
||||
computeAndUpdateDimensions();
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setSpeedSpread(float speedSpread) {
|
||||
_speedSpread = speedSpread;
|
||||
_speedSpread = glm::clamp(speedSpread, MINIMUM_EMIT_SPEED, MAXIMUM_EMIT_SPEED);
|
||||
computeAndUpdateDimensions();
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setEmitOrientation(const glm::quat& emitOrientation) {
|
||||
_emitOrientation = emitOrientation;
|
||||
_emitOrientation = glm::normalize(emitOrientation);
|
||||
computeAndUpdateDimensions();
|
||||
}
|
||||
|
||||
|
||||
void ParticleEffectEntityItem::setEmitDimensions(const glm::vec3& emitDimensions) {
|
||||
_emitDimensions = emitDimensions;
|
||||
_emitDimensions = glm::vec3(
|
||||
glm::clamp(emitDimensions.x, MINIMUM_EMIT_DIMENSION, MAXIMUM_EMIT_DIMENSION),
|
||||
glm::clamp(emitDimensions.y, MINIMUM_EMIT_DIMENSION, MAXIMUM_EMIT_DIMENSION),
|
||||
glm::clamp(emitDimensions.z, MINIMUM_EMIT_DIMENSION, MAXIMUM_EMIT_DIMENSION)
|
||||
);
|
||||
computeAndUpdateDimensions();
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setEmitRadiusStart(float emitRadiusStart) {
|
||||
_emitRadiusStart = glm::clamp(emitRadiusStart, MINIMUM_EMIT_RADIUS_START, MAXIMUM_EMIT_RADIUS_START);
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setEmitAcceleration(const glm::vec3& emitAcceleration) {
|
||||
_emitAcceleration = emitAcceleration;
|
||||
_emitAcceleration = glm::vec3(
|
||||
glm::clamp(emitAcceleration.x, MINIMUM_EMIT_ACCELERATION, MAXIMUM_EMIT_ACCELERATION),
|
||||
glm::clamp(emitAcceleration.x, MINIMUM_EMIT_ACCELERATION, MAXIMUM_EMIT_ACCELERATION),
|
||||
glm::clamp(emitAcceleration.y, MINIMUM_EMIT_ACCELERATION, MAXIMUM_EMIT_ACCELERATION)
|
||||
);
|
||||
computeAndUpdateDimensions();
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setAccelerationSpread(const glm::vec3& accelerationSpread){
|
||||
_accelerationSpread = accelerationSpread;
|
||||
_accelerationSpread = glm::vec3(
|
||||
glm::clamp(accelerationSpread.x, MINIMUM_ACCELERATION_SPREAD, MAXIMUM_ACCELERATION_SPREAD),
|
||||
glm::clamp(accelerationSpread.x, MINIMUM_ACCELERATION_SPREAD, MAXIMUM_ACCELERATION_SPREAD),
|
||||
glm::clamp(accelerationSpread.y, MINIMUM_ACCELERATION_SPREAD, MAXIMUM_ACCELERATION_SPREAD)
|
||||
);
|
||||
computeAndUpdateDimensions();
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setParticleRadius(float particleRadius) {
|
||||
_particleRadius = glm::clamp(particleRadius, MINIMUM_PARTICLE_RADIUS, MAXIMUM_PARTICLE_RADIUS);
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setRadiusStart(float radiusStart) {
|
||||
_radiusStart = glm::clamp(radiusStart, MINIMUM_PARTICLE_RADIUS, MAXIMUM_PARTICLE_RADIUS);
|
||||
_isRadiusStartInitialized = true;
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setRadiusFinish(float radiusFinish) {
|
||||
_radiusFinish = glm::clamp(radiusFinish, MINIMUM_PARTICLE_RADIUS, MAXIMUM_PARTICLE_RADIUS);
|
||||
_isRadiusFinishInitialized = true;
|
||||
}
|
||||
|
||||
void ParticleEffectEntityItem::setRadiusSpread(float radiusSpread) {
|
||||
_radiusSpread = glm::clamp(radiusSpread, MINIMUM_PARTICLE_RADIUS, MAXIMUM_PARTICLE_RADIUS);
|
||||
}
|
||||
|
||||
|
||||
void ParticleEffectEntityItem::computeAndUpdateDimensions() {
|
||||
const float time = _lifespan * 1.1f; // add 10% extra time to account for incremental timer accumulation error
|
||||
|
||||
|
@ -639,12 +708,12 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
|||
_particleLifetimes[i] -= deltaTime;
|
||||
|
||||
// if particle has died.
|
||||
if (_particleLifetimes[i] <= 0.0f) {
|
||||
if (_particleLifetimes[i] <= 0.0f || _lifespan == 0.0f) {
|
||||
// move head forward
|
||||
_particleHeadIndex = (_particleHeadIndex + 1) % _maxParticles;
|
||||
}
|
||||
else {
|
||||
float age = (1.0f - _particleLifetimes[i] / _lifespan); // 0.0 .. 1.0
|
||||
float age = 1.0f - _particleLifetimes[i] / _lifespan; // 0.0 .. 1.0
|
||||
updateRadius(i, age);
|
||||
updateColor(i, age);
|
||||
updateAlpha(i, age);
|
||||
|
@ -654,7 +723,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
|||
}
|
||||
|
||||
// emit new particles, but only if animation is playing
|
||||
if (getAnimationIsPlaying()) {
|
||||
if (getAnimationIsPlaying() && _emitRate > 0.0f && _lifespan > 0.0f && _polarStart <= _polarFinish) {
|
||||
|
||||
float timeLeftInFrame = deltaTime;
|
||||
while (_timeUntilNextEmit < timeLeftInFrame) {
|
||||
|
@ -672,10 +741,18 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
|||
_radiusMiddles[i] =_particleRadius;
|
||||
_radiusFinishes[i] = getRadiusFinish();
|
||||
} else {
|
||||
float spreadMultiplier = 1.0f + (2.0f * randFloat() - 1.0f) * _radiusSpread / _particleRadius;
|
||||
_radiusStarts[i] = spreadMultiplier * getRadiusStart();
|
||||
_radiusMiddles[i] = spreadMultiplier * _particleRadius;
|
||||
_radiusFinishes[i] = spreadMultiplier * getRadiusFinish();
|
||||
float spreadMultiplier;
|
||||
if (_particleRadius > 0.0f) {
|
||||
spreadMultiplier = 1.0f + (2.0f * randFloat() - 1.0f) * _radiusSpread / _particleRadius;
|
||||
} else {
|
||||
spreadMultiplier = 0.0f;
|
||||
}
|
||||
_radiusStarts[i] =
|
||||
glm::clamp(spreadMultiplier * getRadiusStart(), MINIMUM_PARTICLE_RADIUS, MAXIMUM_PARTICLE_RADIUS);
|
||||
_radiusMiddles[i] =
|
||||
glm::clamp(spreadMultiplier * _particleRadius, MINIMUM_PARTICLE_RADIUS, MAXIMUM_PARTICLE_RADIUS);
|
||||
_radiusFinishes[i] =
|
||||
glm::clamp(spreadMultiplier * getRadiusFinish(), MINIMUM_PARTICLE_RADIUS, MAXIMUM_PARTICLE_RADIUS);
|
||||
}
|
||||
updateRadius(i, 0.0f);
|
||||
|
||||
|
@ -753,9 +830,12 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
|||
xColor finishColor = getColorFinish();
|
||||
|
||||
float spread = 2.0f * randFloat() - 1.0f;
|
||||
float spreadMultiplierRed = 1.0f + spread * (float)_colorSpread.red / (float)middleColor.red;
|
||||
float spreadMultiplierGreen = 1.0f + spread * (float)_colorSpread.green / (float)middleColor.green;
|
||||
float spreadMultiplierBlue = 1.0f + spread * (float)_colorSpread.blue / (float)middleColor.blue;
|
||||
float spreadMultiplierRed =
|
||||
middleColor.red > 0 ? 1.0f + spread * (float)_colorSpread.red / (float)middleColor.red : 1.0f;
|
||||
float spreadMultiplierGreen =
|
||||
middleColor.green > 0 ? 1.0f + spread * (float)_colorSpread.green / (float)middleColor.green :1.0f;
|
||||
float spreadMultiplierBlue =
|
||||
middleColor.blue > 0 ? 1.0f + spread * (float)_colorSpread.blue / (float)middleColor.blue : 1.0f;
|
||||
|
||||
_colorStarts[i].red = (int)glm::clamp(spreadMultiplierRed * (float)startColor.red, 0.0f, 255.0f);
|
||||
_colorStarts[i].green = (int)glm::clamp(spreadMultiplierGreen * (float)startColor.green, 0.0f, 255.0f);
|
||||
|
@ -799,6 +879,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
|||
}
|
||||
|
||||
void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) {
|
||||
maxParticles = glm::clamp(maxParticles, MINIMUM_MAX_PARTICLES, MAXIMUM_MAX_PARTICLES);
|
||||
if (_maxParticles != maxParticles) {
|
||||
_maxParticles = maxParticles;
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#define hifi_ParticleEffectEntityItem_h
|
||||
|
||||
#include <AnimationLoop.h>
|
||||
|
||||
#include "EntityItem.h"
|
||||
|
||||
class ParticleEffectEntityItem : public EntityItem {
|
||||
|
@ -68,22 +69,25 @@ public:
|
|||
void setColorSpread(const xColor& colorSpread) { _colorSpread = colorSpread; }
|
||||
xColor getColorSpread() const { return _colorSpread; }
|
||||
|
||||
static const float MAXIMUM_ALPHA;
|
||||
static const float MINIMUM_ALPHA;
|
||||
|
||||
static const float DEFAULT_ALPHA;
|
||||
void setAlpha(float alpha) { _alpha = alpha; }
|
||||
void setAlpha(float alpha) { _alpha = glm::clamp(alpha, MINIMUM_ALPHA, MAXIMUM_ALPHA); }
|
||||
float getAlpha() const { return _alpha; }
|
||||
|
||||
static const float DEFAULT_ALPHA_START;
|
||||
bool _isAlphaStartInitialized = false;
|
||||
void setAlphaStart(float alphaStart) { _alphaStart = alphaStart; _isAlphaStartInitialized = true; }
|
||||
void setAlphaStart(float alphaStart);
|
||||
float getAlphaStart() const { return _isAlphaStartInitialized ? _alphaStart : _alpha; }
|
||||
|
||||
static const float DEFAULT_ALPHA_FINISH;
|
||||
bool _isAlphaFinishInitialized = false;
|
||||
void setAlphaFinish(float alphaFinish) { _alphaFinish = alphaFinish; _isAlphaFinishInitialized = true; }
|
||||
void setAlphaFinish(float alphaFinish);
|
||||
float getAlphaFinish() const { return _isAlphaFinishInitialized ? _alphaFinish : _alpha; }
|
||||
|
||||
static const float DEFAULT_ALPHA_SPREAD;
|
||||
void setAlphaSpread(float alphaSpread) { _alphaSpread = alphaSpread; }
|
||||
void setAlphaSpread(float alphaSpread) { _alphaSpread = glm::clamp(alphaSpread, MINIMUM_ALPHA, MAXIMUM_ALPHA); }
|
||||
float getAlphaSpread() const { return _alphaSpread; }
|
||||
|
||||
void updateShapeType(ShapeType type);
|
||||
|
@ -117,18 +121,26 @@ public:
|
|||
float getAnimationLastFrame() const { return _animationLoop.getLastFrame(); }
|
||||
|
||||
static const quint32 DEFAULT_MAX_PARTICLES;
|
||||
static const quint32 MINIMUM_MAX_PARTICLES;
|
||||
static const quint32 MAXIMUM_MAX_PARTICLES;
|
||||
void setMaxParticles(quint32 maxParticles);
|
||||
quint32 getMaxParticles() const { return _maxParticles; }
|
||||
|
||||
static const float DEFAULT_LIFESPAN;
|
||||
void setLifespan(float lifespan) { _lifespan = lifespan; }
|
||||
static const float MINIMUM_LIFESPAN;
|
||||
static const float MAXIMUM_LIFESPAN;
|
||||
void setLifespan(float lifespan) { _lifespan = glm::clamp(lifespan, MINIMUM_LIFESPAN, MAXIMUM_LIFESPAN); }
|
||||
float getLifespan() const { return _lifespan; }
|
||||
|
||||
static const float DEFAULT_EMIT_RATE;
|
||||
void setEmitRate(float emitRate) { _emitRate = emitRate; }
|
||||
static const float MINIMUM_EMIT_RATE;
|
||||
static const float MAXIMUM_EMIT_RATE;
|
||||
void setEmitRate(float emitRate) { _emitRate = glm::clamp(emitRate, MINIMUM_EMIT_RATE, MAXIMUM_EMIT_RATE); }
|
||||
float getEmitRate() const { return _emitRate; }
|
||||
|
||||
static const float DEFAULT_EMIT_SPEED;
|
||||
static const float MINIMUM_EMIT_SPEED;
|
||||
static const float MAXIMUM_EMIT_SPEED;
|
||||
void setEmitSpeed(float emitSpeed);
|
||||
float getEmitSpeed() const { return _emitSpeed; }
|
||||
|
||||
|
@ -141,53 +153,69 @@ public:
|
|||
const glm::quat& getEmitOrientation() const { return _emitOrientation; }
|
||||
|
||||
static const glm::vec3 DEFAULT_EMIT_DIMENSIONS;
|
||||
static const float MINIMUM_EMIT_DIMENSION;
|
||||
static const float MAXIMUM_EMIT_DIMENSION;
|
||||
void setEmitDimensions(const glm::vec3& emitDimensions);
|
||||
const glm::vec3& getEmitDimensions() const { return _emitDimensions; }
|
||||
|
||||
static const float DEFAULT_EMIT_RADIUS_START;
|
||||
void setEmitRadiusStart(float emitRadiusStart) { _emitRadiusStart = emitRadiusStart; }
|
||||
static const float MINIMUM_EMIT_RADIUS_START;
|
||||
static const float MAXIMUM_EMIT_RADIUS_START;
|
||||
void setEmitRadiusStart(float emitRadiusStart);
|
||||
float getEmitRadiusStart() const { return _emitRadiusStart; }
|
||||
|
||||
static const float MINIMUM_POLAR;
|
||||
static const float MAXIMUM_POLAR;
|
||||
|
||||
static const float DEFAULT_POLAR_START;
|
||||
void setPolarStart(float polarStart) { _polarStart = polarStart; }
|
||||
void setPolarStart(float polarStart) { _polarStart = glm::clamp(polarStart, MINIMUM_POLAR, MAXIMUM_POLAR); }
|
||||
float getPolarStart() const { return _polarStart; }
|
||||
|
||||
static const float DEFAULT_POLAR_FINISH;
|
||||
void setPolarFinish(float polarFinish) { _polarFinish = polarFinish; }
|
||||
void setPolarFinish(float polarFinish) { _polarFinish = glm::clamp(polarFinish, MINIMUM_POLAR, MAXIMUM_POLAR); }
|
||||
float getPolarFinish() const { return _polarFinish; }
|
||||
|
||||
static const float MINIMUM_AZIMUTH;
|
||||
static const float MAXIMUM_AZIMUTH;
|
||||
|
||||
static const float DEFAULT_AZIMUTH_START;
|
||||
void setAzimuthStart(float azimuthStart) { _azimuthStart = azimuthStart; }
|
||||
void setAzimuthStart(float azimuthStart) { _azimuthStart = glm::clamp(azimuthStart, MINIMUM_AZIMUTH, MAXIMUM_AZIMUTH); }
|
||||
float getAzimuthStart() const { return _azimuthStart; }
|
||||
|
||||
static const float DEFAULT_AZIMUTH_FINISH;
|
||||
void setAzimuthFinish(float azimuthFinish) { _azimuthFinish = azimuthFinish; }
|
||||
void setAzimuthFinish(float azimuthFinish) { _azimuthFinish = glm::clamp(azimuthFinish, MINIMUM_AZIMUTH, MAXIMUM_AZIMUTH); }
|
||||
float getAzimuthFinish() const { return _azimuthFinish; }
|
||||
|
||||
static const glm::vec3 DEFAULT_EMIT_ACCELERATION;
|
||||
static const float MINIMUM_EMIT_ACCELERATION;
|
||||
static const float MAXIMUM_EMIT_ACCELERATION;
|
||||
void setEmitAcceleration(const glm::vec3& emitAcceleration);
|
||||
const glm::vec3& getEmitAcceleration() const { return _emitAcceleration; }
|
||||
|
||||
static const glm::vec3 DEFAULT_ACCELERATION_SPREAD;
|
||||
static const float MINIMUM_ACCELERATION_SPREAD;
|
||||
static const float MAXIMUM_ACCELERATION_SPREAD;
|
||||
void setAccelerationSpread(const glm::vec3& accelerationSpread);
|
||||
const glm::vec3& getAccelerationSpread() const { return _accelerationSpread; }
|
||||
|
||||
static const float DEFAULT_PARTICLE_RADIUS;
|
||||
void setParticleRadius(float particleRadius) { _particleRadius = particleRadius; }
|
||||
static const float MINIMUM_PARTICLE_RADIUS;
|
||||
static const float MAXIMUM_PARTICLE_RADIUS;
|
||||
void setParticleRadius(float particleRadius);
|
||||
float getParticleRadius() const { return _particleRadius; }
|
||||
|
||||
static const float DEFAULT_RADIUS_START;
|
||||
bool _isRadiusStartInitialized;
|
||||
void setRadiusStart(float radiusStart) { _radiusStart = radiusStart; _isRadiusStartInitialized = true; }
|
||||
void setRadiusStart(float radiusStart);
|
||||
float getRadiusStart() const { return _isRadiusStartInitialized ? _radiusStart : _particleRadius; }
|
||||
|
||||
static const float DEFAULT_RADIUS_FINISH;
|
||||
bool _isRadiusFinishInitialized;
|
||||
void setRadiusFinish(float radiusFinish) { _radiusFinish = radiusFinish; _isRadiusFinishInitialized = true; }
|
||||
void setRadiusFinish(float radiusFinish);
|
||||
float getRadiusFinish() const { return _isRadiusFinishInitialized ? _radiusFinish : _particleRadius; }
|
||||
|
||||
static const float DEFAULT_RADIUS_SPREAD;
|
||||
void setRadiusSpread(float radiusSpread) { _radiusSpread = radiusSpread; }
|
||||
void setRadiusSpread(float radiusSpread);
|
||||
float getRadiusSpread() const { return _radiusSpread; }
|
||||
|
||||
void computeAndUpdateDimensions();
|
||||
|
|
Loading…
Reference in a new issue