This commit is contained in:
Nissim Hadar 2017-09-22 09:48:22 -07:00
parent 953ddfdcd3
commit 5e1d470553
9 changed files with 80 additions and 55 deletions

View file

@ -201,6 +201,13 @@ const std::array<BackgroundPair, BACKGROUND_MODE_ITEM_COUNT> BACKGROUND_MODES =
BackgroundPair { BACKGROUND_MODE_SKYBOX, { "skybox" } }
} };
using HazePair = std::pair<const HazeMode, const QString>;
const std::array<HazePair, HAZE_MODE_ITEM_COUNT> HAZE_MODES = { {
HazePair{ HAZE_MODE_INHERIT,{ "inherit" } },
HazePair{ HAZE_MODE_OFF,{ "off" } },
HazePair{ HAZE_MODE_ON,{ "on" } }
} };
QString EntityItemProperties::getBackgroundModeAsString() const {
return BACKGROUND_MODES[_backgroundMode].second;
}
@ -219,6 +226,10 @@ void EntityItemProperties::setBackgroundModeFromString(const QString& background
}
}
QString EntityItemProperties::getHazeModeString(HazeMode mode) {
return HAZE_MODES[mode].second;
}
EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
EntityPropertyFlags changedProperties;
@ -1039,6 +1050,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_STAGE_SUN_MODEL_ENABLED, Stage, stage, SunModelEnabled, sunModelEnabled);
ADD_GROUP_PROPERTY_TO_MAP(PROP_STAGE_LATITUDE, Stage, stage, Latitude, latitude);
ADD_GROUP_PROPERTY_TO_MAP(PROP_STAGE_LONGITUDE, Stage, stage, Longitude, longitude);

View file

@ -178,6 +178,7 @@ public:
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_REF_ENUM(PROP_HAZE_MODE, HazeMode, hazeMode, HazeMode, HAZE_MODE_INHERIT);
DEFINE_PROPERTY_GROUP(Stage, stage, StagePropertyGroup);
DEFINE_PROPERTY_GROUP(Skybox, skybox, SkyboxPropertyGroup);
DEFINE_PROPERTY_GROUP(Haze, haze, HazePropertyGroup);
@ -230,6 +231,7 @@ public:
DEFINE_PROPERTY_REF(PROP_SERVER_SCRIPTS, ServerScripts, serverScripts, QString, ENTITY_ITEM_DEFAULT_SERVER_SCRIPTS);
static QString getBackgroundModeString(BackgroundMode mode);
static QString getHazeModeString(HazeMode mode);
public:
@ -430,6 +432,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) {
DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusFinish, radiusFinish, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, HazeMode, hazeMode, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, VoxelVolumeSize, voxelVolumeSize, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, VoxelData, voxelData, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, VoxelSurfaceStyle, voxelSurfaceStyle, "");

View file

@ -219,10 +219,10 @@ 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_SKYBOX_COLOR = PROP_ANIMATION_URL,
PROP_SKYBOX_URL = PROP_ANIMATION_FPS,
PROP_HAZE_COLOR = PROP_ANIMATION_URL,
PROP_HAZE_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

View file

