History

allow ESS to edit local version of properties even if the entity isn't in the ESS's local octree

Seth Alves committed 8 years ago

Commit 71d6dbf1 parent 74ca98d2 files · +27 −0Browse files

Showing the changes to libraries/entities/src/EntityScriptingInterface.cpp (1 of 2 files). Show all

Unified · Split

libraries/entities/src/EntityScriptingInterface.cpp+21−0
@@ -523,6 +523,27 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& · 522 unmodified lines
523523 }
524524 }
525525 });
526+ } else {
527+ // Sometimes ESS don't have the entity they are trying to edit in their local tree. In this case,
528+ // convertPropertiesFromScriptSemantics doesn't get called and local* edits will get dropped.
529+ // This is because, on the script side, "position" is in world frame, but in the network
530+ // protocol and in the internal data-structures, "position" is "relative to parent".
531+ // Compensate here. The local* versions will get ignored during the edit-packet encoding.
532+ if (properties.localPositionChanged()) {
533+ properties.setPosition(properties.getLocalPosition());
534+ }
535+ if (properties.localRotationChanged()) {
536+ properties.setRotation(properties.getLocalRotation());
537+ }
538+ if (properties.localVelocityChanged()) {
539+ properties.setVelocity(properties.getLocalVelocity());
540+ }
541+ if (properties.localAngularVelocityChanged()) {
542+ properties.setAngularVelocity(properties.getLocalAngularVelocity());
543+ }
544+ if (properties.localDimensionsChanged()) {
545+ properties.setDimensions(properties.getLocalDimensions());
546+ }
526547 }
527548 });
528549 if (!entityFound) {