mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-04-09 14:52:40 +02:00
Merge pull request #8837 from sethalves/fix-avatar-entities-delete
fix crash when deleting avatar-entities
This commit is contained in:
commit
478c0856f3
12 changed files with 200 additions and 3 deletions
|
@ -23,7 +23,7 @@ void AnimationPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desire
|
|||
|
||||
if (_animationLoop) {
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FPS, Animation, animation, FPS, fps, _animationLoop->getFPS);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FRAME_INDEX, Animation, animation, CurrentFrame, currentFrame, _animationLoop->getFPS);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FRAME_INDEX, Animation, animation, CurrentFrame, currentFrame, _animationLoop->getCurrentFrame);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_PLAYING, Animation, animation, Running, running, _animationLoop->getRunning);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_LOOP, Animation, animation, Loop, loop, _animationLoop->getLoop);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FIRST_FRAME, Animation, animation, FirstFrame, firstFrame, _animationLoop->getFirstFrame);
|
||||
|
@ -79,6 +79,27 @@ void AnimationPropertyGroup::copyFromScriptValue(const QScriptValue& object, boo
|
|||
|
||||
}
|
||||
|
||||
void AnimationPropertyGroup::merge(const AnimationPropertyGroup& other) {
|
||||
COPY_PROPERTY_IF_CHANGED(url);
|
||||
if (_animationLoop) {
|
||||
_fps = _animationLoop->getFPS();
|
||||
_currentFrame = _animationLoop->getCurrentFrame();
|
||||
_running = _animationLoop->getRunning();
|
||||
_loop = _animationLoop->getLoop();
|
||||
_firstFrame = _animationLoop->getFirstFrame();
|
||||
_lastFrame = _animationLoop->getLastFrame();
|
||||
_hold = _animationLoop->getHold();
|
||||
} else {
|
||||
COPY_PROPERTY_IF_CHANGED(fps);
|
||||
COPY_PROPERTY_IF_CHANGED(currentFrame);
|
||||
COPY_PROPERTY_IF_CHANGED(running);
|
||||
COPY_PROPERTY_IF_CHANGED(loop);
|
||||
COPY_PROPERTY_IF_CHANGED(firstFrame);
|
||||
COPY_PROPERTY_IF_CHANGED(lastFrame);
|
||||
COPY_PROPERTY_IF_CHANGED(hold);
|
||||
}
|
||||
}
|
||||
|
||||
void AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) {
|
||||
// the animations setting is a JSON string that may contain various animation settings.
|
||||
// if it includes fps, currentFrame, or running, those values will be parsed out and
|
||||
|
|
|
@ -38,6 +38,9 @@ public:
|
|||
QScriptEngine* engine, bool skipDefaults,
|
||||
EntityItemProperties& defaultEntityProperties) const override;
|
||||
virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) override;
|
||||
|
||||
void merge(const AnimationPropertyGroup& other);
|
||||
|
||||
virtual void debugDump() const override;
|
||||
virtual void listChangedProperties(QList<QString>& out) override;
|
||||
|
||||
|
|
|
@ -63,8 +63,8 @@ void EntityEditPacketSender::queueEditAvatarEntityMessage(PacketType type,
|
|||
|
||||
// the properties that get serialized into the avatar identity packet should be the entire set
|
||||
// rather than just the ones being edited.
|
||||
entity->setProperties(properties);
|
||||
EntityItemProperties entityProperties = entity->getProperties();
|
||||
entityProperties.merge(properties);
|
||||
|
||||
QScriptValue scriptProperties = EntityItemNonDefaultPropertiesToScriptValue(&_scriptEngine, entityProperties);
|
||||
QVariant variantProperties = scriptProperties.toVariant();
|
||||
|
|
|
@ -749,6 +749,133 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
|
|||
_lastEdited = usecTimestampNow();
|
||||
}
|
||||
|
||||
void EntityItemProperties::merge(const EntityItemProperties& other) {
|
||||
COPY_PROPERTY_IF_CHANGED(position);
|
||||
COPY_PROPERTY_IF_CHANGED(dimensions);
|
||||
COPY_PROPERTY_IF_CHANGED(rotation);
|
||||
COPY_PROPERTY_IF_CHANGED(density);
|
||||
COPY_PROPERTY_IF_CHANGED(velocity);
|
||||
COPY_PROPERTY_IF_CHANGED(gravity);
|
||||
COPY_PROPERTY_IF_CHANGED(acceleration);
|
||||
COPY_PROPERTY_IF_CHANGED(damping);
|
||||
COPY_PROPERTY_IF_CHANGED(restitution);
|
||||
COPY_PROPERTY_IF_CHANGED(friction);
|
||||
COPY_PROPERTY_IF_CHANGED(lifetime);
|
||||
COPY_PROPERTY_IF_CHANGED(script);
|
||||
COPY_PROPERTY_IF_CHANGED(scriptTimestamp);
|
||||
COPY_PROPERTY_IF_CHANGED(registrationPoint);
|
||||
COPY_PROPERTY_IF_CHANGED(angularVelocity);
|
||||
COPY_PROPERTY_IF_CHANGED(angularDamping);
|
||||
COPY_PROPERTY_IF_CHANGED(visible);
|
||||
COPY_PROPERTY_IF_CHANGED(color);
|
||||
COPY_PROPERTY_IF_CHANGED(colorSpread);
|
||||
COPY_PROPERTY_IF_CHANGED(colorStart);
|
||||
COPY_PROPERTY_IF_CHANGED(colorFinish);
|
||||
COPY_PROPERTY_IF_CHANGED(alpha);
|
||||
COPY_PROPERTY_IF_CHANGED(alphaSpread);
|
||||
COPY_PROPERTY_IF_CHANGED(alphaStart);
|
||||
COPY_PROPERTY_IF_CHANGED(alphaFinish);
|
||||
COPY_PROPERTY_IF_CHANGED(emitterShouldTrail);
|
||||
COPY_PROPERTY_IF_CHANGED(modelURL);
|
||||
COPY_PROPERTY_IF_CHANGED(compoundShapeURL);
|
||||
COPY_PROPERTY_IF_CHANGED(localRenderAlpha);
|
||||
COPY_PROPERTY_IF_CHANGED(collisionless);
|
||||
COPY_PROPERTY_IF_CHANGED(collisionMask);
|
||||
COPY_PROPERTY_IF_CHANGED(dynamic);
|
||||
COPY_PROPERTY_IF_CHANGED(isSpotlight);
|
||||
COPY_PROPERTY_IF_CHANGED(intensity);
|
||||
COPY_PROPERTY_IF_CHANGED(falloffRadius);
|
||||
COPY_PROPERTY_IF_CHANGED(exponent);
|
||||
COPY_PROPERTY_IF_CHANGED(cutoff);
|
||||
COPY_PROPERTY_IF_CHANGED(locked);
|
||||
COPY_PROPERTY_IF_CHANGED(textures);
|
||||
COPY_PROPERTY_IF_CHANGED(userData);
|
||||
COPY_PROPERTY_IF_CHANGED(text);
|
||||
COPY_PROPERTY_IF_CHANGED(lineHeight);
|
||||
COPY_PROPERTY_IF_CHANGED(textColor);
|
||||
COPY_PROPERTY_IF_CHANGED(backgroundColor);
|
||||
COPY_PROPERTY_IF_CHANGED(shapeType);
|
||||
COPY_PROPERTY_IF_CHANGED(maxParticles);
|
||||
COPY_PROPERTY_IF_CHANGED(lifespan);
|
||||
COPY_PROPERTY_IF_CHANGED(isEmitting);
|
||||
COPY_PROPERTY_IF_CHANGED(emitRate);
|
||||
COPY_PROPERTY_IF_CHANGED(emitSpeed);
|
||||
COPY_PROPERTY_IF_CHANGED(speedSpread);
|
||||
COPY_PROPERTY_IF_CHANGED(emitOrientation);
|
||||
COPY_PROPERTY_IF_CHANGED(emitDimensions);
|
||||
COPY_PROPERTY_IF_CHANGED(emitRadiusStart);
|
||||
COPY_PROPERTY_IF_CHANGED(polarStart);
|
||||
COPY_PROPERTY_IF_CHANGED(polarFinish);
|
||||
COPY_PROPERTY_IF_CHANGED(azimuthStart);
|
||||
COPY_PROPERTY_IF_CHANGED(azimuthFinish);
|
||||
COPY_PROPERTY_IF_CHANGED(emitAcceleration);
|
||||
COPY_PROPERTY_IF_CHANGED(accelerationSpread);
|
||||
COPY_PROPERTY_IF_CHANGED(particleRadius);
|
||||
COPY_PROPERTY_IF_CHANGED(radiusSpread);
|
||||
COPY_PROPERTY_IF_CHANGED(radiusStart);
|
||||
COPY_PROPERTY_IF_CHANGED(radiusFinish);
|
||||
COPY_PROPERTY_IF_CHANGED(marketplaceID);
|
||||
COPY_PROPERTY_IF_CHANGED(name);
|
||||
COPY_PROPERTY_IF_CHANGED(collisionSoundURL);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(backgroundMode);
|
||||
COPY_PROPERTY_IF_CHANGED(sourceUrl);
|
||||
COPY_PROPERTY_IF_CHANGED(voxelVolumeSize);
|
||||
COPY_PROPERTY_IF_CHANGED(voxelData);
|
||||
COPY_PROPERTY_IF_CHANGED(voxelSurfaceStyle);
|
||||
COPY_PROPERTY_IF_CHANGED(lineWidth);
|
||||
COPY_PROPERTY_IF_CHANGED(linePoints);
|
||||
COPY_PROPERTY_IF_CHANGED(href);
|
||||
COPY_PROPERTY_IF_CHANGED(description);
|
||||
COPY_PROPERTY_IF_CHANGED(faceCamera);
|
||||
COPY_PROPERTY_IF_CHANGED(actionData);
|
||||
COPY_PROPERTY_IF_CHANGED(normals);
|
||||
COPY_PROPERTY_IF_CHANGED(strokeWidths);
|
||||
COPY_PROPERTY_IF_CHANGED(created);
|
||||
|
||||
_animation.merge(other._animation);
|
||||
_keyLight.merge(other._keyLight);
|
||||
_skybox.merge(other._skybox);
|
||||
_stage.merge(other._stage);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(xTextureURL);
|
||||
COPY_PROPERTY_IF_CHANGED(yTextureURL);
|
||||
COPY_PROPERTY_IF_CHANGED(zTextureURL);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(xNNeighborID);
|
||||
COPY_PROPERTY_IF_CHANGED(yNNeighborID);
|
||||
COPY_PROPERTY_IF_CHANGED(zNNeighborID);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(xPNeighborID);
|
||||
COPY_PROPERTY_IF_CHANGED(yPNeighborID);
|
||||
COPY_PROPERTY_IF_CHANGED(zPNeighborID);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(parentID);
|
||||
COPY_PROPERTY_IF_CHANGED(parentJointIndex);
|
||||
COPY_PROPERTY_IF_CHANGED(queryAACube);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(localPosition);
|
||||
COPY_PROPERTY_IF_CHANGED(localRotation);
|
||||
COPY_PROPERTY_IF_CHANGED(localVelocity);
|
||||
COPY_PROPERTY_IF_CHANGED(localAngularVelocity);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(jointRotationsSet);
|
||||
COPY_PROPERTY_IF_CHANGED(jointRotations);
|
||||
COPY_PROPERTY_IF_CHANGED(jointTranslationsSet);
|
||||
COPY_PROPERTY_IF_CHANGED(jointTranslations);
|
||||
COPY_PROPERTY_IF_CHANGED(shape);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(flyingAllowed);
|
||||
COPY_PROPERTY_IF_CHANGED(ghostingAllowed);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(clientOnly);
|
||||
COPY_PROPERTY_IF_CHANGED(owningAvatarID);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(dpi);
|
||||
|
||||
_lastEdited = usecTimestampNow();
|
||||
}
|
||||
|
||||
QScriptValue EntityItemPropertiesToScriptValue(QScriptEngine* engine, const EntityItemProperties& properties) {
|
||||
return properties.copyToScriptValue(engine, false);
|
||||
}
|
||||
|
|
|
@ -68,6 +68,8 @@ public:
|
|||
EntityItemProperties(EntityPropertyFlags desiredProperties = EntityPropertyFlags());
|
||||
virtual ~EntityItemProperties() = default;
|
||||
|
||||
void merge(const EntityItemProperties& other);
|
||||
|
||||
EntityTypes::EntityType getType() const { return _type; }
|
||||
void setType(EntityTypes::EntityType type) { _type = type; }
|
||||
|
||||
|
|
|
@ -305,7 +305,16 @@ inline xColor xColor_convertFromScriptValue(const QScriptValue& v, bool& isValid
|
|||
}
|
||||
return newValue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define COPY_PROPERTY_IF_CHANGED(P) \
|
||||
{ \
|
||||
if (other._##P##Changed) { \
|
||||
_##P = other._##P; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define COPY_PROPERTY_FROM_QSCRIPTVALUE(P, T, S) \
|
||||
{ \
|
||||
|
|
|
@ -49,6 +49,15 @@ void KeyLightPropertyGroup::copyFromScriptValue(const QScriptValue& object, bool
|
|||
COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(keyLightDirection, glmVec3, setDirection, getDirection);
|
||||
}
|
||||
|
||||
void KeyLightPropertyGroup::merge(const KeyLightPropertyGroup& other) {
|
||||
COPY_PROPERTY_IF_CHANGED(color);
|
||||
COPY_PROPERTY_IF_CHANGED(intensity);
|
||||
COPY_PROPERTY_IF_CHANGED(ambientIntensity);
|
||||
COPY_PROPERTY_IF_CHANGED(direction);
|
||||
COPY_PROPERTY_IF_CHANGED(ambientURL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void KeyLightPropertyGroup::debugDump() const {
|
||||
qDebug() << " KeyLightPropertyGroup: ---------------------------------------------";
|
||||
|
|
|
@ -34,6 +34,9 @@ public:
|
|||
QScriptEngine* engine, bool skipDefaults,
|
||||
EntityItemProperties& defaultEntityProperties) const override;
|
||||
virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) override;
|
||||
|
||||
void merge(const KeyLightPropertyGroup& other);
|
||||
|
||||
virtual void debugDump() const override;
|
||||
virtual void listChangedProperties(QList<QString>& out) override;
|
||||
|
||||
|
|
|
@ -27,6 +27,12 @@ void SkyboxPropertyGroup::copyFromScriptValue(const QScriptValue& object, bool&
|
|||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(skybox, url, QString, setURL);
|
||||
}
|
||||
|
||||
void SkyboxPropertyGroup::merge(const SkyboxPropertyGroup& other) {
|
||||
COPY_PROPERTY_IF_CHANGED(color);
|
||||
COPY_PROPERTY_IF_CHANGED(url);
|
||||
}
|
||||
|
||||
|
||||
void SkyboxPropertyGroup::debugDump() const {
|
||||
qDebug() << " SkyboxPropertyGroup: ---------------------------------------------";
|
||||
qDebug() << " Color:" << getColor() << " has changed:" << colorChanged();
|
||||
|
|
|
@ -34,6 +34,9 @@ public:
|
|||
QScriptEngine* engine, bool skipDefaults,
|
||||
EntityItemProperties& defaultEntityProperties) const override;
|
||||
virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) override;
|
||||
|
||||
void merge(const SkyboxPropertyGroup& other);
|
||||
|
||||
virtual void debugDump() const override;
|
||||
virtual void listChangedProperties(QList<QString>& out) override;
|
||||
|
||||
|
|
|
@ -55,6 +55,17 @@ void StagePropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _
|
|||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(stage, automaticHourDay, bool, setAutomaticHourDay);
|
||||
}
|
||||
|
||||
void StagePropertyGroup::merge(const StagePropertyGroup& other) {
|
||||
COPY_PROPERTY_IF_CHANGED(sunModelEnabled);
|
||||
COPY_PROPERTY_IF_CHANGED(latitude);
|
||||
COPY_PROPERTY_IF_CHANGED(longitude);
|
||||
COPY_PROPERTY_IF_CHANGED(altitude);
|
||||
COPY_PROPERTY_IF_CHANGED(day);
|
||||
COPY_PROPERTY_IF_CHANGED(hour);
|
||||
COPY_PROPERTY_IF_CHANGED(automaticHourDay);
|
||||
}
|
||||
|
||||
|
||||
void StagePropertyGroup::debugDump() const {
|
||||
qDebug() << " StagePropertyGroup: ---------------------------------------------";
|
||||
qDebug() << " _sunModelEnabled:" << _sunModelEnabled;
|
||||
|
|
|
@ -34,6 +34,9 @@ public:
|
|||
QScriptEngine* engine, bool skipDefaults,
|
||||
EntityItemProperties& defaultEntityProperties) const override;
|
||||
virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) override;
|
||||
|
||||
void merge(const StagePropertyGroup& other);
|
||||
|
||||
virtual void debugDump() const override;
|
||||
virtual void listChangedProperties(QList<QString>& out) override;
|
||||
|
||||
|
|
Loading…
Reference in a new issue