diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 064876916a..c2a0f67a61 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -1073,7 +1073,8 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue ADD_GROUP_PROPERTY_TO_MAP(PROP_SKYBOX_COLOR, Skybox, skybox, Color, color); ADD_GROUP_PROPERTY_TO_MAP(PROP_SKYBOX_URL, Skybox, skybox, URL, url); - ADD_GROUP_PROPERTY_TO_MAP(PROP_HAZE_HAZE_ACTIVE, Haze, haze, HazeActive, hazeActive); + ADD_GROUP_PROPERTY_TO_MAP(PROP_HAZE_HAZE_RANGE, Haze, haze, HazeRange, hazeRange); + ADD_GROUP_PROPERTY_TO_MAP(PROP_HAZE_HAZE_ALTITUDE, Haze, haze, HazeAltitude, hazeAltitude); ADD_GROUP_PROPERTY_TO_MAP(PROP_STAGE_SUN_MODEL_ENABLED, Stage, stage, SunModelEnabled, sunModelEnabled); ADD_GROUP_PROPERTY_TO_MAP(PROP_STAGE_LATITUDE, Stage, stage, Latitude, latitude); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index fda1d290ab..e3076e57ee 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -219,10 +219,11 @@ enum EntityPropertyList { PROP_STAGE_HOUR = PROP_QUADRATIC_ATTENUATION_UNUSED, PROP_STAGE_AUTOMATIC_HOURDAY = PROP_ANIMATION_FRAME_INDEX, PROP_BACKGROUND_MODE = PROP_MODEL_URL, - PROP_HAZE_MODE = PROP_MODEL_URL, + PROP_HAZE_MODE = PROP_COLOR, + PROP_HAZE_HAZE_RANGE = PROP_INTENSITY, + PROP_HAZE_HAZE_ALTITUDE = PROP_CUTOFF, PROP_SKYBOX_COLOR = PROP_ANIMATION_URL, PROP_SKYBOX_URL = PROP_ANIMATION_FPS, - PROP_HAZE_HAZE_ACTIVE = PROP_ANIMATION_FRAME_INDEX, PROP_KEYLIGHT_AMBIENT_URL = PROP_ANIMATION_PLAYING, // Aliases/Piggyback properties for Web. These properties intentionally reuse the enum values for diff --git a/libraries/entities/src/HazePropertyGroup.cpp b/libraries/entities/src/HazePropertyGroup.cpp index d0208f020e..2b4aabed3c 100644 --- a/libraries/entities/src/HazePropertyGroup.cpp +++ b/libraries/entities/src/HazePropertyGroup.cpp @@ -15,27 +15,40 @@ #include "EntityItemProperties.h" #include "EntityItemPropertiesMacros.h" +const float HazePropertyGroup::DEFAULT_HAZE_RANGE = 1000.0f; +const float HazePropertyGroup::DEFAULT_HAZE_ALTITUDE = 200.0f; + void HazePropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_HAZE_HAZE_ACTIVE, Haze, haze, HazeActive, hazeActive); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_HAZE_HAZE_RANGE, Haze, haze, HazeRange, hazeRange); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_HAZE_HAZE_ALTITUDE, Haze, haze, HazeAltitude, hazeAltitude); } void HazePropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) { - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(haze, hazeActive, bool, setHazeActive); + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(hazeHazeRange, float, setHazeRange, getHazeRange); + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(hazeHazeAltitude, float, setHazeAltitude, getHazeAltitude); + + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(haze, hazeRange, float, setHazeRange); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(haze, hazeAltitude, float, setHazeAltitude); } void HazePropertyGroup::merge(const HazePropertyGroup& other) { - COPY_PROPERTY_IF_CHANGED(hazeActive); + COPY_PROPERTY_IF_CHANGED(hazeRange); + COPY_PROPERTY_IF_CHANGED(hazeAltitude); } void HazePropertyGroup::debugDump() const { qCDebug(entities) << " HazePropertyGroup: ---------------------------------------------"; - qCDebug(entities) << " HazeActive :" << getHazeActive() << " has changed:" << hazeActiveChanged(); + qCDebug(entities) << " _hazeRange:" << _hazeRange; + qCDebug(entities) << " _hazeAltitude:" << _hazeAltitude; } void HazePropertyGroup::listChangedProperties(QList& out) { - if (hazeActiveChanged()) { - out << "haze-hazeActive"; + if (hazeRangeChanged()) { + out << "haze-range"; + } + if (hazeAltitudeChanged()) { + out << "haze-altitude"; } } @@ -48,7 +61,8 @@ bool HazePropertyGroup::appendToEditPacket(OctreePacketData* packetData, bool successPropertyFits = true; - APPEND_ENTITY_PROPERTY(PROP_HAZE_HAZE_ACTIVE, getHazeActive()); + APPEND_ENTITY_PROPERTY(PROP_HAZE_HAZE_RANGE, getHazeRange()); + APPEND_ENTITY_PROPERTY(PROP_HAZE_HAZE_ALTITUDE, getHazeAltitude()); return true; } @@ -60,9 +74,11 @@ bool HazePropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags, bool overwriteLocalData = true; bool somethingChanged = false; - READ_ENTITY_PROPERTY(PROP_HAZE_HAZE_ACTIVE, bool, setHazeActive); + READ_ENTITY_PROPERTY(PROP_HAZE_HAZE_RANGE, float, setHazeRange); + READ_ENTITY_PROPERTY(PROP_HAZE_HAZE_ALTITUDE, float, setHazeAltitude); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_HAZE_HAZE_ACTIVE, HazeActive); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_HAZE_HAZE_RANGE, HazeRange); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_HAZE_HAZE_ALTITUDE, HazeAltitude); processedBytes += bytesRead; @@ -72,25 +88,29 @@ bool HazePropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags, } void HazePropertyGroup::markAllChanged() { - _hazeActiveChanged = true; + _hazeRangeChanged = true; + _hazeAltitudeChanged = true; } EntityPropertyFlags HazePropertyGroup::getChangedProperties() const { EntityPropertyFlags changedProperties; - CHECK_PROPERTY_CHANGE(PROP_HAZE_HAZE_ACTIVE, hazeActive); + CHECK_PROPERTY_CHANGE(PROP_HAZE_HAZE_RANGE, hazeRange); + CHECK_PROPERTY_CHANGE(PROP_HAZE_HAZE_ALTITUDE, hazeAltitude); return changedProperties; } void HazePropertyGroup::getProperties(EntityItemProperties& properties) const { - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Haze, HazeActive, getHazeActive); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Haze, HazeRange, getHazeRange); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Haze, HazeAltitude, getHazeAltitude); } bool HazePropertyGroup::setProperties(const EntityItemProperties& properties) { bool somethingChanged = false; - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Haze, HazeActive, hazeActive, setHazeActive); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Haze, HazeRange, hazeRange, setHazeRange); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Haze, HazeAltitude, hazeAltitude, setHazeAltitude); return somethingChanged; } @@ -98,8 +118,9 @@ bool HazePropertyGroup::setProperties(const EntityItemProperties& properties) { EntityPropertyFlags HazePropertyGroup::getEntityProperties(EncodeBitstreamParams& params) const { EntityPropertyFlags requestedProperties; - requestedProperties += PROP_HAZE_HAZE_ACTIVE; - + requestedProperties += PROP_HAZE_HAZE_RANGE; + requestedProperties += PROP_HAZE_HAZE_ALTITUDE; + return requestedProperties; } @@ -113,7 +134,8 @@ void HazePropertyGroup::appendSubclassData(OctreePacketData* packetData, EncodeB bool successPropertyFits = true; - APPEND_ENTITY_PROPERTY(PROP_HAZE_HAZE_ACTIVE, getHazeActive()); + APPEND_ENTITY_PROPERTY(PROP_HAZE_HAZE_RANGE, getHazeRange()); + APPEND_ENTITY_PROPERTY(PROP_HAZE_HAZE_ALTITUDE, getHazeAltitude()); } int HazePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, @@ -124,7 +146,8 @@ int HazePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* dat int bytesRead = 0; const unsigned char* dataAt = data; - READ_ENTITY_PROPERTY(PROP_HAZE_HAZE_ACTIVE, bool, setHazeActive); + READ_ENTITY_PROPERTY(PROP_HAZE_HAZE_ALTITUDE, float, setHazeRange); + READ_ENTITY_PROPERTY(PROP_HAZE_HAZE_ALTITUDE, float, setHazeAltitude); return bytesRead; } diff --git a/libraries/entities/src/HazePropertyGroup.h b/libraries/entities/src/HazePropertyGroup.h index 305110d8cf..f5b3f65bcb 100644 --- a/libraries/entities/src/HazePropertyGroup.h +++ b/libraries/entities/src/HazePropertyGroup.h @@ -74,7 +74,11 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - DEFINE_PROPERTY(PROP_HAZE_HAZE_ACTIVE, HazeActive, hazeActive, bool, false); + static const float DEFAULT_HAZE_RANGE; + static const float DEFAULT_HAZE_ALTITUDE; + + DEFINE_PROPERTY(PROP_HAZE_HAZE_RANGE, HazeRange, hazeRange, float, DEFAULT_HAZE_RANGE); + DEFINE_PROPERTY(PROP_HAZE_HAZE_ALTITUDE, HazeAltitude, hazeAltitude, float, DEFAULT_HAZE_ALTITUDE); }; #endif // hifi_HazePropertyGroup_h diff --git a/libraries/entities/src/ZoneEntityItem.h b/libraries/entities/src/ZoneEntityItem.h index 3ed5c3f88f..3b6eca03c1 100644 --- a/libraries/entities/src/ZoneEntityItem.h +++ b/libraries/entities/src/ZoneEntityItem.h @@ -115,6 +115,8 @@ protected: BackgroundMode _backgroundMode = BACKGROUND_MODE_INHERIT; HazeMode _hazeMode = HAZE_MODE_INHERIT; + float _hazeRange = 1000.0; + float _hazeAltitude = 200.0; SkyboxPropertyGroup _skyboxProperties; HazePropertyGroup _hazeProperties; diff --git a/libraries/model/src/model/Stage.h b/libraries/model/src/model/Stage.h index 567c64ec38..6935f51657 100644 --- a/libraries/model/src/model/Stage.h +++ b/libraries/model/src/model/Stage.h @@ -186,12 +186,21 @@ public: void setHazeMode(HazeMode mode); HazeMode getHazeMode() const { return _hazeMode; } + void setHazeRange(float hazeRange) { _hazeRange = hazeRange; } + float getHazeRange() const { return _hazeRange; } + + void setHazeAltitude(float hazeAltitude) { _hazeAltitude = hazeAltitude; } + float getHazeAltitude() const { return _hazeAltitude; } + void setHaze(const HazePointer& haze); const HazePointer& getHaze() const { valid(); return _haze; } protected: BackgroundMode _backgroundMode = SKY_DEFAULT; + HazeMode _hazeMode = HAZE_OFF; + float _hazeRange; + float _hazeAltitude; LightPointer _sunLight; mutable SkyboxPointer _skybox; diff --git a/libraries/script-engine/src/SceneScriptingInterface.cpp b/libraries/script-engine/src/SceneScriptingInterface.cpp index 9c8eb79b49..953fafcd23 100644 --- a/libraries/script-engine/src/SceneScriptingInterface.cpp +++ b/libraries/script-engine/src/SceneScriptingInterface.cpp @@ -150,6 +150,22 @@ QString SceneScripting::Stage::getHazeMode() const { }; } +void SceneScripting::Stage::setHazeRange(const float hazeRange) { + _skyStage->setHazeRange(hazeRange); +} + +float SceneScripting::Stage::getHazeRange() const { + return _skyStage->getHazeRange(); +} + +void SceneScripting::Stage::setHazeAltitude(const float hazeAltitude) { + _skyStage->setHazeAltitude(hazeAltitude); +} + +float SceneScripting::Stage::getHazeAltitude() const { + return _skyStage->getHazeAltitude(); +} + SceneScriptingInterface::SceneScriptingInterface() : _stage{ new SceneScripting::Stage{ _skyStage } } { // Let's make sure the sunSkyStage is using a proceduralSkybox _skyStage->setSkybox(model::SkyboxPointer(new ProceduralSkybox())); diff --git a/libraries/script-engine/src/SceneScriptingInterface.h b/libraries/script-engine/src/SceneScriptingInterface.h index 9eb9a59ce3..342f2c548c 100644 --- a/libraries/script-engine/src/SceneScriptingInterface.h +++ b/libraries/script-engine/src/SceneScriptingInterface.h @@ -125,6 +125,14 @@ namespace SceneScripting { void setHazeMode(const QString& mode); QString getHazeMode() const; + Q_PROPERTY(float hazeRange READ getHazeRange WRITE setHazeRange) + void setHazeRange(float value); + float getHazeRange() const; + + Q_PROPERTY(float hazeAltitude READ getHazeAltitude WRITE setHazeAltitude) + void setHazeAltitude(float value); + float getHazeAltitude() const; + protected: model::SunSkyStagePointer _skyStage; LocationPointer _location; diff --git a/scripts/system/html/entityProperties.html b/scripts/system/html/entityProperties.html index c16f214213..5859733f86 100644 --- a/scripts/system/html/entityProperties.html +++ b/scripts/system/html/entityProperties.html @@ -555,6 +555,12 @@ +
+
+
+
+
+
diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index caaf56f7bb..ad190c47ef 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -658,6 +658,8 @@ function loaded() { var elZoneKeyLightAmbientURL = document.getElementById("property-zone-key-ambient-url"); var elZoneHazeMode = document.getElementById("property-zone-haze-mode"); + var elZoneHazeRange = document.getElementById("property-zone-haze-range"); + var elZoneHazeAltitude = document.getElementById("property-zone-haze-altitude"); var elZoneStageLatitude = document.getElementById("property-zone-stage-latitude"); var elZoneStageLongitude = document.getElementById("property-zone-stage-longitude"); @@ -980,6 +982,9 @@ function loaded() { elZoneHazeMode.value = properties.hazeMode; setDropdownText(elZoneHazeMode); + elZoneHazeRange.value = properties.haze.hazeRange.toFixed(2); + elZoneHazeAltitude.value = properties.haze.hazeAltitude.toFixed(2); + elZoneStageLatitude.value = properties.stage.latitude.toFixed(2); elZoneStageLongitude.value = properties.stage.longitude.toFixed(2); elZoneStageAltitude.value = properties.stage.altitude.toFixed(2); @@ -1375,6 +1380,8 @@ function loaded() { elZoneKeyLightDirectionY.addEventListener('change', zoneKeyLightDirectionChangeFunction); elZoneHazeMode.addEventListener('change', createEmitTextPropertyUpdateFunction('hazeMode')); + elZoneHazeRange.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('haze', 'hazeRange')); + elZoneStageLatitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('haze', 'hazeAltitude')); elZoneStageLatitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage', 'latitude')); elZoneStageLongitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage', 'longitude')); @@ -1383,7 +1390,6 @@ function loaded() { elZoneStageDay.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage', 'day')); elZoneStageHour.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage', 'hour')); - elZoneBackgroundMode.addEventListener('change', createEmitTextPropertyUpdateFunction('backgroundMode')); var zoneSkyboxColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('skybox', 'color',