From 0b6a815a20f824c5b8c6c82490fe541f97825067 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 8 May 2015 20:17:01 -0700 Subject: [PATCH 1/5] moved zone stage properties into a group --- examples/html/entityProperties.html | 24 +-- .../src/EntityTreeRenderer.cpp | 10 +- .../entities/src/EntityItemProperties.cpp | 59 ++---- libraries/entities/src/EntityItemProperties.h | 11 +- .../entities/src/EntityItemPropertiesMacros.h | 14 ++ libraries/entities/src/StagePropertyGroup.cpp | 198 ++++++++++++++++++ libraries/entities/src/StagePropertyGroup.h | 87 ++++++++ libraries/entities/src/ZoneEntityItem.cpp | 71 ++----- libraries/entities/src/ZoneEntityItem.h | 33 +-- 9 files changed, 358 insertions(+), 149 deletions(-) create mode 100644 libraries/entities/src/StagePropertyGroup.cpp create mode 100644 libraries/entities/src/StagePropertyGroup.h diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html index 26bcc63f15..bdbfbdf6b6 100644 --- a/examples/html/entityProperties.html +++ b/examples/html/entityProperties.html @@ -467,7 +467,7 @@ elZoneSections[i].style.display = 'block'; } - elZoneStageSunModelEnabled.checked = properties.stageSunModelEnabled; + elZoneStageSunModelEnabled.checked = properties.stage.sunModelEnabled; elZoneKeyLightColorRed.value = properties.keyLightColor.red; elZoneKeyLightColorGreen.value = properties.keyLightColor.green; elZoneKeyLightColorBlue.value = properties.keyLightColor.blue; @@ -477,11 +477,11 @@ elZoneKeyLightDirectionY.value = properties.keyLightDirection.y.toFixed(2); elZoneKeyLightDirectionZ.value = properties.keyLightDirection.z.toFixed(2); - elZoneStageLatitude.value = properties.stageLatitude.toFixed(2); - elZoneStageLongitude.value = properties.stageLongitude.toFixed(2); - elZoneStageAltitude.value = properties.stageAltitude.toFixed(2); - elZoneStageDay.value = properties.stageDay; - elZoneStageHour.value = properties.stageHour; + elZoneStageLatitude.value = properties.stage.latitude.toFixed(2); + elZoneStageLongitude.value = properties.stage.longitude.toFixed(2); + elZoneStageAltitude.value = properties.stage.altitude.toFixed(2); + elZoneStageDay.value = properties.stage.day; + elZoneStageHour.value = properties.stage.hour; elShapeType.value = properties.shapeType; elCompoundShapeURL.value = properties.compoundShapeURL; @@ -619,7 +619,7 @@ elTextBackgroundColorGreen.addEventListener('change', textBackgroundColorChangeFunction); elTextBackgroundColorBlue.addEventListener('change', textBackgroundColorChangeFunction); - elZoneStageSunModelEnabled.addEventListener('change', createEmitCheckedPropertyUpdateFunction('stageSunModelEnabled')); + elZoneStageSunModelEnabled.addEventListener('change', createEmitGroupCheckedPropertyUpdateFunction('stage','sunModelEnabled')); var zoneKeyLightColorChangeFunction = createEmitColorPropertyUpdateFunction( 'keyLightColor', elZoneKeyLightColorRed, elZoneKeyLightColorGreen, elZoneKeyLightColorBlue); elZoneKeyLightColorRed.addEventListener('change', zoneKeyLightColorChangeFunction); @@ -633,11 +633,11 @@ elZoneKeyLightDirectionY.addEventListener('change', zoneKeyLightDirectionChangeFunction); elZoneKeyLightDirectionZ.addEventListener('change', zoneKeyLightDirectionChangeFunction); - elZoneStageLatitude.addEventListener('change', createEmitNumberPropertyUpdateFunction('stageLatitude')); - elZoneStageLongitude.addEventListener('change', createEmitNumberPropertyUpdateFunction('stageLongitude')); - elZoneStageAltitude.addEventListener('change', createEmitNumberPropertyUpdateFunction('stageAltitude')); - elZoneStageDay.addEventListener('change', createEmitNumberPropertyUpdateFunction('stageDay')); - elZoneStageHour.addEventListener('change', createEmitNumberPropertyUpdateFunction('stageHour')); + elZoneStageLatitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','latitude')); + elZoneStageLongitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','longitude')); + elZoneStageAltitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','altitude')); + elZoneStageDay.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','day')); + elZoneStageHour.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','hour')); elZoneBackgroundMode.addEventListener('change', createEmitTextPropertyUpdateFunction('backgroundMode')); diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index e4c476c6f7..79606e687f 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -423,11 +423,11 @@ void EntityTreeRenderer::render(RenderArgs::RenderMode renderMode, scene->setKeyLightIntensity(_bestZone->getKeyLightIntensity()); scene->setKeyLightAmbientIntensity(_bestZone->getKeyLightAmbientIntensity()); scene->setKeyLightDirection(_bestZone->getKeyLightDirection()); - scene->setStageSunModelEnable(_bestZone->getStageSunModelEnabled()); - scene->setStageLocation(_bestZone->getStageLongitude(), _bestZone->getStageLatitude(), - _bestZone->getStageAltitude()); - scene->setStageDayTime(_bestZone->getStageHour()); - scene->setStageYearTime(_bestZone->getStageDay()); + scene->setStageSunModelEnable(_bestZone->getStageProperties().getSunModelEnabled()); + scene->setStageLocation(_bestZone->getStageProperties().getLongitude(), _bestZone->getStageProperties().getLatitude(), + _bestZone->getStageProperties().getAltitude()); + scene->setStageDayTime(_bestZone->getStageProperties().getHour()); + scene->setStageYearTime(_bestZone->getStageProperties().getDay()); if (_bestZone->getBackgroundMode() == BACKGROUND_MODE_ATMOSPHERE) { EnvironmentData data = _bestZone->getEnvironmentData(); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 0b3472fc09..ff54ef88fe 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -29,6 +29,7 @@ AtmospherePropertyGroup EntityItemProperties::_staticAtmosphere; SkyboxPropertyGroup EntityItemProperties::_staticSkybox; +StagePropertyGroup EntityItemProperties::_staticStage; EntityPropertyList PROP_LAST_ITEM = (EntityPropertyList)(PROP_AFTER_LAST_ITEM - 1); @@ -83,12 +84,6 @@ EntityItemProperties::EntityItemProperties() : CONSTRUCT_PROPERTY(keyLightIntensity, ZoneEntityItem::DEFAULT_KEYLIGHT_INTENSITY), CONSTRUCT_PROPERTY(keyLightAmbientIntensity, ZoneEntityItem::DEFAULT_KEYLIGHT_AMBIENT_INTENSITY), CONSTRUCT_PROPERTY(keyLightDirection, ZoneEntityItem::DEFAULT_KEYLIGHT_DIRECTION), - CONSTRUCT_PROPERTY(stageSunModelEnabled, ZoneEntityItem::DEFAULT_STAGE_SUN_MODEL_ENABLED), - CONSTRUCT_PROPERTY(stageLatitude, ZoneEntityItem::DEFAULT_STAGE_LATITUDE), - CONSTRUCT_PROPERTY(stageLongitude, ZoneEntityItem::DEFAULT_STAGE_LONGITUDE), - CONSTRUCT_PROPERTY(stageAltitude, ZoneEntityItem::DEFAULT_STAGE_ALTITUDE), - CONSTRUCT_PROPERTY(stageDay, ZoneEntityItem::DEFAULT_STAGE_DAY), - CONSTRUCT_PROPERTY(stageHour, ZoneEntityItem::DEFAULT_STAGE_HOUR), CONSTRUCT_PROPERTY(name, ENTITY_ITEM_DEFAULT_NAME), CONSTRUCT_PROPERTY(backgroundMode, BACKGROUND_MODE_INHERIT), @@ -332,15 +327,9 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_INTENSITY, keyLightIntensity); CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_AMBIENT_INTENSITY, keyLightAmbientIntensity); CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_DIRECTION, keyLightDirection); - CHECK_PROPERTY_CHANGE(PROP_STAGE_SUN_MODEL_ENABLED, stageSunModelEnabled); - CHECK_PROPERTY_CHANGE(PROP_STAGE_LATITUDE, stageLatitude); - CHECK_PROPERTY_CHANGE(PROP_STAGE_LONGITUDE, stageLongitude); - CHECK_PROPERTY_CHANGE(PROP_STAGE_ALTITUDE, stageAltitude); - CHECK_PROPERTY_CHANGE(PROP_STAGE_DAY, stageDay); - CHECK_PROPERTY_CHANGE(PROP_STAGE_HOUR, stageHour); - CHECK_PROPERTY_CHANGE(PROP_BACKGROUND_MODE, backgroundMode); - + + changedProperties += _stage.getChangedProperties(); changedProperties += _atmosphere.getChangedProperties(); changedProperties += _skybox.getChangedProperties(); @@ -419,12 +408,6 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(keyLightIntensity); COPY_PROPERTY_TO_QSCRIPTVALUE(keyLightAmbientIntensity); COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(keyLightDirection); - COPY_PROPERTY_TO_QSCRIPTVALUE(stageSunModelEnabled); - COPY_PROPERTY_TO_QSCRIPTVALUE(stageLatitude); - COPY_PROPERTY_TO_QSCRIPTVALUE(stageLongitude); - COPY_PROPERTY_TO_QSCRIPTVALUE(stageAltitude); - COPY_PROPERTY_TO_QSCRIPTVALUE(stageDay); - COPY_PROPERTY_TO_QSCRIPTVALUE(stageHour); COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(backgroundMode, getBackgroundModeAsString()); // Sitting properties support @@ -460,6 +443,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER_NO_SKIP(originalTextures, textureNamesList); // gettable, but not settable } + _stage.copyToScriptValue(properties, engine, skipDefaults, defaultEntityProperties); _atmosphere.copyToScriptValue(properties, engine, skipDefaults, defaultEntityProperties); _skybox.copyToScriptValue(properties, engine, skipDefaults, defaultEntityProperties); @@ -525,13 +509,9 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) { COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(keyLightIntensity, setKeyLightIntensity); COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(keyLightAmbientIntensity, setKeyLightAmbientIntensity); COPY_PROPERTY_FROM_QSCRIPTVALUE_VEC3(keyLightDirection, setKeyLightDirection); - COPY_PROPERTY_FROM_QSCRIPTVALUE_BOOL(stageSunModelEnabled, setStageSunModelEnabled); - COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stageLatitude, setStageLatitude); - COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stageLongitude, setStageLongitude); - COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stageAltitude, setStageAltitude); - COPY_PROPERTY_FROM_QSCRIPTVALUE_INT(stageDay, setStageDay); - COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stageHour, setStageHour); COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(backgroundMode, BackgroundMode); + + _stage.copyFromScriptValue(object, _defaultSettings); _atmosphere.copyFromScriptValue(object, _defaultSettings); _skybox.copyFromScriptValue(object, _defaultSettings); _lastEdited = usecTimestampNow(); @@ -729,13 +709,10 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, appendValue, properties.getKeyLightIntensity()); APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, appendValue, properties.getKeyLightAmbientIntensity()); APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, appendValue, properties.getKeyLightDirection()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, appendValue, properties.getStageSunModelEnabled()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_LATITUDE, appendValue, properties.getStageLatitude()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_LONGITUDE, appendValue, properties.getStageLongitude()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, appendValue, properties.getStageAltitude()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_DAY, appendValue, properties.getStageDay()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_HOUR, appendValue, properties.getStageHour()); - + + _staticStage.setProperties(properties); + _staticStage.appentToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState ); + APPEND_ENTITY_PROPERTY(PROP_SHAPE_TYPE, appendValue, (uint32_t)properties.getShapeType()); APPEND_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, appendValue, properties.getCompoundShapeURL()); @@ -987,12 +964,9 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEYLIGHT_INTENSITY, float, setKeyLightIntensity); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEYLIGHT_AMBIENT_INTENSITY, float, setKeyLightAmbientIntensity); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEYLIGHT_DIRECTION, glm::vec3, setKeyLightDirection); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STAGE_SUN_MODEL_ENABLED, bool, setStageSunModelEnabled); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STAGE_LATITUDE, float, setStageLatitude); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STAGE_LONGITUDE, float, setStageLongitude); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STAGE_ALTITUDE, float, setStageAltitude); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STAGE_DAY, quint16, setStageDay); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STAGE_HOUR, float, setStageHour); + + properties.getStage().decodeFromEditPacket(propertyFlags, dataAt , processedBytes); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHAPE_TYPE, ShapeType, setShapeType); READ_ENTITY_PROPERTY_STRING_TO_PROPERTIES(PROP_COMPOUND_SHAPE_URL, setCompoundShapeURL); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BACKGROUND_MODE, BackgroundMode, setBackgroundMode); @@ -1093,14 +1067,9 @@ void EntityItemProperties::markAllChanged() { _keyLightIntensityChanged = true; _keyLightAmbientIntensityChanged = true; _keyLightDirectionChanged = true; - _stageSunModelEnabledChanged = true; - _stageLatitudeChanged = true; - _stageLongitudeChanged = true; - _stageAltitudeChanged = true; - _stageDayChanged = true; - _stageHourChanged = true; _backgroundModeChanged = true; + _stage.markAllChanged(); _atmosphere.markAllChanged(); _skybox.markAllChanged(); diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 13b2377032..0accdf0899 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -30,11 +30,12 @@ #include #include "AtmospherePropertyGroup.h" -#include "SkyboxPropertyGroup.h" #include "EntityItemID.h" #include "EntityItemPropertiesMacros.h" #include "EntityTypes.h" #include "EntityPropertyFlags.h" +#include "SkyboxPropertyGroup.h" +#include "StagePropertyGroup.h" const quint64 UNKNOWN_CREATED_TIME = 0; @@ -132,14 +133,9 @@ public: 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(PROP_STAGE_SUN_MODEL_ENABLED, StageSunModelEnabled, stageSunModelEnabled, bool); - DEFINE_PROPERTY(PROP_STAGE_LATITUDE, StageLatitude, stageLatitude, float); - DEFINE_PROPERTY(PROP_STAGE_LONGITUDE, StageLongitude, stageLongitude, float); - DEFINE_PROPERTY(PROP_STAGE_ALTITUDE, StageAltitude, stageAltitude, float); - DEFINE_PROPERTY(PROP_STAGE_DAY, StageDay, stageDay, quint16); - DEFINE_PROPERTY(PROP_STAGE_HOUR, StageHour, stageHour, float); DEFINE_PROPERTY_REF(PROP_NAME, Name, name, QString); DEFINE_PROPERTY_REF_ENUM(PROP_BACKGROUND_MODE, BackgroundMode, backgroundMode, BackgroundMode); + DEFINE_PROPERTY_GROUP(Stage, stage, StagePropertyGroup); DEFINE_PROPERTY_GROUP(Atmosphere, atmosphere, AtmospherePropertyGroup); DEFINE_PROPERTY_GROUP(Skybox, skybox, SkyboxPropertyGroup); @@ -280,6 +276,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, ""); + properties.getStage().debugDump(); properties.getAtmosphere().debugDump(); properties.getSkybox().debugDump(); diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index 1b10b6eb7a..b93e0e211d 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -316,6 +316,20 @@ } \ } +#define COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_UINT16(G, P, S) \ + { \ + QScriptValue G = object.property(#G); \ + if (G.isValid()) { \ + QScriptValue P = G.property(#P); \ + if (P.isValid()) { \ + uint16_t newValue = P.toVariant().toInt(); \ + if (_defaultSettings || newValue != _##P) { \ + S(newValue); \ + } \ + } \ + } \ + } + #define COPY_PROPERTY_FROM_QSCRIPTVALUE_INT(P, S) \ QScriptValue P = object.property(#P); \ if (P.isValid()) { \ diff --git a/libraries/entities/src/StagePropertyGroup.cpp b/libraries/entities/src/StagePropertyGroup.cpp new file mode 100644 index 0000000000..e65a64ba77 --- /dev/null +++ b/libraries/entities/src/StagePropertyGroup.cpp @@ -0,0 +1,198 @@ +// +// StagePropertyGroup.cpp +// libraries/entities/src +// +// Created by Brad Hefta-Gaub on 12/4/13. +// Copyright 2013 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include + +#include "StagePropertyGroup.h" +#include "EntityItemProperties.h" +#include "EntityItemPropertiesMacros.h" + +const bool StagePropertyGroup::DEFAULT_STAGE_SUN_MODEL_ENABLED = false; +const float StagePropertyGroup::DEFAULT_STAGE_LATITUDE = 37.777f; +const float StagePropertyGroup::DEFAULT_STAGE_LONGITUDE = 122.407f; +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; +} + +void StagePropertyGroup::copyToScriptValue(QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, SunModelEnabled, sunModelEnabled); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, Latitude, latitude); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, Longitude, longitude); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, Altitude, altitude); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, Day, day); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, Hour, hour); +} + +void StagePropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) { + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_BOOL(stage, sunModelEnabled, setSunModelEnabled); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stage, latitude, setLatitude); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stage, longitude, setLongitude); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stage, altitude, setAltitude); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_UINT16(stage, day, setDay); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stage, hour, setHour); +} + +void StagePropertyGroup::debugDump() const { + qDebug() << " StagePropertyGroup: ---------------------------------------------"; + qDebug() << " _sunModelEnabled:" << _sunModelEnabled; + qDebug() << " _latitude:" << _latitude; + qDebug() << " _longitude:" << _longitude; + qDebug() << " _altitude:" << _altitude; + qDebug() << " _day:" << _day; + qDebug() << " _hour:" << _hour; + +} + +bool StagePropertyGroup::appentToEditPacket(OctreePacketData* packetData, + EntityPropertyFlags& requestedProperties, + EntityPropertyFlags& propertyFlags, + EntityPropertyFlags& propertiesDidntFit, + int& propertyCount, + OctreeElement::AppendState& appendState) const { + + bool successPropertyFits = true; + + APPEND_ENTITY_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, appendValue, getSunModelEnabled()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_LATITUDE, appendValue, getLatitude()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_LONGITUDE, appendValue, getLongitude()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, appendValue, getAltitude()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_DAY, appendValue, getDay()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_HOUR, appendValue, getHour()); + + return true; +} + + +bool StagePropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags, const unsigned char*& dataAt , int& processedBytes) { + + int bytesRead = 0; + bool overwriteLocalData = true; + + READ_ENTITY_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, bool, _sunModelEnabled); + READ_ENTITY_PROPERTY(PROP_STAGE_LATITUDE, float, _latitude); + READ_ENTITY_PROPERTY(PROP_STAGE_LONGITUDE, float, _longitude); + READ_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, float, _altitude); + READ_ENTITY_PROPERTY(PROP_STAGE_DAY, quint16, _day); + READ_ENTITY_PROPERTY(PROP_STAGE_HOUR, float, _hour); + + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_SUN_MODEL_ENABLED, SunModelEnabled); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_LATITUDE, Latitude); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_LONGITUDE, Longitude); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_ALTITUDE, Altitude); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_DAY, Day); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_HOUR, Hour); + + processedBytes += bytesRead; + + return true; +} + +void StagePropertyGroup::markAllChanged() { + _sunModelEnabledChanged = true; + _latitudeChanged = true; + _longitudeChanged = true; + _altitudeChanged = true; + _dayChanged = true; + _hourChanged = true; +} + +EntityPropertyFlags StagePropertyGroup::getChangedProperties() const { + EntityPropertyFlags changedProperties; + + CHECK_PROPERTY_CHANGE(PROP_STAGE_SUN_MODEL_ENABLED, sunModelEnabled); + CHECK_PROPERTY_CHANGE(PROP_STAGE_LATITUDE, latitude); + CHECK_PROPERTY_CHANGE(PROP_STAGE_LONGITUDE, longitude); + CHECK_PROPERTY_CHANGE(PROP_STAGE_ALTITUDE, altitude); + CHECK_PROPERTY_CHANGE(PROP_STAGE_DAY, day); + CHECK_PROPERTY_CHANGE(PROP_STAGE_HOUR, hour); + + return changedProperties; +} + +void StagePropertyGroup::getProperties(EntityItemProperties& properties) const { + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, SunModelEnabled, getSunModelEnabled); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, Latitude, getLatitude); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, Longitude, getLongitude); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, Altitude, getAltitude); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, Day, getDay); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, Hour, getHour); +} + +bool StagePropertyGroup::setProperties(const EntityItemProperties& properties) { + bool somethingChanged = false; + + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, SunModelEnabled, sunModelEnabled, setSunModelEnabled); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, Latitude, latitude, setLatitude); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, Longitude, longitude, setLongitude); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, Altitude, altitude, setAltitude); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, Day, day, setDay); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, Hour, hour, setHour); + + return somethingChanged; +} + +EntityPropertyFlags StagePropertyGroup::getEntityProperties(EncodeBitstreamParams& params) const { + EntityPropertyFlags requestedProperties; + + requestedProperties += PROP_STAGE_SUN_MODEL_ENABLED; + requestedProperties += PROP_STAGE_LATITUDE; + requestedProperties += PROP_STAGE_LONGITUDE; + requestedProperties += PROP_STAGE_ALTITUDE; + requestedProperties += PROP_STAGE_DAY; + requestedProperties += PROP_STAGE_HOUR; + + return requestedProperties; +} + +void StagePropertyGroup::appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params, + EntityTreeElementExtraEncodeData* entityTreeElementExtraEncodeData, + EntityPropertyFlags& requestedProperties, + EntityPropertyFlags& propertyFlags, + EntityPropertyFlags& propertiesDidntFit, + int& propertyCount, + OctreeElement::AppendState& appendState) const { + + bool successPropertyFits = true; + + APPEND_ENTITY_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, appendValue, getSunModelEnabled()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_LATITUDE, appendValue, getLatitude()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_LONGITUDE, appendValue, getLongitude()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, appendValue, getAltitude()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_DAY, appendValue, getDay()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_HOUR, appendValue, getHour()); + +} + +int StagePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, + ReadBitstreamToTreeParams& args, + EntityPropertyFlags& propertyFlags, bool overwriteLocalData) { + + int bytesRead = 0; + const unsigned char* dataAt = data; + + READ_ENTITY_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, bool, _sunModelEnabled); + READ_ENTITY_PROPERTY(PROP_STAGE_LATITUDE, float, _latitude); + READ_ENTITY_PROPERTY(PROP_STAGE_LONGITUDE, float, _longitude); + READ_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, float, _altitude); + READ_ENTITY_PROPERTY(PROP_STAGE_DAY, quint16, _day); + READ_ENTITY_PROPERTY(PROP_STAGE_HOUR, float, _hour); + + return bytesRead; +} diff --git a/libraries/entities/src/StagePropertyGroup.h b/libraries/entities/src/StagePropertyGroup.h new file mode 100644 index 0000000000..3a1adb1c88 --- /dev/null +++ b/libraries/entities/src/StagePropertyGroup.h @@ -0,0 +1,87 @@ +// +// StagePropertyGroup.h +// libraries/entities/src +// +// Created by Brad Hefta-Gaub on 12/4/13. +// Copyright 2013 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_StagePropertyGroup_h +#define hifi_StagePropertyGroup_h + +#include + +#include "PropertyGroup.h" +#include "EntityItemPropertiesMacros.h" + +class EntityItemProperties; +class EncodeBitstreamParams; +class OctreePacketData; +class EntityTreeElementExtraEncodeData; +class ReadBitstreamToTreeParams; + +#include +#include + + +class StagePropertyGroup : public PropertyGroup { +public: + StagePropertyGroup(); + virtual ~StagePropertyGroup() {} + + // EntityItemProperty related helpers + virtual void copyToScriptValue(QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; + virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings); + virtual void debugDump() const; + + virtual bool appentToEditPacket(OctreePacketData* packetData, + EntityPropertyFlags& requestedProperties, + EntityPropertyFlags& propertyFlags, + EntityPropertyFlags& propertiesDidntFit, + int& propertyCount, + OctreeElement::AppendState& appendState) const; + + virtual bool decodeFromEditPacket(EntityPropertyFlags& propertyFlags, const unsigned char*& dataAt , int& processedBytes); + virtual void markAllChanged(); + virtual EntityPropertyFlags getChangedProperties() const; + + // EntityItem related helpers + // methods for getting/setting all properties of an entity + virtual void getProperties(EntityItemProperties& propertiesOut) const; + + /// returns true if something changed + virtual bool setProperties(const EntityItemProperties& properties); + + virtual EntityPropertyFlags getEntityProperties(EncodeBitstreamParams& params) const; + + virtual void appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params, + EntityTreeElementExtraEncodeData* entityTreeElementExtraEncodeData, + EntityPropertyFlags& requestedProperties, + EntityPropertyFlags& propertyFlags, + EntityPropertyFlags& propertiesDidntFit, + int& propertyCount, + OctreeElement::AppendState& appendState) const; + + virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, + ReadBitstreamToTreeParams& args, + EntityPropertyFlags& propertyFlags, bool overwriteLocalData); + + static const bool DEFAULT_STAGE_SUN_MODEL_ENABLED; + static const float DEFAULT_STAGE_LATITUDE; + static const float DEFAULT_STAGE_LONGITUDE; + static const float DEFAULT_STAGE_ALTITUDE; + static const quint16 DEFAULT_STAGE_DAY; + static const float DEFAULT_STAGE_HOUR; + + 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); +}; + +#endif // hifi_StagePropertyGroup_h diff --git a/libraries/entities/src/ZoneEntityItem.cpp b/libraries/entities/src/ZoneEntityItem.cpp index f8e8eceb9f..b85c543ce4 100644 --- a/libraries/entities/src/ZoneEntityItem.cpp +++ b/libraries/entities/src/ZoneEntityItem.cpp @@ -26,12 +26,6 @@ const xColor ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR = { 255, 255, 255 }; const float ZoneEntityItem::DEFAULT_KEYLIGHT_INTENSITY = 1.0f; const float ZoneEntityItem::DEFAULT_KEYLIGHT_AMBIENT_INTENSITY = 0.5f; const glm::vec3 ZoneEntityItem::DEFAULT_KEYLIGHT_DIRECTION = { 0.0f, -1.0f, 0.0f }; -const bool ZoneEntityItem::DEFAULT_STAGE_SUN_MODEL_ENABLED = false; -const float ZoneEntityItem::DEFAULT_STAGE_LATITUDE = 37.777f; -const float ZoneEntityItem::DEFAULT_STAGE_LONGITUDE = 122.407f; -const float ZoneEntityItem::DEFAULT_STAGE_ALTITUDE = 0.03f; -const quint16 ZoneEntityItem::DEFAULT_STAGE_DAY = 60; -const float ZoneEntityItem::DEFAULT_STAGE_HOUR = 12.0f; const ShapeType ZoneEntityItem::DEFAULT_SHAPE_TYPE = SHAPE_TYPE_BOX; const QString ZoneEntityItem::DEFAULT_COMPOUND_SHAPE_URL = ""; @@ -53,12 +47,6 @@ ZoneEntityItem::ZoneEntityItem(const EntityItemID& entityItemID, const EntityIte _keyLightIntensity = DEFAULT_KEYLIGHT_INTENSITY; _keyLightAmbientIntensity = DEFAULT_KEYLIGHT_AMBIENT_INTENSITY; _keyLightDirection = DEFAULT_KEYLIGHT_DIRECTION; - _stageSunModelEnabled = DEFAULT_STAGE_SUN_MODEL_ENABLED; - _stageLatitude = DEFAULT_STAGE_LATITUDE; - _stageLongitude = DEFAULT_STAGE_LONGITUDE; - _stageAltitude = DEFAULT_STAGE_ALTITUDE; - _stageDay = DEFAULT_STAGE_DAY; - _stageHour = DEFAULT_STAGE_HOUR; _shapeType = DEFAULT_SHAPE_TYPE; _compoundShapeURL = DEFAULT_COMPOUND_SHAPE_URL; @@ -94,15 +82,11 @@ EntityItemProperties ZoneEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightIntensity, getKeyLightIntensity); COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightAmbientIntensity, getKeyLightAmbientIntensity); COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightDirection, getKeyLightDirection); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(stageSunModelEnabled, getStageSunModelEnabled); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(stageLatitude, getStageLatitude); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(stageLongitude, getStageLongitude); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(stageAltitude, getStageAltitude); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(stageDay, getStageDay); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(stageHour, getStageHour); + + _stageProperties.getProperties(properties); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(shapeType, getShapeType); COPY_ENTITY_PROPERTY_TO_PROPERTIES(compoundShapeURL, getCompoundShapeURL); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(backgroundMode, getBackgroundMode); _atmosphereProperties.getProperties(properties); @@ -119,12 +103,9 @@ bool ZoneEntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(keyLightIntensity, setKeyLightIntensity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(keyLightAmbientIntensity, setKeyLightAmbientIntensity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(keyLightDirection, setKeyLightDirection); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(stageSunModelEnabled, setStageSunModelEnabled); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(stageLatitude, setStageLatitude); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(stageLongitude, setStageLongitude); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(stageAltitude, setStageAltitude); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(stageDay, setStageDay); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(stageHour, setStageHour); + + bool somethingChangedInStage = _stageProperties.setProperties(properties); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(shapeType, updateShapeType); SET_ENTITY_PROPERTY_FROM_PROPERTIES(compoundShapeURL, setCompoundShapeURL); SET_ENTITY_PROPERTY_FROM_PROPERTIES(backgroundMode, setBackgroundMode); @@ -132,7 +113,7 @@ bool ZoneEntityItem::setProperties(const EntityItemProperties& properties) { bool somethingChangedInAtmosphere = _atmosphereProperties.setProperties(properties); bool somethingChangedInSkybox = _skyboxProperties.setProperties(properties); - somethingChanged = somethingChanged || somethingChangedInAtmosphere || somethingChangedInSkybox; + somethingChanged = somethingChanged || somethingChangedInStage || somethingChangedInAtmosphere || somethingChangedInSkybox; if (somethingChanged) { bool wantDebug = false; @@ -158,12 +139,13 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, READ_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, float, _keyLightIntensity); READ_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, float, _keyLightAmbientIntensity); READ_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, glm::vec3, _keyLightDirection); - READ_ENTITY_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, bool, _stageSunModelEnabled); - READ_ENTITY_PROPERTY(PROP_STAGE_LATITUDE, float, _stageLatitude); - READ_ENTITY_PROPERTY(PROP_STAGE_LONGITUDE, float, _stageLongitude); - READ_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, float, _stageAltitude); - READ_ENTITY_PROPERTY(PROP_STAGE_DAY, quint16, _stageDay); - READ_ENTITY_PROPERTY(PROP_STAGE_HOUR, float, _stageHour); + + int bytesFromStage = _stageProperties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args, + propertyFlags, overwriteLocalData); + + bytesRead += bytesFromStage; + dataAt += bytesFromStage; + READ_ENTITY_PROPERTY_SETTER(PROP_SHAPE_TYPE, ShapeType, updateShapeType); READ_ENTITY_PROPERTY_STRING(PROP_COMPOUND_SHAPE_URL, setCompoundShapeURL); READ_ENTITY_PROPERTY_SETTER(PROP_BACKGROUND_MODE, BackgroundMode, setBackgroundMode); @@ -191,15 +173,10 @@ EntityPropertyFlags ZoneEntityItem::getEntityProperties(EncodeBitstreamParams& p requestedProperties += PROP_KEYLIGHT_INTENSITY; requestedProperties += PROP_KEYLIGHT_AMBIENT_INTENSITY; requestedProperties += PROP_KEYLIGHT_DIRECTION; - requestedProperties += PROP_STAGE_SUN_MODEL_ENABLED; - requestedProperties += PROP_STAGE_LATITUDE; - requestedProperties += PROP_STAGE_LONGITUDE; - requestedProperties += PROP_STAGE_ALTITUDE; - requestedProperties += PROP_STAGE_DAY; - requestedProperties += PROP_STAGE_HOUR; requestedProperties += PROP_SHAPE_TYPE; requestedProperties += PROP_COMPOUND_SHAPE_URL; requestedProperties += PROP_BACKGROUND_MODE; + requestedProperties += _stageProperties.getEntityProperties(params); requestedProperties += _atmosphereProperties.getEntityProperties(params); requestedProperties += _skyboxProperties.getEntityProperties(params); @@ -220,12 +197,11 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, appendValue, getKeyLightIntensity()); APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, appendValue, getKeyLightAmbientIntensity()); APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, appendValue, getKeyLightDirection()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_SUN_MODEL_ENABLED, appendValue, getStageSunModelEnabled()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_LATITUDE, appendValue, getStageLatitude()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_LONGITUDE, appendValue, getStageLongitude()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, appendValue, getStageAltitude()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_DAY, appendValue, getStageDay()); - APPEND_ENTITY_PROPERTY(PROP_STAGE_HOUR, appendValue, getStageHour()); + + _stageProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties, + propertyFlags, propertiesDidntFit, propertyCount, appendState); + + APPEND_ENTITY_PROPERTY(PROP_SHAPE_TYPE, appendValue, (uint32_t)getShapeType()); APPEND_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, appendValue, getCompoundShapeURL()); APPEND_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, appendValue, (uint32_t)getBackgroundMode()); // could this be a uint16?? @@ -248,14 +224,9 @@ void ZoneEntityItem::debugDump() const { qCDebug(entities) << " _keyLightIntensity:" << _keyLightIntensity; qCDebug(entities) << " _keyLightAmbientIntensity:" << _keyLightAmbientIntensity; qCDebug(entities) << " _keyLightDirection:" << _keyLightDirection; - qCDebug(entities) << " _stageSunModelEnabled:" << _stageSunModelEnabled; - qCDebug(entities) << " _stageLatitude:" << _stageLatitude; - qCDebug(entities) << " _stageLongitude:" << _stageLongitude; - qCDebug(entities) << " _stageAltitude:" << _stageAltitude; - qCDebug(entities) << " _stageDay:" << _stageDay; - qCDebug(entities) << " _stageHour:" << _stageHour; qCDebug(entities) << " _backgroundMode:" << EntityItemProperties::getBackgroundModeString(_backgroundMode); + _stageProperties.debugDump(); _atmosphereProperties.debugDump(); _skyboxProperties.debugDump(); } diff --git a/libraries/entities/src/ZoneEntityItem.h b/libraries/entities/src/ZoneEntityItem.h index 6c67ea72dd..4388bf908a 100644 --- a/libraries/entities/src/ZoneEntityItem.h +++ b/libraries/entities/src/ZoneEntityItem.h @@ -69,24 +69,6 @@ public: const glm::vec3& getKeyLightDirection() const { return _keyLightDirection; } void setKeyLightDirection(const glm::vec3& value) { _keyLightDirection = value; } - bool getStageSunModelEnabled() const { return _stageSunModelEnabled; } - void setStageSunModelEnabled(bool value) { _stageSunModelEnabled = value; } - - float getStageLatitude() const { return _stageLatitude; } - void setStageLatitude(float value) { _stageLatitude = value; } - - float getStageLongitude() const { return _stageLongitude; } - void setStageLongitude(float value) { _stageLongitude = value; } - - float getStageAltitude() const { return _stageAltitude; } - void setStageAltitude(float value) { _stageAltitude = value; } - - uint16_t getStageDay() const { return _stageDay; } - void setStageDay(uint16_t value) { _stageDay = value; } - - float getStageHour() const { return _stageHour; } - void setStageHour(float value) { _stageHour = value; } - static bool getZonesArePickable() { return _zonesArePickable; } static void setZonesArePickable(bool value) { _zonesArePickable = value; } @@ -107,6 +89,7 @@ public: EnvironmentData getEnvironmentData() const; const AtmospherePropertyGroup& getAtmosphereProperties() const { return _atmosphereProperties; } const SkyboxPropertyGroup& getSkyboxProperties() const { return _skyboxProperties; } + const StagePropertyGroup& getStageProperties() const { return _stageProperties; } virtual bool supportsDetailedRayIntersection() const { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, @@ -119,12 +102,6 @@ public: static const float DEFAULT_KEYLIGHT_INTENSITY; static const float DEFAULT_KEYLIGHT_AMBIENT_INTENSITY; static const glm::vec3 DEFAULT_KEYLIGHT_DIRECTION; - static const bool DEFAULT_STAGE_SUN_MODEL_ENABLED; - static const float DEFAULT_STAGE_LATITUDE; - static const float DEFAULT_STAGE_LONGITUDE; - static const float DEFAULT_STAGE_ALTITUDE; - static const quint16 DEFAULT_STAGE_DAY; - static const float DEFAULT_STAGE_HOUR; static const ShapeType DEFAULT_SHAPE_TYPE; static const QString DEFAULT_COMPOUND_SHAPE_URL; @@ -134,17 +111,13 @@ protected: float _keyLightIntensity; float _keyLightAmbientIntensity; glm::vec3 _keyLightDirection; - bool _stageSunModelEnabled; - float _stageLatitude; - float _stageLongitude; - float _stageAltitude; - uint16_t _stageDay; - float _stageHour; ShapeType _shapeType = DEFAULT_SHAPE_TYPE; QString _compoundShapeURL; BackgroundMode _backgroundMode = BACKGROUND_MODE_INHERIT; + + StagePropertyGroup _stageProperties; AtmospherePropertyGroup _atmosphereProperties; SkyboxPropertyGroup _skyboxProperties; From 17c3c1a18d8c2fe8cb18ccfb22c925f4024daf73 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sun, 10 May 2015 15:22:02 -0700 Subject: [PATCH 2/5] add support for automatic hour/day calculations and backward compatibility on stage properties --- .../entities/changingAtmosphereExample.js | 14 +++-- .../example/entities/zoneAtmosphereExample.js | 14 +++-- .../example/entities/zoneEntityExample.js | 16 ++--- .../example/entities/zoneSkyboxExample.js | 14 +++-- examples/html/entityProperties.html | 11 ++++ .../src/EntityTreeRenderer.cpp | 4 +- .../entities/src/EntityItemPropertiesMacros.h | 28 +++++++++ libraries/entities/src/EntityPropertyFlags.h | 1 + libraries/entities/src/StagePropertyGroup.cpp | 63 ++++++++++++++++++- libraries/entities/src/StagePropertyGroup.h | 4 ++ libraries/networking/src/PacketHeaders.cpp | 2 +- libraries/networking/src/PacketHeaders.h | 1 + 12 files changed, 141 insertions(+), 31 deletions(-) diff --git a/examples/example/entities/changingAtmosphereExample.js b/examples/example/entities/changingAtmosphereExample.js index 88a25b6a08..02103fc0fb 100644 --- a/examples/example/entities/changingAtmosphereExample.js +++ b/examples/example/entities/changingAtmosphereExample.js @@ -35,12 +35,14 @@ var zoneEntityA = Entities.addEntity({ scatteringWavelengths: { x: 0.650, y: 0.570, z: 0.475 }, hasStars: true }, - stageLatitude: 37.777, - stageLongitude: 122.407, - stageAltitude: 0.03, - stageDay: 183, - stageHour: 5, - stageSunModelEnabled: true + stage: { + latitude: 37.777, + longitude: 122.407, + altitude: 0.03, + day: 183, + hour: 5, + sunModelEnabled: true + } }); diff --git a/examples/example/entities/zoneAtmosphereExample.js b/examples/example/entities/zoneAtmosphereExample.js index b31a453300..dfebf09f2a 100644 --- a/examples/example/entities/zoneAtmosphereExample.js +++ b/examples/example/entities/zoneAtmosphereExample.js @@ -33,12 +33,14 @@ var zoneEntityA = Entities.addEntity({ scatteringWavelengths: { x: 0.650, y: 0.570, z: 0.475 }, hasStars: false }, - stageLatitude: 37.777, - stageLongitude: 122.407, - stageAltitude: 0.03, - stageDay: 60, - stageHour: 0, - stageSunModelEnabled: true + stage: { + latitude: 37.777, + longitude: 122.407, + altitude: 0.03, + day: 60, + hour: 0, + sunModelEnabled: true + } }); diff --git a/examples/example/entities/zoneEntityExample.js b/examples/example/entities/zoneEntityExample.js index b5831a2bb5..2d8b587d53 100644 --- a/examples/example/entities/zoneEntityExample.js +++ b/examples/example/entities/zoneEntityExample.js @@ -34,17 +34,18 @@ var zoneEntityB = Entities.addEntity({ dimensions: { x: 2, y: 2, z: 2 }, keyLightColor: { red: 0, green: 255, blue: 0 }, keyLightIntensity: 0.9, - stageLatitude: 37.777, - stageLongitude: 122.407, - stageAltitude: 0.03, - stageDay: 60, - stageHour: 12, - stageSunModelEnabled: true + stage: { + latitude: 37.777, + longitude: 122.407, + altitude: 0.03, + day: 60, + hour: 0, + sunModelEnabled: true + } }); print("zoneEntityB:" + zoneEntityB); - var zoneEntityC = Entities.addEntity({ type: "Zone", position: { x: 5, y: 10, z: 5 }, @@ -59,7 +60,6 @@ var zoneEntityC = Entities.addEntity({ print("zoneEntityC:" + zoneEntityC); - // register the call back so it fires before each data send Script.update.connect(function(deltaTime) { // stop it... diff --git a/examples/example/entities/zoneSkyboxExample.js b/examples/example/entities/zoneSkyboxExample.js index a1f5f1917a..420482f14d 100644 --- a/examples/example/entities/zoneSkyboxExample.js +++ b/examples/example/entities/zoneSkyboxExample.js @@ -37,12 +37,14 @@ var zoneEntityA = Entities.addEntity({ color: { red: 255, green: 0, blue: 255 }, url: "" }, - stageLatitude: 37.777, - stageLongitude: 122.407, - stageAltitude: 0.03, - stageDay: 60, - stageHour: 0, - stageSunModelEnabled: true + stage: { + latitude: 37.777, + longitude: 122.407, + altitude: 0.03, + day: 60, + hour: 0, + sunModelEnabled: true + } }); var props = Entities.getEntityProperties(zoneEntityA); diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html index bdbfbdf6b6..9cf6a8893f 100644 --- a/examples/html/entityProperties.html +++ b/examples/html/entityProperties.html @@ -280,6 +280,7 @@ var elZoneStageLatitude = document.getElementById("property-zone-stage-latitude"); var elZoneStageLongitude = document.getElementById("property-zone-stage-longitude"); var elZoneStageAltitude = document.getElementById("property-zone-stage-altitude"); + var elZoneStageAutomaticHourDay = document.getElementById("property-zone-stage-automatic-hour-day"); var elZoneStageDay = document.getElementById("property-zone-stage-day"); var elZoneStageHour = document.getElementById("property-zone-stage-hour"); @@ -480,6 +481,7 @@ elZoneStageLatitude.value = properties.stage.latitude.toFixed(2); elZoneStageLongitude.value = properties.stage.longitude.toFixed(2); elZoneStageAltitude.value = properties.stage.altitude.toFixed(2); + elZoneStageAutomaticHourDay.checked = properties.stage.automaticHourDay; elZoneStageDay.value = properties.stage.day; elZoneStageHour.value = properties.stage.hour; elShapeType.value = properties.shapeType; @@ -636,6 +638,7 @@ elZoneStageLatitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','latitude')); elZoneStageLongitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','longitude')); elZoneStageAltitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','altitude')); + elZoneStageAutomaticHourDay.addEventListener('change', createEmitGroupCheckedPropertyUpdateFunction('stage','automaticHourDay')); elZoneStageDay.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','day')); elZoneStageHour.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','hour')); @@ -1094,6 +1097,14 @@ + +
+ Stage Automatice Hour Day + + + +
+
Stage Day
diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 79606e687f..943a3824c3 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -426,8 +426,8 @@ void EntityTreeRenderer::render(RenderArgs::RenderMode renderMode, scene->setStageSunModelEnable(_bestZone->getStageProperties().getSunModelEnabled()); scene->setStageLocation(_bestZone->getStageProperties().getLongitude(), _bestZone->getStageProperties().getLatitude(), _bestZone->getStageProperties().getAltitude()); - scene->setStageDayTime(_bestZone->getStageProperties().getHour()); - scene->setStageYearTime(_bestZone->getStageProperties().getDay()); + scene->setStageDayTime(_bestZone->getStageProperties().calculateHour()); + scene->setStageYearTime(_bestZone->getStageProperties().calculateDay()); if (_bestZone->getBackgroundMode() == BACKGROUND_MODE_ATMOSPHERE) { EnvironmentData data = _bestZone->getEnvironmentData(); diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index b93e0e211d..825a98fae0 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -302,6 +302,15 @@ } \ } +#define COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT_GETTER(P, S, G) \ + QScriptValue P = object.property(#P); \ + if (P.isValid()) { \ + float newValue = P.toVariant().toFloat(); \ + if (_defaultSettings || newValue != G()) { \ + S(newValue); \ + } \ + } + #define COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(G, P, S) \ { \ QScriptValue G = object.property(#G); \ @@ -339,6 +348,15 @@ } \ } +#define COPY_PROPERTY_FROM_QSCRIPTVALUE_INT_GETTER(P, S, G) \ + QScriptValue P = object.property(#P); \ + if (P.isValid()) { \ + int newValue = P.toVariant().toInt(); \ + if (_defaultSettings || newValue != G()) { \ + S(newValue); \ + } \ + } + #define COPY_PROPERTY_FROM_QSCRIPTVALUE_BOOL(P, S) \ QScriptValue P = object.property(#P); \ if (P.isValid()) { \ @@ -348,6 +366,16 @@ } \ } +#define COPY_PROPERTY_FROM_QSCRIPTVALUE_BOOL_GETTER(P, S, G) \ + QScriptValue P = object.property(#P); \ + if (P.isValid()) { \ + bool newValue = P.toVariant().toBool(); \ + if (_defaultSettings || newValue != G()) { \ + S(newValue); \ + } \ + } + + #define COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_BOOL(G, P, S) \ { \ QScriptValue G = object.property(#G); \ diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index f40fa67195..93b8c76216 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -146,6 +146,7 @@ enum EntityPropertyList { PROP_BACKGROUND_MODE = PROP_MODEL_URL, PROP_SKYBOX_COLOR = PROP_ANIMATION_URL, PROP_SKYBOX_URL = PROP_ANIMATION_FPS, + PROP_STAGE_AUTOMATIC_HOURDAY = PROP_ANIMATION_FRAME_INDEX, // WARNING!!! DO NOT ADD PROPS_xxx here unless you really really meant to.... Add them UP above }; diff --git a/libraries/entities/src/StagePropertyGroup.cpp b/libraries/entities/src/StagePropertyGroup.cpp index e65a64ba77..80bb763988 100644 --- a/libraries/entities/src/StagePropertyGroup.cpp +++ b/libraries/entities/src/StagePropertyGroup.cpp @@ -9,6 +9,10 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include +#include +#include + #include #include "StagePropertyGroup.h" @@ -29,6 +33,7 @@ StagePropertyGroup::StagePropertyGroup() { _altitude = DEFAULT_STAGE_ALTITUDE; _day = DEFAULT_STAGE_DAY; _hour = DEFAULT_STAGE_HOUR; + _automaticHourDay = false; } void StagePropertyGroup::copyToScriptValue(QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { @@ -38,15 +43,26 @@ void StagePropertyGroup::copyToScriptValue(QScriptValue& properties, QScriptEngi COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, Altitude, altitude); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, Day, day); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, Hour, hour); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Stage, stage, AutomaticHourDay, automaticHourDay); } void StagePropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) { + + // Backward compatibility support for the old way of doing stage properties + COPY_PROPERTY_FROM_QSCRIPTVALUE_BOOL_GETTER(stageSunModelEnabled, setSunModelEnabled, getSunModelEnabled); + COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT_GETTER(stageLatitude, setLatitude, getLatitude); + COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT_GETTER(stageLongitude, setLongitude, getLongitude); + COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT_GETTER(stageAltitude, setAltitude, getAltitude); + COPY_PROPERTY_FROM_QSCRIPTVALUE_INT_GETTER(stageDay, setDay, getDay); + COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT_GETTER(stageHour, setHour, getHour); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_BOOL(stage, sunModelEnabled, setSunModelEnabled); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stage, latitude, setLatitude); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stage, longitude, setLongitude); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stage, altitude, setAltitude); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_UINT16(stage, day, setDay); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stage, hour, setHour); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_BOOL(stage, automaticHourDay, setAutomaticHourDay); } void StagePropertyGroup::debugDump() const { @@ -57,7 +73,7 @@ void StagePropertyGroup::debugDump() const { qDebug() << " _altitude:" << _altitude; qDebug() << " _day:" << _day; qDebug() << " _hour:" << _hour; - + qDebug() << " _automaticHourDay:" << _automaticHourDay; } bool StagePropertyGroup::appentToEditPacket(OctreePacketData* packetData, @@ -75,6 +91,7 @@ bool StagePropertyGroup::appentToEditPacket(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, appendValue, getAltitude()); APPEND_ENTITY_PROPERTY(PROP_STAGE_DAY, appendValue, getDay()); APPEND_ENTITY_PROPERTY(PROP_STAGE_HOUR, appendValue, getHour()); + APPEND_ENTITY_PROPERTY(PROP_STAGE_AUTOMATIC_HOURDAY, appendValue, getAutomaticHourDay()); return true; } @@ -91,6 +108,7 @@ bool StagePropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags READ_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, float, _altitude); READ_ENTITY_PROPERTY(PROP_STAGE_DAY, quint16, _day); READ_ENTITY_PROPERTY(PROP_STAGE_HOUR, float, _hour); + READ_ENTITY_PROPERTY(PROP_STAGE_AUTOMATIC_HOURDAY, bool, _automaticHourDay); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_SUN_MODEL_ENABLED, SunModelEnabled); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_LATITUDE, Latitude); @@ -98,6 +116,7 @@ bool StagePropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_ALTITUDE, Altitude); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_DAY, Day); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_HOUR, Hour); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_STAGE_AUTOMATIC_HOURDAY, AutomaticHourDay); processedBytes += bytesRead; @@ -111,6 +130,7 @@ void StagePropertyGroup::markAllChanged() { _altitudeChanged = true; _dayChanged = true; _hourChanged = true; + _automaticHourDayChanged = true; } EntityPropertyFlags StagePropertyGroup::getChangedProperties() const { @@ -122,6 +142,7 @@ EntityPropertyFlags StagePropertyGroup::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_STAGE_ALTITUDE, altitude); CHECK_PROPERTY_CHANGE(PROP_STAGE_DAY, day); CHECK_PROPERTY_CHANGE(PROP_STAGE_HOUR, hour); + CHECK_PROPERTY_CHANGE(PROP_STAGE_AUTOMATIC_HOURDAY, automaticHourDay); return changedProperties; } @@ -133,6 +154,7 @@ void StagePropertyGroup::getProperties(EntityItemProperties& properties) const { COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, Altitude, getAltitude); COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, Day, getDay); COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, Hour, getHour); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Stage, AutomaticHourDay, getAutomaticHourDay); } bool StagePropertyGroup::setProperties(const EntityItemProperties& properties) { @@ -144,6 +166,7 @@ bool StagePropertyGroup::setProperties(const EntityItemProperties& properties) { SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, Altitude, altitude, setAltitude); SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, Day, day, setDay); SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, Hour, hour, setHour); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Stage, AutomaticHourDay, automaticHourDay, setAutomaticHourDay); return somethingChanged; } @@ -157,6 +180,7 @@ EntityPropertyFlags StagePropertyGroup::getEntityProperties(EncodeBitstreamParam requestedProperties += PROP_STAGE_ALTITUDE; requestedProperties += PROP_STAGE_DAY; requestedProperties += PROP_STAGE_HOUR; + requestedProperties += PROP_STAGE_AUTOMATIC_HOURDAY; return requestedProperties; } @@ -177,7 +201,7 @@ void StagePropertyGroup::appendSubclassData(OctreePacketData* packetData, Encode APPEND_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, appendValue, getAltitude()); APPEND_ENTITY_PROPERTY(PROP_STAGE_DAY, appendValue, getDay()); APPEND_ENTITY_PROPERTY(PROP_STAGE_HOUR, appendValue, getHour()); - + APPEND_ENTITY_PROPERTY(PROP_STAGE_AUTOMATIC_HOURDAY, appendValue, getAutomaticHourDay()); } int StagePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, @@ -193,6 +217,41 @@ int StagePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* da READ_ENTITY_PROPERTY(PROP_STAGE_ALTITUDE, float, _altitude); READ_ENTITY_PROPERTY(PROP_STAGE_DAY, quint16, _day); READ_ENTITY_PROPERTY(PROP_STAGE_HOUR, float, _hour); + READ_ENTITY_PROPERTY(PROP_STAGE_AUTOMATIC_HOURDAY, bool, _automaticHourDay); return bytesRead; } + +static const float TOTAL_LONGITUDES = 360.0f; +static const float HOURS_PER_DAY = 24; +static const float SECONDS_PER_DAY = 60 * 60 * HOURS_PER_DAY; +static const float MSECS_PER_DAY = SECONDS_PER_DAY * MSECS_PER_SECOND; + +float StagePropertyGroup::calculateHour() const { + if (!_automaticHourDay) { + return _hour; + } + + QDateTime utc(QDateTime::currentDateTimeUtc()); + float adjustFromUTC = (_longitude / TOTAL_LONGITUDES); + float offsetFromUTCinMsecs = adjustFromUTC * MSECS_PER_DAY; + int msecsSinceStartOfDay = utc.time().msecsSinceStartOfDay(); + float calutatedHour = ((msecsSinceStartOfDay + offsetFromUTCinMsecs) / MSECS_PER_DAY) * HOURS_PER_DAY; + + // calculate hour based on longitude and time from GMT + return calutatedHour; +} + +uint16_t StagePropertyGroup::calculateDay() const { + + if (!_automaticHourDay) { + return _day; + } + + QDateTime utc(QDateTime::currentDateTimeUtc()); + int calutatedDay = utc.date().dayOfYear(); + + // calculate day based on longitude and time from GMT + return calutatedDay; +} + diff --git a/libraries/entities/src/StagePropertyGroup.h b/libraries/entities/src/StagePropertyGroup.h index 3a1adb1c88..c5df4fe0bd 100644 --- a/libraries/entities/src/StagePropertyGroup.h +++ b/libraries/entities/src/StagePropertyGroup.h @@ -75,6 +75,9 @@ public: static const float DEFAULT_STAGE_ALTITUDE; static const quint16 DEFAULT_STAGE_DAY; static const float DEFAULT_STAGE_HOUR; + + 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); @@ -82,6 +85,7 @@ public: 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); }; #endif // hifi_StagePropertyGroup_h diff --git a/libraries/networking/src/PacketHeaders.cpp b/libraries/networking/src/PacketHeaders.cpp index ec83e18c3d..2fff9c8bb5 100644 --- a/libraries/networking/src/PacketHeaders.cpp +++ b/libraries/networking/src/PacketHeaders.cpp @@ -74,7 +74,7 @@ PacketVersion versionForPacketType(PacketType type) { return 1; case PacketTypeEntityAddOrEdit: case PacketTypeEntityData: - return VERSION_ENTITIES_ZONE_ENTITIES_HAVE_SKYBOX; + return VERSION_ENTITIES_ZONE_ENTITIES_STAGE_HAS_AUTOMATIC_HOURDAY; case PacketTypeEntityErase: return 2; case PacketTypeAudioStreamStats: diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index 38aeed4993..80d32446c8 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -142,5 +142,6 @@ const PacketVersion VERSION_ENTITIES_ZONE_ENTITIES_HAVE_DYNAMIC_SHAPE = 18; const PacketVersion VERSION_ENTITIES_HAVE_NAMES = 19; const PacketVersion VERSION_ENTITIES_ZONE_ENTITIES_HAVE_ATMOSPHERE = 20; const PacketVersion VERSION_ENTITIES_ZONE_ENTITIES_HAVE_SKYBOX = 21; +const PacketVersion VERSION_ENTITIES_ZONE_ENTITIES_STAGE_HAS_AUTOMATIC_HOURDAY = 22; #endif // hifi_PacketHeaders_h From 4b8c6fc624c667cf1a7efa214f8b27be35ab9b43 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 11 May 2015 09:53:23 -0700 Subject: [PATCH 3/5] fix typo --- examples/html/entityProperties.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html index 9cf6a8893f..557a36a799 100644 --- a/examples/html/entityProperties.html +++ b/examples/html/entityProperties.html @@ -1099,7 +1099,7 @@
- Stage Automatice Hour Day + Automatically calculate stage hour and day from location and clock. From cdef09c9dd503ab5e330f26c9bb439216bdc0bc7 Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Mon, 11 May 2015 10:12:03 -0700 Subject: [PATCH 4/5] Add comment (and force previous change to the right branch). --- libraries/networking/src/ResourceCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index c182b9c1d8..0b6e39b151 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -350,7 +350,7 @@ void Resource::maybeRefresh() { QDateTime lastModified = variant.value(); QDateTime lastModifiedOld = metaData.lastModified(); if (lastModified.isValid() && lastModifiedOld.isValid() && - lastModifiedOld >= lastModified) { + lastModifiedOld >= lastModified) { // With >=, cache won't thrash in eventually-consistent cdn. qCDebug(networking) << "Using cached version of" << _url.fileName(); // We don't need to update, return return; From 57f0d9435d6a443caefd94a46c4c90b6dc247039 Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Mon, 11 May 2015 10:17:31 -0700 Subject: [PATCH 5/5] Remove change that doesn't belong in this branch. --- libraries/entities-renderer/src/EntityTreeRenderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index c10d673890..e4c476c6f7 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -142,7 +142,7 @@ QString EntityTreeRenderer::loadScriptContents(const QString& scriptMaybeURLorTe QUrl url(scriptMaybeURLorText); // If the url is not valid, this must be script text... - if (!url.isValid() || scriptMaybeURLorText.startsWith("(")) { + if (!url.isValid()) { isURL = false; return scriptMaybeURLorText; }