From 327154b0c01ac765c3c78422b1e5ad0bc39ff6e5 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 5 Oct 2015 14:53:03 -0700 Subject: [PATCH 01/10] Make _acceptedExtensions static const --- interface/src/Application.cpp | 22 ++++++++-------------- interface/src/Application.h | 2 +- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c427379f74..8655105ab0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -322,6 +322,14 @@ bool setupEssentials(int& argc, char** argv) { return true; } +const QHash Application::_acceptedExtensions{ + {SNAPSHOT_EXTENSION, &Application::acceptSnapshot}, + {SVO_EXTENSION, &Application::importSVOFromURL}, + {SVO_JSON_EXTENSION, &Application::importSVOFromURL}, + {JS_EXTENSION, &Application::askToLoadScript}, + {FST_EXTENSION, &Application::askToSetAvatarUrl} +}; + // FIXME move to header, or better yet, design some kind of UI manager // to take care of highlighting keyboard focused items, rather than // continuing to overburden Application.cpp @@ -3954,19 +3962,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri #endif } -void Application::initializeAcceptedFiles() { - if (_acceptedExtensions.size() == 0) { - _acceptedExtensions[SNAPSHOT_EXTENSION] = &Application::acceptSnapshot; - _acceptedExtensions[SVO_EXTENSION] = &Application::importSVOFromURL; - _acceptedExtensions[SVO_JSON_EXTENSION] = &Application::importSVOFromURL; - _acceptedExtensions[JS_EXTENSION] = &Application::askToLoadScript; - _acceptedExtensions[FST_EXTENSION] = &Application::askToSetAvatarUrl; - } -} - bool Application::canAcceptURL(const QString& urlString) { - initializeAcceptedFiles(); - QUrl url(urlString); if (urlString.startsWith(HIFI_URL_SCHEME)) { return true; @@ -3983,8 +3979,6 @@ bool Application::canAcceptURL(const QString& urlString) { } bool Application::acceptURL(const QString& urlString) { - initializeAcceptedFiles(); - if (urlString.startsWith(HIFI_URL_SCHEME)) { // this is a hifi URL - have the AddressManager handle it QMetaObject::invokeMethod(DependencyManager::get().data(), "handleLookupString", diff --git a/interface/src/Application.h b/interface/src/Application.h index 0b75a94232..cfdd7681e1 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -500,7 +500,7 @@ private: GLCanvas* _glWidget{ nullptr }; typedef bool (Application::* AcceptURLMethod)(const QString &); - QHash _acceptedExtensions; + static const QHash _acceptedExtensions; QList _domainConnectionRefusals; glm::uvec2 _renderResolution; From 2d12b2ba9ad8a6b4d83403190439e48b1e5228d7 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 5 Oct 2015 15:42:20 -0700 Subject: [PATCH 02/10] Spacing --- interface/src/Application.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8655105ab0..ba4c16eb78 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -322,12 +322,12 @@ bool setupEssentials(int& argc, char** argv) { return true; } -const QHash Application::_acceptedExtensions{ - {SNAPSHOT_EXTENSION, &Application::acceptSnapshot}, - {SVO_EXTENSION, &Application::importSVOFromURL}, - {SVO_JSON_EXTENSION, &Application::importSVOFromURL}, - {JS_EXTENSION, &Application::askToLoadScript}, - {FST_EXTENSION, &Application::askToSetAvatarUrl} +const QHash Application::_acceptedExtensions { + { SNAPSHOT_EXTENSION, &Application::acceptSnapshot }, + { SVO_EXTENSION, &Application::importSVOFromURL }, + { SVO_JSON_EXTENSION, &Application::importSVOFromURL }, + { JS_EXTENSION, &Application::askToLoadScript }, + { FST_EXTENSION, &Application::askToSetAvatarUrl } }; // FIXME move to header, or better yet, design some kind of UI manager From b666acdb26cb08e534974e098c9fc39a9d11b83f Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 6 Oct 2015 10:57:33 -0700 Subject: [PATCH 03/10] Add fbx upload on drop --- interface/src/Application.cpp | 18 ++++++++++++++++++ interface/src/Application.h | 1 + interface/src/ui/AssetUploadDialogFactory.cpp | 4 ---- interface/src/ui/AssetUploadDialogFactory.h | 4 +++- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ba4c16eb78..4597770ab4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -157,6 +157,7 @@ static const QString SVO_EXTENSION = ".svo"; static const QString SVO_JSON_EXTENSION = ".svo.json"; static const QString JS_EXTENSION = ".js"; static const QString FST_EXTENSION = ".fst"; +static const QString FBX_EXTENSION = ".fbx"; static const int MIRROR_VIEW_TOP_PADDING = 5; static const int MIRROR_VIEW_LEFT_PADDING = 10; @@ -190,6 +191,15 @@ static const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStanda const QString DEFAULT_SCRIPTS_JS_URL = "http://s3.amazonaws.com/hifi-public/scripts/defaultScripts.js"; Setting::Handle maxOctreePacketsPerSecond("maxOctreePPS", DEFAULT_MAX_OCTREE_PPS); +const QHash Application::_acceptedExtensions { + { SNAPSHOT_EXTENSION, &Application::acceptSnapshot }, + { SVO_EXTENSION, &Application::importSVOFromURL }, + { SVO_JSON_EXTENSION, &Application::importSVOFromURL }, + { JS_EXTENSION, &Application::askToLoadScript }, + { FST_EXTENSION, &Application::askToSetAvatarUrl }, + { FBX_EXTENSION, &Application::askToUploadAsset } +}; + #ifdef Q_OS_WIN class MyNativeEventFilter : public QAbstractNativeEventFilter { public: @@ -4072,6 +4082,14 @@ bool Application::askToLoadScript(const QString& scriptFilenameOrURL) { return true; } +#include "ui/AssetUploadDialogFactory.h" +bool Application::askToUploadAsset(const QString& filename) { + if (!filename.isEmpty()) { + AssetUploadDialogFactory::getInstance().showDialog(filename); + } + return false; +} + ScriptEngine* Application::loadScript(const QString& scriptFilename, bool isUserLoaded, bool loadScriptFromEditor, bool activateMainWindow, bool reload) { diff --git a/interface/src/Application.h b/interface/src/Application.h index cfdd7681e1..dc1d9cdb84 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -327,6 +327,7 @@ private slots: bool acceptSnapshot(const QString& urlString); bool askToSetAvatarUrl(const QString& url); bool askToLoadScript(const QString& scriptFilenameOrURL); + bool askToUploadAsset(const QString& asset); void setSessionUUID(const QUuid& sessionUUID); void domainChanged(const QString& domainHostname); diff --git a/interface/src/ui/AssetUploadDialogFactory.cpp b/interface/src/ui/AssetUploadDialogFactory.cpp index a4426d0c1a..4910e6d604 100644 --- a/interface/src/ui/AssetUploadDialogFactory.cpp +++ b/interface/src/ui/AssetUploadDialogFactory.cpp @@ -29,10 +29,6 @@ AssetUploadDialogFactory& AssetUploadDialogFactory::getInstance() { return staticInstance; } -AssetUploadDialogFactory::AssetUploadDialogFactory() { - -} - static const QString PERMISSION_DENIED_ERROR = "You do not have permission to upload content to this asset-server."; void AssetUploadDialogFactory::showDialog() { diff --git a/interface/src/ui/AssetUploadDialogFactory.h b/interface/src/ui/AssetUploadDialogFactory.h index 50980862e6..36c5d10595 100644 --- a/interface/src/ui/AssetUploadDialogFactory.h +++ b/interface/src/ui/AssetUploadDialogFactory.h @@ -27,12 +27,14 @@ public: static AssetUploadDialogFactory& getInstance(); void setDialogParent(QWidget* dialogParent) { _dialogParent = dialogParent; } + public slots: void showDialog(); private slots: void handleUploadFinished(AssetUpload* upload, const QString& hash); + private: - AssetUploadDialogFactory(); + AssetUploadDialogFactory() = default; void showErrorDialog(const QString& filename, const QString& additionalError); From a1c154e7bebfa6b80fd08fa831e55aca81da16d6 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 8 Oct 2015 17:55:45 -0700 Subject: [PATCH 04/10] Fix compile error --- interface/src/Application.cpp | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4597770ab4..c5b4333ea6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -332,14 +332,6 @@ bool setupEssentials(int& argc, char** argv) { return true; } -const QHash Application::_acceptedExtensions { - { SNAPSHOT_EXTENSION, &Application::acceptSnapshot }, - { SVO_EXTENSION, &Application::importSVOFromURL }, - { SVO_JSON_EXTENSION, &Application::importSVOFromURL }, - { JS_EXTENSION, &Application::askToLoadScript }, - { FST_EXTENSION, &Application::askToSetAvatarUrl } -}; - // FIXME move to header, or better yet, design some kind of UI manager // to take care of highlighting keyboard focused items, rather than // continuing to overburden Application.cpp @@ -2027,26 +2019,18 @@ void Application::wheelEvent(QWheelEvent* event) { } void Application::dropEvent(QDropEvent *event) { - const QMimeData *mimeData = event->mimeData(); - bool atLeastOneFileAccepted = false; - foreach (QUrl url, mimeData->urls()) { + const QMimeData* mimeData = event->mimeData(); + for (auto& url : mimeData->urls()) { QString urlString = url.toString(); - if (canAcceptURL(urlString)) { - if (acceptURL(urlString)) { - atLeastOneFileAccepted = true; - break; - } + if (canAcceptURL(urlString) && acceptURL(urlString)) { + event->acceptProposedAction(); } } - - if (atLeastOneFileAccepted) { - event->acceptProposedAction(); - } } void Application::dragEnterEvent(QDragEnterEvent* event) { const QMimeData* mimeData = event->mimeData(); - foreach(QUrl url, mimeData->urls()) { + for (auto& url : mimeData->urls()) { auto urlString = url.toString(); if (canAcceptURL(urlString)) { event->acceptProposedAction(); @@ -4091,7 +4075,7 @@ bool Application::askToUploadAsset(const QString& filename) { } ScriptEngine* Application::loadScript(const QString& scriptFilename, bool isUserLoaded, - bool loadScriptFromEditor, bool activateMainWindow, bool reload) { + bool loadScriptFromEditor, bool activateMainWindow, bool reload) { if (isAboutToQuit()) { return NULL; From 75f0a6442f63c9d82c3508dffe4eb14eace766d8 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 8 Oct 2015 18:20:42 -0700 Subject: [PATCH 05/10] ModelEntities spawned with no dimension autoresize --- examples/edit.js | 25 --------------- examples/libraries/entitySelectionTool.js | 11 +++++-- .../src/RenderableModelEntityItem.cpp | 32 ++++++++++++++----- .../src/RenderableModelEntityItem.h | 21 ++++++------ .../RenderableParticleEffectEntityItem.cpp | 4 +-- libraries/entities/src/EntityTypes.cpp | 4 +-- 6 files changed, 44 insertions(+), 53 deletions(-) diff --git a/examples/edit.js b/examples/edit.js index 0a1f31f0d7..0afc3ec1b6 100644 --- a/examples/edit.js +++ b/examples/edit.js @@ -296,37 +296,12 @@ var toolBar = (function () { function addModel(url) { var entityID = createNewEntity({ type: "Model", - dimensions: DEFAULT_DIMENSIONS, modelURL: url }, false); if (entityID) { print("Model added: " + url); - - var checkCount = 0; - function resize() { - var entityProperties = Entities.getEntityProperties(entityID); - var naturalDimensions = entityProperties.naturalDimensions; - - checkCount++; - - if (naturalDimensions.x == 0 && naturalDimensions.y == 0 && naturalDimensions.z == 0) { - if (checkCount < RESIZE_MAX_CHECKS) { - Script.setTimeout(resize, RESIZE_INTERVAL); - } else { - print("Resize failed: timed out waiting for model (" + url + ") to load"); - } - } else { - Entities.editEntity(entityID, { dimensions: naturalDimensions }); - - // Reset selection so that the selection overlays will be updated - selectionManager.setSelections([entityID]); - } - } - selectionManager.setSelections([entityID]); - - Script.setTimeout(resize, RESIZE_INTERVAL); } } diff --git a/examples/libraries/entitySelectionTool.js b/examples/libraries/entitySelectionTool.js index b2f6474089..c49408fef6 100644 --- a/examples/libraries/entitySelectionTool.js +++ b/examples/libraries/entitySelectionTool.js @@ -2325,9 +2325,14 @@ SelectionDisplay = (function () { }); that.checkMove = function() { - if (SelectionManager.hasSelection() && - (!Vec3.equal(Camera.getPosition(), lastCameraPosition) || !Quat.equal(Camera.getOrientation(), lastCameraOrientation))){ - that.updateRotationHandles(); + if (SelectionManager.hasSelection()) { + SelectionManager._update(); + + if (!Vec3.equal(Camera.getPosition(), lastCameraPosition) || + !Quat.equal(Camera.getOrientation(), lastCameraOrientation)) { + + that.updateRotationHandles(); + } } }; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 5627338ebf..f48f8ec71e 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -26,6 +26,12 @@ EntityItemPointer RenderableModelEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { return std::make_shared(entityID, properties); } +RenderableModelEntityItem::RenderableModelEntityItem(const EntityItemID& entityItemID, + const EntityItemProperties& properties) : + ModelEntityItem(entityItemID, properties), + _dimensionsInitialized { properties.dimensionsChanged() } +{ +} RenderableModelEntityItem::~RenderableModelEntityItem() { assert(_myRenderer || !_model); // if we have a model, we need to know our renderer @@ -35,6 +41,11 @@ RenderableModelEntityItem::~RenderableModelEntityItem() { } } +void RenderableModelEntityItem::setDimensions(const glm::vec3& value) { + _dimensionsInitialized = true; + ModelEntityItem::setDimensions(value); +} + bool RenderableModelEntityItem::setProperties(const EntityItemProperties& properties) { QString oldModelURL = getModelURL(); bool somethingChanged = ModelEntityItem::setProperties(properties); @@ -189,7 +200,6 @@ void makeEntityItemStatusGetters(RenderableModelEntityItem* entity, render::Item bool RenderableModelEntityItem::addToScene(EntityItemPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges) { - _myMetaItem = scene->allocateID(); auto renderData = std::make_shared(self); @@ -223,9 +233,6 @@ void RenderableModelEntityItem::removeFromScene(EntityItemPointer self, std::sha void RenderableModelEntityItem::render(RenderArgs* args) { PerformanceTimer perfTimer("RMEIrender"); assert(getType() == EntityTypes::Model); - - glm::vec3 position = getPosition(); - glm::vec3 dimensions = getDimensions(); if (hasModel()) { if (_model) { @@ -290,19 +297,28 @@ void RenderableModelEntityItem::render(RenderArgs* args) { } } - glm::quat rotation = getRotation(); bool movingOrAnimating = isMoving() || isAnimatingSomething(); if ((movingOrAnimating || _needsInitialSimulation) && _model->isActive()) { - _model->setScaleToFit(true, dimensions); + if (!_dimensionsInitialized) { + EntityItemProperties properties; + auto extents = _model->getMeshExtents(); + properties.setDimensions(extents.maximum - extents.minimum); + + qCDebug(entitiesrenderer) << "Autoresizing:" << (!getName().isEmpty() ? getName() : getModelURL()); + DependencyManager::get()->editEntity(getEntityItemID(), properties); + } + + _model->setScaleToFit(true, getDimensions()); _model->setSnapModelToRegistrationPoint(true, getRegistrationPoint()); - _model->setRotation(rotation); - _model->setTranslation(position); + _model->setRotation(getRotation()); + _model->setTranslation(getPosition()); // make sure to simulate so everything gets set up correctly for rendering { PerformanceTimer perfTimer("_model->simulate"); _model->simulate(0.0f); } + _needsInitialSimulation = false; } } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 9673a378f6..60ac710d5e 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -25,16 +25,12 @@ class RenderableModelEntityItem : public ModelEntityItem { public: static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties); - RenderableModelEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : - ModelEntityItem(entityItemID, properties), - _model(NULL), - _needsInitialSimulation(true), - _needsModelReload(true), - _myRenderer(NULL), - _originalTexturesRead(false) { } + RenderableModelEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties); virtual ~RenderableModelEntityItem(); + virtual void setDimensions(const glm::vec3& value) override; + virtual EntityItemProperties getProperties(EntityPropertyFlags desiredProperties = EntityPropertyFlags()) const; virtual bool setProperties(const EntityItemProperties& properties); virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, @@ -74,14 +70,15 @@ public: private: void remapTextures(); - Model* _model; - bool _needsInitialSimulation; - bool _needsModelReload; - EntityTreeRenderer* _myRenderer; + Model* _model = nullptr; + bool _needsInitialSimulation = true; + bool _needsModelReload = true; + EntityTreeRenderer* _myRenderer = nullptr; QString _currentTextures; QStringList _originalTextures; - bool _originalTexturesRead; + bool _originalTexturesRead = false; QVector> _points; + bool _dimensionsInitialized = false; render::ItemID _myMetaItem; }; diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 005252672d..a7bdffc020 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -263,8 +263,8 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { } // update transform - glm::quat rot = _transform.getRotation(); - glm::vec3 pos = _transform.getTranslation(); + glm::quat rot = getRotation(); + glm::vec3 pos = getPosition(); Transform t; t.setRotation(rot); payload.setModelTransform(t); diff --git a/libraries/entities/src/EntityTypes.cpp b/libraries/entities/src/EntityTypes.cpp index 2ed52a9e62..1ef421efca 100644 --- a/libraries/entities/src/EntityTypes.cpp +++ b/libraries/entities/src/EntityTypes.cpp @@ -88,9 +88,7 @@ EntityItemPointer EntityTypes::constructEntityItem(EntityType entityType, const factory = _factories[entityType]; } if (factory) { - EntityItemProperties mutableProperties = properties; - mutableProperties.markAllChanged(); - newEntityItem = factory(entityID, mutableProperties); + newEntityItem = factory(entityID, properties); } return newEntityItem; } From 2229f942df99b14ecade9f08d909aa5fd6e3090e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 8 Oct 2015 18:21:58 -0700 Subject: [PATCH 06/10] Spawn fbx dropped in front of avatar --- interface/src/Application.cpp | 61 +++++++++++++++++++++++++++++++++-- interface/src/Application.h | 2 ++ 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c5b4333ea6..ef7b5924eb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -4066,14 +4067,68 @@ bool Application::askToLoadScript(const QString& scriptFilenameOrURL) { return true; } -#include "ui/AssetUploadDialogFactory.h" bool Application::askToUploadAsset(const QString& filename) { - if (!filename.isEmpty()) { - AssetUploadDialogFactory::getInstance().showDialog(filename); + QUrl url { filename }; + if (auto upload = DependencyManager::get()->createUpload(url.toLocalFile())) { + // connect to the finished signal so we know when the AssetUpload is done + QObject::connect(upload, &AssetUpload::finished, this, &Application::assetUploadFinished); + + // start the upload now + upload->start(); + + return true; } + + // display a message box with the error + auto errorMessage = QString("Failed to upload %1.\n\n").arg(filename); + QMessageBox::warning(_window, "Failed Upload", errorMessage); + return false; } +void Application::assetUploadFinished(AssetUpload* upload, const QString& hash) { + if (upload->getError() != AssetUpload::NoError) { + // figure out the right error message for the message box + QString additionalError; + + switch (upload->getError()) { + case AssetUpload::PermissionDenied: + additionalError = "You do not have permission to upload content to this asset-server."; + break; + case AssetUpload::TooLarge: + additionalError = "The uploaded content was too large and could not be stored in the asset-server."; + break; + case AssetUpload::FileOpenError: + additionalError = "The file could not be opened. Please check your permissions and try again."; + break; + case AssetUpload::NetworkError: + additionalError = "The file could not be opened. Please check your network connectivity."; + break; + default: + // not handled, do not show a message box + return; + } + + // display a message box with the error + auto filename = QFileInfo(upload->getFilename()).fileName(); + QString errorMessage = QString("Failed to upload %1.\n\n%2").arg(filename, additionalError); + QMessageBox::warning(_window, "Failed Upload", errorMessage); + } + + auto entities = DependencyManager::get(); + auto myAvatar = getMyAvatar(); + + EntityItemProperties properties; + properties.setType(EntityTypes::Model); + properties.setModelURL(QString("%1:%2.%3").arg(ATP_SCHEME).arg(hash).arg(upload->getExtension())); + properties.setPosition(myAvatar->getPosition() + myAvatar->getOrientation() * Vectors::FRONT * 2.0f); + properties.setName(QUrl(upload->getFilename()).fileName()); + + entities->addEntity(properties); + + upload->deleteLater(); +} + ScriptEngine* Application::loadScript(const QString& scriptFilename, bool isUserLoaded, bool loadScriptFromEditor, bool activateMainWindow, bool reload) { diff --git a/interface/src/Application.h b/interface/src/Application.h index dc1d9cdb84..8444eab2b6 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -67,6 +67,7 @@ class OffscreenGlCanvas; class GLCanvas; class FaceTracker; class MainWindow; +class AssetUpload; #ifdef Q_OS_WIN static const UINT UWM_IDENTIFY_INSTANCES = @@ -328,6 +329,7 @@ private slots: bool askToSetAvatarUrl(const QString& url); bool askToLoadScript(const QString& scriptFilenameOrURL); bool askToUploadAsset(const QString& asset); + void assetUploadFinished(AssetUpload* upload, const QString& hash); void setSessionUUID(const QUuid& sessionUUID); void domainChanged(const QString& domainHostname); From e056743621badbd6e7f2a1571afd072111f96f6e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 8 Oct 2015 18:33:38 -0700 Subject: [PATCH 07/10] Check for upload rights --- interface/src/Application.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ef7b5924eb..4589651728 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4068,6 +4068,12 @@ bool Application::askToLoadScript(const QString& scriptFilenameOrURL) { } bool Application::askToUploadAsset(const QString& filename) { + if (DependencyManager::get()->getThisNodeCanRez()) { + QMessageBox::warning(_window, "Failed Upload", + QString("You don't have upload rights on that domain.\n\n")); + return false; + } + QUrl url { filename }; if (auto upload = DependencyManager::get()->createUpload(url.toLocalFile())) { // connect to the finished signal so we know when the AssetUpload is done @@ -4075,14 +4081,11 @@ bool Application::askToUploadAsset(const QString& filename) { // start the upload now upload->start(); - return true; } // display a message box with the error - auto errorMessage = QString("Failed to upload %1.\n\n").arg(filename); - QMessageBox::warning(_window, "Failed Upload", errorMessage); - + QMessageBox::warning(_window, "Failed Upload", QString("Failed to upload %1.\n\n").arg(filename)); return false; } From bcd148cb87bc033fc89cd2f71a6552451f72eb15 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 9 Oct 2015 11:25:16 -0700 Subject: [PATCH 08/10] Construct entity properties at definition --- .../entities/src/AnimationPropertyGroup.cpp | 12 -- .../entities/src/AnimationPropertyGroup.h | 36 ++-- .../entities/src/AtmospherePropertyGroup.cpp | 23 +- .../entities/src/AtmospherePropertyGroup.h | 28 ++- libraries/entities/src/BoxEntityItem.cpp | 4 +- .../entities/src/EntityEditPacketSender.cpp | 1 + libraries/entities/src/EntityItem.h | 3 +- .../entities/src/EntityItemProperties.cpp | 99 --------- libraries/entities/src/EntityItemProperties.h | 196 +++++++++--------- .../src/EntityItemPropertiesDefaults.h | 2 + .../entities/src/EntityItemPropertiesMacros.h | 56 ++--- .../entities/src/EntityScriptingInterface.h | 2 +- libraries/entities/src/EntityTreeElement.cpp | 3 +- libraries/entities/src/LightEntityItem.cpp | 3 +- libraries/entities/src/LineEntityItem.cpp | 7 +- libraries/entities/src/ModelEntityItem.cpp | 5 +- libraries/entities/src/ModelEntityItem.h | 3 +- .../entities/src/ParticleEffectEntityItem.cpp | 1 - .../entities/src/ParticleEffectEntityItem.h | 2 +- libraries/entities/src/PolyLineEntityItem.cpp | 7 +- libraries/entities/src/PolyVoxEntityItem.cpp | 6 +- .../src/RecurseOctreeToMapOperator.cpp | 1 + .../entities/src/SkyboxPropertyGroup.cpp | 5 +- libraries/entities/src/SkyboxPropertyGroup.h | 18 +- libraries/entities/src/SphereEntityItem.cpp | 4 +- libraries/entities/src/StagePropertyGroup.cpp | 10 - libraries/entities/src/StagePropertyGroup.h | 20 +- libraries/entities/src/TextEntityItem.cpp | 4 +- .../entities/src/UpdateEntityOperator.cpp | 5 - libraries/entities/src/UpdateEntityOperator.h | 6 + libraries/entities/src/WebEntityItem.cpp | 4 +- libraries/entities/src/ZoneEntityItem.cpp | 5 +- libraries/entities/src/ZoneEntityItem.h | 2 + libraries/physics/src/EntityMotionState.cpp | 1 + 34 files changed, 231 insertions(+), 353 deletions(-) diff --git a/libraries/entities/src/AnimationPropertyGroup.cpp b/libraries/entities/src/AnimationPropertyGroup.cpp index 48cedfbf5d..d1da465079 100644 --- a/libraries/entities/src/AnimationPropertyGroup.cpp +++ b/libraries/entities/src/AnimationPropertyGroup.cpp @@ -18,18 +18,6 @@ #include "EntityItemProperties.h" #include "EntityItemPropertiesMacros.h" -AnimationPropertyGroup::AnimationPropertyGroup() : -CONSTRUCT_PROPERTY(url, QString{}), -CONSTRUCT_PROPERTY(fps, 30.0f), -CONSTRUCT_PROPERTY(running, false), -CONSTRUCT_PROPERTY(loop, true), -CONSTRUCT_PROPERTY(firstFrame, 0.0f), -CONSTRUCT_PROPERTY(lastFrame, AnimationLoop::MAXIMUM_POSSIBLE_FRAME), -CONSTRUCT_PROPERTY(hold, false), -CONSTRUCT_PROPERTY(startAutomatically, false) -{ -} - void AnimationPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_URL, Animation, animation, URL, url); diff --git a/libraries/entities/src/AnimationPropertyGroup.h b/libraries/entities/src/AnimationPropertyGroup.h index 76782a85cd..848632b13e 100644 --- a/libraries/entities/src/AnimationPropertyGroup.h +++ b/libraries/entities/src/AnimationPropertyGroup.h @@ -13,26 +13,26 @@ #ifndef hifi_AnimationPropertyGroup_h #define hifi_AnimationPropertyGroup_h +#include + +#include + #include -#include "PropertyGroup.h" +#include "AnimationLoop.h" #include "EntityItemPropertiesMacros.h" +#include "PropertyGroup.h" class EntityItemProperties; class EncodeBitstreamParams; class OctreePacketData; class EntityTreeElementExtraEncodeData; class ReadBitstreamToTreeParams; -class AnimationLoop; - -#include -#include - class AnimationPropertyGroup : public PropertyGroup { public: - AnimationPropertyGroup(); - virtual ~AnimationPropertyGroup() {} + AnimationPropertyGroup() = default; + virtual ~AnimationPropertyGroup() = default; void associateWithAnimationLoop(AnimationLoop* animationLoop) { _animationLoop = animationLoop; } // EntityItemProperty related helpers @@ -72,16 +72,16 @@ public: ReadBitstreamToTreeParams& args, EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged); - - DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, URL, url, QString); - DEFINE_PROPERTY(PROP_ANIMATION_FPS, FPS, fps, float); - DEFINE_PROPERTY(PROP_ANIMATION_FRAME_INDEX, CurrentFrame, currentFrame, float); - DEFINE_PROPERTY(PROP_ANIMATION_PLAYING, Running, running, bool); // was animationIsPlaying - DEFINE_PROPERTY(PROP_ANIMATION_LOOP, Loop, loop, bool); // was animationSettings.loop - DEFINE_PROPERTY(PROP_ANIMATION_FIRST_FRAME, FirstFrame, firstFrame, float); // was animationSettings.firstFrame - DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float); // was animationSettings.lastFrame - DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool); // was animationSettings.hold - DEFINE_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, StartAutomatically, startAutomatically, bool); // was animationSettings.startAutomatically + + DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, URL, url, QString, ""); + DEFINE_PROPERTY(PROP_ANIMATION_FPS, FPS, fps, float, 30.0f); + DEFINE_PROPERTY(PROP_ANIMATION_FRAME_INDEX, CurrentFrame, currentFrame, float, 0.0f); + DEFINE_PROPERTY(PROP_ANIMATION_PLAYING, Running, running, bool, false); // was animationIsPlaying + DEFINE_PROPERTY(PROP_ANIMATION_LOOP, Loop, loop, bool, true); // was animationSettings.loop + DEFINE_PROPERTY(PROP_ANIMATION_FIRST_FRAME, FirstFrame, firstFrame, float, 0.0f); // was animationSettings.firstFrame + DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float, AnimationLoop::MAXIMUM_POSSIBLE_FRAME); // was animationSettings.lastFrame + DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool, false); // was animationSettings.hold + DEFINE_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, StartAutomatically, startAutomatically, bool, false); // was animationSettings.startAutomatically protected: void setFromOldAnimationSettings(const QString& value); diff --git a/libraries/entities/src/AtmospherePropertyGroup.cpp b/libraries/entities/src/AtmospherePropertyGroup.cpp index 0f0e68ce72..090fdb6c6f 100644 --- a/libraries/entities/src/AtmospherePropertyGroup.cpp +++ b/libraries/entities/src/AtmospherePropertyGroup.cpp @@ -15,22 +15,13 @@ #include "EntityItemProperties.h" #include "EntityItemPropertiesMacros.h" -AtmospherePropertyGroup::AtmospherePropertyGroup() { - const glm::vec3 DEFAULT_CENTER = glm::vec3(0.0f, -1000.0f, 0.0f); - const float DEFAULT_INNER_RADIUS = 1000.0f; - const float DEFAULT_OUTER_RADIUS = 1025.0f; - const float DEFAULT_RAYLEIGH_SCATTERING = 0.0025f; - const float DEFAULT_MIE_SCATTERING = 0.0010f; - const glm::vec3 DEFAULT_SCATTERING_WAVELENGTHS = glm::vec3(0.650f, 0.570f, 0.475f); - - _center = DEFAULT_CENTER; - _innerRadius = DEFAULT_INNER_RADIUS; - _outerRadius = DEFAULT_OUTER_RADIUS; - _mieScattering = DEFAULT_MIE_SCATTERING; - _rayleighScattering = DEFAULT_RAYLEIGH_SCATTERING; - _scatteringWavelengths = DEFAULT_SCATTERING_WAVELENGTHS; - _hasStars = true; -} +const glm::vec3 AtmospherePropertyGroup::DEFAULT_CENTER = glm::vec3(0.0f, -1000.0f, 0.0f); +const float AtmospherePropertyGroup::DEFAULT_INNER_RADIUS = 1000.0f; +const float AtmospherePropertyGroup::DEFAULT_OUTER_RADIUS = 1025.0f; +const float AtmospherePropertyGroup::DEFAULT_RAYLEIGH_SCATTERING = 0.0025f; +const float AtmospherePropertyGroup::DEFAULT_MIE_SCATTERING = 0.0010f; +const glm::vec3 AtmospherePropertyGroup::DEFAULT_SCATTERING_WAVELENGTHS = glm::vec3(0.650f, 0.570f, 0.475f); +const bool AtmospherePropertyGroup::DEFAULT_HAS_STARS = true; void AtmospherePropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ATMOSPHERE_CENTER, Atmosphere, atmosphere, Center, center); diff --git a/libraries/entities/src/AtmospherePropertyGroup.h b/libraries/entities/src/AtmospherePropertyGroup.h index 50ed56ef87..b4ec1a96e2 100644 --- a/libraries/entities/src/AtmospherePropertyGroup.h +++ b/libraries/entities/src/AtmospherePropertyGroup.h @@ -49,8 +49,8 @@ class ReadBitstreamToTreeParams; class AtmospherePropertyGroup : public PropertyGroup { public: - AtmospherePropertyGroup(); - virtual ~AtmospherePropertyGroup() {} + AtmospherePropertyGroup() = default; + virtual ~AtmospherePropertyGroup() = default; // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; @@ -90,14 +90,22 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged); - - DEFINE_PROPERTY_REF(PROP_ATMOSPHERE_CENTER, Center, center, glm::vec3); - DEFINE_PROPERTY(PROP_ATMOSPHERE_INNER_RADIUS, InnerRadius, innerRadius, float); - DEFINE_PROPERTY(PROP_ATMOSPHERE_OUTER_RADIUS, OuterRadius, outerRadius, float); - DEFINE_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, MieScattering, mieScattering, float); - DEFINE_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, RayleighScattering, rayleighScattering, float); - DEFINE_PROPERTY_REF(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, ScatteringWavelengths, scatteringWavelengths, glm::vec3); - DEFINE_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, HasStars, hasStars, bool); + + static const glm::vec3 DEFAULT_CENTER; + static const float DEFAULT_INNER_RADIUS; + static const float DEFAULT_OUTER_RADIUS; + static const float DEFAULT_RAYLEIGH_SCATTERING; + static const float DEFAULT_MIE_SCATTERING; + static const glm::vec3 DEFAULT_SCATTERING_WAVELENGTHS; + static const bool DEFAULT_HAS_STARS; + + DEFINE_PROPERTY_REF(PROP_ATMOSPHERE_CENTER, Center, center, glm::vec3, DEFAULT_CENTER); + DEFINE_PROPERTY(PROP_ATMOSPHERE_INNER_RADIUS, InnerRadius, innerRadius, float, DEFAULT_INNER_RADIUS); + DEFINE_PROPERTY(PROP_ATMOSPHERE_OUTER_RADIUS, OuterRadius, outerRadius, float, DEFAULT_OUTER_RADIUS); + DEFINE_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, MieScattering, mieScattering, float, DEFAULT_MIE_SCATTERING); + DEFINE_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, RayleighScattering, rayleighScattering, float, DEFAULT_RAYLEIGH_SCATTERING); + DEFINE_PROPERTY_REF(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, ScatteringWavelengths, scatteringWavelengths, glm::vec3, DEFAULT_SCATTERING_WAVELENGTHS); + DEFINE_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, HasStars, hasStars, bool, DEFAULT_HAS_STARS); }; #endif // hifi_AtmospherePropertyGroup_h diff --git a/libraries/entities/src/BoxEntityItem.cpp b/libraries/entities/src/BoxEntityItem.cpp index 97a9d77236..70d5ba0c4f 100644 --- a/libraries/entities/src/BoxEntityItem.cpp +++ b/libraries/entities/src/BoxEntityItem.cpp @@ -15,11 +15,11 @@ #include #include "BoxEntityItem.h" -#include "EntityTree.h" #include "EntitiesLogging.h" +#include "EntityItemProperties.h" +#include "EntityTree.h" #include "EntityTreeElement.h" - EntityItemPointer BoxEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItemPointer result { new BoxEntityItem(entityID, properties) }; return result; diff --git a/libraries/entities/src/EntityEditPacketSender.cpp b/libraries/entities/src/EntityEditPacketSender.cpp index 48809287a3..05bb558767 100644 --- a/libraries/entities/src/EntityEditPacketSender.cpp +++ b/libraries/entities/src/EntityEditPacketSender.cpp @@ -16,6 +16,7 @@ #include "EntityEditPacketSender.h" #include "EntitiesLogging.h" #include "EntityItem.h" +#include "EntityItemProperties.h" EntityEditPacketSender::EntityEditPacketSender() { auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 23892c6fc3..cddd9df312 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -25,8 +25,8 @@ #include #include "EntityItemID.h" -#include "EntityItemProperties.h" #include "EntityItemPropertiesDefaults.h" +#include "EntityPropertyFlags.h" #include "EntityTypes.h" #include "SimulationOwner.h" @@ -34,6 +34,7 @@ class EntitySimulation; class EntityTreeElement; class EntityTreeElementExtraEncodeData; class EntityActionInterface; +class EntityItemProperties; class EntityTree; typedef std::shared_ptr EntityTreePointer; typedef std::shared_ptr EntityActionPointer; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 7c6b660be4..4cbf7a043c 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -21,13 +21,7 @@ #include "EntitiesLogging.h" #include "EntityItem.h" #include "EntityItemProperties.h" -#include "EntityItemPropertiesDefaults.h" #include "ModelEntityItem.h" -#include "ParticleEffectEntityItem.h" -#include "TextEntityItem.h" -#include "ZoneEntityItem.h" -#include "PolyVoxEntityItem.h" -#include "LineEntityItem.h" #include "PolyLineEntityItem.h" AnimationPropertyGroup EntityItemProperties::_staticAnimation; @@ -39,96 +33,6 @@ EntityPropertyList PROP_LAST_ITEM = (EntityPropertyList)(PROP_AFTER_LAST_ITEM - EntityItemProperties::EntityItemProperties(EntityPropertyFlags desiredProperties) : -CONSTRUCT_PROPERTY(visible, ENTITY_ITEM_DEFAULT_VISIBLE), -CONSTRUCT_PROPERTY(position, 0.0f), -CONSTRUCT_PROPERTY(dimensions, ENTITY_ITEM_DEFAULT_DIMENSIONS), -CONSTRUCT_PROPERTY(rotation, ENTITY_ITEM_DEFAULT_ROTATION), -CONSTRUCT_PROPERTY(density, ENTITY_ITEM_DEFAULT_DENSITY), -CONSTRUCT_PROPERTY(velocity, ENTITY_ITEM_DEFAULT_VELOCITY), -CONSTRUCT_PROPERTY(gravity, ENTITY_ITEM_DEFAULT_GRAVITY), -CONSTRUCT_PROPERTY(acceleration, ENTITY_ITEM_DEFAULT_ACCELERATION), -CONSTRUCT_PROPERTY(damping, ENTITY_ITEM_DEFAULT_DAMPING), -CONSTRUCT_PROPERTY(restitution, ENTITY_ITEM_DEFAULT_RESTITUTION), -CONSTRUCT_PROPERTY(friction, ENTITY_ITEM_DEFAULT_FRICTION), -CONSTRUCT_PROPERTY(lifetime, ENTITY_ITEM_DEFAULT_LIFETIME), -CONSTRUCT_PROPERTY(created, UNKNOWN_CREATED_TIME), -CONSTRUCT_PROPERTY(script, ENTITY_ITEM_DEFAULT_SCRIPT), -CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP), -CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL), -CONSTRUCT_PROPERTY(color, ), -CONSTRUCT_PROPERTY(colorSpread, ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD), -CONSTRUCT_PROPERTY(colorStart, ParticleEffectEntityItem::DEFAULT_COLOR), -CONSTRUCT_PROPERTY(colorFinish, ParticleEffectEntityItem::DEFAULT_COLOR), -CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA), -CONSTRUCT_PROPERTY(alphaSpread, ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD), -CONSTRUCT_PROPERTY(alphaStart, ParticleEffectEntityItem::DEFAULT_ALPHA_START), -CONSTRUCT_PROPERTY(alphaFinish, ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH), -CONSTRUCT_PROPERTY(modelURL, ""), -CONSTRUCT_PROPERTY(compoundShapeURL, ""), -CONSTRUCT_PROPERTY(registrationPoint, ENTITY_ITEM_DEFAULT_REGISTRATION_POINT), -CONSTRUCT_PROPERTY(angularVelocity, ENTITY_ITEM_DEFAULT_ANGULAR_VELOCITY), -CONSTRUCT_PROPERTY(angularDamping, ENTITY_ITEM_DEFAULT_ANGULAR_DAMPING), -CONSTRUCT_PROPERTY(ignoreForCollisions, ENTITY_ITEM_DEFAULT_IGNORE_FOR_COLLISIONS), -CONSTRUCT_PROPERTY(collisionsWillMove, ENTITY_ITEM_DEFAULT_COLLISIONS_WILL_MOVE), -CONSTRUCT_PROPERTY(isSpotlight, false), -CONSTRUCT_PROPERTY(intensity, 1.0f), -CONSTRUCT_PROPERTY(exponent, 0.0f), -CONSTRUCT_PROPERTY(cutoff, ENTITY_ITEM_DEFAULT_CUTOFF), -CONSTRUCT_PROPERTY(locked, ENTITY_ITEM_DEFAULT_LOCKED), -CONSTRUCT_PROPERTY(textures, ""), -CONSTRUCT_PROPERTY(userData, ENTITY_ITEM_DEFAULT_USER_DATA), -CONSTRUCT_PROPERTY(simulationOwner, SimulationOwner()), -CONSTRUCT_PROPERTY(text, TextEntityItem::DEFAULT_TEXT), -CONSTRUCT_PROPERTY(lineHeight, TextEntityItem::DEFAULT_LINE_HEIGHT), -CONSTRUCT_PROPERTY(textColor, TextEntityItem::DEFAULT_TEXT_COLOR), -CONSTRUCT_PROPERTY(backgroundColor, TextEntityItem::DEFAULT_BACKGROUND_COLOR), -CONSTRUCT_PROPERTY(shapeType, SHAPE_TYPE_NONE), -CONSTRUCT_PROPERTY(maxParticles, ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES), -CONSTRUCT_PROPERTY(lifespan, ParticleEffectEntityItem::DEFAULT_LIFESPAN), -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(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), -CONSTRUCT_PROPERTY(azimuthStart, ParticleEffectEntityItem::DEFAULT_AZIMUTH_START), -CONSTRUCT_PROPERTY(azimuthFinish, ParticleEffectEntityItem::DEFAULT_AZIMUTH_FINISH), -CONSTRUCT_PROPERTY(emitAcceleration, ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION), -CONSTRUCT_PROPERTY(accelerationSpread, ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD), -CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), -CONSTRUCT_PROPERTY(radiusSpread, ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD), -CONSTRUCT_PROPERTY(radiusStart, ParticleEffectEntityItem::DEFAULT_RADIUS_START), -CONSTRUCT_PROPERTY(radiusFinish, ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH), -CONSTRUCT_PROPERTY(marketplaceID, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), -CONSTRUCT_PROPERTY(keyLightColor, ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR), -CONSTRUCT_PROPERTY(keyLightIntensity, ZoneEntityItem::DEFAULT_KEYLIGHT_INTENSITY), -CONSTRUCT_PROPERTY(keyLightAmbientIntensity, ZoneEntityItem::DEFAULT_KEYLIGHT_AMBIENT_INTENSITY), -CONSTRUCT_PROPERTY(keyLightDirection, ZoneEntityItem::DEFAULT_KEYLIGHT_DIRECTION), -CONSTRUCT_PROPERTY(voxelVolumeSize, PolyVoxEntityItem::DEFAULT_VOXEL_VOLUME_SIZE), -CONSTRUCT_PROPERTY(voxelData, PolyVoxEntityItem::DEFAULT_VOXEL_DATA), -CONSTRUCT_PROPERTY(voxelSurfaceStyle, PolyVoxEntityItem::DEFAULT_VOXEL_SURFACE_STYLE), -CONSTRUCT_PROPERTY(name, ENTITY_ITEM_DEFAULT_NAME), -CONSTRUCT_PROPERTY(backgroundMode, BACKGROUND_MODE_INHERIT), -CONSTRUCT_PROPERTY(sourceUrl, ""), -CONSTRUCT_PROPERTY(lineWidth, LineEntityItem::DEFAULT_LINE_WIDTH), -CONSTRUCT_PROPERTY(linePoints, QVector()), -CONSTRUCT_PROPERTY(faceCamera, TextEntityItem::DEFAULT_FACE_CAMERA), -CONSTRUCT_PROPERTY(actionData, QByteArray()), -CONSTRUCT_PROPERTY(normals, QVector()), -CONSTRUCT_PROPERTY(strokeWidths, QVector()), -CONSTRUCT_PROPERTY(xTextureURL, ""), -CONSTRUCT_PROPERTY(yTextureURL, ""), -CONSTRUCT_PROPERTY(zTextureURL, ""), -CONSTRUCT_PROPERTY(xNNeighborID, UNKNOWN_ENTITY_ID), -CONSTRUCT_PROPERTY(yNNeighborID, UNKNOWN_ENTITY_ID), -CONSTRUCT_PROPERTY(zNNeighborID, UNKNOWN_ENTITY_ID), -CONSTRUCT_PROPERTY(xPNeighborID, UNKNOWN_ENTITY_ID), -CONSTRUCT_PROPERTY(yPNeighborID, UNKNOWN_ENTITY_ID), -CONSTRUCT_PROPERTY(zPNeighborID, UNKNOWN_ENTITY_ID), - - _id(UNKNOWN_ENTITY_ID), _idSet(false), _lastEdited(0), @@ -147,9 +51,6 @@ _desiredProperties(desiredProperties) { } -EntityItemProperties::~EntityItemProperties() { -} - void EntityItemProperties::setSittingPoints(const QVector& sittingPoints) { _sittingPoints.clear(); foreach (SittingPoint sitPoint, sittingPoints) { diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index a12328e438..22a4a298ef 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -32,12 +32,18 @@ #include "AnimationPropertyGroup.h" #include "AtmospherePropertyGroup.h" #include "EntityItemID.h" +#include "EntityItemPropertiesDefaults.h" #include "EntityItemPropertiesMacros.h" #include "EntityTypes.h" #include "EntityPropertyFlags.h" +#include "LineEntityItem.h" +#include "ParticleEffectEntityItem.h" +#include "PolyVoxEntityItem.h" #include "SimulationOwner.h" #include "SkyboxPropertyGroup.h" #include "StagePropertyGroup.h" +#include "TextEntityItem.h" +#include "ZoneEntityItem.h" const quint64 UNKNOWN_CREATED_TIME = 0; @@ -60,7 +66,7 @@ class EntityItemProperties { friend class PolyLineEntityItem; // TODO: consider removing this friend relationship and use public methods public: EntityItemProperties(EntityPropertyFlags desiredProperties = EntityPropertyFlags()); - virtual ~EntityItemProperties(); + virtual ~EntityItemProperties() = default; EntityTypes::EntityType getType() const { return _type; } void setType(EntityTypes::EntityType type) { _type = type; } @@ -83,108 +89,108 @@ public: void debugDump() const; void setLastEdited(quint64 usecTime); - // Note: DEFINE_PROPERTY(PROP_FOO, Foo, foo, type) creates the following methods and variables: + // Note: DEFINE_PROPERTY(PROP_FOO, Foo, foo, type, value) creates the following methods and variables: // type getFoo() const; // void setFoo(type); // bool fooChanged() const; - // type _foo; - // bool _fooChanged; + // type _foo { value }; + // bool _fooChanged { false }; - DEFINE_PROPERTY(PROP_VISIBLE, Visible, visible, bool); - DEFINE_PROPERTY_REF_WITH_SETTER(PROP_POSITION, Position, position, glm::vec3); - DEFINE_PROPERTY_REF(PROP_DIMENSIONS, Dimensions, dimensions, glm::vec3); - DEFINE_PROPERTY_REF(PROP_ROTATION, Rotation, rotation, glm::quat); - DEFINE_PROPERTY(PROP_DENSITY, Density, density, float); - DEFINE_PROPERTY_REF(PROP_VELOCITY, Velocity, velocity, glm::vec3); - DEFINE_PROPERTY_REF(PROP_GRAVITY, Gravity, gravity, glm::vec3); - DEFINE_PROPERTY_REF(PROP_ACCELERATION, Acceleration, acceleration, glm::vec3); - DEFINE_PROPERTY(PROP_DAMPING, Damping, damping, float); - DEFINE_PROPERTY(PROP_RESTITUTION, Restitution, restitution, float); - DEFINE_PROPERTY(PROP_FRICTION, Friction, friction, float); - DEFINE_PROPERTY(PROP_LIFETIME, Lifetime, lifetime, float); - DEFINE_PROPERTY(PROP_CREATED, Created, created, quint64); - DEFINE_PROPERTY_REF(PROP_SCRIPT, Script, script, QString); - DEFINE_PROPERTY(PROP_SCRIPT_TIMESTAMP, ScriptTimestamp, scriptTimestamp, quint64); - DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString); - DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor); - DEFINE_PROPERTY_REF(PROP_COLOR_SPREAD, ColorSpread, colorSpread, xColor); - DEFINE_PROPERTY_REF(PROP_COLOR_START, ColorStart, colorStart, xColor); - DEFINE_PROPERTY_REF(PROP_COLOR_FINISH, ColorFinish, colorFinish, xColor); - DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float); - DEFINE_PROPERTY(PROP_ALPHA_SPREAD, AlphaSpread, alphaSpread, float); - DEFINE_PROPERTY(PROP_ALPHA_START, AlphaStart, alphaStart, float); - DEFINE_PROPERTY(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float); - DEFINE_PROPERTY_REF(PROP_MODEL_URL, ModelURL, modelURL, QString); - DEFINE_PROPERTY_REF(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString); - DEFINE_PROPERTY_REF(PROP_REGISTRATION_POINT, RegistrationPoint, registrationPoint, glm::vec3); - DEFINE_PROPERTY_REF(PROP_ANGULAR_VELOCITY, AngularVelocity, angularVelocity, glm::vec3); - DEFINE_PROPERTY(PROP_ANGULAR_DAMPING, AngularDamping, angularDamping, float); - DEFINE_PROPERTY(PROP_IGNORE_FOR_COLLISIONS, IgnoreForCollisions, ignoreForCollisions, bool); - DEFINE_PROPERTY(PROP_COLLISIONS_WILL_MOVE, CollisionsWillMove, collisionsWillMove, bool); - DEFINE_PROPERTY(PROP_IS_SPOTLIGHT, IsSpotlight, isSpotlight, bool); - DEFINE_PROPERTY(PROP_INTENSITY, Intensity, intensity, float); - DEFINE_PROPERTY(PROP_EXPONENT, Exponent, exponent, float); - DEFINE_PROPERTY(PROP_CUTOFF, Cutoff, cutoff, float); - DEFINE_PROPERTY(PROP_LOCKED, Locked, locked, bool); - DEFINE_PROPERTY_REF(PROP_TEXTURES, Textures, textures, QString); - DEFINE_PROPERTY_REF(PROP_USER_DATA, UserData, userData, QString); - DEFINE_PROPERTY_REF(PROP_SIMULATION_OWNER, SimulationOwner, simulationOwner, SimulationOwner); - DEFINE_PROPERTY_REF(PROP_TEXT, Text, text, QString); - DEFINE_PROPERTY(PROP_LINE_HEIGHT, LineHeight, lineHeight, float); - DEFINE_PROPERTY_REF(PROP_TEXT_COLOR, TextColor, textColor, xColor); - DEFINE_PROPERTY_REF(PROP_BACKGROUND_COLOR, BackgroundColor, backgroundColor, xColor); - DEFINE_PROPERTY_REF_ENUM(PROP_SHAPE_TYPE, ShapeType, shapeType, ShapeType); - DEFINE_PROPERTY(PROP_MAX_PARTICLES, MaxParticles, maxParticles, quint32); - DEFINE_PROPERTY(PROP_LIFESPAN, Lifespan, lifespan, float); - DEFINE_PROPERTY(PROP_EMITTING_PARTICLES, IsEmitting, isEmitting, bool); - DEFINE_PROPERTY(PROP_EMIT_RATE, EmitRate, emitRate, float); - 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_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); - DEFINE_PROPERTY(PROP_AZIMUTH_START, AzimuthStart, azimuthStart, float); - DEFINE_PROPERTY(PROP_AZIMUTH_FINISH, AzimuthFinish, azimuthFinish, float); - DEFINE_PROPERTY_REF(PROP_EMIT_ACCELERATION, EmitAcceleration, emitAcceleration, glm::vec3); - DEFINE_PROPERTY_REF(PROP_ACCELERATION_SPREAD, AccelerationSpread, accelerationSpread, glm::vec3); - DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); - DEFINE_PROPERTY(PROP_RADIUS_SPREAD, RadiusSpread, radiusSpread, float); - DEFINE_PROPERTY(PROP_RADIUS_START, RadiusStart, radiusStart, float); - DEFINE_PROPERTY(PROP_RADIUS_FINISH, RadiusFinish, radiusFinish, float); - DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString); - DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor); - DEFINE_PROPERTY(PROP_KEYLIGHT_INTENSITY, KeyLightIntensity, keyLightIntensity, float); - DEFINE_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, KeyLightAmbientIntensity, keyLightAmbientIntensity, float); - DEFINE_PROPERTY_REF(PROP_KEYLIGHT_DIRECTION, KeyLightDirection, keyLightDirection, glm::vec3); - DEFINE_PROPERTY_REF(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, glm::vec3); - DEFINE_PROPERTY_REF(PROP_VOXEL_DATA, VoxelData, voxelData, QByteArray); - DEFINE_PROPERTY_REF(PROP_VOXEL_SURFACE_STYLE, VoxelSurfaceStyle, voxelSurfaceStyle, uint16_t); - DEFINE_PROPERTY_REF(PROP_NAME, Name, name, QString); - DEFINE_PROPERTY_REF_ENUM(PROP_BACKGROUND_MODE, BackgroundMode, backgroundMode, BackgroundMode); + DEFINE_PROPERTY(PROP_VISIBLE, Visible, visible, bool, ENTITY_ITEM_DEFAULT_VISIBLE); + DEFINE_PROPERTY_REF_WITH_SETTER(PROP_POSITION, Position, position, glm::vec3, ENTITY_ITEM_ZERO_VEC3); + DEFINE_PROPERTY_REF(PROP_DIMENSIONS, Dimensions, dimensions, glm::vec3, ENTITY_ITEM_DEFAULT_DIMENSIONS); + DEFINE_PROPERTY_REF(PROP_ROTATION, Rotation, rotation, glm::quat, ENTITY_ITEM_DEFAULT_ROTATION); + DEFINE_PROPERTY(PROP_DENSITY, Density, density, float, ENTITY_ITEM_DEFAULT_DENSITY); + DEFINE_PROPERTY_REF(PROP_VELOCITY, Velocity, velocity, glm::vec3, ENTITY_ITEM_DEFAULT_VELOCITY); + DEFINE_PROPERTY_REF(PROP_GRAVITY, Gravity, gravity, glm::vec3, ENTITY_ITEM_DEFAULT_GRAVITY); + DEFINE_PROPERTY_REF(PROP_ACCELERATION, Acceleration, acceleration, glm::vec3, ENTITY_ITEM_DEFAULT_ACCELERATION); + DEFINE_PROPERTY(PROP_DAMPING, Damping, damping, float, ENTITY_ITEM_DEFAULT_DAMPING); + DEFINE_PROPERTY(PROP_RESTITUTION, Restitution, restitution, float, ENTITY_ITEM_DEFAULT_RESTITUTION); + DEFINE_PROPERTY(PROP_FRICTION, Friction, friction, float, ENTITY_ITEM_DEFAULT_FRICTION); + DEFINE_PROPERTY(PROP_LIFETIME, Lifetime, lifetime, float, ENTITY_ITEM_DEFAULT_LIFETIME); + DEFINE_PROPERTY(PROP_CREATED, Created, created, quint64, UNKNOWN_CREATED_TIME); + DEFINE_PROPERTY_REF(PROP_SCRIPT, Script, script, QString, ENTITY_ITEM_DEFAULT_SCRIPT); + DEFINE_PROPERTY(PROP_SCRIPT_TIMESTAMP, ScriptTimestamp, scriptTimestamp, quint64, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP); + DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL); + DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor, ParticleEffectEntityItem::DEFAULT_COLOR); + DEFINE_PROPERTY_REF(PROP_COLOR_SPREAD, ColorSpread, colorSpread, xColor, ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD); + DEFINE_PROPERTY_REF(PROP_COLOR_START, ColorStart, colorStart, xColor, ParticleEffectEntityItem::DEFAULT_COLOR); + DEFINE_PROPERTY_REF(PROP_COLOR_FINISH, ColorFinish, colorFinish, xColor, ParticleEffectEntityItem::DEFAULT_COLOR); + DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float, ParticleEffectEntityItem::DEFAULT_ALPHA); + DEFINE_PROPERTY(PROP_ALPHA_SPREAD, AlphaSpread, alphaSpread, float, ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD); + DEFINE_PROPERTY(PROP_ALPHA_START, AlphaStart, alphaStart, float, ParticleEffectEntityItem::DEFAULT_ALPHA); + DEFINE_PROPERTY(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float, ParticleEffectEntityItem::DEFAULT_ALPHA); + DEFINE_PROPERTY_REF(PROP_MODEL_URL, ModelURL, modelURL, QString, ""); + DEFINE_PROPERTY_REF(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString, ""); + DEFINE_PROPERTY_REF(PROP_REGISTRATION_POINT, RegistrationPoint, registrationPoint, glm::vec3, ENTITY_ITEM_DEFAULT_REGISTRATION_POINT); + DEFINE_PROPERTY_REF(PROP_ANGULAR_VELOCITY, AngularVelocity, angularVelocity, glm::vec3, ENTITY_ITEM_DEFAULT_ANGULAR_VELOCITY); + DEFINE_PROPERTY(PROP_ANGULAR_DAMPING, AngularDamping, angularDamping, float, ENTITY_ITEM_DEFAULT_ANGULAR_DAMPING); + DEFINE_PROPERTY(PROP_IGNORE_FOR_COLLISIONS, IgnoreForCollisions, ignoreForCollisions, bool, ENTITY_ITEM_DEFAULT_IGNORE_FOR_COLLISIONS); + DEFINE_PROPERTY(PROP_COLLISIONS_WILL_MOVE, CollisionsWillMove, collisionsWillMove, bool, ENTITY_ITEM_DEFAULT_COLLISIONS_WILL_MOVE); + DEFINE_PROPERTY(PROP_IS_SPOTLIGHT, IsSpotlight, isSpotlight, bool, false); + DEFINE_PROPERTY(PROP_INTENSITY, Intensity, intensity, float, 1.0f); + DEFINE_PROPERTY(PROP_EXPONENT, Exponent, exponent, float, 0.0f); + DEFINE_PROPERTY(PROP_CUTOFF, Cutoff, cutoff, float, ENTITY_ITEM_DEFAULT_CUTOFF); + DEFINE_PROPERTY(PROP_LOCKED, Locked, locked, bool, ENTITY_ITEM_DEFAULT_LOCKED); + DEFINE_PROPERTY_REF(PROP_TEXTURES, Textures, textures, QString, ""); + DEFINE_PROPERTY_REF(PROP_USER_DATA, UserData, userData, QString, ENTITY_ITEM_DEFAULT_USER_DATA); + DEFINE_PROPERTY_REF(PROP_SIMULATION_OWNER, SimulationOwner, simulationOwner, SimulationOwner, SimulationOwner()); + DEFINE_PROPERTY_REF(PROP_TEXT, Text, text, QString, TextEntityItem::DEFAULT_TEXT); + DEFINE_PROPERTY(PROP_LINE_HEIGHT, LineHeight, lineHeight, float, TextEntityItem::DEFAULT_LINE_HEIGHT); + DEFINE_PROPERTY_REF(PROP_TEXT_COLOR, TextColor, textColor, xColor, TextEntityItem::DEFAULT_TEXT_COLOR); + DEFINE_PROPERTY_REF(PROP_BACKGROUND_COLOR, BackgroundColor, backgroundColor, xColor, TextEntityItem::DEFAULT_BACKGROUND_COLOR); + DEFINE_PROPERTY_REF_ENUM(PROP_SHAPE_TYPE, ShapeType, shapeType, ShapeType, SHAPE_TYPE_NONE); + DEFINE_PROPERTY(PROP_MAX_PARTICLES, MaxParticles, maxParticles, quint32, ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES); + DEFINE_PROPERTY(PROP_LIFESPAN, Lifespan, lifespan, float, ParticleEffectEntityItem::DEFAULT_LIFESPAN); + DEFINE_PROPERTY(PROP_EMITTING_PARTICLES, IsEmitting, isEmitting, bool, true); + DEFINE_PROPERTY(PROP_EMIT_RATE, EmitRate, emitRate, float, ParticleEffectEntityItem::DEFAULT_EMIT_RATE); + DEFINE_PROPERTY(PROP_EMIT_SPEED, EmitSpeed, emitSpeed, float, ParticleEffectEntityItem::DEFAULT_EMIT_SPEED); + DEFINE_PROPERTY(PROP_SPEED_SPREAD, SpeedSpread, speedSpread, float, ParticleEffectEntityItem::DEFAULT_SPEED_SPREAD); + DEFINE_PROPERTY_REF(PROP_EMIT_ORIENTATION, EmitOrientation, emitOrientation, glm::quat, ParticleEffectEntityItem::DEFAULT_EMIT_ORIENTATION); + DEFINE_PROPERTY_REF(PROP_EMIT_DIMENSIONS, EmitDimensions, emitDimensions, glm::vec3, ParticleEffectEntityItem::DEFAULT_EMIT_DIMENSIONS); + DEFINE_PROPERTY(PROP_EMIT_RADIUS_START, EmitRadiusStart, emitRadiusStart, float, ParticleEffectEntityItem::DEFAULT_EMIT_RADIUS_START); + DEFINE_PROPERTY(PROP_POLAR_START, PolarStart, polarStart, float, ParticleEffectEntityItem::DEFAULT_POLAR_START); + DEFINE_PROPERTY(PROP_POLAR_FINISH, PolarFinish, polarFinish, float, ParticleEffectEntityItem::DEFAULT_POLAR_FINISH); + DEFINE_PROPERTY(PROP_AZIMUTH_START, AzimuthStart, azimuthStart, float, ParticleEffectEntityItem::DEFAULT_AZIMUTH_START); + DEFINE_PROPERTY(PROP_AZIMUTH_FINISH, AzimuthFinish, azimuthFinish, float, ParticleEffectEntityItem::DEFAULT_AZIMUTH_FINISH); + DEFINE_PROPERTY_REF(PROP_EMIT_ACCELERATION, EmitAcceleration, emitAcceleration, glm::vec3, ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION); + DEFINE_PROPERTY_REF(PROP_ACCELERATION_SPREAD, AccelerationSpread, accelerationSpread, glm::vec3, ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD); + DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS); + DEFINE_PROPERTY(PROP_RADIUS_SPREAD, RadiusSpread, radiusSpread, float, ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD); + DEFINE_PROPERTY(PROP_RADIUS_START, RadiusStart, radiusStart, float, ParticleEffectEntityItem::DEFAULT_RADIUS_START); + DEFINE_PROPERTY(PROP_RADIUS_FINISH, RadiusFinish, radiusFinish, float, ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH); + DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID); + DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor, ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR); + DEFINE_PROPERTY(PROP_KEYLIGHT_INTENSITY, KeyLightIntensity, keyLightIntensity, float, ZoneEntityItem::DEFAULT_KEYLIGHT_INTENSITY); + DEFINE_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, KeyLightAmbientIntensity, keyLightAmbientIntensity, float, ZoneEntityItem::DEFAULT_KEYLIGHT_AMBIENT_INTENSITY); + DEFINE_PROPERTY_REF(PROP_KEYLIGHT_DIRECTION, KeyLightDirection, keyLightDirection, glm::vec3, ZoneEntityItem::DEFAULT_KEYLIGHT_DIRECTION); + DEFINE_PROPERTY_REF(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, glm::vec3, PolyVoxEntityItem::DEFAULT_VOXEL_VOLUME_SIZE); + DEFINE_PROPERTY_REF(PROP_VOXEL_DATA, VoxelData, voxelData, QByteArray, PolyVoxEntityItem::DEFAULT_VOXEL_DATA); + DEFINE_PROPERTY_REF(PROP_VOXEL_SURFACE_STYLE, VoxelSurfaceStyle, voxelSurfaceStyle, uint16_t, PolyVoxEntityItem::DEFAULT_VOXEL_SURFACE_STYLE); + DEFINE_PROPERTY_REF(PROP_NAME, Name, name, QString, ENTITY_ITEM_DEFAULT_NAME); + DEFINE_PROPERTY_REF_ENUM(PROP_BACKGROUND_MODE, BackgroundMode, backgroundMode, BackgroundMode, BACKGROUND_MODE_INHERIT); DEFINE_PROPERTY_GROUP(Stage, stage, StagePropertyGroup); DEFINE_PROPERTY_GROUP(Atmosphere, atmosphere, AtmospherePropertyGroup); DEFINE_PROPERTY_GROUP(Skybox, skybox, SkyboxPropertyGroup); DEFINE_PROPERTY_GROUP(Animation, animation, AnimationPropertyGroup); - DEFINE_PROPERTY_REF(PROP_SOURCE_URL, SourceUrl, sourceUrl, QString); - DEFINE_PROPERTY(PROP_LINE_WIDTH, LineWidth, lineWidth, float); - DEFINE_PROPERTY_REF(LINE_POINTS, LinePoints, linePoints, QVector); - DEFINE_PROPERTY_REF(PROP_HREF, Href, href, QString); - DEFINE_PROPERTY_REF(PROP_DESCRIPTION, Description, description, QString); - DEFINE_PROPERTY(PROP_FACE_CAMERA, FaceCamera, faceCamera, bool); - DEFINE_PROPERTY_REF(PROP_ACTION_DATA, ActionData, actionData, QByteArray); - DEFINE_PROPERTY(PROP_NORMALS, Normals, normals, QVector); - DEFINE_PROPERTY(PROP_STROKE_WIDTHS, StrokeWidths, strokeWidths, QVector); - DEFINE_PROPERTY_REF(PROP_X_TEXTURE_URL, XTextureURL, xTextureURL, QString); - DEFINE_PROPERTY_REF(PROP_Y_TEXTURE_URL, YTextureURL, yTextureURL, QString); - DEFINE_PROPERTY_REF(PROP_Z_TEXTURE_URL, ZTextureURL, zTextureURL, QString); - DEFINE_PROPERTY_REF(PROP_X_N_NEIGHBOR_ID, XNNeighborID, xNNeighborID, EntityItemID); - DEFINE_PROPERTY_REF(PROP_Y_N_NEIGHBOR_ID, YNNeighborID, yNNeighborID, EntityItemID); - DEFINE_PROPERTY_REF(PROP_Z_N_NEIGHBOR_ID, ZNNeighborID, zNNeighborID, EntityItemID); - DEFINE_PROPERTY_REF(PROP_X_P_NEIGHBOR_ID, XPNeighborID, xPNeighborID, EntityItemID); - DEFINE_PROPERTY_REF(PROP_Y_P_NEIGHBOR_ID, YPNeighborID, yPNeighborID, EntityItemID); - DEFINE_PROPERTY_REF(PROP_Z_P_NEIGHBOR_ID, ZPNeighborID, zPNeighborID, EntityItemID); + DEFINE_PROPERTY_REF(PROP_SOURCE_URL, SourceUrl, sourceUrl, QString, ""); + DEFINE_PROPERTY(PROP_LINE_WIDTH, LineWidth, lineWidth, float, LineEntityItem::DEFAULT_LINE_WIDTH); + DEFINE_PROPERTY_REF(LINE_POINTS, LinePoints, linePoints, QVector, QVector()); + DEFINE_PROPERTY_REF(PROP_HREF, Href, href, QString, ""); + DEFINE_PROPERTY_REF(PROP_DESCRIPTION, Description, description, QString, ""); + DEFINE_PROPERTY(PROP_FACE_CAMERA, FaceCamera, faceCamera, bool, TextEntityItem::DEFAULT_FACE_CAMERA); + DEFINE_PROPERTY_REF(PROP_ACTION_DATA, ActionData, actionData, QByteArray, QByteArray()); + DEFINE_PROPERTY(PROP_NORMALS, Normals, normals, QVector, QVector()); + DEFINE_PROPERTY(PROP_STROKE_WIDTHS, StrokeWidths, strokeWidths, QVector, QVector()); + DEFINE_PROPERTY_REF(PROP_X_TEXTURE_URL, XTextureURL, xTextureURL, QString, ""); + DEFINE_PROPERTY_REF(PROP_Y_TEXTURE_URL, YTextureURL, yTextureURL, QString, ""); + DEFINE_PROPERTY_REF(PROP_Z_TEXTURE_URL, ZTextureURL, zTextureURL, QString, ""); + DEFINE_PROPERTY_REF(PROP_X_N_NEIGHBOR_ID, XNNeighborID, xNNeighborID, EntityItemID, UNKNOWN_ENTITY_ID); + DEFINE_PROPERTY_REF(PROP_Y_N_NEIGHBOR_ID, YNNeighborID, yNNeighborID, EntityItemID, UNKNOWN_ENTITY_ID); + DEFINE_PROPERTY_REF(PROP_Z_N_NEIGHBOR_ID, ZNNeighborID, zNNeighborID, EntityItemID, UNKNOWN_ENTITY_ID); + DEFINE_PROPERTY_REF(PROP_X_P_NEIGHBOR_ID, XPNeighborID, xPNeighborID, EntityItemID, UNKNOWN_ENTITY_ID); + DEFINE_PROPERTY_REF(PROP_Y_P_NEIGHBOR_ID, YPNeighborID, yPNeighborID, EntityItemID, UNKNOWN_ENTITY_ID); + DEFINE_PROPERTY_REF(PROP_Z_P_NEIGHBOR_ID, ZPNeighborID, zPNeighborID, EntityItemID, UNKNOWN_ENTITY_ID); static QString getBackgroundModeString(BackgroundMode mode); diff --git a/libraries/entities/src/EntityItemPropertiesDefaults.h b/libraries/entities/src/EntityItemPropertiesDefaults.h index a4aca0b344..538d7dd890 100644 --- a/libraries/entities/src/EntityItemPropertiesDefaults.h +++ b/libraries/entities/src/EntityItemPropertiesDefaults.h @@ -16,6 +16,8 @@ #include +#include + // There is a minor performance gain when comparing/copying an existing glm::vec3 rather than // creating a new one on the stack so we declare the ZERO_VEC3 constant as an optimization. const glm::vec3 ENTITY_ITEM_ZERO_VEC3 = glm::vec3(0.0f); diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index 5dcbf2e69d..b3299b6fe6 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -9,12 +9,14 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include #ifndef hifi_EntityItemPropertiesMacros_h #define hifi_EntityItemPropertiesMacros_h +#include + #include "EntityItemID.h" +#include #define APPEND_ENTITY_PROPERTY(P,V) \ if (requestedProperties.getHasProperty(P)) { \ @@ -329,10 +331,6 @@ inline xColor xColor_convertFromScriptValue(const QScriptValue& v, bool& isValid set##S##FromString(newValue); \ } \ } - -#define CONSTRUCT_PROPERTY(n, V) \ - _##n(V), \ - _##n##Changed(false) #define DEFINE_PROPERTY_GROUP(N, n, T) \ public: \ @@ -348,57 +346,45 @@ inline xColor xColor_convertFromScriptValue(const QScriptValue& v, bool& isValid #define ADD_GROUP_PROPERTY_TO_MAP(P, G, g, N, n) \ _propertyStringsToEnums[#g "." #n] = P; -#define DEFINE_PROPERTY(P, N, n, T) \ +#define DEFINE_CORE(N, n, T, V) \ + public: \ + bool n##Changed() const { return _##n##Changed; } \ + void set##N##Changed(bool value) { _##n##Changed = value; } \ + private: \ + T _##n = V; \ + bool _##n##Changed { false }; + +#define DEFINE_PROPERTY(P, N, n, T, V) \ public: \ T get##N() const { return _##n; } \ void set##N(T value) { _##n = value; _##n##Changed = true; } \ - bool n##Changed() const { return _##n##Changed; } \ - void set##N##Changed(bool value) { _##n##Changed = value; } \ - private: \ - T _##n; \ - bool _##n##Changed = false; + DEFINE_CORE(N, n, T, V) -#define DEFINE_PROPERTY_REF(P, N, n, T) \ +#define DEFINE_PROPERTY_REF(P, N, n, T, V) \ public: \ const T& get##N() const { return _##n; } \ void set##N(const T& value) { _##n = value; _##n##Changed = true; } \ - bool n##Changed() const { return _##n##Changed; } \ - void set##N##Changed(bool value) { _##n##Changed = value; } \ - private: \ - T _##n; \ - bool _##n##Changed = false; + DEFINE_CORE(N, n, T, V) -#define DEFINE_PROPERTY_REF_WITH_SETTER(P, N, n, T) \ +#define DEFINE_PROPERTY_REF_WITH_SETTER(P, N, n, T, V) \ public: \ const T& get##N() const { return _##n; } \ void set##N(const T& value); \ - bool n##Changed() const; \ - void set##N##Changed(bool value) { _##n##Changed = value; } \ - private: \ - T _##n; \ - bool _##n##Changed; + DEFINE_CORE(N, n, T, V) -#define DEFINE_PROPERTY_REF_WITH_SETTER_AND_GETTER(P, N, n, T) \ +#define DEFINE_PROPERTY_REF_WITH_SETTER_AND_GETTER(P, N, n, T, V) \ public: \ T get##N() const; \ void set##N(const T& value); \ - bool n##Changed() const; \ - void set##N##Changed(bool value) { _##n##Changed = value; } \ - private: \ - T _##n; \ - bool _##n##Changed; + DEFINE_CORE(N, n, T, V) -#define DEFINE_PROPERTY_REF_ENUM(P, N, n, T) \ +#define DEFINE_PROPERTY_REF_ENUM(P, N, n, T, V) \ public: \ const T& get##N() const { return _##n; } \ void set##N(const T& value) { _##n = value; _##n##Changed = true; } \ - bool n##Changed() const { return _##n##Changed; } \ QString get##N##AsString() const; \ void set##N##FromString(const QString& name); \ - void set##N##Changed(bool value) { _##n##Changed = value; } \ - private: \ - T _##n; \ - bool _##n##Changed; + DEFINE_CORE(N, n, T, V) #define DEBUG_PROPERTY(D, P, N, n, x) \ D << " " << #n << ":" << P.get##N() << x << "[changed:" << P.n##Changed() << "]\n"; diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index 47f5312d88..cf10bdb997 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -28,7 +28,7 @@ #include "EntityEditPacketSender.h" #include "EntitiesScriptEngineProvider.h" - +#include "EntityItemProperties.h" class EntityTree; class MouseEvent; diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 9448c5523a..48c30caf20 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -14,8 +14,9 @@ #include #include -#include "EntityTree.h" #include "EntitiesLogging.h" +#include "EntityItemProperties.h" +#include "EntityTree.h" #include "EntityTreeElement.h" EntityTreeElement::EntityTreeElement(unsigned char* octalCode) : OctreeElement() { diff --git a/libraries/entities/src/LightEntityItem.cpp b/libraries/entities/src/LightEntityItem.cpp index 376b84921a..fd3f674c5e 100644 --- a/libraries/entities/src/LightEntityItem.cpp +++ b/libraries/entities/src/LightEntityItem.cpp @@ -14,10 +14,11 @@ #include +#include "EntitiesLogging.h" #include "EntityItemID.h" +#include "EntityItemProperties.h" #include "EntityTree.h" #include "EntityTreeElement.h" -#include "EntitiesLogging.h" #include "LightEntityItem.h" bool LightEntityItem::_lightsArePickable = false; diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index ab9b656963..e03d3a7a96 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -9,19 +9,18 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "LineEntityItem.h" #include #include -#include "LineEntityItem.h" -#include "EntityTree.h" #include "EntitiesLogging.h" +#include "EntityItemProperties.h" +#include "EntityTree.h" #include "EntityTreeElement.h" #include "OctreeConstants.h" - - const float LineEntityItem::DEFAULT_LINE_WIDTH = 2.0f; const int LineEntityItem::MAX_POINTS_PER_LINE = 70; diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index bcf2318a0d..eb2f1b0ebd 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -14,9 +14,10 @@ #include #include +#include "EntitiesLogging.h" +#include "EntityItemProperties.h" #include "EntityTree.h" #include "EntityTreeElement.h" -#include "EntitiesLogging.h" #include "ResourceCache.h" #include "ModelEntityItem.h" @@ -264,7 +265,7 @@ bool ModelEntityItem::isAnimatingSomething() const { } bool ModelEntityItem::needsToCallUpdate() const { - return isAnimatingSomething() ? true : EntityItem::needsToCallUpdate(); + return isAnimatingSomething() || EntityItem::needsToCallUpdate(); } void ModelEntityItem::update(const quint64& now) { diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 187cad48eb..e8ffcab3e7 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -14,7 +14,8 @@ #include -#include "EntityItem.h" +#include "EntityItem.h" +#include "AnimationPropertyGroup.h" class ModelEntityItem : public EntityItem { public: diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index f6ed4a06ab..e17ef82f11 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -104,7 +104,6 @@ EntityItemPointer ParticleEffectEntityItem::factory(const EntityItemID& entityID ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : EntityItem(entityItemID), _lastSimulated(usecTimestampNow()), - _isEmitting(true), _particleLifetimes(DEFAULT_MAX_PARTICLES, 0.0f), _particlePositions(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleVelocities(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 7f5e67aecb..029d65cfc0 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -250,7 +250,7 @@ protected: quint64 _lastSimulated; - bool _isEmitting; + bool _isEmitting = true; QString _textures = DEFAULT_TEXTURES; bool _texturesChangedFlag = false; diff --git a/libraries/entities/src/PolyLineEntityItem.cpp b/libraries/entities/src/PolyLineEntityItem.cpp index fbb8250882..352d0425bf 100644 --- a/libraries/entities/src/PolyLineEntityItem.cpp +++ b/libraries/entities/src/PolyLineEntityItem.cpp @@ -14,13 +14,12 @@ #include -#include "PolyLineEntityItem.h" -#include "EntityTree.h" #include "EntitiesLogging.h" +#include "EntityItemProperties.h" +#include "EntityTree.h" #include "EntityTreeElement.h" #include "OctreeConstants.h" - - +#include "PolyLineEntityItem.h" const float PolyLineEntityItem::DEFAULT_LINE_WIDTH = 0.1f; const int PolyLineEntityItem::MAX_POINTS_PER_LINE = 70; diff --git a/libraries/entities/src/PolyVoxEntityItem.cpp b/libraries/entities/src/PolyVoxEntityItem.cpp index 368954b891..403d0bb1bc 100644 --- a/libraries/entities/src/PolyVoxEntityItem.cpp +++ b/libraries/entities/src/PolyVoxEntityItem.cpp @@ -16,11 +16,11 @@ #include -#include "PolyVoxEntityItem.h" -#include "EntityTree.h" #include "EntitiesLogging.h" +#include "EntityItemProperties.h" +#include "EntityTree.h" #include "EntityTreeElement.h" - +#include "PolyVoxEntityItem.h" const glm::vec3 PolyVoxEntityItem::DEFAULT_VOXEL_VOLUME_SIZE = glm::vec3(32, 32, 32); const float PolyVoxEntityItem::MAX_VOXEL_DIMENSION = 128.0f; diff --git a/libraries/entities/src/RecurseOctreeToMapOperator.cpp b/libraries/entities/src/RecurseOctreeToMapOperator.cpp index 8d7de67837..81465bfaf5 100644 --- a/libraries/entities/src/RecurseOctreeToMapOperator.cpp +++ b/libraries/entities/src/RecurseOctreeToMapOperator.cpp @@ -11,6 +11,7 @@ #include "RecurseOctreeToMapOperator.h" +#include "EntityItemProperties.h" RecurseOctreeToMapOperator::RecurseOctreeToMapOperator(QVariantMap& map, OctreeElementPointer top, diff --git a/libraries/entities/src/SkyboxPropertyGroup.cpp b/libraries/entities/src/SkyboxPropertyGroup.cpp index b79b535d8e..d291627d1e 100644 --- a/libraries/entities/src/SkyboxPropertyGroup.cpp +++ b/libraries/entities/src/SkyboxPropertyGroup.cpp @@ -15,10 +15,7 @@ #include "EntityItemProperties.h" #include "EntityItemPropertiesMacros.h" -SkyboxPropertyGroup::SkyboxPropertyGroup() { - _color.red = _color.green = _color.blue = 0; - _url = QString(); -} +const xColor SkyboxPropertyGroup::DEFAULT_COLOR = { 0, 0, 0 }; void SkyboxPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_SKYBOX_COLOR, Skybox, skybox, Color, color); diff --git a/libraries/entities/src/SkyboxPropertyGroup.h b/libraries/entities/src/SkyboxPropertyGroup.h index 6e8d4340fe..9e0b77cc03 100644 --- a/libraries/entities/src/SkyboxPropertyGroup.h +++ b/libraries/entities/src/SkyboxPropertyGroup.h @@ -12,6 +12,10 @@ #ifndef hifi_SkyboxPropertyGroup_h #define hifi_SkyboxPropertyGroup_h +#include + +#include + #include #include "PropertyGroup.h" @@ -23,14 +27,10 @@ class OctreePacketData; class EntityTreeElementExtraEncodeData; class ReadBitstreamToTreeParams; -#include -#include - - class SkyboxPropertyGroup : public PropertyGroup { public: - SkyboxPropertyGroup(); - virtual ~SkyboxPropertyGroup() {} + SkyboxPropertyGroup() = default; + virtual ~SkyboxPropertyGroup() = default; // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; @@ -78,9 +78,9 @@ public: return color; } - - DEFINE_PROPERTY_REF(PROP_SKYBOX_COLOR, Color, color, xColor); - DEFINE_PROPERTY_REF(PROP_SKYBOX_URL, URL, url, QString); + static const xColor DEFAULT_COLOR; + DEFINE_PROPERTY_REF(PROP_SKYBOX_COLOR, Color, color, xColor, DEFAULT_COLOR); + DEFINE_PROPERTY_REF(PROP_SKYBOX_URL, URL, url, QString, ""); }; #endif // hifi_SkyboxPropertyGroup_h diff --git a/libraries/entities/src/SphereEntityItem.cpp b/libraries/entities/src/SphereEntityItem.cpp index 3f41ef6d91..26177f89de 100644 --- a/libraries/entities/src/SphereEntityItem.cpp +++ b/libraries/entities/src/SphereEntityItem.cpp @@ -17,12 +17,12 @@ #include #include +#include "EntitiesLogging.h" +#include "EntityItemProperties.h" #include "EntityTree.h" #include "EntityTreeElement.h" -#include "EntitiesLogging.h" #include "SphereEntityItem.h" - EntityItemPointer SphereEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItemPointer result { new SphereEntityItem(entityID, properties) }; return result; diff --git a/libraries/entities/src/StagePropertyGroup.cpp b/libraries/entities/src/StagePropertyGroup.cpp index 7110f0481d..629f65b72f 100644 --- a/libraries/entities/src/StagePropertyGroup.cpp +++ b/libraries/entities/src/StagePropertyGroup.cpp @@ -26,16 +26,6 @@ const float StagePropertyGroup::DEFAULT_STAGE_ALTITUDE = 0.03f; const quint16 StagePropertyGroup::DEFAULT_STAGE_DAY = 60; const float StagePropertyGroup::DEFAULT_STAGE_HOUR = 12.0f; -StagePropertyGroup::StagePropertyGroup() { - _sunModelEnabled = DEFAULT_STAGE_SUN_MODEL_ENABLED; - _latitude = DEFAULT_STAGE_LATITUDE; - _longitude = DEFAULT_STAGE_LONGITUDE; - _altitude = DEFAULT_STAGE_ALTITUDE; - _day = DEFAULT_STAGE_DAY; - _hour = DEFAULT_STAGE_HOUR; - _automaticHourDay = false; -} - void StagePropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_STAGE_SUN_MODEL_ENABLED, Stage, stage, SunModelEnabled, sunModelEnabled); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_STAGE_LATITUDE, Stage, stage, Latitude, latitude); diff --git a/libraries/entities/src/StagePropertyGroup.h b/libraries/entities/src/StagePropertyGroup.h index 208eff479c..b8a8b5b6d2 100644 --- a/libraries/entities/src/StagePropertyGroup.h +++ b/libraries/entities/src/StagePropertyGroup.h @@ -29,8 +29,8 @@ class ReadBitstreamToTreeParams; class StagePropertyGroup : public PropertyGroup { public: - StagePropertyGroup(); - virtual ~StagePropertyGroup() {} + StagePropertyGroup() = default; + virtual ~StagePropertyGroup() = default; // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; @@ -79,14 +79,14 @@ public: float calculateHour() const; uint16_t calculateDay() const; - - DEFINE_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, SunModelEnabled, sunModelEnabled, bool); - DEFINE_PROPERTY(PROP_STAGE_LATITUDE, Latitude, latitude, float); - DEFINE_PROPERTY(PROP_STAGE_LONGITUDE, Longitude, longitude, float); - DEFINE_PROPERTY(PROP_STAGE_ALTITUDE, Altitude, altitude, float); - DEFINE_PROPERTY(PROP_STAGE_DAY, Day, day, uint16_t); - DEFINE_PROPERTY(PROP_STAGE_HOUR, Hour, hour, float); - DEFINE_PROPERTY(PROP_STAGE_AUTOMATIC_HOURDAY, AutomaticHourDay, automaticHourDay, bool); + + DEFINE_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, SunModelEnabled, sunModelEnabled, bool, DEFAULT_STAGE_SUN_MODEL_ENABLED); + DEFINE_PROPERTY(PROP_STAGE_LATITUDE, Latitude, latitude, float, DEFAULT_STAGE_LATITUDE); + DEFINE_PROPERTY(PROP_STAGE_LONGITUDE, Longitude, longitude, float, DEFAULT_STAGE_LONGITUDE); + DEFINE_PROPERTY(PROP_STAGE_ALTITUDE, Altitude, altitude, float, DEFAULT_STAGE_ALTITUDE); + DEFINE_PROPERTY(PROP_STAGE_DAY, Day, day, uint16_t, DEFAULT_STAGE_DAY); + DEFINE_PROPERTY(PROP_STAGE_HOUR, Hour, hour, float, DEFAULT_STAGE_HOUR); + DEFINE_PROPERTY(PROP_STAGE_AUTOMATIC_HOURDAY, AutomaticHourDay, automaticHourDay, bool, false); }; #endif // hifi_StagePropertyGroup_h diff --git a/libraries/entities/src/TextEntityItem.cpp b/libraries/entities/src/TextEntityItem.cpp index d19e3be4c9..49d3c13d80 100644 --- a/libraries/entities/src/TextEntityItem.cpp +++ b/libraries/entities/src/TextEntityItem.cpp @@ -17,12 +17,12 @@ #include #include +#include "EntityItemProperties.h" +#include "EntitiesLogging.h" #include "EntityTree.h" #include "EntityTreeElement.h" -#include "EntitiesLogging.h" #include "TextEntityItem.h" - const QString TextEntityItem::DEFAULT_TEXT(""); const float TextEntityItem::DEFAULT_LINE_HEIGHT = 0.1f; const xColor TextEntityItem::DEFAULT_TEXT_COLOR = { 255, 255, 255 }; diff --git a/libraries/entities/src/UpdateEntityOperator.cpp b/libraries/entities/src/UpdateEntityOperator.cpp index 5d6f3986b2..617663f48a 100644 --- a/libraries/entities/src/UpdateEntityOperator.cpp +++ b/libraries/entities/src/UpdateEntityOperator.cpp @@ -9,11 +9,6 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include "EntityItem.h" -#include "EntityTree.h" -#include "EntityTreeElement.h" -#include "EntitiesLogging.h" - #include "UpdateEntityOperator.h" UpdateEntityOperator::UpdateEntityOperator(EntityTreePointer tree, diff --git a/libraries/entities/src/UpdateEntityOperator.h b/libraries/entities/src/UpdateEntityOperator.h index f1c791f9f1..46322997f7 100644 --- a/libraries/entities/src/UpdateEntityOperator.h +++ b/libraries/entities/src/UpdateEntityOperator.h @@ -12,6 +12,12 @@ #ifndef hifi_UpdateEntityOperator_h #define hifi_UpdateEntityOperator_h +#include "EntitiesLogging.h" +#include "EntityItem.h" +#include "EntityItemProperties.h" +#include "EntityTree.h" +#include "EntityTreeElement.h" + class UpdateEntityOperator : public RecurseOctreeOperator { public: UpdateEntityOperator(EntityTreePointer tree, EntityTreeElementPointer containingElement, diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index 496f2b412d..56f8357c8f 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -15,10 +15,10 @@ #include #include +#include "EntitiesLogging.h" +#include "EntityItemProperties.h" #include "EntityTree.h" #include "EntityTreeElement.h" -#include "EntitiesLogging.h" - const QString WebEntityItem::DEFAULT_SOURCE_URL("http://www.google.com"); diff --git a/libraries/entities/src/ZoneEntityItem.cpp b/libraries/entities/src/ZoneEntityItem.cpp index 69357426ed..3147af35e8 100644 --- a/libraries/entities/src/ZoneEntityItem.cpp +++ b/libraries/entities/src/ZoneEntityItem.cpp @@ -14,10 +14,11 @@ #include -#include "ZoneEntityItem.h" -#include "EntityTree.h" #include "EntitiesLogging.h" +#include "EntityItemProperties.h" +#include "EntityTree.h" #include "EntityTreeElement.h" +#include "ZoneEntityItem.h" bool ZoneEntityItem::_zonesArePickable = false; bool ZoneEntityItem::_drawZoneBoundaries = false; diff --git a/libraries/entities/src/ZoneEntityItem.h b/libraries/entities/src/ZoneEntityItem.h index a81cc97c2f..e7f2e03981 100644 --- a/libraries/entities/src/ZoneEntityItem.h +++ b/libraries/entities/src/ZoneEntityItem.h @@ -17,6 +17,8 @@ #include "AtmospherePropertyGroup.h" #include "EntityItem.h" #include "EntityTree.h" +#include "SkyboxPropertyGroup.h" +#include "StagePropertyGroup.h" class ZoneEntityItem : public EntityItem { public: diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index 9cbe89dda6..42bf9bd438 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -10,6 +10,7 @@ // #include +#include #include #include From ae83dfe041be5e6140e9a9fea664542e81bb5420 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 9 Oct 2015 12:22:55 -0700 Subject: [PATCH 09/10] Move auto-resize to update --- interface/src/Application.cpp | 2 +- .../src/RenderableModelEntityItem.cpp | 29 ++++++++++++------- .../src/RenderableModelEntityItem.h | 5 ++-- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4589651728..cfeb77f638 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4068,7 +4068,7 @@ bool Application::askToLoadScript(const QString& scriptFilenameOrURL) { } bool Application::askToUploadAsset(const QString& filename) { - if (DependencyManager::get()->getThisNodeCanRez()) { + if (!DependencyManager::get()->getThisNodeCanRez()) { QMessageBox::warning(_window, "Failed Upload", QString("You don't have upload rights on that domain.\n\n")); return false; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index f48f8ec71e..f4f8c4c2f7 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -298,16 +298,7 @@ void RenderableModelEntityItem::render(RenderArgs* args) { } bool movingOrAnimating = isMoving() || isAnimatingSomething(); - if ((movingOrAnimating || _needsInitialSimulation) && _model->isActive()) { - if (!_dimensionsInitialized) { - EntityItemProperties properties; - auto extents = _model->getMeshExtents(); - properties.setDimensions(extents.maximum - extents.minimum); - - qCDebug(entitiesrenderer) << "Autoresizing:" << (!getName().isEmpty() ? getName() : getModelURL()); - DependencyManager::get()->editEntity(getEntityItemID(), properties); - } - + if ((movingOrAnimating || _needsInitialSimulation) && _model->isActive() && _dimensionsInitialized) { _model->setScaleToFit(true, getDimensions()); _model->setSnapModelToRegistrationPoint(true, getRegistrationPoint()); _model->setRotation(getRotation()); @@ -376,7 +367,23 @@ Model* RenderableModelEntityItem::getModel(EntityTreeRenderer* renderer) { } bool RenderableModelEntityItem::needsToCallUpdate() const { - return _needsInitialSimulation || ModelEntityItem::needsToCallUpdate(); + return !_dimensionsInitialized || _needsInitialSimulation || ModelEntityItem::needsToCallUpdate(); +} + +void RenderableModelEntityItem::update(const quint64& now) { + if (!_dimensionsInitialized && _model && _model->isActive()) { + EntityItemProperties properties; + auto extents = _model->getMeshExtents(); + properties.setDimensions(extents.maximum - extents.minimum); + + qCDebug(entitiesrenderer) << "Autoresizing:" << (!getName().isEmpty() ? getName() : getModelURL()); + QMetaObject::invokeMethod(DependencyManager::get().data(), "editEntity", + Qt::QueuedConnection, + Q_ARG(QUuid, getEntityItemID()), + Q_ARG(EntityItemProperties, properties)); + } + + ModelEntityItem::update(now); } EntityItemProperties RenderableModelEntityItem::getProperties(EntityPropertyFlags desiredProperties) const { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 60ac710d5e..c87f70d4d6 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -57,8 +57,9 @@ public: void** intersectedObject, bool precisionPicking) const; Model* getModel(EntityTreeRenderer* renderer); - - bool needsToCallUpdate() const; + + virtual bool needsToCallUpdate() const; + virtual void update(const quint64& now); virtual void setCompoundShapeURL(const QString& url); From 3e71c4cc4e9f15bc80955fea7f239ce9255de6fb Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 9 Oct 2015 13:18:05 -0700 Subject: [PATCH 10/10] CR --- libraries/entities/src/AnimationPropertyGroup.h | 2 -- libraries/entities/src/AtmospherePropertyGroup.h | 3 --- libraries/entities/src/PropertyGroup.h | 3 +-- libraries/entities/src/SkyboxPropertyGroup.h | 3 --- libraries/entities/src/StagePropertyGroup.h | 3 --- tests/entities/src/main.cpp | 3 ++- 6 files changed, 3 insertions(+), 14 deletions(-) diff --git a/libraries/entities/src/AnimationPropertyGroup.h b/libraries/entities/src/AnimationPropertyGroup.h index 848632b13e..d0d218f4b3 100644 --- a/libraries/entities/src/AnimationPropertyGroup.h +++ b/libraries/entities/src/AnimationPropertyGroup.h @@ -31,8 +31,6 @@ class ReadBitstreamToTreeParams; class AnimationPropertyGroup : public PropertyGroup { public: - AnimationPropertyGroup() = default; - virtual ~AnimationPropertyGroup() = default; void associateWithAnimationLoop(AnimationLoop* animationLoop) { _animationLoop = animationLoop; } // EntityItemProperty related helpers diff --git a/libraries/entities/src/AtmospherePropertyGroup.h b/libraries/entities/src/AtmospherePropertyGroup.h index b4ec1a96e2..661d91087b 100644 --- a/libraries/entities/src/AtmospherePropertyGroup.h +++ b/libraries/entities/src/AtmospherePropertyGroup.h @@ -49,9 +49,6 @@ class ReadBitstreamToTreeParams; class AtmospherePropertyGroup : public PropertyGroup { public: - AtmospherePropertyGroup() = default; - virtual ~AtmospherePropertyGroup() = default; - // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings); diff --git a/libraries/entities/src/PropertyGroup.h b/libraries/entities/src/PropertyGroup.h index ea73f8656a..27d35fa714 100644 --- a/libraries/entities/src/PropertyGroup.h +++ b/libraries/entities/src/PropertyGroup.h @@ -51,8 +51,7 @@ class ReadBitstreamToTreeParams; class PropertyGroup { public: - PropertyGroup() {} - virtual ~PropertyGroup() {} + virtual ~PropertyGroup() = default; // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const = 0; diff --git a/libraries/entities/src/SkyboxPropertyGroup.h b/libraries/entities/src/SkyboxPropertyGroup.h index 9e0b77cc03..2ebfcfda14 100644 --- a/libraries/entities/src/SkyboxPropertyGroup.h +++ b/libraries/entities/src/SkyboxPropertyGroup.h @@ -29,9 +29,6 @@ class ReadBitstreamToTreeParams; class SkyboxPropertyGroup : public PropertyGroup { public: - SkyboxPropertyGroup() = default; - virtual ~SkyboxPropertyGroup() = default; - // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings); diff --git a/libraries/entities/src/StagePropertyGroup.h b/libraries/entities/src/StagePropertyGroup.h index b8a8b5b6d2..95964f8264 100644 --- a/libraries/entities/src/StagePropertyGroup.h +++ b/libraries/entities/src/StagePropertyGroup.h @@ -29,9 +29,6 @@ class ReadBitstreamToTreeParams; class StagePropertyGroup : public PropertyGroup { public: - StagePropertyGroup() = default; - virtual ~StagePropertyGroup() = default; - // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings); diff --git a/tests/entities/src/main.cpp b/tests/entities/src/main.cpp index 1b150ee3f5..0cbd354e92 100644 --- a/tests/entities/src/main.cpp +++ b/tests/entities/src/main.cpp @@ -16,9 +16,10 @@ #include #include -#include #include +#include #include +#include const QString& getTestResourceDir() { static QString dir;