Before replacing "Haze Active" checkbox with "Haze Mode" combo.

This commit is contained in:
Nissim Hadar 2017-09-24 14:06:00 -07:00
parent c4419fede8
commit 678b4e35b1
11 changed files with 74 additions and 16 deletions

View file

@ -319,7 +319,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) {
// should never fall in here when collision model not fully loaded // should never fall in here when collision model not fully loaded
// hence we assert that all geometries exist and are loaded // hence we assert that all geometries exist and are loaded
assert(_model && _model->isLoaded() && _compoundShapeResource && _compoundShapeResource->isLoaded()); ////assert(_model && _model->isLoaded() && _compoundShapeResource && _compoundShapeResource->isLoaded());
const FBXGeometry& collisionGeometry = _compoundShapeResource->getFBXGeometry(); const FBXGeometry& collisionGeometry = _compoundShapeResource->getFBXGeometry();
ShapeInfo::PointCollection& pointCollection = shapeInfo.getPointCollection(); ShapeInfo::PointCollection& pointCollection = shapeInfo.getPointCollection();
@ -408,7 +408,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) {
shapeInfo.setParams(type, dimensions, getCompoundShapeURL()); shapeInfo.setParams(type, dimensions, getCompoundShapeURL());
} else if (type >= SHAPE_TYPE_SIMPLE_HULL && type <= SHAPE_TYPE_STATIC_MESH) { } else if (type >= SHAPE_TYPE_SIMPLE_HULL && type <= SHAPE_TYPE_STATIC_MESH) {
// should never fall in here when model not fully loaded // should never fall in here when model not fully loaded
assert(_model && _model->isLoaded()); ////assert(_model && _model->isLoaded());
updateModelBounds(); updateModelBounds();
model->updateGeometry(); model->updateGeometry();

View file

@ -211,9 +211,14 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen
if (sunChanged || skyboxChanged) { if (sunChanged || skyboxChanged) {
updateKeyAmbientFromEntity(); updateKeyAmbientFromEntity();
} }
if (backgroundChanged || skyboxChanged) { if (backgroundChanged || skyboxChanged) {
updateKeyBackgroundFromEntity(entity); updateKeyBackgroundFromEntity(entity);
} }
if (hazeChanged) {
updateHazeFromEntity(entity);
}
} }
void ZoneEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) { void ZoneEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) {
@ -300,9 +305,16 @@ void ZoneEntityRenderer::updateKeyAmbientFromEntity() {
} }
} }
void ZoneEntityRenderer::updateHazeFromEntity(const TypedEntityPointer& entity) {
const auto& haze = editHaze();
haze->setIsHazeActive(entity->getHazeMode() == HAZE_MODE_ON);
}
void ZoneEntityRenderer::updateKeyBackgroundFromEntity(const TypedEntityPointer& entity) { void ZoneEntityRenderer::updateKeyBackgroundFromEntity(const TypedEntityPointer& entity) {
editBackground(); editBackground();
setBackgroundMode(entity->getBackgroundMode()); setBackgroundMode(entity->getBackgroundMode());
setHazeMode(entity->getHazeMode());
setSkyboxColor(_skyboxProperties.getColorVec3()); setSkyboxColor(_skyboxProperties.getColorVec3());
setProceduralUserData(entity->getUserData()); setProceduralUserData(entity->getUserData());
setSkyboxURL(_skyboxProperties.getURL()); setSkyboxURL(_skyboxProperties.getURL());
@ -409,6 +421,9 @@ void ZoneEntityRenderer::updateSkyboxMap() {
void ZoneEntityRenderer::setBackgroundMode(BackgroundMode mode) { void ZoneEntityRenderer::setBackgroundMode(BackgroundMode mode) {
_backgroundMode = mode; _backgroundMode = mode;
} }
void ZoneEntityRenderer::setHazeMode(HazeMode mode) {
_hazeMode = mode;
}
void ZoneEntityRenderer::setSkyboxColor(const glm::vec3& color) { void ZoneEntityRenderer::setSkyboxColor(const glm::vec3& color) {
editSkybox()->setColor(color); editSkybox()->setColor(color);

View file

@ -45,12 +45,14 @@ private:
void updateKeyZoneItemFromEntity(); void updateKeyZoneItemFromEntity();
void updateKeySunFromEntity(); void updateKeySunFromEntity();
void updateKeyAmbientFromEntity(); void updateKeyAmbientFromEntity();
void updateHazeFromEntity(const TypedEntityPointer& entity);
void updateKeyBackgroundFromEntity(const TypedEntityPointer& entity); void updateKeyBackgroundFromEntity(const TypedEntityPointer& entity);
void updateAmbientMap(); void updateAmbientMap();
void updateSkyboxMap(); void updateSkyboxMap();
void setAmbientURL(const QString& ambientUrl); void setAmbientURL(const QString& ambientUrl);
void setSkyboxURL(const QString& skyboxUrl); void setSkyboxURL(const QString& skyboxUrl);
void setBackgroundMode(BackgroundMode mode); void setBackgroundMode(BackgroundMode mode);
void setHazeMode(HazeMode mode);
void setSkyboxColor(const glm::vec3& color); void setSkyboxColor(const glm::vec3& color);
void setProceduralUserData(const QString& userData); void setProceduralUserData(const QString& userData);
@ -78,6 +80,7 @@ private:
const model::LightPointer _ambientLight{ std::make_shared<model::Light>() }; const model::LightPointer _ambientLight{ std::make_shared<model::Light>() };
const model::SunSkyStagePointer _background{ std::make_shared<model::SunSkyStage>() }; const model::SunSkyStagePointer _background{ std::make_shared<model::SunSkyStage>() };
BackgroundMode _backgroundMode{ BACKGROUND_MODE_INHERIT }; BackgroundMode _backgroundMode{ BACKGROUND_MODE_INHERIT };
HazeMode _hazeMode{ HAZE_MODE_INHERIT };
indexed_container::Index _sunIndex{ LightStage::INVALID_INDEX }; indexed_container::Index _sunIndex{ LightStage::INVALID_INDEX };
indexed_container::Index _ambientIndex{ LightStage::INVALID_INDEX }; indexed_container::Index _ambientIndex{ LightStage::INVALID_INDEX };

View file

@ -227,9 +227,22 @@ void EntityItemProperties::setBackgroundModeFromString(const QString& background
} }
} }
QString EntityItemProperties::getHazeModeAsString() const {
return HAZE_MODES[_hazeMode].second;
}
QString EntityItemProperties::getHazeModeString(HazeMode mode) { QString EntityItemProperties::getHazeModeString(HazeMode mode) {
return HAZE_MODES[mode].second; return HAZE_MODES[mode].second;
} }
void EntityItemProperties::setHazeModeFromString(const QString& hazeMode) {
auto result = std::find_if(HAZE_MODES.begin(), HAZE_MODES.end(), [&](const HazePair& pair) {
return (pair.second == hazeMode);
});
if (result != HAZE_MODES.end()) {
_hazeMode = result->first;
_hazeModeChanged = true;
}
}
EntityPropertyFlags EntityItemProperties::getChangedProperties() const { EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
EntityPropertyFlags changedProperties; EntityPropertyFlags changedProperties;

View file

@ -1,5 +1,5 @@
// //
// KeyLightPropertyGroup.h // KeyLightPropertyGroup.cpp
// libraries/entities/src // libraries/entities/src
// //
// Created by Sam Gateau on 2015/10/23. // Created by Sam Gateau on 2015/10/23.

View file

@ -44,7 +44,7 @@ ZoneEntityItem::ZoneEntityItem(const EntityItemID& entityItemID) : EntityItem(en
_compoundShapeURL = DEFAULT_COMPOUND_SHAPE_URL; _compoundShapeURL = DEFAULT_COMPOUND_SHAPE_URL;
_backgroundMode = BACKGROUND_MODE_INHERIT; _backgroundMode = BACKGROUND_MODE_INHERIT;
_hazeMode = HAZE_MODE_OFF; _hazeMode = HAZE_MODE_INHERIT;
} }
EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredProperties) const { EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredProperties) const {
@ -66,9 +66,8 @@ EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredPr
withReadLock([&] { withReadLock([&] {
_skyboxProperties.getProperties(properties); _skyboxProperties.getProperties(properties);
}); });
withReadLock([&] {
_hazeProperties.getProperties(properties); _hazeProperties.getProperties(properties);
});
COPY_ENTITY_PROPERTY_TO_PROPERTIES(flyingAllowed, getFlyingAllowed); COPY_ENTITY_PROPERTY_TO_PROPERTIES(flyingAllowed, getFlyingAllowed);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(ghostingAllowed, getGhostingAllowed); COPY_ENTITY_PROPERTY_TO_PROPERTIES(ghostingAllowed, getGhostingAllowed);
@ -108,6 +107,7 @@ bool ZoneEntityItem::setSubClassProperties(const EntityItemProperties& propertie
SET_ENTITY_PROPERTY_FROM_PROPERTIES(shapeType, setShapeType); SET_ENTITY_PROPERTY_FROM_PROPERTIES(shapeType, setShapeType);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(compoundShapeURL, setCompoundShapeURL); SET_ENTITY_PROPERTY_FROM_PROPERTIES(compoundShapeURL, setCompoundShapeURL);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(backgroundMode, setBackgroundMode); SET_ENTITY_PROPERTY_FROM_PROPERTIES(backgroundMode, setBackgroundMode);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(hazeMode, setHazeMode);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(flyingAllowed, setFlyingAllowed); SET_ENTITY_PROPERTY_FROM_PROPERTIES(flyingAllowed, setFlyingAllowed);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(ghostingAllowed, setGhostingAllowed); SET_ENTITY_PROPERTY_FROM_PROPERTIES(ghostingAllowed, setGhostingAllowed);
@ -117,9 +117,8 @@ bool ZoneEntityItem::setSubClassProperties(const EntityItemProperties& propertie
withWriteLock([&] { withWriteLock([&] {
_skyboxPropertiesChanged = _skyboxProperties.setProperties(properties); _skyboxPropertiesChanged = _skyboxProperties.setProperties(properties);
}); });
withWriteLock([&] {
_hazePropertiesChanged = _hazeProperties.setProperties(properties); _hazePropertiesChanged = _hazeProperties.setProperties(properties);
});
somethingChanged = somethingChanged || _keyLightPropertiesChanged || _stagePropertiesChanged || _skyboxPropertiesChanged || _hazePropertiesChanged; somethingChanged = somethingChanged || _keyLightPropertiesChanged || _stagePropertiesChanged || _skyboxPropertiesChanged || _hazePropertiesChanged;
@ -152,6 +151,7 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data,
READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, setShapeType); READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, setShapeType);
READ_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, QString, setCompoundShapeURL); READ_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, QString, setCompoundShapeURL);
READ_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, BackgroundMode, setBackgroundMode); READ_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, BackgroundMode, setBackgroundMode);
READ_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, HazeMode, setHazeMode);
int bytesFromSkybox; int bytesFromSkybox;
withWriteLock([&] { withWriteLock([&] {

View file

@ -139,7 +139,8 @@ const float NUM_HOURS_PER_HALF_DAY = NUM_HOURS_PER_DAY * 0.5f;
SunSkyStage::SunSkyStage() : SunSkyStage::SunSkyStage() :
_sunLight(std::make_shared<Light>()), _sunLight(std::make_shared<Light>()),
_skybox(std::make_shared<Skybox>()) _skybox(std::make_shared<Skybox>()),
_haze(std::make_shared<Haze>())
{ {
_sunLight->setType(Light::SUN); _sunLight->setType(Light::SUN);
// Default ambient sphere (for lack of skybox) // Default ambient sphere (for lack of skybox)

View file

@ -177,21 +177,21 @@ public:
// Haze // Haze
enum HazeMode { enum HazeMode {
NO_HAZE, HAZE_OFF,
YES_HAZE, HAZE_ON,
NUM_HAZE_MODES NUM_HAZE_MODES
}; };
void setHazeMode(HazeMode mode); void setHazeMode(HazeMode mode);
HazeMode gethazeMode() const { return _hazeMode; } HazeMode getHazeMode() const { return _hazeMode; }
void setHaze(const HazePointer& haze); void setHaze(const HazePointer& haze);
const HazePointer& getHaze() const { valid(); return _haze; } const HazePointer& getHaze() const { valid(); return _haze; }
protected: protected:
BackgroundMode _backgroundMode = SKY_DEFAULT; BackgroundMode _backgroundMode = SKY_DEFAULT;
HazeMode _hazeMode = NO_HAZE; HazeMode _hazeMode = HAZE_OFF;
LightPointer _sunLight; LightPointer _sunLight;
mutable SkyboxPointer _skybox; mutable SkyboxPointer _skybox;

View file

@ -259,6 +259,7 @@ public:
static int unpackDataFromBytes(const unsigned char* dataBytes, glm::quat& result) { int bytes = unpackOrientationQuatFromBytes(dataBytes, result); return bytes; } static int unpackDataFromBytes(const unsigned char* dataBytes, glm::quat& result) { int bytes = unpackOrientationQuatFromBytes(dataBytes, result); return bytes; }
static int unpackDataFromBytes(const unsigned char* dataBytes, ShapeType& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } static int unpackDataFromBytes(const unsigned char* dataBytes, ShapeType& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); }
static int unpackDataFromBytes(const unsigned char* dataBytes, BackgroundMode& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } static int unpackDataFromBytes(const unsigned char* dataBytes, BackgroundMode& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); }
static int unpackDataFromBytes(const unsigned char* dataBytes, HazeMode& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); }
static int unpackDataFromBytes(const unsigned char* dataBytes, QString& result); static int unpackDataFromBytes(const unsigned char* dataBytes, QString& result);
static int unpackDataFromBytes(const unsigned char* dataBytes, QUuid& result); static int unpackDataFromBytes(const unsigned char* dataBytes, QUuid& result);
static int unpackDataFromBytes(const unsigned char* dataBytes, xColor& result); static int unpackDataFromBytes(const unsigned char* dataBytes, xColor& result);

View file

@ -113,7 +113,8 @@ bool SceneScripting::Stage::isSunModelEnabled() const {
void SceneScripting::Stage::setBackgroundMode(const QString& mode) { void SceneScripting::Stage::setBackgroundMode(const QString& mode) {
if (mode == QString("inherit")) { if (mode == QString("inherit")) {
_skyStage->setBackgroundMode(model::SunSkyStage::NO_BACKGROUND); _skyStage->setBackgroundMode(model::SunSkyStage::NO_BACKGROUND);
} else if (mode == QString("skybox")) { }
else if (mode == QString("skybox")) {
_skyStage->setBackgroundMode(model::SunSkyStage::SKY_BOX); _skyStage->setBackgroundMode(model::SunSkyStage::SKY_BOX);
} }
} }
@ -129,6 +130,26 @@ QString SceneScripting::Stage::getBackgroundMode() const {
}; };
} }
void SceneScripting::Stage::setHazeMode(const QString& mode) {
if (mode == QString("haze off")) {
_skyStage->setHazeMode(model::SunSkyStage::HAZE_OFF);
}
else if (mode == QString("haze on")) {
_skyStage->setHazeMode(model::SunSkyStage::HAZE_ON);
}
}
QString SceneScripting::Stage::getHazeMode() const {
switch (_skyStage->getHazeMode()) {
case model::SunSkyStage::HAZE_OFF:
return QString("haze off");
case model::SunSkyStage::HAZE_ON:
return QString("haze on");
default:
return QString("inherit");
};
}
SceneScriptingInterface::SceneScriptingInterface() : _stage{ new SceneScripting::Stage{ _skyStage } } { SceneScriptingInterface::SceneScriptingInterface() : _stage{ new SceneScripting::Stage{ _skyStage } } {
// Let's make sure the sunSkyStage is using a proceduralSkybox // Let's make sure the sunSkyStage is using a proceduralSkybox
_skyStage->setSkybox(model::SkyboxPointer(new ProceduralSkybox())); _skyStage->setSkybox(model::SkyboxPointer(new ProceduralSkybox()));

View file

@ -121,6 +121,10 @@ namespace SceneScripting {
void setBackgroundMode(const QString& mode); void setBackgroundMode(const QString& mode);
QString getBackgroundMode() const; QString getBackgroundMode() const;
Q_PROPERTY(QString hazeMode READ getHazeMode WRITE setHazeMode)
void setHazeMode(const QString& mode);
QString getHazeMode() const;
protected: protected:
model::SunSkyStagePointer _skyStage; model::SunSkyStagePointer _skyStage;
LocationPointer _location; LocationPointer _location;