mirror of
https://github.com/overte-org/overte.git
synced 2025-04-23 13:53:30 +02:00
Merge branch 'keylightInheritance' of https://github.com/NissimHadar/hifi into keylightInheritance
This commit is contained in:
commit
9e5eba4d3a
20 changed files with 1080 additions and 192 deletions
libraries
entities-renderer/src
entities/src
AmbientLightPropertyGroup.cppAmbientLightPropertyGroup.hEntityItemProperties.cppEntityItemProperties.hEntityPropertyFlags.hEntityTree.cppKeyLightPropertyGroup.cppKeyLightPropertyGroup.hZoneEntityItem.cppZoneEntityItem.h
networking/src/udt
render-utils/src
scripts
|
@ -145,10 +145,8 @@ void ZoneEntityRenderer::doRender(RenderArgs* args) {
|
|||
updateSkyboxMap();
|
||||
|
||||
if (_needBackgroundUpdate) {
|
||||
if (BackgroundStage::isIndexInvalid(_backgroundIndex)) {
|
||||
if (_skyboxMode == COMPONENT_MODE_ENABLED && BackgroundStage::isIndexInvalid(_backgroundIndex)) {
|
||||
_backgroundIndex = _backgroundStage->addBackground(_background);
|
||||
} else {
|
||||
|
||||
}
|
||||
_needBackgroundUpdate = false;
|
||||
}
|
||||
|
@ -164,20 +162,27 @@ void ZoneEntityRenderer::doRender(RenderArgs* args) {
|
|||
}
|
||||
|
||||
if (_visible) {
|
||||
// FInally, push the light visible in the frame
|
||||
// THe directional key light for sure
|
||||
_stage->_currentFrame.pushSunLight(_sunIndex);
|
||||
|
||||
// The ambient light only if it has a valid texture to render with
|
||||
if (_validAmbientTexture || _validSkyboxTexture) {
|
||||
_stage->_currentFrame.pushAmbientLight(_ambientIndex);
|
||||
// Finally, push the light visible in the frame
|
||||
if (_keyLightMode == COMPONENT_MODE_DISABLED) {
|
||||
_stage->_currentFrame.pushSunLight(_stage->getSunOffLight());
|
||||
} else if (_keyLightMode == COMPONENT_MODE_ENABLED) {
|
||||
_stage->_currentFrame.pushSunLight(_sunIndex);
|
||||
}
|
||||
|
||||
// The background only if the mode is not inherit
|
||||
if (_backgroundMode != BACKGROUND_MODE_INHERIT) {
|
||||
if (_skyboxMode == COMPONENT_MODE_DISABLED) {
|
||||
_backgroundStage->_currentFrame.pushBackground(INVALID_INDEX);
|
||||
} else if (_skyboxMode == COMPONENT_MODE_ENABLED) {
|
||||
_backgroundStage->_currentFrame.pushBackground(_backgroundIndex);
|
||||
}
|
||||
|
||||
// The ambient light only if it has a valid texture to render with
|
||||
if (_ambientLightMode == COMPONENT_MODE_DISABLED) {
|
||||
_stage->_currentFrame.pushAmbientLight(_stage->getAmbientOffLight());
|
||||
} else if (_ambientLightMode == COMPONENT_MODE_ENABLED) {
|
||||
_stage->_currentFrame.pushAmbientLight(_ambientIndex);
|
||||
}
|
||||
|
||||
// Haze only if the mode is not inherit
|
||||
if (_hazeMode != COMPONENT_MODE_INHERIT) {
|
||||
_hazeStage->_currentFrame.pushHaze(_hazeIndex);
|
||||
|
@ -194,13 +199,13 @@ void ZoneEntityRenderer::removeFromScene(const ScenePointer& scene, Transaction&
|
|||
Parent::removeFromScene(scene, transaction);
|
||||
}
|
||||
|
||||
|
||||
void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) {
|
||||
DependencyManager::get<EntityTreeRenderer>()->updateZone(entity->getID());
|
||||
|
||||
// FIXME one of the bools here could become true between being fetched and being reset,
|
||||
// resulting in a lost update
|
||||
bool sunChanged = entity->keyLightPropertiesChanged();
|
||||
bool keyLightChanged = entity->keyLightPropertiesChanged();
|
||||
bool ambientLightChanged = entity->ambientLightPropertiesChanged();
|
||||
bool backgroundChanged = entity->backgroundPropertiesChanged();
|
||||
bool skyboxChanged = entity->skyboxPropertiesChanged();
|
||||
bool hazeChanged = entity->hazePropertiesChanged();
|
||||
|
@ -211,6 +216,7 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen
|
|||
_lastDimensions = entity->getScaledDimensions();
|
||||
|
||||
_keyLightProperties = entity->getKeyLightProperties();
|
||||
_ambientLightProperties = entity->getAmbientLightProperties();
|
||||
_skyboxProperties = entity->getSkyboxProperties();
|
||||
_hazeProperties = entity->getHazeProperties();
|
||||
_stageProperties = entity->getStageProperties();
|
||||
|
@ -236,12 +242,12 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen
|
|||
|
||||
updateKeyZoneItemFromEntity();
|
||||
|
||||
if (sunChanged) {
|
||||
updateKeySunFromEntity();
|
||||
if (keyLightChanged) {
|
||||
updateKeySunFromEntity(entity);
|
||||
}
|
||||
|
||||
if (sunChanged || skyboxChanged) {
|
||||
updateKeyAmbientFromEntity();
|
||||
if (ambientLightChanged) {
|
||||
updateAmbientLightFromEntity(entity);
|
||||
}
|
||||
|
||||
if (backgroundChanged || skyboxChanged) {
|
||||
|
@ -267,9 +273,11 @@ ItemKey ZoneEntityRenderer::getKey() {
|
|||
|
||||
bool ZoneEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPointer& entity) const {
|
||||
if (entity->keyLightPropertiesChanged() ||
|
||||
entity->ambientLightPropertiesChanged() ||
|
||||
entity->backgroundPropertiesChanged() ||
|
||||
entity->hazePropertiesChanged() ||
|
||||
entity->skyboxPropertiesChanged()) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -310,7 +318,9 @@ bool ZoneEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPoint
|
|||
return false;
|
||||
}
|
||||
|
||||
void ZoneEntityRenderer::updateKeySunFromEntity() {
|
||||
void ZoneEntityRenderer::updateKeySunFromEntity(const TypedEntityPointer& entity) {
|
||||
setKeyLightMode((ComponentMode)entity->getKeyLightMode());
|
||||
|
||||
const auto& sunLight = editSunLight();
|
||||
sunLight->setType(model::Light::SUN);
|
||||
sunLight->setPosition(_lastPosition);
|
||||
|
@ -322,20 +332,22 @@ void ZoneEntityRenderer::updateKeySunFromEntity() {
|
|||
sunLight->setDirection(_keyLightProperties.getDirection());
|
||||
}
|
||||
|
||||
void ZoneEntityRenderer::updateKeyAmbientFromEntity() {
|
||||
void ZoneEntityRenderer::updateAmbientLightFromEntity(const TypedEntityPointer& entity) {
|
||||
setAmbientLightMode((ComponentMode)entity->getAmbientLightMode());
|
||||
|
||||
const auto& ambientLight = editAmbientLight();
|
||||
ambientLight->setType(model::Light::AMBIENT);
|
||||
ambientLight->setPosition(_lastPosition);
|
||||
ambientLight->setOrientation(_lastRotation);
|
||||
|
||||
|
||||
// Set the keylight
|
||||
ambientLight->setAmbientIntensity(_keyLightProperties.getAmbientIntensity());
|
||||
// Set the ambient light
|
||||
ambientLight->setAmbientIntensity(_ambientLightProperties.getAmbientIntensity());
|
||||
|
||||
if (_keyLightProperties.getAmbientURL().isEmpty()) {
|
||||
if (_ambientLightProperties.getAmbientURL().isEmpty()) {
|
||||
setAmbientURL(_skyboxProperties.getURL());
|
||||
} else {
|
||||
setAmbientURL(_keyLightProperties.getAmbientURL());
|
||||
setAmbientURL(_ambientLightProperties.getAmbientURL());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -370,8 +382,9 @@ void ZoneEntityRenderer::updateHazeFromEntity(const TypedEntityPointer& entity)
|
|||
}
|
||||
|
||||
void ZoneEntityRenderer::updateKeyBackgroundFromEntity(const TypedEntityPointer& entity) {
|
||||
setSkyboxMode((ComponentMode)entity->getSkyboxMode());
|
||||
|
||||
editBackground();
|
||||
setBackgroundMode(entity->getBackgroundMode());
|
||||
setSkyboxColor(_skyboxProperties.getColorVec3());
|
||||
setProceduralUserData(entity->getUserData());
|
||||
setSkyboxURL(_skyboxProperties.getURL());
|
||||
|
@ -483,6 +496,18 @@ void ZoneEntityRenderer::setHazeMode(ComponentMode mode) {
|
|||
_hazeMode = mode;
|
||||
}
|
||||
|
||||
void ZoneEntityRenderer::setKeyLightMode(ComponentMode mode) {
|
||||
_keyLightMode = mode;
|
||||
}
|
||||
|
||||
void ZoneEntityRenderer::setAmbientLightMode(ComponentMode mode) {
|
||||
_ambientLightMode = mode;
|
||||
}
|
||||
|
||||
void ZoneEntityRenderer::setSkyboxMode(ComponentMode mode) {
|
||||
_skyboxMode = mode;
|
||||
}
|
||||
|
||||
void ZoneEntityRenderer::setSkyboxColor(const glm::vec3& color) {
|
||||
editSkybox()->setColor(color);
|
||||
}
|
||||
|
|
|
@ -46,8 +46,8 @@ protected:
|
|||
|
||||
private:
|
||||
void updateKeyZoneItemFromEntity();
|
||||
void updateKeySunFromEntity();
|
||||
void updateKeyAmbientFromEntity();
|
||||
void updateKeySunFromEntity(const TypedEntityPointer& entity);
|
||||
void updateAmbientLightFromEntity(const TypedEntityPointer& entity);
|
||||
void updateHazeFromEntity(const TypedEntityPointer& entity);
|
||||
void updateKeyBackgroundFromEntity(const TypedEntityPointer& entity);
|
||||
void updateAmbientMap();
|
||||
|
@ -55,7 +55,12 @@ private:
|
|||
void setAmbientURL(const QString& ambientUrl);
|
||||
void setSkyboxURL(const QString& skyboxUrl);
|
||||
void setBackgroundMode(BackgroundMode mode);
|
||||
|
||||
void setHazeMode(ComponentMode mode);
|
||||
void setKeyLightMode(ComponentMode mode);
|
||||
void setAmbientLightMode(ComponentMode mode);
|
||||
void setSkyboxMode(ComponentMode mode);
|
||||
|
||||
void setSkyboxColor(const glm::vec3& color);
|
||||
void setProceduralUserData(const QString& userData);
|
||||
|
||||
|
@ -85,7 +90,11 @@ private:
|
|||
const model::HazePointer _haze{ std::make_shared<model::Haze>() };
|
||||
|
||||
BackgroundMode _backgroundMode{ BACKGROUND_MODE_INHERIT };
|
||||
ComponentMode _hazeMode{ COMPONENT_MODE_INHERIT };
|
||||
|
||||
ComponentMode _keyLightMode { COMPONENT_MODE_INHERIT };
|
||||
ComponentMode _ambientLightMode { COMPONENT_MODE_INHERIT };
|
||||
ComponentMode _skyboxMode { COMPONENT_MODE_INHERIT };
|
||||
ComponentMode _hazeMode { COMPONENT_MODE_INHERIT };
|
||||
|
||||
indexed_container::Index _sunIndex{ LightStage::INVALID_INDEX };
|
||||
indexed_container::Index _shadowIndex{ LightStage::INVALID_INDEX };
|
||||
|
@ -104,6 +113,7 @@ private:
|
|||
bool _needHazeUpdate{ true };
|
||||
|
||||
KeyLightPropertyGroup _keyLightProperties;
|
||||
AmbientLightPropertyGroup _ambientLightProperties;
|
||||
HazePropertyGroup _hazeProperties;
|
||||
StagePropertyGroup _stageProperties;
|
||||
SkyboxPropertyGroup _skyboxProperties;
|
||||
|
|
155
libraries/entities/src/AmbientLightPropertyGroup.cpp
Normal file
155
libraries/entities/src/AmbientLightPropertyGroup.cpp
Normal file
|
@ -0,0 +1,155 @@
|
|||
//
|
||||
// AmbientLightPropertyGroup.cpp
|
||||
// libraries/entities/src
|
||||
//
|
||||
// Created by Nissim Hadar on 2017/12/24.
|
||||
// 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 "AmbientLightPropertyGroup.h"
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <OctreePacketData.h>
|
||||
|
||||
#include "EntityItemProperties.h"
|
||||
#include "EntityItemPropertiesMacros.h"
|
||||
|
||||
const float AmbientLightPropertyGroup::DEFAULT_AMBIENT_LIGHT_INTENSITY = 0.5f;
|
||||
|
||||
void AmbientLightPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties,
|
||||
QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const {
|
||||
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_AMBIENT_LIGHT_INTENSITY, AmbientLight, ambientLight, AmbientIntensity, ambientIntensity);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_AMBIENT_LIGHT_URL, AmbientLight, ambientLight, AmbientURL, ambientURL);
|
||||
}
|
||||
|
||||
void AmbientLightPropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) {
|
||||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(ambientLight, ambientIntensity, float, setAmbientIntensity);
|
||||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(ambientLight, ambientURL, QString, setAmbientURL);
|
||||
|
||||
// legacy property support
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(ambientLightAmbientIntensity, float, setAmbientIntensity, getAmbientIntensity);
|
||||
}
|
||||
|
||||
void AmbientLightPropertyGroup::merge(const AmbientLightPropertyGroup& other) {
|
||||
COPY_PROPERTY_IF_CHANGED(ambientIntensity);
|
||||
COPY_PROPERTY_IF_CHANGED(ambientURL);
|
||||
}
|
||||
|
||||
void AmbientLightPropertyGroup::debugDump() const {
|
||||
qCDebug(entities) << " AmbientLightPropertyGroup: ---------------------------------------------";
|
||||
qCDebug(entities) << " ambientIntensity:" << getAmbientIntensity();
|
||||
qCDebug(entities) << " ambientURL:" << getAmbientURL();
|
||||
}
|
||||
|
||||
void AmbientLightPropertyGroup::listChangedProperties(QList<QString>& out) {
|
||||
if (ambientIntensityChanged()) {
|
||||
out << "ambientLight-ambientIntensity";
|
||||
}
|
||||
if (ambientURLChanged()) {
|
||||
out << "ambientLight-ambientURL";
|
||||
}
|
||||
}
|
||||
|
||||
bool AmbientLightPropertyGroup::appendToEditPacket(OctreePacketData* packetData,
|
||||
EntityPropertyFlags& requestedProperties,
|
||||
EntityPropertyFlags& propertyFlags,
|
||||
EntityPropertyFlags& propertiesDidntFit,
|
||||
int& propertyCount,
|
||||
OctreeElement::AppendState& appendState) const {
|
||||
|
||||
bool successPropertyFits = true;
|
||||
|
||||
APPEND_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_INTENSITY, getAmbientIntensity());
|
||||
APPEND_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_URL, getAmbientURL());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AmbientLightPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags, const unsigned char*& dataAt,
|
||||
int& processedBytes) {
|
||||
|
||||
int bytesRead = 0;
|
||||
bool overwriteLocalData = true;
|
||||
bool somethingChanged = false;
|
||||
|
||||
READ_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_INTENSITY, float, setAmbientIntensity);
|
||||
READ_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_URL, QString, setAmbientURL);
|
||||
|
||||
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_AMBIENT_LIGHT_INTENSITY, AmbientIntensity);
|
||||
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_AMBIENT_LIGHT_URL, AmbientURL);
|
||||
|
||||
processedBytes += bytesRead;
|
||||
|
||||
Q_UNUSED(somethingChanged);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void AmbientLightPropertyGroup::markAllChanged() {
|
||||
_ambientIntensityChanged = true;
|
||||
_ambientURLChanged = true;
|
||||
}
|
||||
|
||||
EntityPropertyFlags AmbientLightPropertyGroup::getChangedProperties() const {
|
||||
EntityPropertyFlags changedProperties;
|
||||
|
||||
CHECK_PROPERTY_CHANGE(PROP_AMBIENT_LIGHT_INTENSITY, ambientIntensity);
|
||||
CHECK_PROPERTY_CHANGE(PROP_AMBIENT_LIGHT_URL, ambientURL);
|
||||
|
||||
return changedProperties;
|
||||
}
|
||||
|
||||
void AmbientLightPropertyGroup::getProperties(EntityItemProperties& properties) const {
|
||||
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(AmbientLight, AmbientIntensity, getAmbientIntensity);
|
||||
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(AmbientLight, AmbientURL, getAmbientURL);
|
||||
}
|
||||
|
||||
bool AmbientLightPropertyGroup::setProperties(const EntityItemProperties& properties) {
|
||||
bool somethingChanged = false;
|
||||
|
||||
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(AmbientLight, AmbientIntensity, ambientIntensity, setAmbientIntensity);
|
||||
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(AmbientLight, AmbientURL, ambientURL, setAmbientURL);
|
||||
|
||||
return somethingChanged;
|
||||
}
|
||||
|
||||
EntityPropertyFlags AmbientLightPropertyGroup::getEntityProperties(EncodeBitstreamParams& params) const {
|
||||
EntityPropertyFlags requestedProperties;
|
||||
|
||||
requestedProperties += PROP_AMBIENT_LIGHT_INTENSITY;
|
||||
requestedProperties += PROP_AMBIENT_LIGHT_URL;
|
||||
|
||||
return requestedProperties;
|
||||
}
|
||||
|
||||
void AmbientLightPropertyGroup::appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params,
|
||||
EntityTreeElementExtraEncodeDataPointer entityTreeElementExtraEncodeData,
|
||||
EntityPropertyFlags& requestedProperties,
|
||||
EntityPropertyFlags& propertyFlags,
|
||||
EntityPropertyFlags& propertiesDidntFit,
|
||||
int& propertyCount,
|
||||
OctreeElement::AppendState& appendState) const {
|
||||
|
||||
bool successPropertyFits = true;
|
||||
|
||||
APPEND_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_INTENSITY, getAmbientIntensity());
|
||||
APPEND_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_URL, getAmbientURL());
|
||||
}
|
||||
|
||||
int AmbientLightPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
|
||||
ReadBitstreamToTreeParams& args,
|
||||
EntityPropertyFlags& propertyFlags, bool overwriteLocalData,
|
||||
bool& somethingChanged) {
|
||||
|
||||
int bytesRead = 0;
|
||||
const unsigned char* dataAt = data;
|
||||
|
||||
READ_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_INTENSITY, float, setAmbientIntensity);
|
||||
READ_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_URL, QString, setAmbientURL);
|
||||
|
||||
return bytesRead;
|
||||
}
|
83
libraries/entities/src/AmbientLightPropertyGroup.h
Normal file
83
libraries/entities/src/AmbientLightPropertyGroup.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
//
|
||||
// AmbientLightPropertyGroup.h
|
||||
// libraries/entities/src
|
||||
//
|
||||
// Created by Nissim Hadar on 2017/12/24.
|
||||
// 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_AmbientLightPropertyGroup_h
|
||||
#define hifi_AmbientLightPropertyGroup_h
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
#include <QtScript/QScriptEngine>
|
||||
#include "EntityItemPropertiesMacros.h"
|
||||
#include "PropertyGroup.h"
|
||||
|
||||
class EntityItemProperties;
|
||||
class EncodeBitstreamParams;
|
||||
class OctreePacketData;
|
||||
class EntityTreeElementExtraEncodeData;
|
||||
class ReadBitstreamToTreeParams;
|
||||
|
||||
class AmbientLightPropertyGroup : public PropertyGroup {
|
||||
public:
|
||||
// EntityItemProperty related helpers
|
||||
virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties,
|
||||
QScriptEngine* engine, bool skipDefaults,
|
||||
EntityItemProperties& defaultEntityProperties) const override;
|
||||
virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) override;
|
||||
|
||||
void merge(const AmbientLightPropertyGroup& other);
|
||||
|
||||
virtual void debugDump() const override;
|
||||
virtual void listChangedProperties(QList<QString>& out) override;
|
||||
|
||||
virtual bool appendToEditPacket(OctreePacketData* packetData,
|
||||
EntityPropertyFlags& requestedProperties,
|
||||
EntityPropertyFlags& propertyFlags,
|
||||
EntityPropertyFlags& propertiesDidntFit,
|
||||
int& propertyCount,
|
||||
OctreeElement::AppendState& appendState) const override;
|
||||
|
||||
virtual bool decodeFromEditPacket(EntityPropertyFlags& propertyFlags,
|
||||
const unsigned char*& dataAt, int& processedBytes) override;
|
||||
virtual void markAllChanged() override;
|
||||
virtual EntityPropertyFlags getChangedProperties() const override;
|
||||
|
||||
// EntityItem related helpers
|
||||
// methods for getting/setting all properties of an entity
|
||||
virtual void getProperties(EntityItemProperties& propertiesOut) const override;
|
||||
|
||||
/// returns true if something changed
|
||||
virtual bool setProperties(const EntityItemProperties& properties) override;
|
||||
|
||||
virtual EntityPropertyFlags getEntityProperties(EncodeBitstreamParams& params) const override;
|
||||
|
||||
virtual void appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params,
|
||||
EntityTreeElementExtraEncodeDataPointer entityTreeElementExtraEncodeData,
|
||||
EntityPropertyFlags& requestedProperties,
|
||||
EntityPropertyFlags& propertyFlags,
|
||||
EntityPropertyFlags& propertiesDidntFit,
|
||||
int& propertyCount,
|
||||
OctreeElement::AppendState& appendState) const override;
|
||||
|
||||
virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
|
||||
ReadBitstreamToTreeParams& args,
|
||||
EntityPropertyFlags& propertyFlags, bool overwriteLocalData,
|
||||
bool& somethingChanged) override;
|
||||
|
||||
static const float DEFAULT_AMBIENT_LIGHT_INTENSITY;
|
||||
|
||||
DEFINE_PROPERTY(PROP_AMBIENT_LIGHT_INTENSITY, AmbientIntensity, ambientIntensity, float, DEFAULT_AMBIENT_LIGHT_INTENSITY);
|
||||
DEFINE_PROPERTY_REF(PROP_AMBIENT_LIGHT_URL, AmbientURL, ambientURL, QString, "");
|
||||
};
|
||||
|
||||
#endif // hifi_AmbientLightPropertyGroup_h
|
|
@ -35,6 +35,7 @@ SkyboxPropertyGroup EntityItemProperties::_staticSkybox;
|
|||
HazePropertyGroup EntityItemProperties::_staticHaze;
|
||||
StagePropertyGroup EntityItemProperties::_staticStage;
|
||||
KeyLightPropertyGroup EntityItemProperties::_staticKeyLight;
|
||||
AmbientLightPropertyGroup EntityItemProperties::_staticAmbientLight;
|
||||
|
||||
EntityPropertyList PROP_LAST_ITEM = (EntityPropertyList)(PROP_AFTER_LAST_ITEM - 1);
|
||||
|
||||
|
@ -79,6 +80,7 @@ void EntityItemProperties::debugDump() const {
|
|||
getSkybox().debugDump();
|
||||
getHaze().debugDump();
|
||||
getKeyLight().debugDump();
|
||||
getAmbientLight().debugDump();
|
||||
|
||||
qCDebug(entities) << " changed properties...";
|
||||
EntityPropertyFlags props = getChangedProperties();
|
||||
|
@ -206,23 +208,21 @@ void EntityItemProperties::setBackgroundModeFromString(const QString& background
|
|||
}
|
||||
}
|
||||
|
||||
using ComponentPair = std::pair<const ComponentMode, const QString>;
|
||||
const std::array<ComponentPair, COMPONENT_MODE_ITEM_COUNT> COMPONENT_MODES = { {
|
||||
ComponentPair{ COMPONENT_MODE_INHERIT,{ "inherit" } },
|
||||
ComponentPair{ COMPONENT_MODE_DISABLED,{ "disabled" } },
|
||||
ComponentPair{ COMPONENT_MODE_ENABLED,{ "enabled" } }
|
||||
} };
|
||||
|
||||
QString EntityItemProperties::getHazeModeAsString() const {
|
||||
// return "inherit" if _hazeMode is not valid
|
||||
if (_hazeMode < COMPONENT_MODE_ITEM_COUNT) {
|
||||
return COMPONENT_MODES[_hazeMode].second;
|
||||
QString EntityItemProperties::getComponentModeAsString(uint32_t mode) {
|
||||
// return "inherit" if mode is not valid
|
||||
if (mode < COMPONENT_MODE_ITEM_COUNT) {
|
||||
return COMPONENT_MODES[mode].second;
|
||||
} else {
|
||||
return COMPONENT_MODES[COMPONENT_MODE_INHERIT].second;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QString EntityItemProperties::getHazeModeString(uint32_t mode) {
|
||||
QString EntityItemProperties::getHazeModeAsString() const {
|
||||
return getComponentModeAsString(_hazeMode);
|
||||
}
|
||||
|
||||
QString EntityItemProperties::getComponentModeString(uint32_t mode) {
|
||||
// return "inherit" if mode is not valid
|
||||
if (mode < COMPONENT_MODE_ITEM_COUNT) {
|
||||
return COMPONENT_MODES[mode].second;
|
||||
|
@ -231,10 +231,14 @@ QString EntityItemProperties::getHazeModeString(uint32_t mode) {
|
|||
}
|
||||
}
|
||||
|
||||
void EntityItemProperties::setHazeModeFromString(const QString& hazeMode) {
|
||||
auto result = std::find_if(COMPONENT_MODES.begin(), COMPONENT_MODES.end(), [&](const ComponentPair& pair) {
|
||||
return (pair.second == hazeMode);
|
||||
std::array<ComponentPair, COMPONENT_MODE_ITEM_COUNT>::const_iterator EntityItemProperties::findComponent(const QString& mode) {
|
||||
return std::find_if(COMPONENT_MODES.begin(), COMPONENT_MODES.end(), [&](const ComponentPair& pair) {
|
||||
return (pair.second == mode);
|
||||
});
|
||||
}
|
||||
|
||||
void EntityItemProperties::setHazeModeFromString(const QString& hazeMode) {
|
||||
auto result = findComponent(hazeMode);
|
||||
|
||||
if (result != COMPONENT_MODES.end()) {
|
||||
_hazeMode = result->first;
|
||||
|
@ -242,6 +246,45 @@ void EntityItemProperties::setHazeModeFromString(const QString& hazeMode) {
|
|||
}
|
||||
}
|
||||
|
||||
QString EntityItemProperties::getKeyLightModeAsString() const {
|
||||
return getComponentModeAsString(_keyLightMode);
|
||||
}
|
||||
|
||||
void EntityItemProperties::setKeyLightModeFromString(const QString& keyLightMode) {
|
||||
auto result = findComponent(keyLightMode);
|
||||
|
||||
if (result != COMPONENT_MODES.end()) {
|
||||
_keyLightMode = result->first;
|
||||
_keyLightModeChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
QString EntityItemProperties::getAmbientLightModeAsString() const {
|
||||
return getComponentModeAsString(_ambientLightMode);
|
||||
}
|
||||
|
||||
void EntityItemProperties::setAmbientLightModeFromString(const QString& ambientLightMode) {
|
||||
auto result = findComponent(ambientLightMode);
|
||||
|
||||
if (result != COMPONENT_MODES.end()) {
|
||||
_ambientLightMode = result->first;
|
||||
_ambientLightModeChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
QString EntityItemProperties::getSkyboxModeAsString() const {
|
||||
return getComponentModeAsString(_skyboxMode);
|
||||
}
|
||||
|
||||
void EntityItemProperties::setSkyboxModeFromString(const QString& skyboxMode) {
|
||||
auto result = findComponent(skyboxMode);
|
||||
|
||||
if (result != COMPONENT_MODES.end()) {
|
||||
_skyboxMode = result->first;
|
||||
_skyboxModeChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
|
||||
EntityPropertyFlags changedProperties;
|
||||
|
||||
|
@ -330,6 +373,9 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
|
|||
CHECK_PROPERTY_CHANGE(PROP_BACKGROUND_MODE, backgroundMode);
|
||||
|
||||
CHECK_PROPERTY_CHANGE(PROP_HAZE_MODE, hazeMode);
|
||||
CHECK_PROPERTY_CHANGE(PROP_KEY_LIGHT_MODE, keyLightMode);
|
||||
CHECK_PROPERTY_CHANGE(PROP_AMBIENT_LIGHT_MODE, ambientLightMode);
|
||||
CHECK_PROPERTY_CHANGE(PROP_SKYBOX_MODE, skyboxMode);
|
||||
|
||||
CHECK_PROPERTY_CHANGE(PROP_SOURCE_URL, sourceUrl);
|
||||
CHECK_PROPERTY_CHANGE(PROP_VOXEL_VOLUME_SIZE, voxelVolumeSize);
|
||||
|
@ -379,6 +425,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
|
|||
|
||||
changedProperties += _animation.getChangedProperties();
|
||||
changedProperties += _keyLight.getChangedProperties();
|
||||
changedProperties += _ambientLight.getChangedProperties();
|
||||
changedProperties += _skybox.getChangedProperties();
|
||||
changedProperties += _stage.getChangedProperties();
|
||||
changedProperties += _haze.getChangedProperties();
|
||||
|
@ -553,6 +600,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
|
|||
// Zones only
|
||||
if (_type == EntityTypes::Zone) {
|
||||
_keyLight.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties);
|
||||
_ambientLight.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties);
|
||||
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_BACKGROUND_MODE, backgroundMode, getBackgroundModeAsString());
|
||||
|
||||
|
@ -565,6 +613,10 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
|
|||
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_HAZE_MODE, hazeMode, getHazeModeAsString());
|
||||
_haze.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties);
|
||||
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_KEY_LIGHT_MODE, keyLightMode, getKeyLightModeAsString());
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_AMBIENT_LIGHT_MODE, ambientLightMode, getAmbientLightModeAsString());
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_SKYBOX_MODE, skyboxMode, getSkyboxModeAsString());
|
||||
}
|
||||
|
||||
// Web only
|
||||
|
@ -752,8 +804,10 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
|
|||
COPY_PROPERTY_FROM_QSCRIPTVALUE(collisionSoundURL, QString, setCollisionSoundURL);
|
||||
|
||||
COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(backgroundMode, BackgroundMode);
|
||||
|
||||
COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(hazeMode, HazeMode);
|
||||
COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(keyLightMode, KeyLightMode);
|
||||
COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(ambientLightMode, AmbientLightMode);
|
||||
COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(skyboxMode, SkyboxMode);
|
||||
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(sourceUrl, QString, setSourceUrl);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(voxelVolumeSize, glmVec3, setVoxelVolumeSize);
|
||||
|
@ -783,6 +837,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
|
|||
|
||||
_animation.copyFromScriptValue(object, _defaultSettings);
|
||||
_keyLight.copyFromScriptValue(object, _defaultSettings);
|
||||
_ambientLight.copyFromScriptValue(object, _defaultSettings);
|
||||
_skybox.copyFromScriptValue(object, _defaultSettings);
|
||||
_stage.copyFromScriptValue(object, _defaultSettings);
|
||||
_haze.copyFromScriptValue(object, _defaultSettings);
|
||||
|
@ -911,8 +966,10 @@ void EntityItemProperties::merge(const EntityItemProperties& other) {
|
|||
COPY_PROPERTY_IF_CHANGED(collisionSoundURL);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(backgroundMode);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(hazeMode);
|
||||
COPY_PROPERTY_IF_CHANGED(keyLightMode);
|
||||
COPY_PROPERTY_IF_CHANGED(ambientLightMode);
|
||||
COPY_PROPERTY_IF_CHANGED(skyboxMode);
|
||||
|
||||
COPY_PROPERTY_IF_CHANGED(sourceUrl);
|
||||
COPY_PROPERTY_IF_CHANGED(voxelVolumeSize);
|
||||
|
@ -932,6 +989,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) {
|
|||
|
||||
_animation.merge(other._animation);
|
||||
_keyLight.merge(other._keyLight);
|
||||
_ambientLight.merge(other._ambientLight);
|
||||
_skybox.merge(other._skybox);
|
||||
_stage.merge(other._stage);
|
||||
_haze.merge(other._haze);
|
||||
|
@ -1101,7 +1159,6 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue
|
|||
|
||||
ADD_PROPERTY_TO_MAP(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor);
|
||||
ADD_PROPERTY_TO_MAP(PROP_KEYLIGHT_INTENSITY, KeyLightIntensity, keyLightIntensity, float);
|
||||
ADD_PROPERTY_TO_MAP(PROP_KEYLIGHT_AMBIENT_INTENSITY, KeyLightAmbientIntensity, keyLightAmbientIntensity, float);
|
||||
ADD_PROPERTY_TO_MAP(PROP_KEYLIGHT_DIRECTION, KeyLightDirection, keyLightDirection, glm::vec3);
|
||||
ADD_PROPERTY_TO_MAP(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, glm::vec3);
|
||||
ADD_PROPERTY_TO_MAP(PROP_VOXEL_DATA, VoxelData, voxelData, QByteArray);
|
||||
|
@ -1188,6 +1245,10 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue
|
|||
ADD_GROUP_PROPERTY_TO_MAP(PROP_HAZE_KEYLIGHT_RANGE, Haze, haze, HazeKeyLightRange, hazeKeyLightRange);
|
||||
ADD_GROUP_PROPERTY_TO_MAP(PROP_HAZE_KEYLIGHT_ALTITUDE, Haze, haze, HazeKeyLightAltitude, hazeKeyLightAltitude);
|
||||
|
||||
ADD_PROPERTY_TO_MAP(PROP_KEY_LIGHT_MODE, KeyLightMode, keyLightMode, uint32_t);
|
||||
ADD_PROPERTY_TO_MAP(PROP_AMBIENT_LIGHT_MODE, AmbientLightMode, ambientLightMode, uint32_t);
|
||||
ADD_PROPERTY_TO_MAP(PROP_SKYBOX_MODE, SkyboxMode, skyboxMode, uint32_t);
|
||||
|
||||
ADD_PROPERTY_TO_MAP(PROP_DPI, DPI, dpi, uint16_t);
|
||||
|
||||
// FIXME - these are not yet handled
|
||||
|
@ -1414,6 +1475,9 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy
|
|||
_staticKeyLight.setProperties(properties);
|
||||
_staticKeyLight.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
||||
_staticAmbientLight.setProperties(properties);
|
||||
_staticAmbientLight.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
||||
_staticStage.setProperties(properties);
|
||||
_staticStage.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
||||
|
@ -1432,6 +1496,10 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy
|
|||
APPEND_ENTITY_PROPERTY(PROP_HAZE_MODE, (uint32_t)properties.getHazeMode());
|
||||
_staticHaze.setProperties(properties);
|
||||
_staticHaze.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEY_LIGHT_MODE, (uint32_t)properties.getKeyLightMode());
|
||||
APPEND_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_MODE, (uint32_t)properties.getAmbientLightMode());
|
||||
APPEND_ENTITY_PROPERTY(PROP_SKYBOX_MODE, (uint32_t)properties.getSkyboxMode());
|
||||
}
|
||||
|
||||
if (properties.getType() == EntityTypes::PolyVox) {
|
||||
|
@ -1768,7 +1836,8 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
|
|||
}
|
||||
|
||||
if (properties.getType() == EntityTypes::Zone) {
|
||||
properties.getKeyLight().decodeFromEditPacket(propertyFlags, dataAt , processedBytes);
|
||||
properties.getKeyLight().decodeFromEditPacket(propertyFlags, dataAt, processedBytes);
|
||||
properties.getAmbientLight().decodeFromEditPacket(propertyFlags, dataAt, processedBytes);
|
||||
properties.getStage().decodeFromEditPacket(propertyFlags, dataAt , processedBytes);
|
||||
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHAPE_TYPE, ShapeType, setShapeType);
|
||||
|
@ -1782,7 +1851,11 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
|
|||
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_HAZE_MODE, uint32_t, setHazeMode);
|
||||
properties.getHaze().decodeFromEditPacket(propertyFlags, dataAt, processedBytes);
|
||||
}
|
||||
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEY_LIGHT_MODE, uint32_t, setKeyLightMode);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_AMBIENT_LIGHT_MODE, uint32_t, setAmbientLightMode);
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SKYBOX_MODE, uint32_t, setSkyboxMode);
|
||||
}
|
||||
|
||||
if (properties.getType() == EntityTypes::PolyVox) {
|
||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_VOXEL_VOLUME_SIZE, glm::vec3, setVoxelVolumeSize);
|
||||
|
@ -2010,6 +2083,8 @@ void EntityItemProperties::markAllChanged() {
|
|||
_staticCertificateVersionChanged = true;
|
||||
|
||||
_keyLight.markAllChanged();
|
||||
_ambientLight.markAllChanged();
|
||||
_skybox.markAllChanged();
|
||||
|
||||
_backgroundModeChanged = true;
|
||||
_hazeModeChanged = true;
|
||||
|
@ -2362,6 +2437,18 @@ QList<QString> EntityItemProperties::listChangedProperties() {
|
|||
out += "hazeMode";
|
||||
}
|
||||
|
||||
if (keyLightModeChanged()) {
|
||||
out += "keyLightMode";
|
||||
}
|
||||
|
||||
if (ambientLightModeChanged()) {
|
||||
out += "ambientLightMode";
|
||||
}
|
||||
|
||||
if (skyboxModeChanged()) {
|
||||
out += "skyboxMode";
|
||||
}
|
||||
|
||||
if (voxelVolumeSizeChanged()) {
|
||||
out += "voxelVolumeSize";
|
||||
}
|
||||
|
@ -2463,6 +2550,7 @@ QList<QString> EntityItemProperties::listChangedProperties() {
|
|||
|
||||
getAnimation().listChangedProperties(out);
|
||||
getKeyLight().listChangedProperties(out);
|
||||
getAmbientLight().listChangedProperties(out);
|
||||
getSkybox().listChangedProperties(out);
|
||||
getStage().listChangedProperties(out);
|
||||
getHaze().listChangedProperties(out);
|
||||
|
|
|
@ -47,6 +47,13 @@
|
|||
|
||||
const quint64 UNKNOWN_CREATED_TIME = 0;
|
||||
|
||||
using ComponentPair = std::pair<const ComponentMode, const QString>;
|
||||
const std::array<ComponentPair, COMPONENT_MODE_ITEM_COUNT> COMPONENT_MODES = { {
|
||||
ComponentPair { COMPONENT_MODE_INHERIT, { "inherit" } },
|
||||
ComponentPair { COMPONENT_MODE_DISABLED, { "disabled" } },
|
||||
ComponentPair { COMPONENT_MODE_ENABLED, { "enabled" } }
|
||||
} };
|
||||
|
||||
/// A collection of properties of an entity item used in the scripting API. Translates between the actual properties of an
|
||||
/// entity and a JavaScript style hash/QScriptValue storing a set of properties. Used in scripting to set/get the complete
|
||||
/// set of entity item properties via JavaScript hashes/QScriptValues
|
||||
|
@ -173,6 +180,7 @@ public:
|
|||
DEFINE_PROPERTY(PROP_RADIUS_FINISH, RadiusFinish, radiusFinish, float, particle::DEFAULT_RADIUS_FINISH);
|
||||
DEFINE_PROPERTY(PROP_EMITTER_SHOULD_TRAIL, EmitterShouldTrail, emitterShouldTrail, bool, particle::DEFAULT_EMITTER_SHOULD_TRAIL);
|
||||
DEFINE_PROPERTY_GROUP(KeyLight, keyLight, KeyLightPropertyGroup);
|
||||
DEFINE_PROPERTY_GROUP(AmbientLight, ambientLight, AmbientLightPropertyGroup);
|
||||
DEFINE_PROPERTY_REF(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, glm::vec3, PolyVoxEntityItem::DEFAULT_VOXEL_VOLUME_SIZE);
|
||||
DEFINE_PROPERTY_REF(PROP_VOXEL_DATA, VoxelData, voxelData, QByteArray, PolyVoxEntityItem::DEFAULT_VOXEL_DATA);
|
||||
DEFINE_PROPERTY_REF(PROP_VOXEL_SURFACE_STYLE, VoxelSurfaceStyle, voxelSurfaceStyle, uint16_t, PolyVoxEntityItem::DEFAULT_VOXEL_SURFACE_STYLE);
|
||||
|
@ -180,6 +188,11 @@ public:
|
|||
DEFINE_PROPERTY_REF_ENUM(PROP_BACKGROUND_MODE, BackgroundMode, backgroundMode, BackgroundMode, BACKGROUND_MODE_INHERIT);
|
||||
DEFINE_PROPERTY_GROUP(Stage, stage, StagePropertyGroup);
|
||||
|
||||
DEFINE_PROPERTY_REF_ENUM(PROP_KEY_LIGHT_MODE, KeyLightMode, keyLightMode, uint32_t, (uint32_t)COMPONENT_MODE_ENABLED);
|
||||
DEFINE_PROPERTY_REF_ENUM(PROP_SKYBOX_MODE, SkyboxMode, skyboxMode, uint32_t, (uint32_t)COMPONENT_MODE_ENABLED);
|
||||
DEFINE_PROPERTY_REF_ENUM(PROP_AMBIENT_LIGHT_MODE, AmbientLightMode, ambientLightMode, uint32_t, (uint32_t)COMPONENT_MODE_ENABLED);
|
||||
|
||||
// This is the default mode for zone creation
|
||||
DEFINE_PROPERTY_REF_ENUM(PROP_HAZE_MODE, HazeMode, hazeMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
||||
|
||||
DEFINE_PROPERTY_GROUP(Skybox, skybox, SkyboxPropertyGroup);
|
||||
|
@ -249,8 +262,11 @@ public:
|
|||
DEFINE_PROPERTY_REF(PROP_SERVER_SCRIPTS, ServerScripts, serverScripts, QString, ENTITY_ITEM_DEFAULT_SERVER_SCRIPTS);
|
||||
|
||||
static QString getBackgroundModeString(BackgroundMode mode);
|
||||
static QString getHazeModeString(uint32_t mode);
|
||||
|
||||
static QString getComponentModeString(uint32_t mode);
|
||||
static QString getComponentModeAsString(uint32_t mode);
|
||||
|
||||
std::array<ComponentPair, COMPONENT_MODE_ITEM_COUNT>::const_iterator findComponent(const QString& mode);
|
||||
|
||||
public:
|
||||
float getMaxDimension() const { return glm::compMax(_dimensions); }
|
||||
|
@ -479,7 +495,12 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) {
|
|||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, StaticCertificateVersion, staticCertificateVersion, "");
|
||||
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, "");
|
||||
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, HazeMode, hazeMode, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, KeyLightMode, keyLightMode, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, AmbientLightMode, ambientLightMode, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, SkyboxMode, skyboxMode, "");
|
||||
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, VoxelVolumeSize, voxelVolumeSize, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, VoxelData, voxelData, "");
|
||||
DEBUG_PROPERTY_IF_CHANGED(debug, properties, VoxelSurfaceStyle, voxelSurfaceStyle, "");
|
||||
|
|
|
@ -220,6 +220,10 @@ enum EntityPropertyList {
|
|||
PROP_HAZE_KEYLIGHT_RANGE,
|
||||
PROP_HAZE_KEYLIGHT_ALTITUDE,
|
||||
|
||||
PROP_KEY_LIGHT_MODE,
|
||||
PROP_AMBIENT_LIGHT_MODE,
|
||||
PROP_SKYBOX_MODE,
|
||||
|
||||
PROP_LOCAL_DIMENSIONS, // only used to convert values to and from scripts
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -243,7 +247,6 @@ enum EntityPropertyList {
|
|||
// the size of the properties bitflags mask
|
||||
PROP_KEYLIGHT_COLOR = PROP_COLOR,
|
||||
PROP_KEYLIGHT_INTENSITY = PROP_INTENSITY,
|
||||
PROP_KEYLIGHT_AMBIENT_INTENSITY = PROP_CUTOFF,
|
||||
PROP_KEYLIGHT_DIRECTION = PROP_EXPONENT,
|
||||
PROP_STAGE_SUN_MODEL_ENABLED = PROP_IS_SPOTLIGHT,
|
||||
PROP_STAGE_LATITUDE = PROP_DIFFUSE_COLOR,
|
||||
|
@ -256,8 +259,10 @@ enum EntityPropertyList {
|
|||
|
||||
PROP_SKYBOX_COLOR = PROP_ANIMATION_URL,
|
||||
PROP_SKYBOX_URL = PROP_ANIMATION_FPS,
|
||||
PROP_KEYLIGHT_AMBIENT_URL = PROP_ANIMATION_PLAYING,
|
||||
|
||||
|
||||
PROP_AMBIENT_LIGHT_INTENSITY = PROP_CUTOFF,
|
||||
PROP_AMBIENT_LIGHT_URL = PROP_ANIMATION_PLAYING,
|
||||
|
||||
// Aliases/Piggyback properties for Web. These properties intentionally reuse the enum values for
|
||||
// other properties which will never overlap with each other.
|
||||
PROP_SOURCE_URL = PROP_MODEL_URL,
|
||||
|
|
|
@ -2281,6 +2281,26 @@ bool EntityTree::readFromMap(QVariantMap& map) {
|
|||
properties.setOwningAvatarID(myNodeID);
|
||||
}
|
||||
|
||||
// TEMPORARY fix for older content not containing these fields in the zones
|
||||
if (properties.getType() == EntityTypes::EntityType::Zone) {
|
||||
if (!entityMap.contains("keyLightMode")) {
|
||||
properties.setKeyLightMode(COMPONENT_MODE_ENABLED);
|
||||
}
|
||||
|
||||
if (!entityMap.contains("skyboxMode")) {
|
||||
if (entityMap.contains("backgroundMode") && properties.getBackgroundModeAsString() == "inherit") {
|
||||
// The content creator has set the combo to NOTHING - this is actually inherit
|
||||
properties.setSkyboxMode(COMPONENT_MODE_INHERIT);
|
||||
} else {
|
||||
properties.setSkyboxMode(COMPONENT_MODE_ENABLED);
|
||||
}
|
||||
}
|
||||
|
||||
if (!entityMap.contains("ambientLightMode")) {
|
||||
properties.setAmbientLightMode(COMPONENT_MODE_ENABLED);
|
||||
}
|
||||
}
|
||||
|
||||
EntityItemPointer entity = addEntity(entityItemID, properties);
|
||||
if (!entity) {
|
||||
qCDebug(entities) << "adding Entity failed:" << entityItemID << properties.getType();
|
||||
|
|
|
@ -17,54 +17,41 @@
|
|||
#include "EntityItemProperties.h"
|
||||
#include "EntityItemPropertiesMacros.h"
|
||||
|
||||
|
||||
const xColor KeyLightPropertyGroup::DEFAULT_KEYLIGHT_COLOR = { 255, 255, 255 };
|
||||
const float KeyLightPropertyGroup::DEFAULT_KEYLIGHT_INTENSITY = 1.0f;
|
||||
const float KeyLightPropertyGroup::DEFAULT_KEYLIGHT_AMBIENT_INTENSITY = 0.5f;
|
||||
const glm::vec3 KeyLightPropertyGroup::DEFAULT_KEYLIGHT_DIRECTION = { 0.0f, -1.0f, 0.0f };
|
||||
|
||||
void KeyLightPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const {
|
||||
|
||||
void KeyLightPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties,
|
||||
QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const {
|
||||
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_COLOR, KeyLight, keyLight, Color, color);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_INTENSITY, KeyLight, keyLight, Intensity, intensity);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_AMBIENT_INTENSITY, KeyLight, keyLight, AmbientIntensity, ambientIntensity);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_DIRECTION, KeyLight, keyLight, Direction, direction);
|
||||
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_AMBIENT_URL, KeyLight, keyLight, AmbientURL, ambientURL);
|
||||
|
||||
}
|
||||
|
||||
void KeyLightPropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) {
|
||||
|
||||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(keyLight, color, xColor, setColor);
|
||||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(keyLight, intensity, float, setIntensity);
|
||||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(keyLight, ambientIntensity, float, setAmbientIntensity);
|
||||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(keyLight, direction, glmVec3, setDirection);
|
||||
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(keyLight, ambientURL, QString, setAmbientURL);
|
||||
|
||||
// legacy property support
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(keyLightColor, xColor, setColor, getColor);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(keyLightIntensity, float, setIntensity, getIntensity);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(keyLightAmbientIntensity, float, setAmbientIntensity, getAmbientIntensity);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(keyLightDirection, glmVec3, setDirection, getDirection);
|
||||
}
|
||||
|
||||
void KeyLightPropertyGroup::merge(const KeyLightPropertyGroup& other) {
|
||||
COPY_PROPERTY_IF_CHANGED(color);
|
||||
COPY_PROPERTY_IF_CHANGED(intensity);
|
||||
COPY_PROPERTY_IF_CHANGED(ambientIntensity);
|
||||
COPY_PROPERTY_IF_CHANGED(direction);
|
||||
COPY_PROPERTY_IF_CHANGED(ambientURL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void KeyLightPropertyGroup::debugDump() const {
|
||||
qCDebug(entities) << " KeyLightPropertyGroup: ---------------------------------------------";
|
||||
qCDebug(entities) << " color:" << getColor(); // << "," << getColor()[1] << "," << getColor()[2];
|
||||
qCDebug(entities) << " intensity:" << getIntensity();
|
||||
qCDebug(entities) << " direction:" << getDirection();
|
||||
qCDebug(entities) << " ambientIntensity:" << getAmbientIntensity();
|
||||
qCDebug(entities) << " ambientURL:" << getAmbientURL();
|
||||
}
|
||||
|
||||
void KeyLightPropertyGroup::listChangedProperties(QList<QString>& out) {
|
||||
|
@ -77,52 +64,39 @@ void KeyLightPropertyGroup::listChangedProperties(QList<QString>& out) {
|
|||
if (directionChanged()) {
|
||||
out << "keyLight-direction";
|
||||
}
|
||||
if (ambientIntensityChanged()) {
|
||||
out << "keyLight-ambientIntensity";
|
||||
}
|
||||
if (ambientURLChanged()) {
|
||||
out << "keyLight-ambientURL";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool KeyLightPropertyGroup::appendToEditPacket(OctreePacketData* packetData,
|
||||
EntityPropertyFlags& requestedProperties,
|
||||
EntityPropertyFlags& propertyFlags,
|
||||
EntityPropertyFlags& propertiesDidntFit,
|
||||
int& propertyCount,
|
||||
OctreeElement::AppendState& appendState) const {
|
||||
EntityPropertyFlags& requestedProperties,
|
||||
EntityPropertyFlags& propertyFlags,
|
||||
EntityPropertyFlags& propertiesDidntFit,
|
||||
int& propertyCount,
|
||||
OctreeElement::AppendState& appendState) const {
|
||||
|
||||
bool successPropertyFits = true;
|
||||
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_COLOR, getColor());
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, getIntensity());
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, getAmbientIntensity());
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, getDirection());
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_URL, getAmbientURL());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool KeyLightPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags, const unsigned char*& dataAt , int& processedBytes) {
|
||||
|
||||
bool KeyLightPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags, const unsigned char*& dataAt,
|
||||
int& processedBytes) {
|
||||
|
||||
int bytesRead = 0;
|
||||
bool overwriteLocalData = true;
|
||||
bool somethingChanged = false;
|
||||
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_COLOR, xColor, setColor);
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, float, setIntensity);
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, float, setAmbientIntensity);
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, glm::vec3, setDirection);
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_URL, QString, setAmbientURL);
|
||||
|
||||
|
||||
|
||||
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_KEYLIGHT_COLOR, Color);
|
||||
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_KEYLIGHT_INTENSITY, Intensity);
|
||||
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_KEYLIGHT_AMBIENT_INTENSITY, AmbientIntensity);
|
||||
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_KEYLIGHT_DIRECTION, Direction);
|
||||
DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_KEYLIGHT_AMBIENT_URL, AmbientURL);
|
||||
|
||||
processedBytes += bytesRead;
|
||||
|
||||
|
@ -134,9 +108,7 @@ bool KeyLightPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFl
|
|||
void KeyLightPropertyGroup::markAllChanged() {
|
||||
_colorChanged = true;
|
||||
_intensityChanged = true;
|
||||
_ambientIntensityChanged = true;
|
||||
_directionChanged = true;
|
||||
_ambientURLChanged = true;
|
||||
}
|
||||
|
||||
EntityPropertyFlags KeyLightPropertyGroup::getChangedProperties() const {
|
||||
|
@ -144,20 +116,15 @@ EntityPropertyFlags KeyLightPropertyGroup::getChangedProperties() const {
|
|||
|
||||
CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_COLOR, color);
|
||||
CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_INTENSITY, intensity);
|
||||
CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_AMBIENT_INTENSITY, ambientIntensity);
|
||||
CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_DIRECTION, direction);
|
||||
CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_AMBIENT_URL, ambientURL);
|
||||
|
||||
return changedProperties;
|
||||
}
|
||||
|
||||
void KeyLightPropertyGroup::getProperties(EntityItemProperties& properties) const {
|
||||
|
||||
void KeyLightPropertyGroup::getProperties(EntityItemProperties& properties) const {
|
||||
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(KeyLight, Color, getColor);
|
||||
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(KeyLight, Intensity, getIntensity);
|
||||
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(KeyLight, AmbientIntensity, getAmbientIntensity);
|
||||
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(KeyLight, Direction, getDirection);
|
||||
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(KeyLight, AmbientURL, getAmbientURL);
|
||||
}
|
||||
|
||||
bool KeyLightPropertyGroup::setProperties(const EntityItemProperties& properties) {
|
||||
|
@ -165,9 +132,7 @@ bool KeyLightPropertyGroup::setProperties(const EntityItemProperties& properties
|
|||
|
||||
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(KeyLight, Color, color, setColor);
|
||||
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(KeyLight, Intensity, intensity, setIntensity);
|
||||
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(KeyLight, AmbientIntensity, ambientIntensity, setAmbientIntensity);
|
||||
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(KeyLight, Direction, direction, setDirection);
|
||||
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(KeyLight, AmbientURL, ambientURL, setAmbientURL);
|
||||
|
||||
return somethingChanged;
|
||||
}
|
||||
|
@ -177,9 +142,7 @@ EntityPropertyFlags KeyLightPropertyGroup::getEntityProperties(EncodeBitstreamPa
|
|||
|
||||
requestedProperties += PROP_KEYLIGHT_COLOR;
|
||||
requestedProperties += PROP_KEYLIGHT_INTENSITY;
|
||||
requestedProperties += PROP_KEYLIGHT_AMBIENT_INTENSITY;
|
||||
requestedProperties += PROP_KEYLIGHT_DIRECTION;
|
||||
requestedProperties += PROP_KEYLIGHT_AMBIENT_URL;
|
||||
|
||||
return requestedProperties;
|
||||
}
|
||||
|
@ -196,9 +159,7 @@ void KeyLightPropertyGroup::appendSubclassData(OctreePacketData* packetData, Enc
|
|||
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_COLOR, getColor());
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, getIntensity());
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, getAmbientIntensity());
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, getDirection());
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_URL, getAmbientURL());
|
||||
}
|
||||
|
||||
int KeyLightPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
|
||||
|
@ -211,9 +172,7 @@ int KeyLightPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char*
|
|||
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_COLOR, xColor, setColor);
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, float, setIntensity);
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, float, setAmbientIntensity);
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, glm::vec3, setDirection);
|
||||
READ_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_URL, QString, setAmbientURL);
|
||||
|
||||
return bytesRead;
|
||||
}
|
||||
|
|
|
@ -81,9 +81,7 @@ public:
|
|||
|
||||
DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, Color, color, xColor, DEFAULT_KEYLIGHT_COLOR);
|
||||
DEFINE_PROPERTY(PROP_KEYLIGHT_INTENSITY, Intensity, intensity, float, DEFAULT_KEYLIGHT_INTENSITY);
|
||||
DEFINE_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, AmbientIntensity, ambientIntensity, float, DEFAULT_KEYLIGHT_AMBIENT_INTENSITY);
|
||||
DEFINE_PROPERTY_REF(PROP_KEYLIGHT_DIRECTION, Direction, direction, glm::vec3, DEFAULT_KEYLIGHT_DIRECTION);
|
||||
DEFINE_PROPERTY_REF(PROP_KEYLIGHT_AMBIENT_URL, AmbientURL, ambientURL, QString, "");
|
||||
};
|
||||
|
||||
#endif // hifi_KeyLightPropertyGroup_h
|
||||
|
|
|
@ -53,12 +53,15 @@ EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredPr
|
|||
withReadLock([&] {
|
||||
_keyLightProperties.getProperties(properties);
|
||||
});
|
||||
|
||||
|
||||
withReadLock([&] {
|
||||
_ambientLightProperties.getProperties(properties);
|
||||
});
|
||||
|
||||
_stageProperties.getProperties(properties);
|
||||
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(shapeType, getShapeType);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(compoundShapeURL, getCompoundShapeURL);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(backgroundMode, getBackgroundMode);
|
||||
|
||||
// Contains a QString property, must be synchronized
|
||||
withReadLock([&] {
|
||||
|
@ -72,6 +75,10 @@ EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredPr
|
|||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(hazeMode, getHazeMode);
|
||||
_hazeProperties.getProperties(properties);
|
||||
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightMode, getKeyLightMode);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(ambientLightMode, getAmbientLightMode);
|
||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(skyboxMode, getSkyboxMode);
|
||||
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
@ -100,12 +107,14 @@ bool ZoneEntityItem::setSubClassProperties(const EntityItemProperties& propertie
|
|||
withWriteLock([&] {
|
||||
_keyLightPropertiesChanged = _keyLightProperties.setProperties(properties);
|
||||
});
|
||||
withWriteLock([&] {
|
||||
_ambientLightPropertiesChanged = _ambientLightProperties.setProperties(properties);
|
||||
});
|
||||
|
||||
_stagePropertiesChanged = _stageProperties.setProperties(properties);
|
||||
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(shapeType, setShapeType);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(compoundShapeURL, setCompoundShapeURL);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(backgroundMode, setBackgroundMode);
|
||||
|
||||
// Contains a QString property, must be synchronized
|
||||
withWriteLock([&] {
|
||||
|
@ -115,11 +124,16 @@ bool ZoneEntityItem::setSubClassProperties(const EntityItemProperties& propertie
|
|||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(flyingAllowed, setFlyingAllowed);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(ghostingAllowed, setGhostingAllowed);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(filterURL, setFilterURL);
|
||||
|
||||
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(hazeMode, setHazeMode);
|
||||
_hazePropertiesChanged = _hazeProperties.setProperties(properties);
|
||||
|
||||
somethingChanged = somethingChanged || _keyLightPropertiesChanged || _stagePropertiesChanged || _skyboxPropertiesChanged || _hazePropertiesChanged;
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(keyLightMode, setKeyLightMode);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(ambientLightMode, setAmbientLightMode);
|
||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(skyboxMode, setSkyboxMode);
|
||||
|
||||
somethingChanged = somethingChanged || _keyLightPropertiesChanged || _ambientLightPropertiesChanged ||
|
||||
_stagePropertiesChanged || _skyboxPropertiesChanged || _hazePropertiesChanged;
|
||||
|
||||
return somethingChanged;
|
||||
}
|
||||
|
@ -141,6 +155,16 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data,
|
|||
bytesRead += bytesFromKeylight;
|
||||
dataAt += bytesFromKeylight;
|
||||
|
||||
int bytesFromAmbientlight;
|
||||
withWriteLock([&] {
|
||||
bytesFromAmbientlight = _ambientLightProperties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args,
|
||||
propertyFlags, overwriteLocalData, _ambientLightPropertiesChanged);
|
||||
});
|
||||
|
||||
somethingChanged = somethingChanged || _ambientLightPropertiesChanged;
|
||||
bytesRead += bytesFromAmbientlight;
|
||||
dataAt += bytesFromAmbientlight;
|
||||
|
||||
int bytesFromStage = _stageProperties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args,
|
||||
propertyFlags, overwriteLocalData, _stagePropertiesChanged);
|
||||
somethingChanged = somethingChanged || _stagePropertiesChanged;
|
||||
|
@ -149,7 +173,6 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data,
|
|||
|
||||
READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, setShapeType);
|
||||
READ_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, QString, setCompoundShapeURL);
|
||||
READ_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, BackgroundMode, setBackgroundMode);
|
||||
|
||||
int bytesFromSkybox;
|
||||
withWriteLock([&] {
|
||||
|
@ -173,6 +196,10 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data,
|
|||
bytesRead += bytesFromHaze;
|
||||
dataAt += bytesFromHaze;
|
||||
|
||||
READ_ENTITY_PROPERTY(PROP_KEY_LIGHT_MODE, uint32_t, setKeyLightMode);
|
||||
READ_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_MODE, uint32_t, setAmbientLightMode);
|
||||
READ_ENTITY_PROPERTY(PROP_SKYBOX_MODE, uint32_t, setSkyboxMode);
|
||||
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
|
@ -185,6 +212,10 @@ EntityPropertyFlags ZoneEntityItem::getEntityProperties(EncodeBitstreamParams& p
|
|||
requestedProperties += _keyLightProperties.getEntityProperties(params);
|
||||
});
|
||||
|
||||
withReadLock([&] {
|
||||
requestedProperties += _ambientLightProperties.getEntityProperties(params);
|
||||
});
|
||||
|
||||
requestedProperties += _stageProperties.getEntityProperties(params);
|
||||
|
||||
requestedProperties += PROP_SHAPE_TYPE;
|
||||
|
@ -202,6 +233,10 @@ EntityPropertyFlags ZoneEntityItem::getEntityProperties(EncodeBitstreamParams& p
|
|||
requestedProperties += PROP_HAZE_MODE;
|
||||
requestedProperties += _hazeProperties.getEntityProperties(params);
|
||||
|
||||
requestedProperties += PROP_KEY_LIGHT_MODE;
|
||||
requestedProperties += PROP_AMBIENT_LIGHT_MODE;
|
||||
requestedProperties += PROP_SKYBOX_MODE;
|
||||
|
||||
return requestedProperties;
|
||||
}
|
||||
|
||||
|
@ -216,15 +251,17 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits
|
|||
bool successPropertyFits = true;
|
||||
|
||||
_keyLightProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties,
|
||||
propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
||||
_ambientLightProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties,
|
||||
propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
||||
_stageProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties,
|
||||
propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
||||
|
||||
APPEND_ENTITY_PROPERTY(PROP_SHAPE_TYPE, (uint32_t)getShapeType());
|
||||
APPEND_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, getCompoundShapeURL());
|
||||
APPEND_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, (uint32_t)getBackgroundMode()); // could this be a uint16??
|
||||
|
||||
_skyboxProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties,
|
||||
propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
@ -236,6 +273,10 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits
|
|||
APPEND_ENTITY_PROPERTY(PROP_HAZE_MODE, (uint32_t)getHazeMode());
|
||||
_hazeProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties,
|
||||
propertyFlags, propertiesDidntFit, propertyCount, appendState);
|
||||
|
||||
APPEND_ENTITY_PROPERTY(PROP_KEY_LIGHT_MODE, (uint32_t)getKeyLightMode());
|
||||
APPEND_ENTITY_PROPERTY(PROP_AMBIENT_LIGHT_MODE, (uint32_t)getAmbientLightMode());
|
||||
APPEND_ENTITY_PROPERTY(PROP_SKYBOX_MODE, (uint32_t)getSkyboxMode());
|
||||
}
|
||||
|
||||
void ZoneEntityItem::debugDump() const {
|
||||
|
@ -245,9 +286,13 @@ void ZoneEntityItem::debugDump() const {
|
|||
qCDebug(entities) << " dimensions:" << debugTreeVector(getScaledDimensions());
|
||||
qCDebug(entities) << " getLastEdited:" << debugTime(getLastEdited(), now);
|
||||
qCDebug(entities) << " _backgroundMode:" << EntityItemProperties::getBackgroundModeString(_backgroundMode);
|
||||
qCDebug(entities) << " _hazeMode:" << EntityItemProperties::getHazeModeString(_hazeMode);
|
||||
qCDebug(entities) << " _hazeMode:" << EntityItemProperties::getComponentModeString(_hazeMode);
|
||||
qCDebug(entities) << " _keyLightMode:" << EntityItemProperties::getComponentModeString(_keyLightMode);
|
||||
qCDebug(entities) << " _ambientLightMode:" << EntityItemProperties::getComponentModeString(_ambientLightMode);
|
||||
qCDebug(entities) << " _skyboxMode:" << EntityItemProperties::getComponentModeString(_skyboxMode);
|
||||
|
||||
_keyLightProperties.debugDump();
|
||||
_ambientLightProperties.debugDump();
|
||||
_skyboxProperties.debugDump();
|
||||
_hazeProperties.debugDump();
|
||||
_stageProperties.debugDump();
|
||||
|
@ -313,6 +358,7 @@ QString ZoneEntityItem::getCompoundShapeURL() const {
|
|||
void ZoneEntityItem::resetRenderingPropertiesChanged() {
|
||||
withWriteLock([&] {
|
||||
_keyLightPropertiesChanged = false;
|
||||
_ambientLightPropertiesChanged = false;
|
||||
_backgroundPropertiesChanged = false;
|
||||
_skyboxPropertiesChanged = false;
|
||||
_hazePropertiesChanged = false;
|
||||
|
@ -330,3 +376,36 @@ void ZoneEntityItem::setHazeMode(const uint32_t value) {
|
|||
uint32_t ZoneEntityItem::getHazeMode() const {
|
||||
return _hazeMode;
|
||||
}
|
||||
|
||||
void ZoneEntityItem::setKeyLightMode(const uint32_t value) {
|
||||
if (value < COMPONENT_MODE_ITEM_COUNT) {
|
||||
_keyLightMode = value;
|
||||
_keyLightPropertiesChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t ZoneEntityItem::getKeyLightMode() const {
|
||||
return _keyLightMode;
|
||||
}
|
||||
|
||||
void ZoneEntityItem::setAmbientLightMode(const uint32_t value) {
|
||||
if (value < COMPONENT_MODE_ITEM_COUNT) {
|
||||
_ambientLightMode = value;
|
||||
_ambientLightPropertiesChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t ZoneEntityItem::getAmbientLightMode() const {
|
||||
return _ambientLightMode;
|
||||
}
|
||||
|
||||
void ZoneEntityItem::setSkyboxMode(const uint32_t value) {
|
||||
if (value < COMPONENT_MODE_ITEM_COUNT) {
|
||||
_skyboxMode = value;
|
||||
_skyboxPropertiesChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t ZoneEntityItem::getSkyboxMode() const {
|
||||
return _skyboxMode;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#define hifi_ZoneEntityItem_h
|
||||
|
||||
#include "KeyLightPropertyGroup.h"
|
||||
#include "AmbientLightPropertyGroup.h"
|
||||
#include "EntityItem.h"
|
||||
#include "EntityTree.h"
|
||||
#include "SkyboxPropertyGroup.h"
|
||||
|
@ -66,13 +67,20 @@ public:
|
|||
virtual void setCompoundShapeURL(const QString& url);
|
||||
|
||||
KeyLightPropertyGroup getKeyLightProperties() const { return resultWithReadLock<KeyLightPropertyGroup>([&] { return _keyLightProperties; }); }
|
||||
|
||||
void setBackgroundMode(BackgroundMode value) { _backgroundMode = value; _backgroundPropertiesChanged = true; }
|
||||
BackgroundMode getBackgroundMode() const { return _backgroundMode; }
|
||||
AmbientLightPropertyGroup getAmbientLightProperties() const { return resultWithReadLock<AmbientLightPropertyGroup>([&] { return _ambientLightProperties; }); }
|
||||
|
||||
void setHazeMode(const uint32_t value);
|
||||
uint32_t getHazeMode() const;
|
||||
|
||||
void setKeyLightMode(uint32_t value);
|
||||
uint32_t getKeyLightMode() const;
|
||||
|
||||
void setAmbientLightMode(uint32_t value);
|
||||
uint32_t getAmbientLightMode() const;
|
||||
|
||||
void setSkyboxMode(uint32_t value);
|
||||
uint32_t getSkyboxMode() const;
|
||||
|
||||
SkyboxPropertyGroup getSkyboxProperties() const { return resultWithReadLock<SkyboxPropertyGroup>([&] { return _skyboxProperties; }); }
|
||||
|
||||
const HazePropertyGroup& getHazeProperties() const { return _hazeProperties; }
|
||||
|
@ -87,6 +95,7 @@ public:
|
|||
void setFilterURL(const QString url);
|
||||
|
||||
bool keyLightPropertiesChanged() const { return _keyLightPropertiesChanged; }
|
||||
bool ambientLightPropertiesChanged() const { return _ambientLightPropertiesChanged; }
|
||||
bool backgroundPropertiesChanged() const { return _backgroundPropertiesChanged; }
|
||||
bool skyboxPropertiesChanged() const { return _skyboxPropertiesChanged; }
|
||||
|
||||
|
@ -112,17 +121,21 @@ public:
|
|||
static const bool DEFAULT_GHOSTING_ALLOWED;
|
||||
static const QString DEFAULT_FILTER_URL;
|
||||
|
||||
static const uint32_t DEFAULT_HAZE_MODE{ (uint32_t)COMPONENT_MODE_INHERIT };
|
||||
|
||||
protected:
|
||||
KeyLightPropertyGroup _keyLightProperties;
|
||||
AmbientLightPropertyGroup _ambientLightProperties;
|
||||
|
||||
ShapeType _shapeType = DEFAULT_SHAPE_TYPE;
|
||||
QString _compoundShapeURL;
|
||||
|
||||
BackgroundMode _backgroundMode = BACKGROUND_MODE_INHERIT;
|
||||
BackgroundMode _backgroundMode { BACKGROUND_MODE_INHERIT };
|
||||
|
||||
// The following 3 values are the defaults for zone creation
|
||||
uint32_t _keyLightMode { COMPONENT_MODE_INHERIT };
|
||||
uint32_t _skyboxMode { COMPONENT_MODE_INHERIT };
|
||||
uint32_t _ambientLightMode { COMPONENT_MODE_INHERIT };
|
||||
|
||||
uint32_t _hazeMode{ DEFAULT_HAZE_MODE };
|
||||
uint32_t _hazeMode { COMPONENT_MODE_INHERIT };
|
||||
|
||||
SkyboxPropertyGroup _skyboxProperties;
|
||||
HazePropertyGroup _hazeProperties;
|
||||
|
@ -134,6 +147,7 @@ protected:
|
|||
|
||||
// Dirty flags turn true when either keylight properties is changing values.
|
||||
bool _keyLightPropertiesChanged { false };
|
||||
bool _ambientLightPropertiesChanged { false };
|
||||
bool _backgroundPropertiesChanged{ false };
|
||||
bool _skyboxPropertiesChanged { false };
|
||||
bool _hazePropertiesChanged{ false };
|
||||
|
|
|
@ -30,7 +30,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
|
|||
case PacketType::EntityEdit:
|
||||
case PacketType::EntityData:
|
||||
case PacketType::EntityPhysics:
|
||||
return static_cast<PacketVersion>(EntityVersion::OwnershipChallengeFix);
|
||||
return static_cast<PacketVersion>(EntityVersion::ZoneLightInheritModes);
|
||||
|
||||
case PacketType::EntityQuery:
|
||||
return static_cast<PacketVersion>(EntityQueryPacketVersion::RemovedJurisdictions);
|
||||
|
|
|
@ -202,6 +202,7 @@ enum class EntityVersion : PacketVersion {
|
|||
HazeEffect,
|
||||
StaticCertJsonVersionOne,
|
||||
OwnershipChallengeFix,
|
||||
ZoneLightInheritModes
|
||||
};
|
||||
|
||||
enum class EntityScriptCallMethodVersion : PacketVersion {
|
||||
|
|
|
@ -28,6 +28,34 @@ static const auto MAX_BIAS = 0.006f;
|
|||
const LightStage::Index LightStage::INVALID_INDEX { render::indexed_container::INVALID_INDEX };
|
||||
|
||||
LightStage::LightStage() {
|
||||
// Add off lights
|
||||
const LightPointer ambientOffLight { std::make_shared<model::Light>() };
|
||||
ambientOffLight->setAmbientIntensity(0.0f);
|
||||
ambientOffLight->setColor(model::Vec3(0.0));
|
||||
ambientOffLight->setIntensity(0.0f);
|
||||
ambientOffLight->setType(model::Light::Type::AMBIENT);
|
||||
_ambientOffLight = addLight(ambientOffLight);
|
||||
|
||||
const LightPointer pointOffLight { std::make_shared<model::Light>() };
|
||||
pointOffLight->setAmbientIntensity(0.0f);
|
||||
pointOffLight->setColor(model::Vec3(0.0));
|
||||
pointOffLight->setIntensity(0.0f);
|
||||
pointOffLight->setType(model::Light::Type::POINT);
|
||||
_pointOffLight = addLight(pointOffLight);
|
||||
|
||||
const LightPointer spotOffLight { std::make_shared<model::Light>() };
|
||||
spotOffLight->setAmbientIntensity(0.0f);
|
||||
spotOffLight->setColor(model::Vec3(0.0));
|
||||
spotOffLight->setIntensity(0.0f);
|
||||
spotOffLight->setType(model::Light::Type::SPOT);
|
||||
_spotOffLight = addLight(spotOffLight);
|
||||
|
||||
const LightPointer sunOffLight { std::make_shared<model::Light>() };
|
||||
sunOffLight->setAmbientIntensity(0.0f);
|
||||
sunOffLight->setColor(model::Vec3(0.0));
|
||||
sunOffLight->setIntensity(0.0f);
|
||||
sunOffLight->setType(model::Light::Type::SUN);
|
||||
_sunOffLight = addLight(sunOffLight);
|
||||
}
|
||||
|
||||
LightStage::Shadow::Schema::Schema() {
|
||||
|
|
|
@ -185,6 +185,11 @@ public:
|
|||
|
||||
Frame _currentFrame;
|
||||
|
||||
Index getAmbientOffLight() { return _ambientOffLight; }
|
||||
Index getPointOffLight() { return _pointOffLight; }
|
||||
Index getSpotOffLight() { return _spotOffLight; }
|
||||
Index getSunOffLight() { return _sunOffLight; }
|
||||
|
||||
protected:
|
||||
|
||||
struct Desc {
|
||||
|
@ -199,6 +204,18 @@ protected:
|
|||
Descs _descs;
|
||||
LightMap _lightMap;
|
||||
|
||||
// define off lights
|
||||
|
||||
const LightPointer ambientOffLight { std::make_shared<model::Light>() };
|
||||
const LightPointer pointOffLight { std::make_shared<model::Light>() };
|
||||
const LightPointer spotOffLight { std::make_shared<model::Light>() };
|
||||
const LightPointer sunOffLight { std::make_shared<model::Light>() };
|
||||
|
||||
Index _ambientOffLight;
|
||||
Index _pointOffLight;
|
||||
Index _spotOffLight;
|
||||
Index _sunOffLight;
|
||||
|
||||
};
|
||||
using LightStagePointer = std::shared_ptr<LightStage>;
|
||||
|
||||
|
|
294
scripts/developer/sunModel.js
Normal file
294
scripts/developer/sunModel.js
Normal file
|
@ -0,0 +1,294 @@
|
|||
//
|
||||
// sunModel.js
|
||||
// scripts/developer
|
||||
//
|
||||
// Created by Nissim Hadar on 2017/12/27.
|
||||
// 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
|
||||
//
|
||||
// Sun angle is based on the NOAA model - see https://www.esrl.noaa.gov/gmd/grad/solcalc/
|
||||
//
|
||||
(function() {
|
||||
// Utility functions for trig. calculations
|
||||
function toRadians(angle_degs) {
|
||||
return angle_degs * (Math.PI / 180);
|
||||
}
|
||||
function toDegrees(angle_rads) {
|
||||
return angle_rads * (180.0 / Math.PI);
|
||||
}
|
||||
|
||||
// Parameters
|
||||
var latitude_degs = 47.751033;
|
||||
var longitude_degs = -122.228176;
|
||||
|
||||
// These are used a lot
|
||||
var latitude = toRadians(latitude_degs);
|
||||
var longitude = toRadians(longitude_degs);
|
||||
|
||||
// Code to check if Daylight Savings is active
|
||||
Date.prototype.stdTimezoneOffset = function() {
|
||||
var fy = this.getFullYear();
|
||||
if (!Date.prototype.stdTimezoneOffset.cache.hasOwnProperty(fy)) {
|
||||
var maxOffset = new Date(fy, 0, 1).getTimezoneOffset();
|
||||
var monthsTestOrder = [6, 7, 5, 8, 4, 9, 3, 10, 2, 11, 1];
|
||||
|
||||
for(var mi = 0;mi < 12; ++mi) {
|
||||
var offset = new Date(fy, monthsTestOrder[mi], 1).getTimezoneOffset();
|
||||
if (offset != maxOffset) {
|
||||
maxOffset = Math.max(maxOffset, offset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
Date.prototype.stdTimezoneOffset.cache[fy] = maxOffset;
|
||||
}
|
||||
return Date.prototype.stdTimezoneOffset.cache[fy];
|
||||
};
|
||||
|
||||
// Cache the result for per year stdTimezoneOffset so that you don't need to recalculate it when testing multiple dates in
|
||||
// the same year.
|
||||
Date.prototype.stdTimezoneOffset.cache = {};
|
||||
|
||||
Date.prototype.isDST = function() {
|
||||
return this.getTimezoneOffset() < this.stdTimezoneOffset();
|
||||
};
|
||||
|
||||
// The Julian Date is the number of days (fractional) that have elapsed since Jan 1st, 4713 BC
|
||||
function getJulianDate(dateTime) {
|
||||
var month = dateTime.getMonth() + 1;
|
||||
var day = dateTime.getDate() + 1;
|
||||
var year = dateTime.getFullYear();
|
||||
|
||||
if (month <= 2) {
|
||||
year -= 1;
|
||||
month += 12;
|
||||
}
|
||||
|
||||
var A = Math.floor(year / 100);
|
||||
var B = 2 - A + Math.floor(A / 4);
|
||||
return Math.floor(365.25 * (year + 4716)) + Math.floor(30.6001 * (month + 1)) + day + B - 1524.5;
|
||||
}
|
||||
|
||||
function getMinutes(dateTime) {
|
||||
var hours = dateTime.getHours();
|
||||
var minutes = dateTime.getMinutes();
|
||||
var seconds = dateTime.getSeconds();
|
||||
|
||||
if (Date.prototype.isDST()) {
|
||||
hour -= 1;
|
||||
}
|
||||
|
||||
return hours * 60 + minutes + seconds / 60.0;
|
||||
}
|
||||
|
||||
function calcGeomMeanAnomalySun(t) {
|
||||
var M = 357.52911 + t * (35999.05029 - 0.0001537 * t);
|
||||
return M; // in degrees
|
||||
}
|
||||
|
||||
function calcSunEqOfCenter(t) {
|
||||
var m = calcGeomMeanAnomalySun(t);
|
||||
var mrad = toRadians(m);
|
||||
var sinm = Math.sin(mrad);
|
||||
var sin2m = Math.sin(mrad + mrad);
|
||||
var sin3m = Math.sin(mrad + mrad + mrad);
|
||||
var C = sinm * (1.914602 - t * (0.004817 + 0.000014 * t)) + sin2m * (0.019993 - 0.000101 * t) + sin3m * 0.000289;
|
||||
return C; // in degrees
|
||||
}
|
||||
|
||||
function calcGeomMeanLongSun(t) {
|
||||
var L0 = 280.46646 + t * (36000.76983 + t*(0.0003032))
|
||||
while(L0 > 360.0) {
|
||||
L0 -= 360.0
|
||||
}
|
||||
while(L0 < 0.0) {
|
||||
L0 += 360.0
|
||||
}
|
||||
return L0 // in degrees
|
||||
}
|
||||
|
||||
function calcSunTrueLong(t) {
|
||||
var l0 = calcGeomMeanLongSun(t);
|
||||
var c = calcSunEqOfCenter(t);
|
||||
var O = l0 + c;
|
||||
return O; // in degrees
|
||||
}
|
||||
|
||||
function calcSunApparentLong(t) {
|
||||
var o = calcSunTrueLong(t);
|
||||
var omega = 125.04 - 1934.136 * t;
|
||||
var lambda = o - 0.00569 - 0.00478 * Math.sin(toRadians(omega));
|
||||
return lambda; // in degrees
|
||||
}
|
||||
|
||||
function calcMeanObliquityOfEcliptic(t) {
|
||||
var seconds = 21.448 - t * (46.8150 + t * (0.00059 - t * (0.001813)));
|
||||
var e0 = 23.0 + (26.0 + (seconds / 60.0)) / 60.0;
|
||||
return e0; // in degrees
|
||||
}
|
||||
|
||||
function calcObliquityCorrection(t) {
|
||||
var e0 = calcMeanObliquityOfEcliptic(t);
|
||||
var omega = 125.04 - 1934.136 * t;
|
||||
var e = e0 + 0.00256 * Math.cos(toRadians(omega));
|
||||
return e; // in degrees
|
||||
}
|
||||
|
||||
function calcSunDeclination(t) {
|
||||
var e = calcObliquityCorrection(t);
|
||||
var lambda = calcSunApparentLong(t);
|
||||
|
||||
var sint = Math.sin(toRadians(e)) * Math.sin(toRadians(lambda));
|
||||
var theta = toDegrees(Math.asin(sint));
|
||||
return theta; // in degrees
|
||||
}
|
||||
|
||||
function calcEccentricityEarthOrbit(t) {
|
||||
var e = 0.016708634 - t * (0.000042037 + 0.0000001267 * t);
|
||||
return e; // unitless
|
||||
}
|
||||
|
||||
function calcEquationOfTime(t) {
|
||||
var epsilon = calcObliquityCorrection(t);
|
||||
var l0 = calcGeomMeanLongSun(t);
|
||||
var e = calcEccentricityEarthOrbit(t);
|
||||
var m = calcGeomMeanAnomalySun(t);
|
||||
|
||||
var y = Math.tan(toRadians(epsilon) / 2.0);
|
||||
y *= y;
|
||||
|
||||
var sin2l0 = Math.sin(2.0 * toRadians(l0));
|
||||
var sinm = Math.sin(toRadians(m));
|
||||
var cos2l0 = Math.cos(2.0 * toRadians(l0));
|
||||
var sin4l0 = Math.sin(4.0 * toRadians(l0));
|
||||
var sin2m = Math.sin(2.0 * toRadians(m));
|
||||
|
||||
var Etime = y * sin2l0 - 2.0 * e * sinm + 4.0 * e * y * sinm * cos2l0 - 0.5 * y * y * sin4l0 - 1.25 * e * e * sin2m;
|
||||
return toDegrees(Etime) * 4.0; // in minutes of time
|
||||
}
|
||||
|
||||
function calcSunTrueAnomaly(t) {
|
||||
var m = calcGeomMeanAnomalySun(t);
|
||||
var c = calcSunEqOfCenter(t);
|
||||
var v = m + c;
|
||||
return v; // in degrees
|
||||
}
|
||||
|
||||
function calcSunRadVector(t) {
|
||||
var v = calcSunTrueAnomaly(t);
|
||||
var e = calcEccentricityEarthOrbit(t);
|
||||
var R = (1.000001018 * (1 - e * e)) / (1 + e * Math.cos(toRadians(v)));
|
||||
return R; // in AUs
|
||||
}
|
||||
|
||||
var COMPUTATION_CYCLE = 5000; // Run every 5 seconds
|
||||
this.preload = function(entityID) { // You don't have the entityID before the preload
|
||||
Script.setInterval(
|
||||
function() {
|
||||
var dateTime = new Date();
|
||||
|
||||
var julianDay = getJulianDate(dateTime);
|
||||
var localTimeMinutes = getMinutes(dateTime);
|
||||
var timeZone = -dateTime.getTimezoneOffset() / 60;
|
||||
var totalTime = julianDay + localTimeMinutes/1440.0 - timeZone / 24.0;
|
||||
var julianCentralTime = (julianDay - 2451545.0)/36525.0;
|
||||
var eqTime = calcEquationOfTime(julianCentralTime)
|
||||
var theta_rads = toRadians(calcSunDeclination(julianCentralTime));
|
||||
var solarTimeFix = eqTime + 4.0 * longitude_degs - 60.0 * timeZone;
|
||||
var earthRadVec = calcSunRadVector(julianCentralTime);
|
||||
|
||||
var trueSolarTime = localTimeMinutes + solarTimeFix;
|
||||
while (trueSolarTime > 1440) {
|
||||
trueSolarTime -= 1440;
|
||||
}
|
||||
|
||||
var hourAngle = trueSolarTime / 4.0 - 180.0;
|
||||
if (hourAngle < -180.0) {
|
||||
hourAngle += 360.0;
|
||||
}
|
||||
var hourAngleRadians = toRadians(hourAngle);
|
||||
|
||||
var csz = Math.sin(latitude) * Math.sin(theta_rads) +
|
||||
Math.cos(latitude) * Math.cos(theta_rads) * Math.cos(hourAngleRadians);
|
||||
csz = Math.min(1.0, Math.max(-1.0, csz));
|
||||
|
||||
var zenith_degs = toDegrees(Math.acos(csz));
|
||||
var azDenom = ( Math.cos(latitude) * Math.sin(toRadians(zenith_degs)));
|
||||
if (Math.abs(azDenom) > 0.001) {
|
||||
azRad = (( Math.sin(latitude) * Math.cos(toRadians(zenith_degs)) ) - Math.sin(theta_rads)) / azDenom;
|
||||
if (Math.abs(azRad) > 1.0) {
|
||||
if (azRad < 0.0) {
|
||||
azRad = -1.0;
|
||||
} else {
|
||||
azRad = 1.0;
|
||||
}
|
||||
}
|
||||
var solarAzimuth_degs = 180.0 - toDegrees(Math.acos(azRad))
|
||||
if (hourAngle > 0.0) {
|
||||
solarAzimuth_degs = -solarAzimuth_degs;
|
||||
}
|
||||
} else {
|
||||
if (latitude_degs > 0.0) {
|
||||
solarAzimuth_degs = 180.0;
|
||||
} else {
|
||||
solarAzimuth_degs = 0.0;
|
||||
}
|
||||
}
|
||||
if (solarAzimuth_degs < 0.0) {
|
||||
solarAzimuth_degs += 360.0;
|
||||
}
|
||||
|
||||
// Atmospheric Refraction correction
|
||||
var exoatmElevation = 90.0 - zenith_degs;
|
||||
if (exoatmElevation > 85.0) {
|
||||
var refractionCorrection = 0.0;
|
||||
} else {
|
||||
var te = Math.tan(toRadians(exoatmElevation));
|
||||
if (exoatmElevation > 5.0) {
|
||||
var refractionCorrection = 58.1 / te - 0.07 / (te * te * te) + 0.000086 / (te * te * te * te * te);
|
||||
} else if (exoatmElevation > -0.575) {
|
||||
var refractionCorrection =
|
||||
1735.0 + exoatmElevation *
|
||||
(-518.2 + exoatmElevation * (103.4 + exoatmElevation * (-12.79 + exoatmElevation * 0.711)));
|
||||
} else {
|
||||
var refractionCorrection = -20.774 / te;
|
||||
}
|
||||
refractionCorrection = refractionCorrection / 3600.0;
|
||||
}
|
||||
|
||||
var solarZenith = zenith_degs - refractionCorrection;
|
||||
var solarAltitude_degs = 90.0 - solarZenith; // aka solar elevation
|
||||
|
||||
// Convert to XYZ
|
||||
var solarAltitude = toRadians(solarAltitude_degs);
|
||||
var solarAzimuth = toRadians(solarAzimuth_degs);
|
||||
|
||||
var xPos = Math.cos(solarAltitude) * Math.sin(solarAzimuth);
|
||||
var zPos = Math.cos(solarAltitude) * Math.cos(solarAzimuth);
|
||||
var yPos = -Math.sin(solarAltitude);
|
||||
|
||||
// Compute intensity, modelling the atmosphere as a spherical shell
|
||||
// The optical air mass ratio at zenith is 1.0, and around 38.0 at the horizon
|
||||
// The ratio is limited between 1 and 38
|
||||
var EARTH_RADIUS_KM = 6371.0;
|
||||
var ATMOSPHERE_THICKNESS_KM = 9.0;
|
||||
var r = EARTH_RADIUS_KM / ATMOSPHERE_THICKNESS_KM;
|
||||
|
||||
var opticalAirMassRatio = Math.sqrt(r * r * csz * csz + 2 * r + 1) - r * csz;
|
||||
opticalAirMassRatio = Math.min(38.0, Math.max(1.0, opticalAirMassRatio));
|
||||
|
||||
Entities.editEntity(
|
||||
entityID, {
|
||||
keyLight : {
|
||||
direction: { x: xPos, y: yPos, z: zPos },
|
||||
intensity: 1.0 / opticalAirMassRatio
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
COMPUTATION_CYCLE
|
||||
);
|
||||
};
|
||||
});
|
|
@ -2044,9 +2044,9 @@ var PropertiesTool = function (opts) {
|
|||
|
||||
// If any of the natural dimensions are not 0, resize
|
||||
if (properties.type === "Model" && naturalDimensions.x === 0 && naturalDimensions.y === 0 &&
|
||||
naturalDimensions.z === 0) {
|
||||
naturalDimensions.z === 0) {
|
||||
Window.notifyEditError("Cannot reset entity to its natural dimensions: Model URL" +
|
||||
" is invalid or the model has not yet been loaded.");
|
||||
" is invalid or the model has not yet been loaded.");
|
||||
} else {
|
||||
Entities.editEntity(selectionManager.selections[i], {
|
||||
dimensions: properties.naturalDimensions
|
||||
|
|
|
@ -508,9 +508,14 @@
|
|||
<label for="property-zone-filter-url">Filter URL</label>
|
||||
<input type="text" id="property-zone-filter-url">
|
||||
</div>
|
||||
<div class="sub-section-header zone-group zone-section keylight-section">
|
||||
<div class="sub-section-header zone-group zone-section">
|
||||
<label>Key Light</label>
|
||||
</div>
|
||||
<form>
|
||||
<input type="radio" name="keyLightMode" value="inherit" id="property-zone-key-light-mode-inherit" checked> Inherit
|
||||
<input type="radio" name="keyLightMode" value="disabled" id="property-zone-key-light-mode-disabled"> Off
|
||||
<input type="radio" name="keyLightMode" value="enabled" id="property-zone-key-light-mode-enabled"> On
|
||||
</form>
|
||||
<div class="zone-section keylight-section zone-group property rgb">
|
||||
<div class="color-picker" id="property-zone-key-light-color"></div>
|
||||
<label>Key light color</label>
|
||||
|
@ -531,23 +536,67 @@
|
|||
<div></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zone-group zone-section keylight-section property number">
|
||||
<fieldset class="minor">
|
||||
<legend class="sub-section-header zone-group zone-section background-section">
|
||||
Skybox
|
||||
</legend>
|
||||
<form>
|
||||
<input type="radio" name="skyboxMode" value="inherit" id="property-zone-skybox-mode-inherit" checked> Inherit
|
||||
<input type="radio" name="skyboxMode" value="disabled" id="property-zone-skybox-mode-disabled"> Off
|
||||
<input type="radio" name="skyboxMode" value="enabled" id="property-zone-skybox-mode-enabled"> On
|
||||
</form>
|
||||
<fieldset class="zone-group zone-section skybox-section property rgb fstuple">
|
||||
<div class="color-picker" id="property-zone-skybox-color"></div>
|
||||
<legend>Skybox color</legend>
|
||||
<div class="tuple">
|
||||
<div>
|
||||
<input type="number" class="red" id="property-zone-skybox-color-red">
|
||||
<label for="property-zone-skybox-color-red">Red:</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="number" class="green" id="property-zone-skybox-color-green">
|
||||
<label for="property-zone-skybox-color-green">Green:</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="number" class="blue" id="property-zone-skybox-color-blue">
|
||||
<label for="property-zone-skybox-color-blue">Blue:</label>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="zone-group zone-section skybox-section property url ">
|
||||
<br>
|
||||
<label for="property-zone-skybox-url" width="80">Skybox URL</label>
|
||||
<input type="text" id="property-zone-skybox-url">
|
||||
<br>
|
||||
<br>
|
||||
<input type="button" id="copy-skybox-url-to-ambient-url" value="Copy URL to Ambient">
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="sub-section-header zone-group zone-section">
|
||||
<label>Ambient Light</label>
|
||||
</div>
|
||||
<form>
|
||||
<input type="radio" name="ambientLightMode" value="inherit" id="property-zone-ambient-light-mode-inherit" checked> Inherit
|
||||
<input type="radio" name="ambientLightMode" value="disabled" id="property-zone-ambient-light-mode-disabled"> Off
|
||||
<input type="radio" name="ambientLightMode" value="enabled" id="property-zone-ambient-light-mode-enabled"> On
|
||||
</form>
|
||||
<div class="zone-group zone-section ambient-section property number">
|
||||
<label>Ambient intensity</label>
|
||||
<input type="number" id="property-zone-key-ambient-intensity" min="0" max="10" step="0.1">
|
||||
</div>
|
||||
<div class="zone-group zone-section keylight-section property url ">
|
||||
<div class="zone-group zone-section ambient-section property url ">
|
||||
<label for="property-zone-key-ambient-url">Ambient URL</label>
|
||||
<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">
|
||||
<legend class="sub-section-header zone-group zone-section">
|
||||
Haze
|
||||
</legend>
|
||||
<form>
|
||||
<input type="radio" name="hazeMode" value="inherit" id="property-zone-haze-mode-inherit" checked> Inherit
|
||||
<input type="radio" name="hazeMode" value="disabled" id="property-zone-haze-mode-disabled"> Off
|
||||
<input type="radio" name="hazeMode" value="enabled" id="property-zone-haze-mode-enabled"> On
|
||||
<input type="radio" name="hazeMode" value="inherit" id="property-zone-haze-mode-inherit" checked> Inherit
|
||||
<input type="radio" name="hazeMode" value="disabled" id="property-zone-haze-mode-disabled"> Off
|
||||
<input type="radio" name="hazeMode" value="enabled" id="property-zone-haze-mode-enabled"> On
|
||||
</form>
|
||||
<fieldset class="zone-group zone-section haze-section property gen fstuple">
|
||||
<div class="tuple">
|
||||
|
@ -655,39 +704,7 @@
|
|||
</div>
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
<fieldset class="minor">
|
||||
<legend class="sub-section-header zone-group zone-section background-section">
|
||||
Background
|
||||
</legend>
|
||||
<div class="zone-group zone-section background-section property dropdown">
|
||||
<label>Background mode</label>
|
||||
<select name="SelectBackgroundMode" id="property-zone-background-mode">
|
||||
<option value="inherit">Nothing</option>
|
||||
<option value="skybox">Skybox</option>
|
||||
</select>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="minor skybox-section">
|
||||
<legend class="sub-section-header zone-group zone-section skybox-section">
|
||||
Skybox
|
||||
</legend>
|
||||
<fieldset class="zone-group zone-section skybox-section property rgb fstuple">
|
||||
<div class="color-picker" id="property-zone-skybox-color"></div>
|
||||
<legend>Skybox color</legend>
|
||||
<div class="tuple">
|
||||
<div><input type="number" class="red" id="property-zone-skybox-color-red"><label for="property-zone-skybox-color-red">Red:</label></div>
|
||||
<div><input type="number" class="green" id="property-zone-skybox-color-green"><label for="property-zone-skybox-color-green">Green:</label></div>
|
||||
<div><input type="number" class="blue" id="property-zone-skybox-color-blue"><label for="property-zone-skybox-color-blue">Blue:</label></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="zone-group zone-section skybox-section property url ">
|
||||
<label for="property-zone-skybox-url">Skybox URL</label>
|
||||
<input type="text" id="property-zone-skybox-url">
|
||||
</div>
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<fieldset id="text" class="major">
|
||||
<legend class="section-header text-group text-section">
|
||||
Text<span>M</span>
|
||||
|
|
|
@ -83,6 +83,7 @@ function disableProperties() {
|
|||
function showElements(els, show) {
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
els[i].style.display = (show) ? 'table' : 'none';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -627,7 +628,6 @@ function loaded() {
|
|||
|
||||
var elHyperlinkHref = document.getElementById("property-hyperlink-href");
|
||||
|
||||
|
||||
var elTextText = document.getElementById("property-text-text");
|
||||
var elTextLineHeight = document.getElementById("property-text-line-height");
|
||||
var elTextTextColor = document.getElementById("property-text-text-color");
|
||||
|
@ -641,16 +641,35 @@ function loaded() {
|
|||
|
||||
var elZoneStageSunModelEnabled = document.getElementById("property-zone-stage-sun-model-enabled");
|
||||
|
||||
// Key light
|
||||
var elZoneKeyLightModeInherit = document.getElementById("property-zone-key-light-mode-inherit");
|
||||
var elZoneKeyLightModeDisabled = document.getElementById("property-zone-key-light-mode-disabled");
|
||||
var elZoneKeyLightModeEnabled = document.getElementById("property-zone-key-light-mode-enabled");
|
||||
|
||||
var elZoneKeyLightColor = document.getElementById("property-zone-key-light-color");
|
||||
var elZoneKeyLightColorRed = document.getElementById("property-zone-key-light-color-red");
|
||||
var elZoneKeyLightColorGreen = document.getElementById("property-zone-key-light-color-green");
|
||||
var elZoneKeyLightColorBlue = document.getElementById("property-zone-key-light-color-blue");
|
||||
var elZoneKeyLightIntensity = document.getElementById("property-zone-key-intensity");
|
||||
var elZoneKeyLightAmbientIntensity = document.getElementById("property-zone-key-ambient-intensity");
|
||||
var elZoneKeyLightDirectionX = document.getElementById("property-zone-key-light-direction-x");
|
||||
var elZoneKeyLightDirectionY = document.getElementById("property-zone-key-light-direction-y");
|
||||
var elZoneKeyLightAmbientURL = document.getElementById("property-zone-key-ambient-url");
|
||||
|
||||
// Skybox
|
||||
var elZoneSkyboxModeInherit = document.getElementById("property-zone-skybox-mode-inherit");
|
||||
var elZoneSkyboxModeDisabled = document.getElementById("property-zone-skybox-mode-disabled");
|
||||
var elZoneSkyboxModeEnabled = document.getElementById("property-zone-skybox-mode-enabled");
|
||||
|
||||
// Ambient light
|
||||
var elCopySkyboxURLToAmbientURL = document.getElementById("copy-skybox-url-to-ambient-url");
|
||||
|
||||
var elZoneAmbientLightModeInherit = document.getElementById("property-zone-ambient-light-mode-inherit");
|
||||
var elZoneAmbientLightModeDisabled = document.getElementById("property-zone-ambient-light-mode-disabled");
|
||||
var elZoneAmbientLightModeEnabled = document.getElementById("property-zone-ambient-light-mode-enabled");
|
||||
|
||||
var elZoneAmbientLightIntensity = document.getElementById("property-zone-key-ambient-intensity");
|
||||
var elZoneAmbientLightURL = document.getElementById("property-zone-key-ambient-url");
|
||||
|
||||
// Haze
|
||||
var elZoneHazeModeInherit = document.getElementById("property-zone-haze-mode-inherit");
|
||||
var elZoneHazeModeDisabled = document.getElementById("property-zone-haze-mode-disabled");
|
||||
var elZoneHazeModeEnabled = document.getElementById("property-zone-haze-mode-enabled");
|
||||
|
@ -680,8 +699,6 @@ function loaded() {
|
|||
var elZoneStageDay = document.getElementById("property-zone-stage-day");
|
||||
var elZoneStageHour = document.getElementById("property-zone-stage-hour");
|
||||
|
||||
var elZoneBackgroundMode = document.getElementById("property-zone-background-mode");
|
||||
|
||||
var elZoneSkyboxColor = document.getElementById("property-zone-skybox-color");
|
||||
var elZoneSkyboxColorRed = document.getElementById("property-zone-skybox-color-red");
|
||||
var elZoneSkyboxColorGreen = document.getElementById("property-zone-skybox-color-green");
|
||||
|
@ -1002,7 +1019,13 @@ function loaded() {
|
|||
elLightFalloffRadius.value = properties.falloffRadius.toFixed(1);
|
||||
elLightExponent.value = properties.exponent.toFixed(2);
|
||||
elLightCutoff.value = properties.cutoff.toFixed(2);
|
||||
|
||||
} else if (properties.type === "Zone") {
|
||||
// Key light
|
||||
elZoneKeyLightModeInherit.checked = (properties.keyLightMode === 'inherit');
|
||||
elZoneKeyLightModeDisabled.checked = (properties.keyLightMode === 'disabled');
|
||||
elZoneKeyLightModeEnabled.checked = (properties.keyLightMode === 'enabled');
|
||||
|
||||
elZoneStageSunModelEnabled.checked = properties.stage.sunModelEnabled;
|
||||
elZoneKeyLightColor.style.backgroundColor = "rgb(" + properties.keyLight.color.red + "," +
|
||||
properties.keyLight.color.green + "," + properties.keyLight.color.blue + ")";
|
||||
|
@ -1010,14 +1033,26 @@ function loaded() {
|
|||
elZoneKeyLightColorGreen.value = properties.keyLight.color.green;
|
||||
elZoneKeyLightColorBlue.value = properties.keyLight.color.blue;
|
||||
elZoneKeyLightIntensity.value = properties.keyLight.intensity.toFixed(2);
|
||||
elZoneKeyLightAmbientIntensity.value = properties.keyLight.ambientIntensity.toFixed(2);
|
||||
elZoneKeyLightDirectionX.value = properties.keyLight.direction.x.toFixed(2);
|
||||
elZoneKeyLightDirectionY.value = properties.keyLight.direction.y.toFixed(2);
|
||||
elZoneKeyLightAmbientURL.value = properties.keyLight.ambientURL;
|
||||
|
||||
elZoneHazeModeInherit.checked = (properties.hazeMode === 'inherit');
|
||||
// Skybox
|
||||
elZoneSkyboxModeInherit.checked = (properties.skyboxMode === 'inherit');
|
||||
elZoneSkyboxModeDisabled.checked = (properties.skyboxMode === 'disabled');
|
||||
elZoneSkyboxModeEnabled.checked = (properties.skyboxMode === 'enabled');
|
||||
|
||||
// Ambient light
|
||||
elZoneAmbientLightModeInherit.checked = (properties.ambientLightMode === 'inherit');
|
||||
elZoneAmbientLightModeDisabled.checked = (properties.ambientLightMode === 'disabled');
|
||||
elZoneAmbientLightModeEnabled.checked = (properties.ambientLightMode === 'enabled');
|
||||
|
||||
elZoneAmbientLightIntensity.value = properties.ambientLight.ambientIntensity.toFixed(2);
|
||||
elZoneAmbientLightURL.value = properties.ambientLight.ambientURL;
|
||||
|
||||
// Haze
|
||||
elZoneHazeModeInherit.checked = (properties.hazeMode === 'inherit');
|
||||
elZoneHazeModeDisabled.checked = (properties.hazeMode === 'disabled');
|
||||
elZoneHazeModeEnabled.checked = (properties.hazeMode === 'enabled');
|
||||
elZoneHazeModeEnabled.checked = (properties.hazeMode === 'enabled');
|
||||
|
||||
elZoneHazeRange.value = properties.haze.hazeRange.toFixed(0);
|
||||
elZoneHazeColor.style.backgroundColor = "rgb(" +
|
||||
|
@ -1057,9 +1092,6 @@ function loaded() {
|
|||
elShapeType.value = properties.shapeType;
|
||||
elCompoundShapeURL.value = properties.compoundShapeURL;
|
||||
|
||||
elZoneBackgroundMode.value = properties.backgroundMode;
|
||||
setDropdownText(elZoneBackgroundMode);
|
||||
|
||||
elZoneSkyboxColor.style.backgroundColor = "rgb(" + properties.skybox.color.red + "," +
|
||||
properties.skybox.color.green + "," + properties.skybox.color.blue + ")";
|
||||
elZoneSkyboxColorRed.value = properties.skybox.color.red;
|
||||
|
@ -1071,8 +1103,16 @@ function loaded() {
|
|||
elZoneGhostingAllowed.checked = properties.ghostingAllowed;
|
||||
elZoneFilterURL.value = properties.filterURL;
|
||||
|
||||
showElements(document.getElementsByClassName('skybox-section'),
|
||||
elZoneBackgroundMode.value === 'skybox');
|
||||
// Show/hide sections as required
|
||||
showElements(document.getElementsByClassName('skybox-section'),
|
||||
elZoneSkyboxModeEnabled.checked);
|
||||
showElements(document.getElementsByClassName('keylight-section'),
|
||||
elZoneKeyLightModeEnabled.checked);
|
||||
showElements(document.getElementsByClassName('ambient-section'),
|
||||
elZoneAmbientLightModeEnabled.checked);
|
||||
showElements(document.getElementsByClassName('haze-section'),
|
||||
elZoneHazeModeEnabled.checked);
|
||||
|
||||
} else if (properties.type === "PolyVox") {
|
||||
elVoxelVolumeSizeX.value = properties.voxelVolumeSize.x.toFixed(2);
|
||||
elVoxelVolumeSizeY.value = properties.voxelVolumeSize.y.toFixed(2);
|
||||
|
@ -1380,6 +1420,7 @@ function loaded() {
|
|||
|
||||
var textBackgroundColorChangeFunction = createEmitColorPropertyUpdateFunction(
|
||||
'backgroundColor', elTextBackgroundColorRed, elTextBackgroundColorGreen, elTextBackgroundColorBlue);
|
||||
|
||||
elTextBackgroundColorRed.addEventListener('change', textBackgroundColorChangeFunction);
|
||||
elTextBackgroundColorGreen.addEventListener('change', textBackgroundColorChangeFunction);
|
||||
elTextBackgroundColorBlue.addEventListener('change', textBackgroundColorChangeFunction);
|
||||
|
@ -1400,6 +1441,14 @@ function loaded() {
|
|||
}
|
||||
}));
|
||||
|
||||
// Key light
|
||||
var keyLightModeChanged = createZoneComponentModeChangedFunction('keyLightMode',
|
||||
elZoneKeyLightModeInherit, elZoneKeyLightModeDisabled, elZoneKeyLightModeEnabled);
|
||||
|
||||
elZoneKeyLightModeInherit.addEventListener('change', keyLightModeChanged);
|
||||
elZoneKeyLightModeDisabled.addEventListener('change', keyLightModeChanged);
|
||||
elZoneKeyLightModeEnabled.addEventListener('change', keyLightModeChanged);
|
||||
|
||||
elZoneStageSunModelEnabled.addEventListener('change',
|
||||
createEmitGroupCheckedPropertyUpdateFunction('stage', 'sunModelEnabled'));
|
||||
colorPickers.push($('#property-zone-key-light-color').colpick({
|
||||
|
@ -1420,24 +1469,51 @@ function loaded() {
|
|||
}));
|
||||
var zoneKeyLightColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('keyLight', 'color',
|
||||
elZoneKeyLightColorRed, elZoneKeyLightColorGreen, elZoneKeyLightColorBlue);
|
||||
|
||||
elZoneKeyLightColorRed.addEventListener('change', zoneKeyLightColorChangeFunction);
|
||||
elZoneKeyLightColorGreen.addEventListener('change', zoneKeyLightColorChangeFunction);
|
||||
elZoneKeyLightColorBlue.addEventListener('change', zoneKeyLightColorChangeFunction);
|
||||
elZoneKeyLightIntensity.addEventListener('change',
|
||||
createEmitGroupNumberPropertyUpdateFunction('keyLight', 'intensity'));
|
||||
elZoneKeyLightAmbientIntensity.addEventListener('change',
|
||||
createEmitGroupNumberPropertyUpdateFunction('keyLight', 'ambientIntensity'));
|
||||
elZoneKeyLightAmbientURL.addEventListener('change',
|
||||
createEmitGroupTextPropertyUpdateFunction('keyLight', 'ambientURL'));
|
||||
var zoneKeyLightDirectionChangeFunction =
|
||||
createEmitGroupVec3PropertyUpdateFunction('keyLight', 'direction',
|
||||
elZoneKeyLightDirectionX, elZoneKeyLightDirectionY);
|
||||
|
||||
var zoneKeyLightDirectionChangeFunction = createEmitGroupVec3PropertyUpdateFunction('keyLight', 'direction',
|
||||
elZoneKeyLightDirectionX, elZoneKeyLightDirectionY);
|
||||
|
||||
elZoneKeyLightDirectionX.addEventListener('change', zoneKeyLightDirectionChangeFunction);
|
||||
elZoneKeyLightDirectionY.addEventListener('change', zoneKeyLightDirectionChangeFunction);
|
||||
|
||||
var hazeModeChanged =
|
||||
createZoneComponentModeChangedFunction('hazeMode', elZoneHazeModeInherit,
|
||||
elZoneHazeModeDisabled, elZoneHazeModeEnabled);
|
||||
// Skybox
|
||||
var skyboxModeChanged = createZoneComponentModeChangedFunction('skyboxMode',
|
||||
elZoneSkyboxModeInherit, elZoneSkyboxModeDisabled, elZoneSkyboxModeEnabled);
|
||||
|
||||
elZoneSkyboxModeInherit.addEventListener('change', skyboxModeChanged);
|
||||
elZoneSkyboxModeDisabled.addEventListener('change', skyboxModeChanged);
|
||||
elZoneSkyboxModeEnabled.addEventListener('change', skyboxModeChanged);
|
||||
|
||||
// Ambient light
|
||||
elCopySkyboxURLToAmbientURL.addEventListener("click", function () {
|
||||
document.getElementById("property-zone-key-ambient-url").value = properties.skybox.url;
|
||||
properties.ambientLight.ambientURL = properties.skybox.url;
|
||||
updateProperties(properties);
|
||||
});
|
||||
|
||||
var ambientLightModeChanged = createZoneComponentModeChangedFunction('ambientLightMode',
|
||||
elZoneAmbientLightModeInherit, elZoneAmbientLightModeDisabled, elZoneAmbientLightModeEnabled);
|
||||
|
||||
elZoneAmbientLightModeInherit.addEventListener('change', ambientLightModeChanged);
|
||||
elZoneAmbientLightModeDisabled.addEventListener('change', ambientLightModeChanged);
|
||||
elZoneAmbientLightModeEnabled.addEventListener('change', ambientLightModeChanged);
|
||||
|
||||
elZoneAmbientLightIntensity.addEventListener('change',
|
||||
createEmitGroupNumberPropertyUpdateFunction('ambientLight', 'ambientIntensity'));
|
||||
|
||||
elZoneAmbientLightURL.addEventListener('change',
|
||||
createEmitGroupTextPropertyUpdateFunction('ambientLight', 'ambientURL'));
|
||||
|
||||
// Haze
|
||||
var hazeModeChanged = createZoneComponentModeChangedFunction('hazeMode',
|
||||
elZoneHazeModeInherit, elZoneHazeModeDisabled, elZoneHazeModeEnabled);
|
||||
|
||||
elZoneHazeModeInherit.addEventListener('change', hazeModeChanged);
|
||||
elZoneHazeModeDisabled.addEventListener('change', hazeModeChanged);
|
||||
elZoneHazeModeEnabled.addEventListener('change', hazeModeChanged);
|
||||
|
@ -1514,8 +1590,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',
|
||||
elZoneSkyboxColorRed, elZoneSkyboxColorGreen, elZoneSkyboxColorBlue);
|
||||
elZoneSkyboxColorRed.addEventListener('change', zoneSkyboxColorChangeFunction);
|
||||
|
|
Loading…
Reference in a new issue