mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 02:37:12 +02:00
Change emitter radiuses to dimensions to match sphere properties
This commit is contained in:
parent
12e2cf3ce9
commit
f647dcf147
6 changed files with 34 additions and 33 deletions
|
@ -137,7 +137,7 @@
|
|||
Entities.editEntity(particles, {
|
||||
colorStart: { red: 255, green: 255, blue: 255 },
|
||||
colorFinish: { red: 255, green: 255, blue: 255 },
|
||||
emitRadius: sphereDimensions,
|
||||
emitDimensions: sphereDimensions,
|
||||
emitOrientation: sphereOrientation
|
||||
});
|
||||
Entities.editEntity(box, {
|
||||
|
@ -150,7 +150,7 @@
|
|||
case 12:
|
||||
print("Stop emitting");
|
||||
Entities.editEntity(particles, {
|
||||
emitRadius: pointDimensions,
|
||||
emitDimensions: pointDimensions,
|
||||
emitOrientation: verticalOrientation,
|
||||
emitRate: SLOW_EMIT_RATE,
|
||||
emitSpeed: FAST_EMIT_SPEED,
|
||||
|
|
|
@ -94,7 +94,7 @@ CONSTRUCT_PROPERTY(emitRate, ParticleEffectEntityItem::DEFAULT_EMIT_RATE),
|
|||
CONSTRUCT_PROPERTY(emitSpeed, ParticleEffectEntityItem::DEFAULT_EMIT_SPEED),
|
||||
CONSTRUCT_PROPERTY(speedSpread, ParticleEffectEntityItem::DEFAULT_SPEED_SPREAD),
|
||||
CONSTRUCT_PROPERTY(emitOrientation, ParticleEffectEntityItem::DEFAULT_EMIT_ORIENTATION),
|
||||
CONSTRUCT_PROPERTY(emitRadius, ParticleEffectEntityItem::DEFAULT_EMIT_RADIUS),
|
||||
CONSTRUCT_PROPERTY(emitDimensions, ParticleEffectEntityItem::DEFAULT_EMIT_DIMENSIONS),
|
||||
CONSTRUCT_PROPERTY(emitRadiusStart, ParticleEffectEntityItem::DEFAULT_EMIT_RADIUS_START),
|
||||
CONSTRUCT_PROPERTY(polarStart, ParticleEffectEntityItem::DEFAULT_POLAR_START),
|
||||
CONSTRUCT_PROPERTY(polarFinish, ParticleEffectEntityItem::DEFAULT_POLAR_FINISH),
|
||||
|
@ -384,7 +384,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
|
|||
CHECK_PROPERTY_CHANGE(PROP_EMIT_SPEED, emitSpeed);
|
||||
CHECK_PROPERTY_CHANGE(PROP_SPEED_SPREAD, speedSpread);
|
||||
CHECK_PROPERTY_CHANGE(PROP_EMIT_ORIENTATION, emitOrientation);
|
||||
CHECK_PROPERTY_CHANGE(PROP_EMIT_RADIUS, emitRadius);
|
||||
CHECK_PROPERTY_CHANGE(PROP_EMIT_DIMENSIONS, emitDimensions);
|
||||
CHECK_PROPERTY_CHANGE(PROP_EMIT_RADIUS_START, emitRadiusStart);
|
||||
CHECK_PROPERTY_CHANGE(PROP_POLAR_START, polarStart);
|
||||
CHECK_PROPERTY_CHANGE(PROP_POLAR_FINISH, polarFinish);
|
||||
|
@ -510,7 +510,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
|
|||
COPY_PROPERTY_TO_QSCRIPTVALUE(emitSpeed);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(speedSpread);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(emitOrientation);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(emitRadius);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(emitDimensions);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(emitRadiusStart);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(polarStart);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(polarFinish);
|
||||
|
@ -656,7 +656,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
|
|||
COPY_PROPERTY_FROM_QSCRIPTVALUE(emitSpeed, float, setEmitSpeed);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(speedSpread, float, setSpeedSpread);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(emitOrientation, glmQuat, setEmitOrientation);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(emitRadius, glmVec3, setEmitRadius);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(emitDimensions, glmVec3, setEmitDimensions);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(emitRadiusStart, float, setEmitRadiusStart);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(polarStart, float, setPolarStart);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(polarFinish, float, setPolarFinish);
|
||||
|
@ -916,7 +916,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem
|
|||
APPEND_ENTITY_PROPERTY(PROP_EMIT_SPEED, properties.getEmitSpeed());
|
||||
APPEND_ENTITY_PROPERTY(PROP_SPEED_SPREAD, properties.getSpeedSpread());
|
||||
APPEND_ENTITY_PROPERTY(PROP_EMIT_ORIENTATION, properties.getEmitOrientation());
|
||||
APPEND_ENTITY_PROPERTY(PROP_EMIT_RADIUS, properties.getEmitRadius());
|
||||
APPEND_ENTITY_PROPERTY(PROP_EMIT_DIMENSIONS, properties.getEmitDimensions());
|
||||
APPEND_ENTITY_PROPERTY(PROP_EMIT_RADIUS_START, properties.getEmitRadiusStart());
|
||||
APPEND_ENTITY_PROPERTY(PROP_POLAR_START, properties.getPolarStart());
|
||||
APPEND_ENTITY_PROPERTY(PROP_POLAR_FINISH, properties.getPolarFinish());
|
||||
|
@ -1207,7 +1207,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
|
|||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_SPEED, float, setEmitSpeed);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SPEED_SPREAD, float, setSpeedSpread);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_ORIENTATION, glm::quat, setEmitOrientation);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_RADIUS, glm::vec3, setEmitRadius);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_DIMENSIONS, glm::vec3, setEmitDimensions);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_RADIUS_START, float, setEmitRadiusStart);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_POLAR_START, float, setPolarStart);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_POLAR_FINISH, float, setPolarFinish);
|
||||
|
@ -1363,7 +1363,7 @@ void EntityItemProperties::markAllChanged() {
|
|||
_emitSpeedChanged = true;
|
||||
_speedSpreadChanged = true;
|
||||
_emitOrientationChanged = true;
|
||||
_emitRadiusChanged = true;
|
||||
_emitDimensionsChanged = true;
|
||||
_emitRadiusStartChanged = true;
|
||||
_polarStartChanged = true;
|
||||
_polarFinishChanged = true;
|
||||
|
|
|
@ -141,7 +141,7 @@ public:
|
|||
DEFINE_PROPERTY(PROP_EMIT_SPEED, EmitSpeed, emitSpeed, float);
|
||||
DEFINE_PROPERTY(PROP_SPEED_SPREAD, SpeedSpread, speedSpread, float);
|
||||
DEFINE_PROPERTY_REF(PROP_EMIT_ORIENTATION, EmitOrientation, emitOrientation, glm::quat);
|
||||
DEFINE_PROPERTY_REF(PROP_EMIT_RADIUS, EmitRadius, emitRadius, glm::vec3);
|
||||
DEFINE_PROPERTY_REF(PROP_EMIT_DIMENSIONS, EmitDimensions, emitDimensions, glm::vec3);
|
||||
DEFINE_PROPERTY(PROP_EMIT_RADIUS_START, EmitRadiusStart, emitRadiusStart, float);
|
||||
DEFINE_PROPERTY(PROP_POLAR_START, PolarStart, polarStart, float);
|
||||
DEFINE_PROPERTY(PROP_POLAR_FINISH, PolarFinish, polarFinish, float);
|
||||
|
@ -345,7 +345,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) {
|
|||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitSpeed, emitSpeed, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, SpeedSpread, speedSpread, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitOrientation, emitOrientation, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitRadius, emitRadius, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitDimensions, emitDimensions, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitRadiusStart, emitRadiusStart, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, PolarStart, polarStart, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, PolarFinish, polarFinish, "");
|
||||
|
|
|
@ -163,7 +163,7 @@ enum EntityPropertyList {
|
|||
PROP_EMIT_SPEED,
|
||||
PROP_SPEED_SPREAD,
|
||||
PROP_EMIT_ORIENTATION,
|
||||
PROP_EMIT_RADIUS,
|
||||
PROP_EMIT_DIMENSIONS,
|
||||
PROP_EMIT_RADIUS_START,
|
||||
PROP_POLAR_START,
|
||||
PROP_POLAR_FINISH,
|
||||
|
|
|
@ -61,8 +61,8 @@ const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f;
|
|||
const float ParticleEffectEntityItem::DEFAULT_EMIT_SPEED = 5.0f;
|
||||
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_RADIUS = glm::vec3(0.0f, 0.0f, 0.0f); // Emit from point
|
||||
const float ParticleEffectEntityItem::DEFAULT_EMIT_RADIUS_START = 1.0f; // Emit from surface (when emitRadius > 0)
|
||||
const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_DIMENSIONS = glm::vec3(0.0f, 0.0f, 0.0f); // Emit from point
|
||||
const float ParticleEffectEntityItem::DEFAULT_EMIT_RADIUS_START = 1.0f; // Emit from surface (when emitDimensions > 0)
|
||||
const float ParticleEffectEntityItem::DEFAULT_POLAR_START = 0.0f; // Emit along z-axis
|
||||
const float ParticleEffectEntityItem::DEFAULT_POLAR_FINISH = 0.0f; // ""
|
||||
const float ParticleEffectEntityItem::DEFAULT_AZIMUTH_START = -PI; // Emit full circumference (when polarFinish > 0)
|
||||
|
@ -130,8 +130,8 @@ void ParticleEffectEntityItem::setEmitOrientation(const glm::quat& emitOrientati
|
|||
}
|
||||
|
||||
|
||||
void ParticleEffectEntityItem::setEmitRadius(const glm::vec3& emitRadius) {
|
||||
_emitRadius = emitRadius;
|
||||
void ParticleEffectEntityItem::setEmitDimensions(const glm::vec3& emitDimensions) {
|
||||
_emitDimensions = emitDimensions;
|
||||
computeAndUpdateDimensions();
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ void ParticleEffectEntityItem::computeAndUpdateDimensions() {
|
|||
|
||||
glm::vec3 maxVelocity = glm::abs(velocity) + velocitySpread;
|
||||
glm::vec3 maxAccleration = glm::abs(_acceleration) + _accelerationSpread;
|
||||
glm::vec3 maxDistance = _emitRadius + time * maxVelocity + (0.5f * time * time) * maxAccleration;
|
||||
glm::vec3 maxDistance = 0.5f * _emitDimensions + time * maxVelocity + (0.5f * time * time) * maxAccleration;
|
||||
|
||||
float maxDistanceValue = std::max(maxDistance.x, std::max(maxDistance.y, maxDistance.z));
|
||||
|
||||
|
@ -180,7 +180,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const {
|
|||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitSpeed, getEmitSpeed);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(speedSpread, getSpeedSpread);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitOrientation, getEmitOrientation);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitRadius, getEmitRadius);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitDimensions, getEmitDimensions);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitRadiusStart, getEmitRadiusStart);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(polarStart, getPolarStart);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(polarFinish, getPolarFinish);
|
||||
|
@ -220,7 +220,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert
|
|||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitSpeed, setEmitSpeed);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(speedSpread, setSpeedSpread);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitOrientation, setEmitOrientation);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitRadius, setEmitRadius);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitDimensions, setEmitDimensions);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitRadiusStart, setEmitRadiusStart);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(polarStart, setPolarStart);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(polarFinish, setPolarFinish);
|
||||
|
@ -330,7 +330,7 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch
|
|||
READ_ENTITY_PROPERTY(PROP_EMIT_SPEED, float, setEmitSpeed);
|
||||
READ_ENTITY_PROPERTY(PROP_SPEED_SPREAD, float, setSpeedSpread);
|
||||
READ_ENTITY_PROPERTY(PROP_EMIT_ORIENTATION, glm::quat, setEmitOrientation);
|
||||
READ_ENTITY_PROPERTY(PROP_EMIT_RADIUS, glm::vec3, setEmitRadius);
|
||||
READ_ENTITY_PROPERTY(PROP_EMIT_DIMENSIONS, glm::vec3, setEmitDimensions);
|
||||
READ_ENTITY_PROPERTY(PROP_EMIT_RADIUS_START, float, setEmitRadiusStart);
|
||||
READ_ENTITY_PROPERTY(PROP_POLAR_START, float, setPolarStart);
|
||||
READ_ENTITY_PROPERTY(PROP_POLAR_FINISH, float, setPolarFinish);
|
||||
|
@ -372,7 +372,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea
|
|||
requestedProperties += PROP_EMIT_SPEED;
|
||||
requestedProperties += PROP_SPEED_SPREAD;
|
||||
requestedProperties += PROP_EMIT_ORIENTATION;
|
||||
requestedProperties += PROP_EMIT_RADIUS;
|
||||
requestedProperties += PROP_EMIT_DIMENSIONS;
|
||||
requestedProperties += PROP_EMIT_RADIUS_START;
|
||||
requestedProperties += PROP_POLAR_START;
|
||||
requestedProperties += PROP_POLAR_FINISH;
|
||||
|
@ -417,7 +417,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData,
|
|||
APPEND_ENTITY_PROPERTY(PROP_EMIT_SPEED, getEmitSpeed());
|
||||
APPEND_ENTITY_PROPERTY(PROP_SPEED_SPREAD, getSpeedSpread());
|
||||
APPEND_ENTITY_PROPERTY(PROP_EMIT_ORIENTATION, getEmitOrientation());
|
||||
APPEND_ENTITY_PROPERTY(PROP_EMIT_RADIUS, getEmitRadius());
|
||||
APPEND_ENTITY_PROPERTY(PROP_EMIT_DIMENSIONS, getEmitDimensions());
|
||||
APPEND_ENTITY_PROPERTY(PROP_EMIT_RADIUS_START, getEmitRadiusStart());
|
||||
APPEND_ENTITY_PROPERTY(PROP_POLAR_START, getPolarStart());
|
||||
APPEND_ENTITY_PROPERTY(PROP_POLAR_FINISH, getPolarFinish());
|
||||
|
@ -689,7 +689,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
|||
(_emitSpeed + (2.0f * randFloat() - 1.0f) * _speedSpread) * (_emitOrientation * Z_AXIS);
|
||||
_particleAccelerations[i] = _emitAcceleration + (2.0f * randFloat() - 1.0f) * _accelerationSpread;
|
||||
|
||||
} else if (_emitRadius == glm::vec3()) {
|
||||
} else if (_emitDimensions == glm::vec3()) {
|
||||
// Emit around point
|
||||
float elevation = asin(2.0f * randFloat() - 1.0f); // Distribute points evenly over surface
|
||||
glm::vec3 emitDirection = _emitOrientation * fromSpherical(elevation, randFloat() * TWO_PI);
|
||||
|
@ -705,14 +705,15 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
|||
float azimuth = (2.0f * randFloat() - 1.0f) * PI;
|
||||
// TODO: Sort out ellipsoid equations to distribute completely evenly over surface.
|
||||
|
||||
float x = _emitRadius.x * cos(elevation) * cos(azimuth);
|
||||
float y = _emitRadius.y * cos(elevation) * sin(azimuth);
|
||||
float z = _emitRadius.z * sin(elevation);
|
||||
glm::vec3 radiuses = 0.5f * _emitDimensions;
|
||||
float x = radiuses.x * cos(elevation) * cos(azimuth);
|
||||
float y = radiuses.y * cos(elevation) * sin(azimuth);
|
||||
float z = radiuses.z * sin(elevation);
|
||||
glm::vec3 emitPosition = glm::vec3(x, y, z);
|
||||
glm::vec3 emitDirection = glm::normalize(glm::vec3(
|
||||
x / (_emitRadius.x * _emitRadius.x),
|
||||
y / (_emitRadius.y * _emitRadius.y),
|
||||
z / (_emitRadius.z * _emitRadius.z)
|
||||
x / (radiuses.x * radiuses.x),
|
||||
y / (radiuses.y * radiuses.y),
|
||||
z / (radiuses.z * radiuses.z)
|
||||
));
|
||||
|
||||
_particlePositions[i] = getPosition() + _emitOrientation * emitPosition;
|
||||
|
|
|
@ -140,9 +140,9 @@ public:
|
|||
void setEmitOrientation(const glm::quat& emitOrientation);
|
||||
const glm::quat& getEmitOrientation() const { return _emitOrientation; }
|
||||
|
||||
static const glm::vec3 DEFAULT_EMIT_RADIUS;
|
||||
void setEmitRadius(const glm::vec3& emitRadius);
|
||||
const glm::vec3& getEmitRadius() const { return _emitRadius; }
|
||||
static const glm::vec3 DEFAULT_EMIT_DIMENSIONS;
|
||||
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; }
|
||||
|
@ -233,7 +233,7 @@ protected:
|
|||
float _emitSpeed = DEFAULT_EMIT_SPEED;
|
||||
float _speedSpread = DEFAULT_SPEED_SPREAD;
|
||||
glm::quat _emitOrientation = DEFAULT_EMIT_ORIENTATION;
|
||||
glm::vec3 _emitRadius = DEFAULT_EMIT_RADIUS;
|
||||
glm::vec3 _emitDimensions = DEFAULT_EMIT_DIMENSIONS;
|
||||
float _emitRadiusStart = DEFAULT_EMIT_RADIUS_START;
|
||||
float _polarStart = DEFAULT_POLAR_START;
|
||||
float _polarFinish = DEFAULT_POLAR_FINISH;
|
||||
|
|
Loading…
Reference in a new issue