@ -15,36 +15,27 @@
#include "EntityItemProperties.h"
#include "EntityItemPropertiesMacros.h"
const xColor HazePropertyGroup::DEFAULT_COLOR = { 0, 0, 0 };
void HazePropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const {
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_HAZE_COLOR, Haze, haze, Color, color);
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_HAZE_URL, Haze, haze, URL, url);
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_HAZE_HAZE_ACTIVE, Haze, haze, HazeActive, hazeActive);
}
void HazePropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) {
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(haze, color, xColor, setColor);
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(haze, url, QString, setURL);
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(haze, hazeActive, bool, setHazeActive);
}
void HazePropertyGroup::merge(const HazePropertyGroup& other) {
COPY_PROPERTY_IF_CHANGED(color);
COPY_PROPERTY_IF_CHANGED(url);
COPY_PROPERTY_IF_CHANGED(hazeActive);
}
void HazePropertyGroup::debugDump() const {
qCDebug(entities) << " HazePropertyGroup: ---------------------------------------------";
qCDebug(entities) << " Color:" << getColor() << " has changed:" << colorChanged();
qCDebug(entities) << " URL:" << getURL() << " has changed:" << urlChanged();
qCDebug(entities) << " HazeActive :" << getHazeActive() << " has changed:" << hazeActiveChanged();
}
void HazePropertyGroup::listChangedProperties(QList<QString>& out) {
if (colorChanged()) {
out << "haze-color";
}
if (urlChanged()) {
out << "haze-url";
if (hazeActiveChanged()) {
out << "haze-hazeActive";
}
}
@ -57,8 +48,7 @@ bool HazePropertyGroup::appendToEditPacket(OctreePacketData* packetData,
bool successPropertyFits = true;
APPEND_ENTITY_PROPERTY(PROP_HAZE_COLOR, getColor());
APPEND_ENTITY_PROPERTY(PROP_HAZE_URL, getURL());
APPEND_ENTITY_PROPERTY(PROP_HAZE_HAZE_ACTIVE, getHazeActive());
return true;
}
@ -70,11 +60,9 @@ bool HazePropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags,
bool overwriteLocalData = true;
bool somethingChanged = false;
READ_ENTITY_PROPERTY(PROP_HAZE_COLOR, xColor, setColor);
READ_ENTITY_PROPERTY(PROP_HAZE_URL, QString, setURL);
READ_ENTITY_PROPERTY(PROP_HAZE_HAZE_ACTIVE, bool, setHazeActive);
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_HAZE_COLOR, Color);
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_HAZE_URL, URL);
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_HAZE_HAZE_ACTIVE, HazeActive);
processedBytes += bytesRead;
@ -84,29 +72,25 @@ bool HazePropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags,
}
void HazePropertyGroup::markAllChanged() {
_colorChanged = true;
_urlChanged = true;
_hazeActiveChanged = true;
}
EntityPropertyFlags HazePropertyGroup::getChangedProperties() const {
EntityPropertyFlags changedProperties;
CHECK_PROPERTY_CHANGE(PROP_HAZE_COLOR, color);
CHECK_PROPERTY_CHANGE(PROP_HAZE_URL, url);
CHECK_PROPERTY_CHANGE(PROP_HAZE_HAZE_ACTIVE, hazeActive);
return changedProperties;
}
void HazePropertyGroup::getProperties(EntityItemProperties& properties) const {
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Haze, Color, getColor);
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Haze, URL, getURL);
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Haze, HazeActive, getHazeActive);
}
bool HazePropertyGroup::setProperties(const EntityItemProperties& properties) {
bool somethingChanged = false;
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Haze, Color, color, setColor);
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Haze, URL, url, setURL);
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Haze, HazeActive, hazeActive, setHazeActive);
return somethingChanged;
}
@ -114,8 +98,7 @@ bool HazePropertyGroup::setProperties(const EntityItemProperties& properties) {
EntityPropertyFlags HazePropertyGroup::getEntityProperties(EncodeBitstreamParams& params) const {
EntityPropertyFlags requestedProperties;
requestedProperties += PROP_HAZE_COLOR;
requestedProperties += PROP_HAZE_URL;
requestedProperties += PROP_HAZE_HAZE_ACTIVE;
return requestedProperties;
}
@ -130,8 +113,7 @@ void HazePropertyGroup::appendSubclassData(OctreePacketData* packetData, EncodeB
bool successPropertyFits = true;
APPEND_ENTITY_PROPERTY(PROP_HAZE_COLOR, getColor());
APPEND_ENTITY_PROPERTY(PROP_HAZE_URL, getURL());
APPEND_ENTITY_PROPERTY(PROP_HAZE_HAZE_ACTIVE, getHazeActive());
}
int HazePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
@ -142,8 +124,7 @@ int HazePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* dat
int bytesRead = 0;
const unsigned char* dataAt = data;
READ_ENTITY_PROPERTY(PROP_HAZE_COLOR, xColor, setColor);
READ_ENTITY_PROPERTY(PROP_HAZE_URL, QString, setURL);
READ_ENTITY_PROPERTY(PROP_HAZE_HAZE_ACTIVE, bool, setHazeActive);
return bytesRead;
}

