mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-04 04:13:11 +02:00
Add colorSpread entity particle property
This commit is contained in:
parent
47b27a3280
commit
cb9468c311
9 changed files with 57 additions and 5 deletions
|
@ -15,7 +15,7 @@
|
||||||
var box,
|
var box,
|
||||||
particles,
|
particles,
|
||||||
particleExample = -1,
|
particleExample = -1,
|
||||||
NUM_PARTICLE_EXAMPLES = 9,
|
NUM_PARTICLE_EXAMPLES = 10,
|
||||||
PARTICLE_RADIUS = 0.04;
|
PARTICLE_RADIUS = 0.04;
|
||||||
|
|
||||||
function onClickDownOnEntity(entityID) {
|
function onClickDownOnEntity(entityID) {
|
||||||
|
@ -85,11 +85,23 @@
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
|
print("Color spread");
|
||||||
|
Entities.editEntity(particles, {
|
||||||
|
alpha: 1.0,
|
||||||
|
alphaStart: 1.0,
|
||||||
|
alphaFinish: 1.0,
|
||||||
|
color: { red: 128, green: 128, blue: 128 },
|
||||||
|
colorSpread: { red: 128, green: 0, blue: 0 }
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
print("Stop emitting");
|
print("Stop emitting");
|
||||||
Entities.editEntity(particles, {
|
Entities.editEntity(particles, {
|
||||||
alpha: 1.0,
|
alpha: 1.0,
|
||||||
alphaStart: 1.0,
|
alphaStart: 1.0,
|
||||||
alphaFinish: 1.0,
|
alphaFinish: 1.0,
|
||||||
|
color: { red: 255, green: 255, blue: 255 },
|
||||||
|
colorSpread: { red: 0, green: 0, blue: 0 },
|
||||||
animationIsPlaying: false
|
animationIsPlaying: false
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -194,8 +194,8 @@ void RenderableParticleEffectEntityItem::updateRenderItem() {
|
||||||
// make a copy of each particle's details
|
// make a copy of each particle's details
|
||||||
std::vector<ParticleDetails> particleDetails;
|
std::vector<ParticleDetails> particleDetails;
|
||||||
particleDetails.reserve(getLivingParticleCount());
|
particleDetails.reserve(getLivingParticleCount());
|
||||||
auto xcolor = getXColor();
|
|
||||||
for (quint32 i = _particleHeadIndex; i != _particleTailIndex; i = (i + 1) % _maxParticles) {
|
for (quint32 i = _particleHeadIndex; i != _particleTailIndex; i = (i + 1) % _maxParticles) {
|
||||||
|
auto xcolor = _particleColors[i];
|
||||||
auto alpha = (uint8_t)(glm::clamp(_particleAlphas[i] * getLocalRenderAlpha(), 0.0f, 1.0f) * 255.0f);
|
auto alpha = (uint8_t)(glm::clamp(_particleAlphas[i] * getLocalRenderAlpha(), 0.0f, 1.0f) * 255.0f);
|
||||||
auto rgba = toRGBA(xcolor.red, xcolor.green, xcolor.blue, alpha);
|
auto rgba = toRGBA(xcolor.red, xcolor.green, xcolor.blue, alpha);
|
||||||
particleDetails.push_back(ParticleDetails(_particlePositions[i], _particleRadiuses[i], rgba));
|
particleDetails.push_back(ParticleDetails(_particlePositions[i], _particleRadiuses[i], rgba));
|
||||||
|
|
|
@ -55,6 +55,7 @@ CONSTRUCT_PROPERTY(script, ENTITY_ITEM_DEFAULT_SCRIPT),
|
||||||
CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP),
|
CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP),
|
||||||
CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL),
|
CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL),
|
||||||
CONSTRUCT_PROPERTY(color, ),
|
CONSTRUCT_PROPERTY(color, ),
|
||||||
|
CONSTRUCT_PROPERTY(colorSpread, ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD),
|
||||||
CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA),
|
CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA),
|
||||||
CONSTRUCT_PROPERTY(alphaStart, ParticleEffectEntityItem::DEFAULT_ALPHA_START),
|
CONSTRUCT_PROPERTY(alphaStart, ParticleEffectEntityItem::DEFAULT_ALPHA_START),
|
||||||
CONSTRUCT_PROPERTY(alphaFinish, ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH),
|
CONSTRUCT_PROPERTY(alphaFinish, ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH),
|
||||||
|
@ -335,6 +336,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
|
||||||
CHECK_PROPERTY_CHANGE(PROP_SCRIPT_TIMESTAMP, scriptTimestamp);
|
CHECK_PROPERTY_CHANGE(PROP_SCRIPT_TIMESTAMP, scriptTimestamp);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_COLLISION_SOUND_URL, collisionSoundURL);
|
CHECK_PROPERTY_CHANGE(PROP_COLLISION_SOUND_URL, collisionSoundURL);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_COLOR, color);
|
CHECK_PROPERTY_CHANGE(PROP_COLOR, color);
|
||||||
|
CHECK_PROPERTY_CHANGE(PROP_COLOR_SPREAD, colorSpread);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha);
|
CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_ALPHA_START, alphaStart);
|
CHECK_PROPERTY_CHANGE(PROP_ALPHA_START, alphaStart);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_ALPHA_FINISH, alphaFinish);
|
CHECK_PROPERTY_CHANGE(PROP_ALPHA_FINISH, alphaFinish);
|
||||||
|
@ -453,6 +455,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(angularDamping);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(angularDamping);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(visible);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(visible);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(color);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(color);
|
||||||
|
COPY_PROPERTY_TO_QSCRIPTVALUE(colorSpread);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(alpha);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(alpha);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(alphaStart);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(alphaStart);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(alphaFinish);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(alphaFinish);
|
||||||
|
@ -590,6 +593,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(angularDamping, float, setAngularDamping);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(angularDamping, float, setAngularDamping);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(visible, bool, setVisible);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(visible, bool, setVisible);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(color, xColor, setColor);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(color, xColor, setColor);
|
||||||
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(colorSpread, xColor, setColorSpread);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaStart, float, setAlphaStart);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaStart, float, setAlphaStart);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaFinish, float, setAlphaFinish);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaFinish, float, setAlphaFinish);
|
||||||
|
@ -881,6 +885,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent
|
||||||
APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, properties.getRadiusStart());
|
APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, properties.getRadiusStart());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, properties.getRadiusFinish());
|
APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, properties.getRadiusFinish());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread());
|
APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread());
|
||||||
|
APPEND_ENTITY_PROPERTY(PROP_COLOR_SPREAD, properties.getColorSpread());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, properties.getAlphaStart());
|
APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, properties.getAlphaStart());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ALPHA_FINISH, properties.getAlphaFinish());
|
APPEND_ENTITY_PROPERTY(PROP_ALPHA_FINISH, properties.getAlphaFinish());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, properties.getAlphaSpread());
|
APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, properties.getAlphaSpread());
|
||||||
|
@ -1162,6 +1167,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_START, float, setRadiusStart);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_START, float, setRadiusStart);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_FINISH, float, setRadiusFinish);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_FINISH, float, setRadiusFinish);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread);
|
||||||
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_SPREAD, xColor, setColorSpread);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_START, float, setAlphaStart);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_START, float, setAlphaStart);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_FINISH, float, setAlphaFinish);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_FINISH, float, setAlphaFinish);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_SPREAD, float, setAlphaSpread);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_SPREAD, float, setAlphaSpread);
|
||||||
|
@ -1308,6 +1314,7 @@ void EntityItemProperties::markAllChanged() {
|
||||||
_radiusStartChanged = true;
|
_radiusStartChanged = true;
|
||||||
_radiusFinishChanged = true;
|
_radiusFinishChanged = true;
|
||||||
_radiusSpreadChanged = true;
|
_radiusSpreadChanged = true;
|
||||||
|
_colorSpreadChanged = true;
|
||||||
_alphaStartChanged = true;
|
_alphaStartChanged = true;
|
||||||
_alphaFinishChanged = true;
|
_alphaFinishChanged = true;
|
||||||
_alphaSpreadChanged = true;
|
_alphaSpreadChanged = true;
|
||||||
|
|
|
@ -103,6 +103,7 @@ public:
|
||||||
DEFINE_PROPERTY(PROP_SCRIPT_TIMESTAMP, ScriptTimestamp, scriptTimestamp, quint64);
|
DEFINE_PROPERTY(PROP_SCRIPT_TIMESTAMP, ScriptTimestamp, scriptTimestamp, quint64);
|
||||||
DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString);
|
DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString);
|
||||||
DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor);
|
DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor);
|
||||||
|
DEFINE_PROPERTY(PROP_COLOR_SPREAD, ColorSpread, colorSpread, xColor);
|
||||||
DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float);
|
DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float);
|
||||||
DEFINE_PROPERTY(PROP_ALPHA_START, AlphaStart, alphaStart, float);
|
DEFINE_PROPERTY(PROP_ALPHA_START, AlphaStart, alphaStart, float);
|
||||||
DEFINE_PROPERTY(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float);
|
DEFINE_PROPERTY(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float);
|
||||||
|
@ -298,6 +299,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) {
|
||||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, ScriptTimestamp, scriptTimestamp, "");
|
DEBUG_PROPERTY_IF_CHANGED(debug, properties, ScriptTimestamp, scriptTimestamp, "");
|
||||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, CollisionSoundURL, collisionSoundURL, "");
|
DEBUG_PROPERTY_IF_CHANGED(debug, properties, CollisionSoundURL, collisionSoundURL, "");
|
||||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Color, color, "");
|
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Color, color, "");
|
||||||
|
DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorSpread, colorSpread, "");
|
||||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Alpha, alpha, "");
|
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Alpha, alpha, "");
|
||||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaStart, alphaStart, "");
|
DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaStart, alphaStart, "");
|
||||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaFinish, alphaFinish, "");
|
DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaFinish, alphaFinish, "");
|
||||||
|
|
|
@ -154,6 +154,7 @@ enum EntityPropertyList {
|
||||||
PROP_ALPHA, // Supported by some derived classes
|
PROP_ALPHA, // Supported by some derived classes
|
||||||
|
|
||||||
//Used by particles
|
//Used by particles
|
||||||
|
PROP_COLOR_SPREAD,
|
||||||
PROP_ALPHA_SPREAD,
|
PROP_ALPHA_SPREAD,
|
||||||
PROP_ALPHA_START,
|
PROP_ALPHA_START,
|
||||||
PROP_ALPHA_FINISH,
|
PROP_ALPHA_FINISH,
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#include "ParticleEffectEntityItem.h"
|
#include "ParticleEffectEntityItem.h"
|
||||||
|
|
||||||
const xColor ParticleEffectEntityItem::DEFAULT_COLOR = { 255, 255, 255 };
|
const xColor ParticleEffectEntityItem::DEFAULT_COLOR = { 255, 255, 255 };
|
||||||
|
const xColor ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD = { 0, 0, 0 };
|
||||||
const float ParticleEffectEntityItem::DEFAULT_ALPHA = 1.0f;
|
const float ParticleEffectEntityItem::DEFAULT_ALPHA = 1.0f;
|
||||||
const float ParticleEffectEntityItem::ALPHA_UNINITIALIZED = -1.0f;
|
const float ParticleEffectEntityItem::ALPHA_UNINITIALIZED = -1.0f;
|
||||||
const float ParticleEffectEntityItem::DEFAULT_ALPHA_START = ALPHA_UNINITIALIZED;
|
const float ParticleEffectEntityItem::DEFAULT_ALPHA_START = ALPHA_UNINITIALIZED;
|
||||||
|
@ -90,6 +91,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte
|
||||||
_textures(DEFAULT_TEXTURES),
|
_textures(DEFAULT_TEXTURES),
|
||||||
_texturesChangedFlag(false),
|
_texturesChangedFlag(false),
|
||||||
_shapeType(SHAPE_TYPE_NONE),
|
_shapeType(SHAPE_TYPE_NONE),
|
||||||
|
_colorSpread(DEFAULT_COLOR_SPREAD),
|
||||||
_alpha(DEFAULT_ALPHA),
|
_alpha(DEFAULT_ALPHA),
|
||||||
_alphaStart(DEFAULT_ALPHA_START),
|
_alphaStart(DEFAULT_ALPHA_START),
|
||||||
_alphaFinish(DEFAULT_ALPHA_FINISH),
|
_alphaFinish(DEFAULT_ALPHA_FINISH),
|
||||||
|
@ -102,7 +104,8 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte
|
||||||
_radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS),
|
_radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS),
|
||||||
_radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS),
|
_radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS),
|
||||||
_radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS),
|
_radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS),
|
||||||
_alphaStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS),
|
_particleColors(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR),
|
||||||
|
_alphaStarts(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA),
|
||||||
_alphaMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA),
|
_alphaMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA),
|
||||||
_alphaFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA),
|
_alphaFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA),
|
||||||
_particleAlphas(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA),
|
_particleAlphas(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA),
|
||||||
|
@ -186,6 +189,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const {
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusStart, getRadiusStart);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusStart, getRadiusStart);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusFinish, getRadiusFinish);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusFinish, getRadiusFinish);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread);
|
||||||
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorSpread, getColorSpread);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaStart, getAlphaStart);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaStart, getAlphaStart);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaFinish, getAlphaFinish);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaFinish, getAlphaFinish);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaSpread, getAlphaSpread);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaSpread, getAlphaSpread);
|
||||||
|
@ -216,6 +220,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusStart, setRadiusStart);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusStart, setRadiusStart);
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusFinish, setRadiusFinish);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusFinish, setRadiusFinish);
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread);
|
||||||
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorSpread, setColorSpread);
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaStart, setAlphaStart);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaStart, setAlphaStart);
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaFinish, setAlphaFinish);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaFinish, setAlphaFinish);
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaSpread, setAlphaSpread);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaSpread, setAlphaSpread);
|
||||||
|
@ -291,6 +296,10 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch
|
||||||
READ_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, float, setRadiusSpread);
|
READ_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, float, setRadiusSpread);
|
||||||
READ_ENTITY_PROPERTY(PROP_RADIUS_START, float, setRadiusStart);
|
READ_ENTITY_PROPERTY(PROP_RADIUS_START, float, setRadiusStart);
|
||||||
READ_ENTITY_PROPERTY(PROP_RADIUS_FINISH, float, setRadiusFinish);
|
READ_ENTITY_PROPERTY(PROP_RADIUS_FINISH, float, setRadiusFinish);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_COLOR_PROPERTIES) {
|
||||||
|
READ_ENTITY_PROPERTY(PROP_COLOR_SPREAD, xColor, setColorSpread);
|
||||||
READ_ENTITY_PROPERTY(PROP_ALPHA, float, setAlpha);
|
READ_ENTITY_PROPERTY(PROP_ALPHA, float, setAlpha);
|
||||||
READ_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, float, setAlphaSpread);
|
READ_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, float, setAlphaSpread);
|
||||||
READ_ENTITY_PROPERTY(PROP_ALPHA_START, float, setAlphaStart);
|
READ_ENTITY_PROPERTY(PROP_ALPHA_START, float, setAlphaStart);
|
||||||
|
@ -323,6 +332,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea
|
||||||
requestedProperties += PROP_RADIUS_SPREAD;
|
requestedProperties += PROP_RADIUS_SPREAD;
|
||||||
requestedProperties += PROP_RADIUS_START;
|
requestedProperties += PROP_RADIUS_START;
|
||||||
requestedProperties += PROP_RADIUS_FINISH;
|
requestedProperties += PROP_RADIUS_FINISH;
|
||||||
|
requestedProperties += PROP_COLOR_SPREAD;
|
||||||
requestedProperties += PROP_ALPHA;
|
requestedProperties += PROP_ALPHA;
|
||||||
requestedProperties += PROP_ALPHA_SPREAD;
|
requestedProperties += PROP_ALPHA_SPREAD;
|
||||||
requestedProperties += PROP_ALPHA_START;
|
requestedProperties += PROP_ALPHA_START;
|
||||||
|
@ -358,6 +368,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData,
|
||||||
APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, getRadiusSpread());
|
APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, getRadiusSpread());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, getRadiusStart());
|
APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, getRadiusStart());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, getRadiusFinish());
|
APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, getRadiusFinish());
|
||||||
|
APPEND_ENTITY_PROPERTY(PROP_COLOR_SPREAD, getColorSpread());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ALPHA, getAlpha());
|
APPEND_ENTITY_PROPERTY(PROP_ALPHA, getAlpha());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, getAlphaSpread());
|
APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, getAlphaSpread());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, getAlphaStart());
|
APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, getAlphaStart());
|
||||||
|
@ -625,6 +636,18 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
||||||
integrateParticle(i, timeLeftInFrame);
|
integrateParticle(i, timeLeftInFrame);
|
||||||
extendBounds(_particlePositions[i]);
|
extendBounds(_particlePositions[i]);
|
||||||
|
|
||||||
|
// Color
|
||||||
|
if (_colorSpread == xColor(xColor{ 0, 0, 0 })) {
|
||||||
|
_particleColors[i] = getXColor();
|
||||||
|
} else {
|
||||||
|
float spread = 2.0f * randFloat() - 1.0f;
|
||||||
|
xColor color = getXColor();
|
||||||
|
color.red = (int)glm::clamp((float)color.red + spread * (float)_colorSpread.red, 0.0f, 255.0f);
|
||||||
|
color.green = (int)glm::clamp((float)color.green + spread * (float)_colorSpread.green, 0.0f, 255.0f);
|
||||||
|
color.blue = (int)glm::clamp((float)color.blue + spread * (float)_colorSpread.blue, 0.0f, 255.0f);
|
||||||
|
_particleColors[i] = color;
|
||||||
|
}
|
||||||
|
|
||||||
// Alpha
|
// Alpha
|
||||||
if (_alphaSpread == 0.0f) {
|
if (_alphaSpread == 0.0f) {
|
||||||
_alphaStarts[i] = getAlphaStart();
|
_alphaStarts[i] = getAlphaStart();
|
||||||
|
@ -666,6 +689,7 @@ void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) {
|
||||||
_radiusStarts.resize(_maxParticles);
|
_radiusStarts.resize(_maxParticles);
|
||||||
_radiusMiddles.resize(_maxParticles);
|
_radiusMiddles.resize(_maxParticles);
|
||||||
_radiusFinishes.resize(_maxParticles);
|
_radiusFinishes.resize(_maxParticles);
|
||||||
|
_particleColors.resize(_maxParticles);
|
||||||
_particleAlphas.resize(_maxParticles);
|
_particleAlphas.resize(_maxParticles);
|
||||||
_alphaStarts.resize(_maxParticles);
|
_alphaStarts.resize(_maxParticles);
|
||||||
_alphaMiddles.resize(_maxParticles);
|
_alphaMiddles.resize(_maxParticles);
|
||||||
|
|
|
@ -56,6 +56,10 @@ public:
|
||||||
_color[BLUE_INDEX] = value.blue;
|
_color[BLUE_INDEX] = value.blue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const xColor DEFAULT_COLOR_SPREAD;
|
||||||
|
void setColorSpread(const xColor colorSpread) { _colorSpread = colorSpread; }
|
||||||
|
xColor getColorSpread() const { return _colorSpread; }
|
||||||
|
|
||||||
static const float DEFAULT_ALPHA;
|
static const float DEFAULT_ALPHA;
|
||||||
void setAlpha(float alpha) { _alpha = alpha; }
|
void setAlpha(float alpha) { _alpha = alpha; }
|
||||||
float getAlpha() const { return _alpha; }
|
float getAlpha() const { return _alpha; }
|
||||||
|
@ -179,6 +183,7 @@ protected:
|
||||||
|
|
||||||
// the properties of this entity
|
// the properties of this entity
|
||||||
rgbColor _color;
|
rgbColor _color;
|
||||||
|
xColor _colorSpread;
|
||||||
float _alpha;
|
float _alpha;
|
||||||
float _alphaStart;
|
float _alphaStart;
|
||||||
float _alphaFinish;
|
float _alphaFinish;
|
||||||
|
@ -210,6 +215,7 @@ protected:
|
||||||
QVector<float> _radiusStarts;
|
QVector<float> _radiusStarts;
|
||||||
QVector<float> _radiusMiddles;
|
QVector<float> _radiusMiddles;
|
||||||
QVector<float> _radiusFinishes;
|
QVector<float> _radiusFinishes;
|
||||||
|
QVector<xColor> _particleColors;
|
||||||
QVector<float> _particleAlphas;
|
QVector<float> _particleAlphas;
|
||||||
QVector<float> _alphaStarts;
|
QVector<float> _alphaStarts;
|
||||||
QVector<float> _alphaMiddles;
|
QVector<float> _alphaMiddles;
|
||||||
|
|
|
@ -67,7 +67,7 @@ PacketVersion versionForPacketType(PacketType::Value packetType) {
|
||||||
case EntityAdd:
|
case EntityAdd:
|
||||||
case EntityEdit:
|
case EntityEdit:
|
||||||
case EntityData:
|
case EntityData:
|
||||||
return VERSION_ENTITIES_PARTICLE_ALPHA_PROPERTIES;
|
return VERSION_ENTITIES_PARTICLE_COLOR_PROPERTIES;
|
||||||
case AvatarData:
|
case AvatarData:
|
||||||
return 13;
|
return 13;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -146,6 +146,6 @@ const PacketVersion VERSION_OCTREE_CENTERED_ORIGIN = 38;
|
||||||
const PacketVersion VERSION_ENTITIES_PARTICLE_MODIFICATIONS = 39;
|
const PacketVersion VERSION_ENTITIES_PARTICLE_MODIFICATIONS = 39;
|
||||||
const PacketVersion VERSION_ENTITIES_POLYVOX_NEIGHBORS = 40;
|
const PacketVersion VERSION_ENTITIES_POLYVOX_NEIGHBORS = 40;
|
||||||
const PacketVersion VERSION_ENTITIES_PARTICLE_RADIUS_PROPERTIES = 41;
|
const PacketVersion VERSION_ENTITIES_PARTICLE_RADIUS_PROPERTIES = 41;
|
||||||
const PacketVersion VERSION_ENTITIES_PARTICLE_ALPHA_PROPERTIES = 42;
|
const PacketVersion VERSION_ENTITIES_PARTICLE_COLOR_PROPERTIES = 42;
|
||||||
|
|
||||||
#endif // hifi_PacketHeaders_h
|
#endif // hifi_PacketHeaders_h
|
||||||
|
|
Loading…
Reference in a new issue