View file

@ -74,17 +74,7 @@ public:
EntityPropertyFlags& propertyFlags, bool overwriteLocalData,
bool& somethingChanged) override;
glm::vec3 getColorVec3() const {
const quint8 MAX_COLOR = 255;
glm::vec3 color = { (float)_color.red / (float)MAX_COLOR,
(float)_color.green / (float)MAX_COLOR,
(float)_color.blue / (float)MAX_COLOR };
return color;
}
static const xColor DEFAULT_COLOR;
DEFINE_PROPERTY_REF(PROP_HAZE_COLOR, Color, color, xColor, DEFAULT_COLOR);
DEFINE_PROPERTY_REF(PROP_HAZE_URL, URL, url, QString, "");
DEFINE_PROPERTY(PROP_HAZE_HAZE_ACTIVE, HazeActive, hazeActive, bool, false);
};
#endif // hifi_HazePropertyGroup_h

View file

@ -44,6 +44,7 @@ ZoneEntityItem::ZoneEntityItem(const EntityItemID& entityItemID) : EntityItem(en
_compoundShapeURL = DEFAULT_COMPOUND_SHAPE_URL;
_backgroundMode = BACKGROUND_MODE_INHERIT;
_hazeMode = HAZE_MODE_OFF;
}
EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredProperties) const {
@ -59,11 +60,15 @@ EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredPr
COPY_ENTITY_PROPERTY_TO_PROPERTIES(shapeType, getShapeType);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(compoundShapeURL, getCompoundShapeURL);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(backgroundMode, getBackgroundMode);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(hazeMode, getHazeMode);
// Contains a QString property, must be synchronized
withReadLock([&] {
_skyboxProperties.getProperties(properties);
});
withReadLock([&] {
_hazeProperties.getProperties(properties);
});
COPY_ENTITY_PROPERTY_TO_PROPERTIES(flyingAllowed, getFlyingAllowed);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(ghostingAllowed, getGhostingAllowed);
@ -112,8 +117,11 @@ bool ZoneEntityItem::setSubClassProperties(const EntityItemProperties& propertie
withWriteLock([&] {
_skyboxPropertiesChanged = _skyboxProperties.setProperties(properties);
});
withWriteLock([&] {
_hazePropertiesChanged = _hazeProperties.setProperties(properties);
});
somethingChanged = somethingChanged || _keyLightPropertiesChanged || _stagePropertiesChanged || _skyboxPropertiesChanged;
somethingChanged = somethingChanged || _keyLightPropertiesChanged || _stagePropertiesChanged || _skyboxPropertiesChanged || _hazePropertiesChanged;
return somethingChanged;
}
@ -154,6 +162,15 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data,
bytesRead += bytesFromSkybox;
dataAt += bytesFromSkybox;
int bytesFromHaze;
withWriteLock([&] {
bytesFromHaze = _hazeProperties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args,
propertyFlags, overwriteLocalData, _hazePropertiesChanged);
});
somethingChanged = somethingChanged || _hazePropertiesChanged;
bytesRead += bytesFromHaze;
dataAt += bytesFromHaze;
READ_ENTITY_PROPERTY(PROP_FLYING_ALLOWED, bool, setFlyingAllowed);
READ_ENTITY_PROPERTY(PROP_GHOSTING_ALLOWED, bool, setGhostingAllowed);
READ_ENTITY_PROPERTY(PROP_FILTER_URL, QString, setFilterURL);
@ -178,7 +195,9 @@ EntityPropertyFlags ZoneEntityItem::getEntityProperties(EncodeBitstreamParams& p
withReadLock([&] {
requestedProperties += _skyboxProperties.getEntityProperties(params);
});
withReadLock([&] {
requestedProperties += _hazeProperties.getEntityProperties(params);
});
requestedProperties += PROP_FLYING_ALLOWED;
requestedProperties += PROP_GHOSTING_ALLOWED;
requestedProperties += PROP_FILTER_URL;
@ -208,7 +227,10 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits
APPEND_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, (uint32_t)getBackgroundMode()); // could this be a uint16??
_skyboxProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties,
propertyFlags, propertiesDidntFit, propertyCount, appendState);
propertyFlags, propertiesDidntFit, propertyCount, appendState);
_hazeProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties,
propertyFlags, propertiesDidntFit, propertyCount, appendState);
APPEND_ENTITY_PROPERTY(PROP_FLYING_ALLOWED, getFlyingAllowed());
APPEND_ENTITY_PROPERTY(PROP_GHOSTING_ALLOWED, getGhostingAllowed());
@ -226,6 +248,7 @@ void ZoneEntityItem::debugDump() const {
_keyLightProperties.debugDump();
_stageProperties.debugDump();
_skyboxProperties.debugDump();
_hazeProperties.debugDump();
}
ShapeType ZoneEntityItem::getShapeType() const {
@ -291,5 +314,6 @@ void ZoneEntityItem::resetRenderingPropertiesChanged() {
_backgroundPropertiesChanged = false;
_stagePropertiesChanged = false;
_skyboxPropertiesChanged = false;
_hazePropertiesChanged = false;
});
}

View file

@ -13,12 +13,12 @@
#define hifi_HazeMode_h
enum HazeMode {
HAZE_MODE_OFF,
HAZE_MODE_ON,
HAZE_MODE_INHERIT,
HAZE_MODE_SKYBOX,
HAZE_MODE_ITEM_COUNT,
HAZE_MODE_ITEM_COUNT
};
#endif // hifi_HazeMode_h

View file

@ -543,6 +543,15 @@
<input type="text" id="property-zone-key-ambient-url">
</div>
</fieldset>
<fieldset class="minor">
<legend class="sub-section-header zone-group zone-section haze-section">
Haze
</legend>
<div class="zone-group zone-section haze-section property checkbox">
<input type="checkbox" id="property-zone-haze-haze-active">
<label for="property-zone-haze-haze-active">Haze Active</label>
</div>
</fieldset>
<fieldset class="minor">
<legend class="sub-section-header zone-group zone-section stage-section">
Stage

View file

@ -657,6 +657,8 @@ function loaded() {
var elZoneKeyLightDirectionZ = document.getElementById("property-zone-key-light-direction-z");
var elZoneKeyLightAmbientURL = document.getElementById("property-zone-key-ambient-url");
var elZoneHazeActive = document.getElementById("property-zone-haze-haze-active");
var elZoneStageLatitude = document.getElementById("property-zone-stage-latitude");
var elZoneStageLongitude = document.getElementById("property-zone-stage-longitude");
var elZoneStageAltitude = document.getElementById("property-zone-stage-altitude");
@ -975,6 +977,7 @@ function loaded() {
elZoneKeyLightDirectionY.value = properties.keyLight.direction.y.toFixed(2);
elZoneKeyLightAmbientURL.value = properties.keyLight.ambientURL;
elZoneHazeActive.checked = properties.haze.hazeActive;
elZoneStageLatitude.value = properties.stage.latitude.toFixed(2);
elZoneStageLongitude.value = properties.stage.longitude.toFixed(2);
@ -1370,6 +1373,8 @@ function loaded() {
elZoneKeyLightDirectionX.addEventListener('change', zoneKeyLightDirectionChangeFunction);
elZoneKeyLightDirectionY.addEventListener('change', zoneKeyLightDirectionChangeFunction);
elZoneHazeActive.addEventListener('change', createEmitGroupCheckedPropertyUpdateFunction('haze', 'hazeActive'));
elZoneStageLatitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage', 'latitude'));
elZoneStageLongitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage', 'longitude'));
elZoneStageAltitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage', 'altitude'));