From 42ac8c5769962eb6c896f48c69b28fbc48406bda Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 23 Oct 2015 18:15:19 -0700 Subject: [PATCH 01/19] Stariting to reorganize the keyLight porperties of the Zone Entity --- .../entities/src/KeyLightPropertyGroup.cpp | 411 ++++++++++++++++++ .../entities/src/KeyLightPropertyGroup.h | 89 ++++ 2 files changed, 500 insertions(+) create mode 100644 libraries/entities/src/KeyLightPropertyGroup.cpp create mode 100644 libraries/entities/src/KeyLightPropertyGroup.h diff --git a/libraries/entities/src/KeyLightPropertyGroup.cpp b/libraries/entities/src/KeyLightPropertyGroup.cpp new file mode 100644 index 0000000000..f9d8c07443 --- /dev/null +++ b/libraries/entities/src/KeyLightPropertyGroup.cpp @@ -0,0 +1,411 @@ +// +// AnimationPropertyGroup.cpp +// libraries/entities/src +// +// Created by Brad Hefta-Gaub on 12/4/13. +// Copyright 2013 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include +#include + +#include + +#include "AnimationPropertyGroup.h" +#include "EntityItemProperties.h" +#include "EntityItemPropertiesMacros.h" + +void AnimationPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_URL, Animation, animation, URL, url); + + if (_animationLoop) { + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FPS, Animation, animation, FPS, fps, _animationLoop->getFPS); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FRAME_INDEX, Animation, animation, CurrentFrame, currentFrame, _animationLoop->getFPS); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_PLAYING, Animation, animation, Running, running, _animationLoop->getRunning); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_LOOP, Animation, animation, Loop, loop, _animationLoop->getLoop); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FIRST_FRAME, Animation, animation, FirstFrame, firstFrame, _animationLoop->getFirstFrame); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_LAST_FRAME, Animation, animation, LastFrame, lastFrame, _animationLoop->getLastFrame); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_HOLD, Animation, animation, Hold, hold, _animationLoop->getHold); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_START_AUTOMATICALLY, Animation, animation, StartAutomatically, startAutomatically, _animationLoop->getStartAutomatically); + } else { + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_FPS, Animation, animation, FPS, fps); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_FRAME_INDEX, Animation, animation, CurrentFrame, currentFrame); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_PLAYING, Animation, animation, Running, running); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_LOOP, Animation, animation, Loop, loop); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_FIRST_FRAME, Animation, animation, FirstFrame, firstFrame); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_LAST_FRAME, Animation, animation, LastFrame, lastFrame); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_HOLD, Animation, animation, Hold, hold); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_START_AUTOMATICALLY, Animation, animation, StartAutomatically, startAutomatically); + } +} + +void AnimationPropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) { + + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, url, QString, setURL); + + // legacy property support + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationURL, QString, setURL, getURL); + COPY_PROPERTY_FROM_QSCRIPTVALUE_NOCHECK(animationSettings, QString, setFromOldAnimationSettings); + + if (_animationLoop) { + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, fps, float, _animationLoop->setFPS); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, currentFrame, float, _animationLoop->setCurrentFrame); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, running, bool, _animationLoop->setRunning); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, loop, bool, _animationLoop->setLoop); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, firstFrame, float, _animationLoop->setFirstFrame); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, lastFrame, float, _animationLoop->setLastFrame); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, hold, bool, _animationLoop->setHold); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, startAutomatically, bool, _animationLoop->setStartAutomatically); + + // legacy property support + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFPS, float, _animationLoop->setFPS, _animationLoop->getFPS); + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationIsPlaying, bool, _animationLoop->setRunning, _animationLoop->getRunning); + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFrameIndex, float, _animationLoop->setCurrentFrame, _animationLoop->getCurrentFrame); + + } else { + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, fps, float, setFPS); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, currentFrame, float, setCurrentFrame); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, running, bool, setRunning); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, loop, bool, setLoop); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, firstFrame, float, setFirstFrame); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, lastFrame, float, setLastFrame); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, hold, bool, setHold); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, startAutomatically, bool, setStartAutomatically); + + // legacy property support + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFPS, float, setFPS, getFPS); + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationIsPlaying, bool, setRunning, getRunning); + COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFrameIndex, float, setCurrentFrame, getCurrentFrame); + } + +} + +void AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) { + // the animations setting is a JSON string that may contain various animation settings. + // if it includes fps, currentFrame, or running, those values will be parsed out and + // will over ride the regular animation settings + + float fps = _animationLoop ? _animationLoop->getFPS() : getFPS(); + float currentFrame = _animationLoop ? _animationLoop->getCurrentFrame() : getCurrentFrame(); + bool running = _animationLoop ? _animationLoop->getRunning() : getRunning(); + float firstFrame = _animationLoop ? _animationLoop->getFirstFrame() : getFirstFrame(); + float lastFrame = _animationLoop ? _animationLoop->getLastFrame() : getLastFrame(); + bool loop = _animationLoop ? _animationLoop->getLoop() : getLoop(); + bool hold = _animationLoop ? _animationLoop->getHold() : getHold(); + bool startAutomatically = _animationLoop ? _animationLoop->getStartAutomatically() : getStartAutomatically(); + + QJsonDocument settingsAsJson = QJsonDocument::fromJson(value.toUtf8()); + QJsonObject settingsAsJsonObject = settingsAsJson.object(); + QVariantMap settingsMap = settingsAsJsonObject.toVariantMap(); + + if (settingsMap.contains("fps")) { + fps = settingsMap["fps"].toFloat(); + } + + // old settings had frameIndex + if (settingsMap.contains("frameIndex")) { + currentFrame = settingsMap["frameIndex"].toFloat(); + } + + if (settingsMap.contains("running")) { + running = settingsMap["running"].toBool(); + } + + if (settingsMap.contains("firstFrame")) { + firstFrame = settingsMap["firstFrame"].toFloat(); + } + + if (settingsMap.contains("lastFrame")) { + lastFrame = settingsMap["lastFrame"].toFloat(); + } + + if (settingsMap.contains("loop")) { + running = settingsMap["loop"].toBool(); + } + + if (settingsMap.contains("hold")) { + running = settingsMap["hold"].toBool(); + } + + if (settingsMap.contains("startAutomatically")) { + running = settingsMap["startAutomatically"].toBool(); + } + + if (_animationLoop) { + _animationLoop->setFPS(fps); + _animationLoop->setCurrentFrame(currentFrame); + _animationLoop->setRunning(running); + _animationLoop->setFirstFrame(firstFrame); + _animationLoop->setLastFrame(lastFrame); + _animationLoop->setLoop(loop); + _animationLoop->setHold(hold); + _animationLoop->setStartAutomatically(startAutomatically); + } else { + setFPS(fps); + setCurrentFrame(currentFrame); + setRunning(running); + setFirstFrame(firstFrame); + setLastFrame(lastFrame); + setLoop(loop); + setHold(hold); + setStartAutomatically(startAutomatically); + } +} + + +void AnimationPropertyGroup::debugDump() const { + qDebug() << " AnimationPropertyGroup: ---------------------------------------------"; + qDebug() << " url:" << getURL() << " has changed:" << urlChanged(); + qDebug() << " fps:" << getFPS() << " has changed:" << fpsChanged(); + qDebug() << "currentFrame:" << getCurrentFrame() << " has changed:" << currentFrameChanged(); +} + +void AnimationPropertyGroup::listChangedProperties(QList& out) { + if (urlChanged()) { + out << "animation-url"; + } + if (fpsChanged()) { + out << "animation-fps"; + } + if (currentFrameChanged()) { + out << "animation-currentFrame"; + } +} + + +bool AnimationPropertyGroup::appendToEditPacket(OctreePacketData* packetData, + EntityPropertyFlags& requestedProperties, + EntityPropertyFlags& propertyFlags, + EntityPropertyFlags& propertiesDidntFit, + int& propertyCount, + OctreeElement::AppendState& appendState) const { + + bool successPropertyFits = true; + + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_URL, getURL()); + if (_animationLoop) { + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FPS, _animationLoop->getFPS()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, _animationLoop->getCurrentFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, _animationLoop->getRunning()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, _animationLoop->getLoop()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, _animationLoop->getFirstFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, _animationLoop->getLastFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, _animationLoop->getHold()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, _animationLoop->getStartAutomatically()); + } else { + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FPS, getFPS()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, getCurrentFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, getRunning()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, getLoop()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, getFirstFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, getLastFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, getHold()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, getStartAutomatically()); + } + + return true; +} + + +bool AnimationPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyFlags, const unsigned char*& dataAt , int& processedBytes) { + + int bytesRead = 0; + bool overwriteLocalData = true; + bool somethingChanged = false; + + READ_ENTITY_PROPERTY(PROP_ANIMATION_URL, QString, setURL); + + if (_animationLoop) { + READ_ENTITY_PROPERTY(PROP_ANIMATION_FPS, float, _animationLoop->setFPS); + READ_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, float, _animationLoop->setCurrentFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, bool, _animationLoop->setRunning); + READ_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, bool, _animationLoop->setLoop); + READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, _animationLoop->setFirstFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, _animationLoop->setLastFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, _animationLoop->setHold); + READ_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, bool, _animationLoop->setStartAutomatically); + } else { + READ_ENTITY_PROPERTY(PROP_ANIMATION_FPS, float, setFPS); + READ_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, float, setCurrentFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, bool, setRunning); + READ_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, bool, setLoop); + READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); + READ_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, bool, setStartAutomatically); + } + + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_URL, URL); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FPS, FPS); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FRAME_INDEX, CurrentFrame); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_PLAYING, Running); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_LOOP, Loop); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FIRST_FRAME, FirstFrame); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_LAST_FRAME, LastFrame); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_HOLD, Hold); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_START_AUTOMATICALLY, StartAutomatically); + + processedBytes += bytesRead; + + Q_UNUSED(somethingChanged); + + return true; +} + +void AnimationPropertyGroup::markAllChanged() { + _urlChanged = true; + _fpsChanged = true; + _currentFrameChanged = true; + _runningChanged = true; +} + +EntityPropertyFlags AnimationPropertyGroup::getChangedProperties() const { + EntityPropertyFlags changedProperties; + + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_URL, url); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_FPS, fps); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_FRAME_INDEX, currentFrame); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_PLAYING, running); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_LOOP, loop); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_FIRST_FRAME, firstFrame); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_LAST_FRAME, lastFrame); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_HOLD, hold); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_START_AUTOMATICALLY, startAutomatically); + + return changedProperties; +} + +void AnimationPropertyGroup::getProperties(EntityItemProperties& properties) const { + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, URL, getURL); + if (_animationLoop) { + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FPS, _animationLoop->getFPS); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, CurrentFrame, _animationLoop->getCurrentFrame); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Running, _animationLoop->getRunning); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Loop, _animationLoop->getLoop); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FirstFrame, _animationLoop->getFirstFrame); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, LastFrame, _animationLoop->getLastFrame); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Hold, _animationLoop->getHold); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, StartAutomatically, _animationLoop->getStartAutomatically); + } else { + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FPS, getFPS); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, CurrentFrame, getCurrentFrame); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Running, getRunning); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Loop, getLoop); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FirstFrame, getFirstFrame); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, LastFrame, getLastFrame); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Hold, getHold); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, StartAutomatically, getStartAutomatically); + } +} + +bool AnimationPropertyGroup::setProperties(const EntityItemProperties& properties) { + bool somethingChanged = false; + + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, URL, url, setURL); + if (_animationLoop) { + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FPS, fps, _animationLoop->setFPS); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, CurrentFrame, currentFrame, _animationLoop->setCurrentFrame); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Running, running, _animationLoop->setRunning); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Loop, loop, _animationLoop->setLoop); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FirstFrame, firstFrame, _animationLoop->setFirstFrame); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, LastFrame, lastFrame, _animationLoop->setLastFrame); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Hold, hold, _animationLoop->setHold); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, StartAutomatically, startAutomatically, _animationLoop->setStartAutomatically); + } else { + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FPS, fps, setFPS); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, CurrentFrame, currentFrame, setCurrentFrame); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Running, running, setRunning); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Loop, loop, setLoop); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FirstFrame, firstFrame, setFirstFrame); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, LastFrame, lastFrame, setLastFrame); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Hold, hold, setHold); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, StartAutomatically, startAutomatically, setStartAutomatically); + } + + return somethingChanged; +} + +EntityPropertyFlags AnimationPropertyGroup::getEntityProperties(EncodeBitstreamParams& params) const { + EntityPropertyFlags requestedProperties; + + requestedProperties += PROP_ANIMATION_URL; + requestedProperties += PROP_ANIMATION_FPS; + requestedProperties += PROP_ANIMATION_FRAME_INDEX; + requestedProperties += PROP_ANIMATION_PLAYING; + requestedProperties += PROP_ANIMATION_LOOP; + requestedProperties += PROP_ANIMATION_FIRST_FRAME; + requestedProperties += PROP_ANIMATION_LAST_FRAME; + requestedProperties += PROP_ANIMATION_HOLD; + requestedProperties += PROP_ANIMATION_START_AUTOMATICALLY; + + return requestedProperties; +} + +void AnimationPropertyGroup::appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params, + EntityTreeElementExtraEncodeData* entityTreeElementExtraEncodeData, + EntityPropertyFlags& requestedProperties, + EntityPropertyFlags& propertyFlags, + EntityPropertyFlags& propertiesDidntFit, + int& propertyCount, + OctreeElement::AppendState& appendState) const { + + bool successPropertyFits = true; + + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_URL, getURL()); + if (_animationLoop) { + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FPS, _animationLoop->getFPS()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, _animationLoop->getCurrentFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, _animationLoop->getRunning()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, _animationLoop->getLoop()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, _animationLoop->getFirstFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, _animationLoop->getLastFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, _animationLoop->getHold()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, _animationLoop->getStartAutomatically()); + } else { + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FPS, getFPS()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, getCurrentFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, getRunning()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, getLoop()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, getFirstFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, getLastFrame()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, getHold()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, getStartAutomatically()); + } +} + +int AnimationPropertyGroup::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_ANIMATION_URL, QString, setURL); + + if (_animationLoop) { + // apply new properties to our associated AnimationLoop + READ_ENTITY_PROPERTY(PROP_ANIMATION_FPS, float, _animationLoop->setFPS); + READ_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, float, _animationLoop->setCurrentFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, bool, _animationLoop->setRunning); + READ_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, bool, _animationLoop->setLoop); + READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, _animationLoop->setFirstFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, _animationLoop->setLastFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, _animationLoop->setHold); + READ_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, bool, _animationLoop->setStartAutomatically); + } else { + READ_ENTITY_PROPERTY(PROP_ANIMATION_FPS, float, setFPS); + READ_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, float, setCurrentFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, bool, setRunning); + READ_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, bool, setLoop); + READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); + READ_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, bool, setStartAutomatically); + } + + return bytesRead; +} diff --git a/libraries/entities/src/KeyLightPropertyGroup.h b/libraries/entities/src/KeyLightPropertyGroup.h new file mode 100644 index 0000000000..92b4f7e118 --- /dev/null +++ b/libraries/entities/src/KeyLightPropertyGroup.h @@ -0,0 +1,89 @@ +// +// KeyLightPropertyGroup.h +// libraries/entities/src +// +// Created by Sam Gateau on 2015/10/23. +// 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_KeyLightPropertyGroup_h +#define hifi_KeyLightPropertyGroup_h + +#include + +#include + +#include +#include "EntityItemPropertiesMacros.h" +#include "PropertyGroup.h" + +class EntityItemProperties; +class EncodeBitstreamParams; +class OctreePacketData; +class EntityTreeElementExtraEncodeData; +class ReadBitstreamToTreeParams; + +class KeyLightPropertyGroup : public PropertyGroup { +public: + void associateWithAnimationLoop(AnimationLoop* animationLoop) { _animationLoop = animationLoop; } + + // EntityItemProperty related helpers + virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; + virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings); + virtual void debugDump() const; + virtual void listChangedProperties(QList& out); + + virtual bool appendToEditPacket(OctreePacketData* packetData, + EntityPropertyFlags& requestedProperties, + EntityPropertyFlags& propertyFlags, + EntityPropertyFlags& propertiesDidntFit, + int& propertyCount, + OctreeElement::AppendState& appendState) const; + + virtual bool decodeFromEditPacket(EntityPropertyFlags& propertyFlags, const unsigned char*& dataAt , int& processedBytes); + virtual void markAllChanged(); + virtual EntityPropertyFlags getChangedProperties() const; + + // EntityItem related helpers + // methods for getting/setting all properties of an entity + virtual void getProperties(EntityItemProperties& propertiesOut) const; + + /// returns true if something changed + virtual bool setProperties(const EntityItemProperties& properties); + + virtual EntityPropertyFlags getEntityProperties(EncodeBitstreamParams& params) const; + + virtual void appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params, + EntityTreeElementExtraEncodeData* entityTreeElementExtraEncodeData, + EntityPropertyFlags& requestedProperties, + EntityPropertyFlags& propertyFlags, + EntityPropertyFlags& propertiesDidntFit, + int& propertyCount, + OctreeElement::AppendState& appendState) const; + + virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, + ReadBitstreamToTreeParams& args, + EntityPropertyFlags& propertyFlags, bool overwriteLocalData, + bool& somethingChanged); + + DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, URL, url, QString, ""); + DEFINE_PROPERTY(PROP_ANIMATION_FPS, FPS, fps, float, 30.0f); + DEFINE_PROPERTY(PROP_ANIMATION_FRAME_INDEX, CurrentFrame, currentFrame, float, 0.0f); + DEFINE_PROPERTY(PROP_ANIMATION_PLAYING, Running, running, bool, false); // was animationIsPlaying + DEFINE_PROPERTY(PROP_ANIMATION_LOOP, Loop, loop, bool, true); // was animationSettings.loop + DEFINE_PROPERTY(PROP_ANIMATION_FIRST_FRAME, FirstFrame, firstFrame, float, 0.0f); // was animationSettings.firstFrame + DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float, AnimationLoop::MAXIMUM_POSSIBLE_FRAME); // was animationSettings.lastFrame + DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool, false); // was animationSettings.hold + DEFINE_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, StartAutomatically, startAutomatically, bool, false); // was animationSettings.startAutomatically + +protected: + void setFromOldAnimationSettings(const QString& value); + + AnimationLoop* _animationLoop = nullptr; +}; + +#endif // hifi_KeyLightPropertyGroup_h From bc7ad9d3f78570b02dff9e9718897181b5f8b2f2 Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 26 Oct 2015 09:27:06 -0700 Subject: [PATCH 02/19] Move the keyLIght properties in their own group and add the ambientURL in --- .../src/EntityTreeRenderer.cpp | 9 +- .../entities/src/EntityItemProperties.cpp | 40 +- libraries/entities/src/EntityItemProperties.h | 5 +- libraries/entities/src/EntityPropertyFlags.h | 3 +- .../entities/src/KeyLightPropertyGroup.cpp | 428 +++++------------- .../entities/src/KeyLightPropertyGroup.h | 55 ++- libraries/entities/src/ZoneEntityItem.cpp | 56 +-- libraries/entities/src/ZoneEntityItem.h | 42 +- .../networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 1 + 10 files changed, 207 insertions(+), 434 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index d5bf0bde8a..ee247b5b62 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -270,10 +270,11 @@ void EntityTreeRenderer::applyZonePropertiesToScene(std::shared_ptrgetStageYearTime(); _hasPreviousZone = true; } - scene->setKeyLightColor(zone->getKeyLightColorVec3()); - scene->setKeyLightIntensity(zone->getKeyLightIntensity()); - scene->setKeyLightAmbientIntensity(zone->getKeyLightAmbientIntensity()); - scene->setKeyLightDirection(zone->getKeyLightDirection()); + auto xcolor = zone->getKeyLightProperties().getColor(); + scene->setKeyLightColor(glm::vec3(xcolor.red / 256.0f, xcolor.green / 256.0f, xcolor.blue / 256.0f)); + scene->setKeyLightIntensity(zone->getKeyLightProperties().getIntensity()); + scene->setKeyLightAmbientIntensity(zone->getKeyLightProperties().getAmbientIntensity()); + scene->setKeyLightDirection(zone->getKeyLightProperties().getDirection()); scene->setStageSunModelEnable(zone->getStageProperties().getSunModelEnabled()); scene->setStageLocation(zone->getStageProperties().getLongitude(), zone->getStageProperties().getLatitude(), zone->getStageProperties().getAltitude()); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 19c8f779b4..002f1bb527 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -28,6 +28,7 @@ AnimationPropertyGroup EntityItemProperties::_staticAnimation; AtmospherePropertyGroup EntityItemProperties::_staticAtmosphere; SkyboxPropertyGroup EntityItemProperties::_staticSkybox; StagePropertyGroup EntityItemProperties::_staticStage; +KeyLightPropertyGroup EntityItemProperties::_staticKeyLight; EntityPropertyList PROP_LAST_ITEM = (EntityPropertyList)(PROP_AFTER_LAST_ITEM - 1); @@ -80,7 +81,8 @@ void EntityItemProperties::debugDump() const { getAnimation().debugDump(); getAtmosphere().debugDump(); getSkybox().debugDump(); - + getKeyLight().debugDump(); + qCDebug(entities) << " changed properties..."; EntityPropertyFlags props = getChangedProperties(); props.debugDumpBits(); @@ -235,10 +237,6 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_RADIUS_FINISH, radiusFinish); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); CHECK_PROPERTY_CHANGE(PROP_NAME, name); - CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_COLOR, keyLightColor); - CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_INTENSITY, keyLightIntensity); - CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_AMBIENT_INTENSITY, keyLightAmbientIntensity); - CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_DIRECTION, keyLightDirection); CHECK_PROPERTY_CHANGE(PROP_BACKGROUND_MODE, backgroundMode); CHECK_PROPERTY_CHANGE(PROP_SOURCE_URL, sourceUrl); CHECK_PROPERTY_CHANGE(PROP_VOXEL_VOLUME_SIZE, voxelVolumeSize); @@ -263,6 +261,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_Z_P_NEIGHBOR_ID, zPNeighborID); changedProperties += _animation.getChangedProperties(); + changedProperties += _keyLight.getChangedProperties(); changedProperties += _atmosphere.getChangedProperties(); changedProperties += _skybox.getChangedProperties(); changedProperties += _stage.getChangedProperties(); @@ -392,10 +391,8 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool // Zones only if (_type == EntityTypes::Zone) { - COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_COLOR, keyLightColor); - COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_INTENSITY, keyLightIntensity); - COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_AMBIENT_INTENSITY, keyLightAmbientIntensity); - COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_KEYLIGHT_DIRECTION, keyLightDirection); + _keyLight.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties); + COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_BACKGROUND_MODE, backgroundMode, getBackgroundModeAsString()); _stage.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties); @@ -546,10 +543,6 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(name, QString, setName); COPY_PROPERTY_FROM_QSCRIPTVALUE(collisionSoundURL, QString, setCollisionSoundURL); - COPY_PROPERTY_FROM_QSCRIPTVALUE(keyLightColor, xColor, setKeyLightColor); - COPY_PROPERTY_FROM_QSCRIPTVALUE(keyLightIntensity, float, setKeyLightIntensity); - COPY_PROPERTY_FROM_QSCRIPTVALUE(keyLightAmbientIntensity, float, setKeyLightAmbientIntensity); - COPY_PROPERTY_FROM_QSCRIPTVALUE(keyLightDirection, glmVec3, setKeyLightDirection); COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(backgroundMode, BackgroundMode); COPY_PROPERTY_FROM_QSCRIPTVALUE(sourceUrl, QString, setSourceUrl); COPY_PROPERTY_FROM_QSCRIPTVALUE(voxelVolumeSize, glmVec3, setVoxelVolumeSize); @@ -575,6 +568,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool } _animation.copyFromScriptValue(object, _defaultSettings); + _keyLight.copyFromScriptValue(object, _defaultSettings); _atmosphere.copyFromScriptValue(object, _defaultSettings); _skybox.copyFromScriptValue(object, _defaultSettings); _stage.copyFromScriptValue(object, _defaultSettings); @@ -968,11 +962,9 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem } if (properties.getType() == EntityTypes::Zone) { - APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_COLOR, properties.getKeyLightColor()); - APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, properties.getKeyLightIntensity()); - APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, properties.getKeyLightAmbientIntensity()); - APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, properties.getKeyLightDirection()); - + _staticKeyLight.setProperties(properties); + _staticKeyLight.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); + _staticStage.setProperties(properties); _staticStage.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); @@ -1252,11 +1244,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int } if (properties.getType() == EntityTypes::Zone) { - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEYLIGHT_COLOR, xColor, setKeyLightColor); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEYLIGHT_INTENSITY, float, setKeyLightIntensity); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEYLIGHT_AMBIENT_INTENSITY, float, setKeyLightAmbientIntensity); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEYLIGHT_DIRECTION, glm::vec3, setKeyLightDirection); - + properties.getKeyLight().decodeFromEditPacket(propertyFlags, dataAt , processedBytes); properties.getStage().decodeFromEditPacket(propertyFlags, dataAt , processedBytes); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHAPE_TYPE, ShapeType, setShapeType); @@ -1407,10 +1395,7 @@ void EntityItemProperties::markAllChanged() { _marketplaceIDChanged = true; - _keyLightColorChanged = true; - _keyLightIntensityChanged = true; - _keyLightAmbientIntensityChanged = true; - _keyLightDirectionChanged = true; + _keyLight.markAllChanged(); _backgroundModeChanged = true; @@ -1764,6 +1749,7 @@ QList EntityItemProperties::listChangedProperties() { } getAnimation().listChangedProperties(out); + getKeyLight().listChangedProperties(out); getAtmosphere().listChangedProperties(out); getSkybox().listChangedProperties(out); getStage().listChangedProperties(out); diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 2227644484..b95f4d35f4 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -160,10 +160,7 @@ public: DEFINE_PROPERTY(PROP_RADIUS_START, RadiusStart, radiusStart, float, ParticleEffectEntityItem::DEFAULT_RADIUS_START); DEFINE_PROPERTY(PROP_RADIUS_FINISH, RadiusFinish, radiusFinish, float, ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID); - DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor, ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR); - DEFINE_PROPERTY(PROP_KEYLIGHT_INTENSITY, KeyLightIntensity, keyLightIntensity, float, ZoneEntityItem::DEFAULT_KEYLIGHT_INTENSITY); - DEFINE_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, KeyLightAmbientIntensity, keyLightAmbientIntensity, float, ZoneEntityItem::DEFAULT_KEYLIGHT_AMBIENT_INTENSITY); - DEFINE_PROPERTY_REF(PROP_KEYLIGHT_DIRECTION, KeyLightDirection, keyLightDirection, glm::vec3, ZoneEntityItem::DEFAULT_KEYLIGHT_DIRECTION); + DEFINE_PROPERTY_GROUP(KeyLight, keyLight, KeyLightPropertyGroup); 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); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index d70a5c9616..51a0c34c76 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -189,7 +189,8 @@ enum EntityPropertyList { PROP_BACKGROUND_MODE = PROP_MODEL_URL, PROP_SKYBOX_COLOR = PROP_ANIMATION_URL, PROP_SKYBOX_URL = PROP_ANIMATION_FPS, - + PROP_KEYLIGHT_AMBIENT_URL = PROP_ANIMATION_FRAME_INDEX, + // 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, diff --git a/libraries/entities/src/KeyLightPropertyGroup.cpp b/libraries/entities/src/KeyLightPropertyGroup.cpp index f9d8c07443..b7e0a70b85 100644 --- a/libraries/entities/src/KeyLightPropertyGroup.cpp +++ b/libraries/entities/src/KeyLightPropertyGroup.cpp @@ -1,8 +1,8 @@ // -// AnimationPropertyGroup.cpp +// KeyLightPropertyGroup.h // libraries/entities/src // -// Created by Brad Hefta-Gaub on 12/4/13. +// Created by Sam Gateau on 2015/10/23. // Copyright 2013 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. @@ -14,169 +14,71 @@ #include -#include "AnimationPropertyGroup.h" +#include "KeyLightPropertyGroup.h" #include "EntityItemProperties.h" #include "EntityItemPropertiesMacros.h" -void AnimationPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_URL, Animation, animation, URL, url); - if (_animationLoop) { - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FPS, Animation, animation, FPS, fps, _animationLoop->getFPS); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FRAME_INDEX, Animation, animation, CurrentFrame, currentFrame, _animationLoop->getFPS); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_PLAYING, Animation, animation, Running, running, _animationLoop->getRunning); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_LOOP, Animation, animation, Loop, loop, _animationLoop->getLoop); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_FIRST_FRAME, Animation, animation, FirstFrame, firstFrame, _animationLoop->getFirstFrame); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_LAST_FRAME, Animation, animation, LastFrame, lastFrame, _animationLoop->getLastFrame); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_HOLD, Animation, animation, Hold, hold, _animationLoop->getHold); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_ANIMATION_START_AUTOMATICALLY, Animation, animation, StartAutomatically, startAutomatically, _animationLoop->getStartAutomatically); - } else { - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_FPS, Animation, animation, FPS, fps); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_FRAME_INDEX, Animation, animation, CurrentFrame, currentFrame); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_PLAYING, Animation, animation, Running, running); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_LOOP, Animation, animation, Loop, loop); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_FIRST_FRAME, Animation, animation, FirstFrame, firstFrame); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_LAST_FRAME, Animation, animation, LastFrame, lastFrame); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_HOLD, Animation, animation, Hold, hold); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_START_AUTOMATICALLY, Animation, animation, StartAutomatically, startAutomatically); - } +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 { + + 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 AnimationPropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) { - - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, url, QString, setURL); +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(animationURL, QString, setURL, getURL); - COPY_PROPERTY_FROM_QSCRIPTVALUE_NOCHECK(animationSettings, QString, setFromOldAnimationSettings); - - if (_animationLoop) { - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, fps, float, _animationLoop->setFPS); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, currentFrame, float, _animationLoop->setCurrentFrame); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, running, bool, _animationLoop->setRunning); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, loop, bool, _animationLoop->setLoop); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, firstFrame, float, _animationLoop->setFirstFrame); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, lastFrame, float, _animationLoop->setLastFrame); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, hold, bool, _animationLoop->setHold); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, startAutomatically, bool, _animationLoop->setStartAutomatically); - - // legacy property support - COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFPS, float, _animationLoop->setFPS, _animationLoop->getFPS); - COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationIsPlaying, bool, _animationLoop->setRunning, _animationLoop->getRunning); - COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFrameIndex, float, _animationLoop->setCurrentFrame, _animationLoop->getCurrentFrame); - - } else { - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, fps, float, setFPS); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, currentFrame, float, setCurrentFrame); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, running, bool, setRunning); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, loop, bool, setLoop); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, firstFrame, float, setFirstFrame); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, lastFrame, float, setLastFrame); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, hold, bool, setHold); - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, startAutomatically, bool, setStartAutomatically); - - // legacy property support - COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFPS, float, setFPS, getFPS); - COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationIsPlaying, bool, setRunning, getRunning); - COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFrameIndex, float, setCurrentFrame, getCurrentFrame); - } - + 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 AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) { - // the animations setting is a JSON string that may contain various animation settings. - // if it includes fps, currentFrame, or running, those values will be parsed out and - // will over ride the regular animation settings - float fps = _animationLoop ? _animationLoop->getFPS() : getFPS(); - float currentFrame = _animationLoop ? _animationLoop->getCurrentFrame() : getCurrentFrame(); - bool running = _animationLoop ? _animationLoop->getRunning() : getRunning(); - float firstFrame = _animationLoop ? _animationLoop->getFirstFrame() : getFirstFrame(); - float lastFrame = _animationLoop ? _animationLoop->getLastFrame() : getLastFrame(); - bool loop = _animationLoop ? _animationLoop->getLoop() : getLoop(); - bool hold = _animationLoop ? _animationLoop->getHold() : getHold(); - bool startAutomatically = _animationLoop ? _animationLoop->getStartAutomatically() : getStartAutomatically(); +void KeyLightPropertyGroup::debugDump() const { + qDebug() << " KeyLightPropertyGroup: ---------------------------------------------"; + qDebug() << " color:" << getColor(); // << "," << getColor()[1] << "," << getColor()[2]; + qDebug() << " intensity:" << getIntensity(); + qDebug() << " direction:" << getDirection(); + qDebug() << " ambientIntensity:" << getAmbientIntensity(); + qDebug() << " ambientURL:" << getAmbientURL(); +} - QJsonDocument settingsAsJson = QJsonDocument::fromJson(value.toUtf8()); - QJsonObject settingsAsJsonObject = settingsAsJson.object(); - QVariantMap settingsMap = settingsAsJsonObject.toVariantMap(); - - if (settingsMap.contains("fps")) { - fps = settingsMap["fps"].toFloat(); +void KeyLightPropertyGroup::listChangedProperties(QList& out) { + if (colorChanged()) { + out << "keyLight-color"; } - - // old settings had frameIndex - if (settingsMap.contains("frameIndex")) { - currentFrame = settingsMap["frameIndex"].toFloat(); + if (intensityChanged()) { + out << "keyLight-intensity"; } - - if (settingsMap.contains("running")) { - running = settingsMap["running"].toBool(); + if (directionChanged()) { + out << "keyLight-direction"; } - - if (settingsMap.contains("firstFrame")) { - firstFrame = settingsMap["firstFrame"].toFloat(); + if (ambientIntensityChanged()) { + out << "keyLight-ambientIntensity"; } - - if (settingsMap.contains("lastFrame")) { - lastFrame = settingsMap["lastFrame"].toFloat(); - } - - if (settingsMap.contains("loop")) { - running = settingsMap["loop"].toBool(); - } - - if (settingsMap.contains("hold")) { - running = settingsMap["hold"].toBool(); - } - - if (settingsMap.contains("startAutomatically")) { - running = settingsMap["startAutomatically"].toBool(); - } - - if (_animationLoop) { - _animationLoop->setFPS(fps); - _animationLoop->setCurrentFrame(currentFrame); - _animationLoop->setRunning(running); - _animationLoop->setFirstFrame(firstFrame); - _animationLoop->setLastFrame(lastFrame); - _animationLoop->setLoop(loop); - _animationLoop->setHold(hold); - _animationLoop->setStartAutomatically(startAutomatically); - } else { - setFPS(fps); - setCurrentFrame(currentFrame); - setRunning(running); - setFirstFrame(firstFrame); - setLastFrame(lastFrame); - setLoop(loop); - setHold(hold); - setStartAutomatically(startAutomatically); + if (ambientURLChanged()) { + out << "keyLight-ambientURL"; } } -void AnimationPropertyGroup::debugDump() const { - qDebug() << " AnimationPropertyGroup: ---------------------------------------------"; - qDebug() << " url:" << getURL() << " has changed:" << urlChanged(); - qDebug() << " fps:" << getFPS() << " has changed:" << fpsChanged(); - qDebug() << "currentFrame:" << getCurrentFrame() << " has changed:" << currentFrameChanged(); -} - -void AnimationPropertyGroup::listChangedProperties(QList& out) { - if (urlChanged()) { - out << "animation-url"; - } - if (fpsChanged()) { - out << "animation-fps"; - } - if (currentFrameChanged()) { - out << "animation-currentFrame"; - } -} - - -bool AnimationPropertyGroup::appendToEditPacket(OctreePacketData* packetData, +bool KeyLightPropertyGroup::appendToEditPacket(OctreePacketData* packetData, EntityPropertyFlags& requestedProperties, EntityPropertyFlags& propertyFlags, EntityPropertyFlags& propertiesDidntFit, @@ -184,70 +86,36 @@ bool AnimationPropertyGroup::appendToEditPacket(OctreePacketData* packetData, OctreeElement::AppendState& appendState) const { bool successPropertyFits = true; - - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_URL, getURL()); - if (_animationLoop) { - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FPS, _animationLoop->getFPS()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, _animationLoop->getCurrentFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, _animationLoop->getRunning()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, _animationLoop->getLoop()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, _animationLoop->getFirstFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, _animationLoop->getLastFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, _animationLoop->getHold()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, _animationLoop->getStartAutomatically()); - } else { - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FPS, getFPS()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, getCurrentFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, getRunning()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, getLoop()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, getFirstFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, getLastFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, getHold()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, getStartAutomatically()); - } - + + 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 AnimationPropertyGroup::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_ANIMATION_URL, QString, setURL); - - if (_animationLoop) { - READ_ENTITY_PROPERTY(PROP_ANIMATION_FPS, float, _animationLoop->setFPS); - READ_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, float, _animationLoop->setCurrentFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, bool, _animationLoop->setRunning); - READ_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, bool, _animationLoop->setLoop); - READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, _animationLoop->setFirstFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, _animationLoop->setLastFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, _animationLoop->setHold); - READ_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, bool, _animationLoop->setStartAutomatically); - } else { - READ_ENTITY_PROPERTY(PROP_ANIMATION_FPS, float, setFPS); - READ_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, float, setCurrentFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, bool, setRunning); - READ_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, bool, setLoop); - READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); - READ_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, bool, setStartAutomatically); - } - - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_URL, URL); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FPS, FPS); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FRAME_INDEX, CurrentFrame); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_PLAYING, Running); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_LOOP, Loop); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FIRST_FRAME, FirstFrame); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_LAST_FRAME, LastFrame); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_HOLD, Hold); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_START_AUTOMATICALLY, StartAutomatically); - + + 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; Q_UNUSED(somethingChanged); @@ -255,96 +123,60 @@ bool AnimationPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyF return true; } -void AnimationPropertyGroup::markAllChanged() { - _urlChanged = true; - _fpsChanged = true; - _currentFrameChanged = true; - _runningChanged = true; +void KeyLightPropertyGroup::markAllChanged() { + _colorChanged = true; + _intensityChanged = true; + _ambientIntensityChanged = true; + _directionChanged = true; + _ambientURLChanged = true; } -EntityPropertyFlags AnimationPropertyGroup::getChangedProperties() const { +EntityPropertyFlags KeyLightPropertyGroup::getChangedProperties() const { EntityPropertyFlags changedProperties; + + 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); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_URL, url); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_FPS, fps); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_FRAME_INDEX, currentFrame); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_PLAYING, running); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_LOOP, loop); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_FIRST_FRAME, firstFrame); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_LAST_FRAME, lastFrame); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_HOLD, hold); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_START_AUTOMATICALLY, startAutomatically); - return changedProperties; } -void AnimationPropertyGroup::getProperties(EntityItemProperties& properties) const { - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, URL, getURL); - if (_animationLoop) { - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FPS, _animationLoop->getFPS); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, CurrentFrame, _animationLoop->getCurrentFrame); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Running, _animationLoop->getRunning); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Loop, _animationLoop->getLoop); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FirstFrame, _animationLoop->getFirstFrame); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, LastFrame, _animationLoop->getLastFrame); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Hold, _animationLoop->getHold); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, StartAutomatically, _animationLoop->getStartAutomatically); - } else { - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FPS, getFPS); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, CurrentFrame, getCurrentFrame); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Running, getRunning); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Loop, getLoop); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FirstFrame, getFirstFrame); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, LastFrame, getLastFrame); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Hold, getHold); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, StartAutomatically, getStartAutomatically); - } +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 AnimationPropertyGroup::setProperties(const EntityItemProperties& properties) { +bool KeyLightPropertyGroup::setProperties(const EntityItemProperties& properties) { bool somethingChanged = false; - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, URL, url, setURL); - if (_animationLoop) { - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FPS, fps, _animationLoop->setFPS); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, CurrentFrame, currentFrame, _animationLoop->setCurrentFrame); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Running, running, _animationLoop->setRunning); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Loop, loop, _animationLoop->setLoop); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FirstFrame, firstFrame, _animationLoop->setFirstFrame); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, LastFrame, lastFrame, _animationLoop->setLastFrame); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Hold, hold, _animationLoop->setHold); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, StartAutomatically, startAutomatically, _animationLoop->setStartAutomatically); - } else { - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FPS, fps, setFPS); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, CurrentFrame, currentFrame, setCurrentFrame); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Running, running, setRunning); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Loop, loop, setLoop); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FirstFrame, firstFrame, setFirstFrame); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, LastFrame, lastFrame, setLastFrame); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Hold, hold, setHold); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, StartAutomatically, startAutomatically, setStartAutomatically); - } + 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; } -EntityPropertyFlags AnimationPropertyGroup::getEntityProperties(EncodeBitstreamParams& params) const { +EntityPropertyFlags KeyLightPropertyGroup::getEntityProperties(EncodeBitstreamParams& params) const { EntityPropertyFlags requestedProperties; - requestedProperties += PROP_ANIMATION_URL; - requestedProperties += PROP_ANIMATION_FPS; - requestedProperties += PROP_ANIMATION_FRAME_INDEX; - requestedProperties += PROP_ANIMATION_PLAYING; - requestedProperties += PROP_ANIMATION_LOOP; - requestedProperties += PROP_ANIMATION_FIRST_FRAME; - requestedProperties += PROP_ANIMATION_LAST_FRAME; - requestedProperties += PROP_ANIMATION_HOLD; - requestedProperties += PROP_ANIMATION_START_AUTOMATICALLY; + requestedProperties += PROP_KEYLIGHT_COLOR; + requestedProperties += PROP_KEYLIGHT_INTENSITY; + requestedProperties += PROP_KEYLIGHT_AMBIENT_INTENSITY; + requestedProperties += PROP_KEYLIGHT_DIRECTION; + requestedProperties += PROP_KEYLIGHT_AMBIENT_URL; return requestedProperties; } -void AnimationPropertyGroup::appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params, +void KeyLightPropertyGroup::appendSubclassData(OctreePacketData* packetData, EncodeBitstreamParams& params, EntityTreeElementExtraEncodeData* entityTreeElementExtraEncodeData, EntityPropertyFlags& requestedProperties, EntityPropertyFlags& propertyFlags, @@ -354,58 +186,26 @@ void AnimationPropertyGroup::appendSubclassData(OctreePacketData* packetData, En bool successPropertyFits = true; - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_URL, getURL()); - if (_animationLoop) { - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FPS, _animationLoop->getFPS()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, _animationLoop->getCurrentFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, _animationLoop->getRunning()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, _animationLoop->getLoop()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, _animationLoop->getFirstFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, _animationLoop->getLastFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, _animationLoop->getHold()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, _animationLoop->getStartAutomatically()); - } else { - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FPS, getFPS()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, getCurrentFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, getRunning()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, getLoop()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, getFirstFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, getLastFrame()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, getHold()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, getStartAutomatically()); - } + 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 AnimationPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, +int KeyLightPropertyGroup::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_ANIMATION_URL, QString, setURL); - - if (_animationLoop) { - // apply new properties to our associated AnimationLoop - READ_ENTITY_PROPERTY(PROP_ANIMATION_FPS, float, _animationLoop->setFPS); - READ_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, float, _animationLoop->setCurrentFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, bool, _animationLoop->setRunning); - READ_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, bool, _animationLoop->setLoop); - READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, _animationLoop->setFirstFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, _animationLoop->setLastFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, _animationLoop->setHold); - READ_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, bool, _animationLoop->setStartAutomatically); - } else { - READ_ENTITY_PROPERTY(PROP_ANIMATION_FPS, float, setFPS); - READ_ENTITY_PROPERTY(PROP_ANIMATION_FRAME_INDEX, float, setCurrentFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_PLAYING, bool, setRunning); - READ_ENTITY_PROPERTY(PROP_ANIMATION_LOOP, bool, setLoop); - READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); - READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); - READ_ENTITY_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, bool, setStartAutomatically); - } + + 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; } diff --git a/libraries/entities/src/KeyLightPropertyGroup.h b/libraries/entities/src/KeyLightPropertyGroup.h index 92b4f7e118..d4ead9b733 100644 --- a/libraries/entities/src/KeyLightPropertyGroup.h +++ b/libraries/entities/src/KeyLightPropertyGroup.h @@ -29,7 +29,7 @@ class ReadBitstreamToTreeParams; class KeyLightPropertyGroup : public PropertyGroup { public: - void associateWithAnimationLoop(AnimationLoop* animationLoop) { _animationLoop = animationLoop; } + //void associateWithAnimationLoop(AnimationLoop* animationLoop) { _animationLoop = animationLoop; } // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; @@ -69,8 +69,20 @@ public: ReadBitstreamToTreeParams& args, EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged); + + static const xColor DEFAULT_KEYLIGHT_COLOR; + static const float DEFAULT_KEYLIGHT_INTENSITY; + static const float DEFAULT_KEYLIGHT_AMBIENT_INTENSITY; + static const glm::vec3 DEFAULT_KEYLIGHT_DIRECTION; - DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, URL, url, QString, ""); + 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, ""); + + + /*DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, URL, url, QString, ""); DEFINE_PROPERTY(PROP_ANIMATION_FPS, FPS, fps, float, 30.0f); DEFINE_PROPERTY(PROP_ANIMATION_FRAME_INDEX, CurrentFrame, currentFrame, float, 0.0f); DEFINE_PROPERTY(PROP_ANIMATION_PLAYING, Running, running, bool, false); // was animationIsPlaying @@ -79,11 +91,42 @@ public: DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float, AnimationLoop::MAXIMUM_POSSIBLE_FRAME); // was animationSettings.lastFrame DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool, false); // was animationSettings.hold DEFINE_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, StartAutomatically, startAutomatically, bool, false); // was animationSettings.startAutomatically - + + xColor getKeyLightColor() const { xColor color = { _keyLightColor[RED_INDEX], _keyLightColor[GREEN_INDEX], _keyLightColor[BLUE_INDEX] }; return color; } + void setKeyLightColor(const xColor& value) { + _keyLightColor[RED_INDEX] = value.red; + _keyLightColor[GREEN_INDEX] = value.green; + _keyLightColor[BLUE_INDEX] = value.blue; + } + + void setKeyLightColor(const rgbColor& value) { + _keyLightColor[RED_INDEX] = value[RED_INDEX]; + _keyLightColor[GREEN_INDEX] = value[GREEN_INDEX]; + _keyLightColor[BLUE_INDEX] = value[BLUE_INDEX]; + } + + glm::vec3 getKeyLightColorVec3() const { + const quint8 MAX_COLOR = 255; + glm::vec3 color = { (float)_keyLightColor[RED_INDEX] / (float)MAX_COLOR, + (float)_keyLightColor[GREEN_INDEX] / (float)MAX_COLOR, + (float)_keyLightColor[BLUE_INDEX] / (float)MAX_COLOR }; + return color; + } + + + float getKeyLightIntensity() const { return _keyLightIntensity; } + void setKeyLightIntensity(float value) { _keyLightIntensity = value; } + + float getKeyLightAmbientIntensity() const { return _keyLightAmbientIntensity; } + void setKeyLightAmbientIntensity(float value) { _keyLightAmbientIntensity = value; } + + const glm::vec3& getKeyLightDirection() const { return _keyLightDirection; } + void setKeyLightDirection(const glm::vec3& value) { _keyLightDirection = value; } + */ + protected: - void setFromOldAnimationSettings(const QString& value); - - AnimationLoop* _animationLoop = nullptr; + // void setFromOldAnimationSettings(const QString& value); + }; #endif // hifi_KeyLightPropertyGroup_h diff --git a/libraries/entities/src/ZoneEntityItem.cpp b/libraries/entities/src/ZoneEntityItem.cpp index 3147af35e8..2d0e534fa7 100644 --- a/libraries/entities/src/ZoneEntityItem.cpp +++ b/libraries/entities/src/ZoneEntityItem.cpp @@ -23,10 +23,6 @@ bool ZoneEntityItem::_zonesArePickable = false; bool ZoneEntityItem::_drawZoneBoundaries = false; -const xColor ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR = { 255, 255, 255 }; -const float ZoneEntityItem::DEFAULT_KEYLIGHT_INTENSITY = 1.0f; -const float ZoneEntityItem::DEFAULT_KEYLIGHT_AMBIENT_INTENSITY = 0.5f; -const glm::vec3 ZoneEntityItem::DEFAULT_KEYLIGHT_DIRECTION = { 0.0f, -1.0f, 0.0f }; const ShapeType ZoneEntityItem::DEFAULT_SHAPE_TYPE = SHAPE_TYPE_BOX; const QString ZoneEntityItem::DEFAULT_COMPOUND_SHAPE_URL = ""; @@ -39,13 +35,6 @@ ZoneEntityItem::ZoneEntityItem(const EntityItemID& entityItemID, const EntityIte { _type = EntityTypes::Zone; - _keyLightColor[RED_INDEX] = DEFAULT_KEYLIGHT_COLOR.red; - _keyLightColor[GREEN_INDEX] = DEFAULT_KEYLIGHT_COLOR.green; - _keyLightColor[BLUE_INDEX] = DEFAULT_KEYLIGHT_COLOR.blue; - - _keyLightIntensity = DEFAULT_KEYLIGHT_INTENSITY; - _keyLightAmbientIntensity = DEFAULT_KEYLIGHT_AMBIENT_INTENSITY; - _keyLightDirection = DEFAULT_KEYLIGHT_DIRECTION; _shapeType = DEFAULT_SHAPE_TYPE; _compoundShapeURL = DEFAULT_COMPOUND_SHAPE_URL; @@ -77,11 +66,9 @@ EnvironmentData ZoneEntityItem::getEnvironmentData() const { EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredProperties) const { EntityItemProperties properties = EntityItem::getProperties(desiredProperties); // get the properties from our base class - COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightColor, getKeyLightColor); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightIntensity, getKeyLightIntensity); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightAmbientIntensity, getKeyLightAmbientIntensity); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightDirection, getKeyLightDirection); - + + _keyLightProperties.getProperties(properties); + _stageProperties.getProperties(properties); COPY_ENTITY_PROPERTY_TO_PROPERTIES(shapeType, getShapeType); @@ -98,11 +85,8 @@ bool ZoneEntityItem::setProperties(const EntityItemProperties& properties) { bool somethingChanged = false; somethingChanged = EntityItem::setProperties(properties); // set the properties in our base class - SET_ENTITY_PROPERTY_FROM_PROPERTIES(keyLightColor, setKeyLightColor); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(keyLightIntensity, setKeyLightIntensity); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(keyLightAmbientIntensity, setKeyLightAmbientIntensity); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(keyLightDirection, setKeyLightDirection); - + bool somethingChangedInKeyLight = _keyLightProperties.setProperties(properties); + bool somethingChangedInStage = _stageProperties.setProperties(properties); SET_ENTITY_PROPERTY_FROM_PROPERTIES(shapeType, updateShapeType); @@ -112,7 +96,7 @@ bool ZoneEntityItem::setProperties(const EntityItemProperties& properties) { bool somethingChangedInAtmosphere = _atmosphereProperties.setProperties(properties); bool somethingChangedInSkybox = _skyboxProperties.setProperties(properties); - somethingChanged = somethingChanged || somethingChangedInStage || somethingChangedInAtmosphere || somethingChangedInSkybox; + somethingChanged = somethingChanged || somethingChangedInKeyLight || somethingChangedInStage || somethingChangedInAtmosphere || somethingChangedInSkybox; if (somethingChanged) { bool wantDebug = false; @@ -135,14 +119,15 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesRead = 0; const unsigned char* dataAt = data; - READ_ENTITY_PROPERTY(PROP_KEYLIGHT_COLOR, rgbColor, setKeyLightColor); - READ_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, float, setKeyLightIntensity); - READ_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, float, setKeyLightAmbientIntensity); - READ_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, glm::vec3, setKeyLightDirection); + int bytesFromKeylight = _keyLightProperties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args, + propertyFlags, overwriteLocalData, somethingChanged); + + bytesRead += bytesFromKeylight; + dataAt += bytesFromKeylight; int bytesFromStage = _stageProperties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args, propertyFlags, overwriteLocalData, somethingChanged); - + bytesRead += bytesFromStage; dataAt += bytesFromStage; @@ -169,10 +154,8 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, EntityPropertyFlags ZoneEntityItem::getEntityProperties(EncodeBitstreamParams& params) const { EntityPropertyFlags requestedProperties = EntityItem::getEntityProperties(params); - requestedProperties += PROP_KEYLIGHT_COLOR; - requestedProperties += PROP_KEYLIGHT_INTENSITY; - requestedProperties += PROP_KEYLIGHT_AMBIENT_INTENSITY; - requestedProperties += PROP_KEYLIGHT_DIRECTION; + requestedProperties += _keyLightProperties.getEntityProperties(params); + requestedProperties += PROP_SHAPE_TYPE; requestedProperties += PROP_COMPOUND_SHAPE_URL; requestedProperties += PROP_BACKGROUND_MODE; @@ -193,10 +176,8 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits bool successPropertyFits = true; - APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_COLOR, _keyLightColor); - APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_INTENSITY, getKeyLightIntensity()); - APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_AMBIENT_INTENSITY, getKeyLightAmbientIntensity()); - APPEND_ENTITY_PROPERTY(PROP_KEYLIGHT_DIRECTION, getKeyLightDirection()); + _keyLightProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties, + propertyFlags, propertiesDidntFit, propertyCount, appendState); _stageProperties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); @@ -217,15 +198,12 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits void ZoneEntityItem::debugDump() const { quint64 now = usecTimestampNow(); qCDebug(entities) << " ZoneEntityItem id:" << getEntityItemID() << "---------------------------------------------"; - qCDebug(entities) << " keyLightColor:" << _keyLightColor[0] << "," << _keyLightColor[1] << "," << _keyLightColor[2]; qCDebug(entities) << " position:" << debugTreeVector(getPosition()); qCDebug(entities) << " dimensions:" << debugTreeVector(getDimensions()); qCDebug(entities) << " getLastEdited:" << debugTime(getLastEdited(), now); - qCDebug(entities) << " _keyLightIntensity:" << _keyLightIntensity; - qCDebug(entities) << " _keyLightAmbientIntensity:" << _keyLightAmbientIntensity; - qCDebug(entities) << " _keyLightDirection:" << _keyLightDirection; qCDebug(entities) << " _backgroundMode:" << EntityItemProperties::getBackgroundModeString(_backgroundMode); + _keyLightProperties.debugDump(); _stageProperties.debugDump(); _atmosphereProperties.debugDump(); _skyboxProperties.debugDump(); diff --git a/libraries/entities/src/ZoneEntityItem.h b/libraries/entities/src/ZoneEntityItem.h index e7f2e03981..c076e003e4 100644 --- a/libraries/entities/src/ZoneEntityItem.h +++ b/libraries/entities/src/ZoneEntityItem.h @@ -14,6 +14,7 @@ #include +#include "KeyLightPropertyGroup.h" #include "AtmospherePropertyGroup.h" #include "EntityItem.h" #include "EntityTree.h" @@ -48,36 +49,7 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged); - xColor getKeyLightColor() const { xColor color = { _keyLightColor[RED_INDEX], _keyLightColor[GREEN_INDEX], _keyLightColor[BLUE_INDEX] }; return color; } - void setKeyLightColor(const xColor& value) { - _keyLightColor[RED_INDEX] = value.red; - _keyLightColor[GREEN_INDEX] = value.green; - _keyLightColor[BLUE_INDEX] = value.blue; - } - void setKeyLightColor(const rgbColor& value) { - _keyLightColor[RED_INDEX] = value[RED_INDEX]; - _keyLightColor[GREEN_INDEX] = value[GREEN_INDEX]; - _keyLightColor[BLUE_INDEX] = value[BLUE_INDEX]; - } - - glm::vec3 getKeyLightColorVec3() const { - const quint8 MAX_COLOR = 255; - glm::vec3 color = { (float)_keyLightColor[RED_INDEX] / (float)MAX_COLOR, - (float)_keyLightColor[GREEN_INDEX] / (float)MAX_COLOR, - (float)_keyLightColor[BLUE_INDEX] / (float)MAX_COLOR }; - return color; - } - - - float getKeyLightIntensity() const { return _keyLightIntensity; } - void setKeyLightIntensity(float value) { _keyLightIntensity = value; } - - float getKeyLightAmbientIntensity() const { return _keyLightAmbientIntensity; } - void setKeyLightAmbientIntensity(float value) { _keyLightAmbientIntensity = value; } - - const glm::vec3& getKeyLightDirection() const { return _keyLightDirection; } - void setKeyLightDirection(const glm::vec3& value) { _keyLightDirection = value; } static bool getZonesArePickable() { return _zonesArePickable; } static void setZonesArePickable(bool value) { _zonesArePickable = value; } @@ -93,6 +65,8 @@ public: const QString getCompoundShapeURL() const { return _compoundShapeURL; } virtual void setCompoundShapeURL(const QString& url); + const KeyLightPropertyGroup& getKeyLightProperties() const { return _keyLightProperties; } + void setBackgroundMode(BackgroundMode value) { _backgroundMode = value; } BackgroundMode getBackgroundMode() const { return _backgroundMode; } @@ -109,19 +83,11 @@ public: virtual void debugDump() const; - static const xColor DEFAULT_KEYLIGHT_COLOR; - static const float DEFAULT_KEYLIGHT_INTENSITY; - static const float DEFAULT_KEYLIGHT_AMBIENT_INTENSITY; - static const glm::vec3 DEFAULT_KEYLIGHT_DIRECTION; static const ShapeType DEFAULT_SHAPE_TYPE; static const QString DEFAULT_COMPOUND_SHAPE_URL; protected: - // properties of the "sun" in the zone - rgbColor _keyLightColor; - float _keyLightIntensity; - float _keyLightAmbientIntensity; - glm::vec3 _keyLightDirection; + KeyLightPropertyGroup _keyLightProperties; ShapeType _shapeType = DEFAULT_SHAPE_TYPE; QString _compoundShapeURL; diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 3c1d33deaf..7062942c51 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -38,7 +38,7 @@ PacketVersion versionForPacketType(PacketType packetType) { case PacketType::EntityAdd: case PacketType::EntityEdit: case PacketType::EntityData: - return VERSION_ENTITIES_ANIMATION_PROPERTIES_GROUP; + return VERSION_ENTITIES_KEYLIGHT_PROPERTIES_GROUP; case PacketType::AvatarData: case PacketType::BulkAvatarData: default: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 3654d5b5fa..64e0a9d8e4 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -143,5 +143,6 @@ const PacketVersion VERSION_ENTITIES_PROTOCOL_HEADER_SWAP = 43; const PacketVersion VERSION_ENTITIES_PARTICLE_ELLIPSOID_EMITTER = 44; const PacketVersion VERSION_ENTITIES_PROTOCOL_CHANNELS = 45; const PacketVersion VERSION_ENTITIES_ANIMATION_PROPERTIES_GROUP = 46; +const PacketVersion VERSION_ENTITIES_KEYLIGHT_PROPERTIES_GROUP = 47; #endif // hifi_PacketHeaders_h From ca30ce1ff0fc62e8ebc50df5585d92285a929a88 Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 26 Oct 2015 10:08:16 -0700 Subject: [PATCH 03/19] Move the keyLIght properties in their own group and add the ambientURL in --- .../entities/src/KeyLightPropertyGroup.h | 46 ------------------- 1 file changed, 46 deletions(-) diff --git a/libraries/entities/src/KeyLightPropertyGroup.h b/libraries/entities/src/KeyLightPropertyGroup.h index d4ead9b733..b905a5a997 100644 --- a/libraries/entities/src/KeyLightPropertyGroup.h +++ b/libraries/entities/src/KeyLightPropertyGroup.h @@ -29,8 +29,6 @@ class ReadBitstreamToTreeParams; class KeyLightPropertyGroup : public PropertyGroup { public: - //void associateWithAnimationLoop(AnimationLoop* animationLoop) { _animationLoop = animationLoop; } - // EntityItemProperty related helpers virtual void copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const; virtual void copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings); @@ -81,51 +79,7 @@ public: DEFINE_PROPERTY_REF(PROP_KEYLIGHT_DIRECTION, Direction, direction, glm::vec3, DEFAULT_KEYLIGHT_DIRECTION); DEFINE_PROPERTY_REF(PROP_KEYLIGHT_AMBIENT_URL, AmbientURL, ambientURL, QString, ""); - - /*DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, URL, url, QString, ""); - DEFINE_PROPERTY(PROP_ANIMATION_FPS, FPS, fps, float, 30.0f); - DEFINE_PROPERTY(PROP_ANIMATION_FRAME_INDEX, CurrentFrame, currentFrame, float, 0.0f); - DEFINE_PROPERTY(PROP_ANIMATION_PLAYING, Running, running, bool, false); // was animationIsPlaying - DEFINE_PROPERTY(PROP_ANIMATION_LOOP, Loop, loop, bool, true); // was animationSettings.loop - DEFINE_PROPERTY(PROP_ANIMATION_FIRST_FRAME, FirstFrame, firstFrame, float, 0.0f); // was animationSettings.firstFrame - DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float, AnimationLoop::MAXIMUM_POSSIBLE_FRAME); // was animationSettings.lastFrame - DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool, false); // was animationSettings.hold - DEFINE_PROPERTY(PROP_ANIMATION_START_AUTOMATICALLY, StartAutomatically, startAutomatically, bool, false); // was animationSettings.startAutomatically - - xColor getKeyLightColor() const { xColor color = { _keyLightColor[RED_INDEX], _keyLightColor[GREEN_INDEX], _keyLightColor[BLUE_INDEX] }; return color; } - void setKeyLightColor(const xColor& value) { - _keyLightColor[RED_INDEX] = value.red; - _keyLightColor[GREEN_INDEX] = value.green; - _keyLightColor[BLUE_INDEX] = value.blue; - } - - void setKeyLightColor(const rgbColor& value) { - _keyLightColor[RED_INDEX] = value[RED_INDEX]; - _keyLightColor[GREEN_INDEX] = value[GREEN_INDEX]; - _keyLightColor[BLUE_INDEX] = value[BLUE_INDEX]; - } - - glm::vec3 getKeyLightColorVec3() const { - const quint8 MAX_COLOR = 255; - glm::vec3 color = { (float)_keyLightColor[RED_INDEX] / (float)MAX_COLOR, - (float)_keyLightColor[GREEN_INDEX] / (float)MAX_COLOR, - (float)_keyLightColor[BLUE_INDEX] / (float)MAX_COLOR }; - return color; - } - - - float getKeyLightIntensity() const { return _keyLightIntensity; } - void setKeyLightIntensity(float value) { _keyLightIntensity = value; } - - float getKeyLightAmbientIntensity() const { return _keyLightAmbientIntensity; } - void setKeyLightAmbientIntensity(float value) { _keyLightAmbientIntensity = value; } - - const glm::vec3& getKeyLightDirection() const { return _keyLightDirection; } - void setKeyLightDirection(const glm::vec3& value) { _keyLightDirection = value; } - */ - protected: - // void setFromOldAnimationSettings(const QString& value); }; From ff57b73bd6293697c77198c8cc4531a0a4d5e1ef Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 26 Oct 2015 10:53:21 -0700 Subject: [PATCH 04/19] Creating the COlorUTils in shared to deal with all the standard color conversions --- .../src/EntityTreeRenderer.cpp | 4 +-- libraries/shared/src/ColorUtils.h | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 libraries/shared/src/ColorUtils.h diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index ee247b5b62..68719cd265 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -270,8 +271,7 @@ void EntityTreeRenderer::applyZonePropertiesToScene(std::shared_ptrgetStageYearTime(); _hasPreviousZone = true; } - auto xcolor = zone->getKeyLightProperties().getColor(); - scene->setKeyLightColor(glm::vec3(xcolor.red / 256.0f, xcolor.green / 256.0f, xcolor.blue / 256.0f)); + scene->setKeyLightColor(ColorUtils::toVec3(zone->getKeyLightProperties().getColor())); scene->setKeyLightIntensity(zone->getKeyLightProperties().getIntensity()); scene->setKeyLightAmbientIntensity(zone->getKeyLightProperties().getAmbientIntensity()); scene->setKeyLightDirection(zone->getKeyLightProperties().getDirection()); diff --git a/libraries/shared/src/ColorUtils.h b/libraries/shared/src/ColorUtils.h new file mode 100644 index 0000000000..f9133a474a --- /dev/null +++ b/libraries/shared/src/ColorUtils.h @@ -0,0 +1,30 @@ +// +// ColorUtils.h +// libraries/shared/src +// +// Created by Sam Gateau on 10/24/15. +// Copyright 2014 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_ColorUtils_h +#define hifi_ColorUtils_h + +#include +#include + +#include "DependencyManager.h" + +class ColorUtils { +public: + inline static glm::vec3 toVec3(const xColor& color); +}; + +inline glm::vec3 ColorUtils::toVec3(const xColor& color) { + const float ONE_OVER_256 = 1.0f / 256.0f; + return glm::vec3(color.red * ONE_OVER_256, color.green * ONE_OVER_256, color.blue * ONE_OVER_256); +} + +#endif // hifi_ColorUtils_h \ No newline at end of file From 8e2c269cc0c66a57f2a1f86acc5c82c3abab2442 Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 26 Oct 2015 12:24:20 -0700 Subject: [PATCH 05/19] doing the correct conversion for byte to normalize float... --- libraries/shared/src/ColorUtils.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/shared/src/ColorUtils.h b/libraries/shared/src/ColorUtils.h index f9133a474a..1ef8420cd7 100644 --- a/libraries/shared/src/ColorUtils.h +++ b/libraries/shared/src/ColorUtils.h @@ -23,8 +23,8 @@ public: }; inline glm::vec3 ColorUtils::toVec3(const xColor& color) { - const float ONE_OVER_256 = 1.0f / 256.0f; - return glm::vec3(color.red * ONE_OVER_256, color.green * ONE_OVER_256, color.blue * ONE_OVER_256); + const float ONE_OVER_255 = 1.0f / 255.0f; + return glm::vec3(color.red * ONE_OVER_255, color.green * ONE_OVER_255, color.blue * ONE_OVER_255); } #endif // hifi_ColorUtils_h \ No newline at end of file From fc8184ffedb3286d102fce49b1370e70e838f3ad Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Mon, 26 Oct 2015 12:25:51 -0700 Subject: [PATCH 06/19] add arcade sound --- examples/toybox/AC_scripts/toybox_sounds.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/examples/toybox/AC_scripts/toybox_sounds.js b/examples/toybox/AC_scripts/toybox_sounds.js index 67985a5938..10c7135196 100644 --- a/examples/toybox/AC_scripts/toybox_sounds.js +++ b/examples/toybox/AC_scripts/toybox_sounds.js @@ -65,7 +65,7 @@ var soundMap = [{ y: 495.60, z: 502.08 }, - volume: 0.25, + volume: 0.05, loop: true } }, { @@ -73,14 +73,27 @@ var soundMap = [{ url: "http://hifi-public.s3.amazonaws.com/ryan/dogs_barking_1.L.wav", audioOptions: { position: { - x: 551.61, + x: 523, y: 494.88, - z: 502.00 + z: 469 }, - volume: 0.15, + volume: 0.05, loop: false }, playAtInterval: 60 * 1000 +}, { + name: 'arcade game', + url: "http://hifi-public.s3.amazonaws.com/ryan/ARCADE_GAMES_VID.L.L.wav", + audioOptions: { + position: { + x: 543.77, + y: 495.07, + z: 502.25 + }, + volume: 0.01, + loop: false, + }, + playAtInterval: 90 * 1000 }]; function loadSounds() { From 837430329b2df0aae07d1608933d1fa3e8a34dba Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 26 Oct 2015 13:02:17 -0700 Subject: [PATCH 07/19] Fix collision start/end in single physics simulation to be lost --- libraries/physics/src/PhysicsEngine.cpp | 9 ++++++--- libraries/physics/src/ThreadSafeDynamicsWorld.cpp | 3 ++- libraries/physics/src/ThreadSafeDynamicsWorld.h | 6 +++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index 75273e62ba..1e87fc9a5d 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -251,7 +251,12 @@ void PhysicsEngine::stepSimulation() { _characterController->preSimulation(timeStep); } - int numSubsteps = _dynamicsWorld->stepSimulation(timeStep, PHYSICS_ENGINE_MAX_NUM_SUBSTEPS, PHYSICS_ENGINE_FIXED_SUBSTEP); + auto onSubStep = [this]() { + updateContactMap(); + _hasOutgoingChanges = true; + }; + + int numSubsteps = _dynamicsWorld->stepSimulation(timeStep, PHYSICS_ENGINE_MAX_NUM_SUBSTEPS, PHYSICS_ENGINE_FIXED_SUBSTEP, onSubStep); if (numSubsteps > 0) { BT_PROFILE("postSimulation"); _numSubsteps += (uint32_t)numSubsteps; @@ -260,8 +265,6 @@ void PhysicsEngine::stepSimulation() { if (_characterController) { _characterController->postSimulation(); } - updateContactMap(); - _hasOutgoingChanges = true; } } diff --git a/libraries/physics/src/ThreadSafeDynamicsWorld.cpp b/libraries/physics/src/ThreadSafeDynamicsWorld.cpp index b59103339c..8bf7cdab20 100644 --- a/libraries/physics/src/ThreadSafeDynamicsWorld.cpp +++ b/libraries/physics/src/ThreadSafeDynamicsWorld.cpp @@ -27,7 +27,7 @@ ThreadSafeDynamicsWorld::ThreadSafeDynamicsWorld( : btDiscreteDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration) { } -int ThreadSafeDynamicsWorld::stepSimulation( btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep) { +int ThreadSafeDynamicsWorld::stepSimulation( btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep, SubStepCallback onSubStep) { BT_PROFILE("stepSimulation"); int subSteps = 0; if (maxSubSteps) { @@ -70,6 +70,7 @@ int ThreadSafeDynamicsWorld::stepSimulation( btScalar timeStep, int maxSubSteps, for (int i=0;i + +using SubStepCallback = std::function; + ATTRIBUTE_ALIGNED16(class) ThreadSafeDynamicsWorld : public btDiscreteDynamicsWorld { public: BT_DECLARE_ALIGNED_ALLOCATOR(); @@ -34,7 +38,7 @@ public: btCollisionConfiguration* collisionConfiguration); // virtual overrides from btDiscreteDynamicsWorld - int stepSimulation( btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.)); + int stepSimulation( btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.), SubStepCallback onSubStep = []() { }); void synchronizeMotionStates(); // btDiscreteDynamicsWorld::m_localTime is the portion of real-time that has not yet been simulated From 913026280c082a0d7df6311a1136ca95e45afac1 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 26 Oct 2015 13:02:39 -0700 Subject: [PATCH 08/19] Fix EntityTreeRenderer dropping contact end events --- libraries/entities-renderer/src/EntityTreeRenderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index d5bf0bde8a..bed6ae1d0f 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -774,7 +774,7 @@ void EntityTreeRenderer::entityCollisionWithEntity(const EntityItemID& idA, cons } // Don't respond to small continuous contacts. const float COLLISION_MINUMUM_PENETRATION = 0.002f; - if ((collision.type != CONTACT_EVENT_TYPE_START) && (glm::length(collision.penetration) < COLLISION_MINUMUM_PENETRATION)) { + if ((collision.type == CONTACT_EVENT_TYPE_CONTINUE) && (glm::length(collision.penetration) < COLLISION_MINUMUM_PENETRATION)) { return; } From f436857a6241e2f4874fa615efe310aa8508f291 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Mon, 26 Oct 2015 15:28:35 -0700 Subject: [PATCH 09/19] add reset buttons for basketballs and targets --- unpublishedScripts/basketballsResetter.js | 111 ++++++++++++++++++ unpublishedScripts/hiddenEntityReset.js | 109 +++++++++++++++++- unpublishedScripts/immediateClientReset.js | 7 +- unpublishedScripts/masterReset.js | 128 +++++++++++++++++++-- unpublishedScripts/targetsResetter.js | 128 +++++++++++++++++++++ 5 files changed, 461 insertions(+), 22 deletions(-) create mode 100644 unpublishedScripts/basketballsResetter.js create mode 100644 unpublishedScripts/targetsResetter.js diff --git a/unpublishedScripts/basketballsResetter.js b/unpublishedScripts/basketballsResetter.js new file mode 100644 index 0000000000..8574bc6e92 --- /dev/null +++ b/unpublishedScripts/basketballsResetter.js @@ -0,0 +1,111 @@ +// +// +// Created by James B. Pollack @imgntn on 10/26/2015 +// Copyright 2015 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 +var HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; + +(function() { + + var _this; + Resetter = function() { + _this = this; + }; + + Resetter.prototype = { + + startFarGrabNonColliding: function() { + this.resetObjects(); + }, + + clickReleaseOnEntity: function() { + this.resetObjects(); + }, + + resetObjects: function() { + var ids = Entities.findEntities(this.initialProperties.position, 75); + var i; + for (i = 0; i < ids.length; i++) { + var id = ids[i]; + var properties = Entities.getEntityProperties(id, "name"); + if (properties.name === "Hifi-Basketball") { + Entities.deleteEntity(id); + } + } + + this.createBasketballs(); + }, + + createBasketballs: function() { + var NUMBER_OF_BALLS = 4; + var DIAMETER = 0.30; + var basketballURL = HIFI_PUBLIC_BUCKET + "models/content/basketball2.fbx"; + var basketballCollisionSoundURL = HIFI_PUBLIC_BUCKET + "sounds/basketball/basketball.wav"; + + var position = { + x: 542.86, + y: 494.84, + z: 475.06 + }; + var collidingBalls = []; + + var i; + for (i = 0; i < NUMBER_OF_BALLS; i++) { + var ballPosition = { + x: position.x, + y: position.y + DIAMETER * 2, + z: position.z + (DIAMETER) - (DIAMETER * i) + }; + var newPosition = { + x: position.x + (DIAMETER * 2) - (DIAMETER * i), + y: position.y + DIAMETER * 2, + z: position.z + }; + var collidingBall = Entities.addEntity({ + type: "Model", + name: 'Hifi-Basketball', + shapeType: 'Sphere', + position: newPosition, + dimensions: { + x: DIAMETER, + y: DIAMETER, + z: DIAMETER + }, + restitution: 1.0, + linearDamping: 0.00001, + gravity: { + x: 0, + y: -9.8, + z: 0 + }, + collisionsWillMove: true, + collisionsSoundURL: basketballCollisionSoundURL, + ignoreForCollisions: false, + modelURL: basketballURL, + userData: JSON.stringify({ + resetMe: { + resetMe: true + }, + grabbableKey: { + invertSolidWhileHeld: true + } + }) + }); + + collidingBalls.push(collidingBall); + + } + }, + + preload: function(entityID) { + this.initialProperties = Entities.getEntityProperties(entityID); + this.entityID = entityID; + }, + + }; + + return new Resetter(); +}); \ No newline at end of file diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index e441db3aa6..d81c1a125f 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -22,7 +22,8 @@ var dollScriptURL = Script.resolvePath("../examples/toybox/doll/doll.js"); var lightsScriptURL = Script.resolvePath("../examples/toybox/lights/lightSwitch.js"); var targetsScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/wallTarget.js'); - + var basketballResetterScriptURL = Script.resolvePath('basketballsResetter.js'); + var targetsResetterScriptURL = Script.resolvePath('targetsResetter.js'); ResetSwitch = function() { _this = this; @@ -110,9 +111,12 @@ }); createPingPongBallGun(); + createTargets(); + createTargetResetter(); createBasketballHoop(); createBasketballRack(); + createBasketballResetter(); createGates(); @@ -120,8 +124,6 @@ // Handles toggling of all sconce lights createLights(); - - createCat({ x: 551.09, y: 494.98, @@ -135,7 +137,6 @@ z: 503.91 }); - createTargets(); } @@ -275,10 +276,11 @@ }) }); - var collidingBalls = []; + function createCollidingBalls() { var position = rackStartPosition; + var collidingBalls = []; var i; for (i = 0; i < NUMBER_OF_BALLS; i++) { @@ -334,6 +336,103 @@ } + function createBasketballResetter() { + + var position = { + x: 542.86, + y: 494.44, + z: 475.06 + }; + + var dimensions = { + x: 0.5, + y: 0.1, + z: 0.01 + }; + + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); + + var resetter = Entities.addEntity({ + type: "Text", + position: position, + name: "Basketball Resetter", + script: basketballResetterScriptURL, + rotation: rotation, + dimensions: dimensions, + backgroundColor: { + red: 0, + green: 0, + blue: 0 + }, + textColor: { + red: 255, + green: 255, + blue: 255 + }, + text: "RESET BALLS", + lineHeight: 0.07, + faceCamera: true, + userData: JSON.stringify({ + resetMe: { + resetMe: true + }, + grabbableKey: { + wantsTrigger: true + } + }) + }); + + + } + + function createTargetResetter() { + var dimensions = { + x: 0.5, + y: 0.1, + z: 0.01 + }; + + var position = { + x: 548.68, + y: 495.30, + z: 509.74 + }; + + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); + + var resetter = Entities.addEntity({ + type: "Text", + position: position, + name: "Target Resetter", + script: targetsResetterScriptURL, + rotation: rotation, + dimensions: dimensions, + backgroundColor: { + red: 0, + green: 0, + blue: 0 + }, + textColor: { + red: 255, + green: 255, + blue: 255 + }, + faceCamera: true, + text: "RESET TARGETS", + lineHeight: 0.07, + userData: JSON.stringify({ + resetMe: { + resetMe: true + }, + grabbableKey: { + wantsTrigger: true + } + }) + + }); + } + + function createTargets() { var MODEL_URL = 'http://hifi-public.s3.amazonaws.com/models/ping_pong_gun/target.fbx'; diff --git a/unpublishedScripts/immediateClientReset.js b/unpublishedScripts/immediateClientReset.js index 0a2e9383a2..2088160727 100644 --- a/unpublishedScripts/immediateClientReset.js +++ b/unpublishedScripts/immediateClientReset.js @@ -8,15 +8,11 @@ /*global print, MyAvatar, Entities, AnimationCache, SoundCache, Scene, Camera, Overlays, Audio, HMD, AvatarList, AvatarManager, Controller, UndoStack, Window, Account, GlobalServices, Script, ScriptDiscoveryService, LODManager, Menu, Vec3, Quat, AudioDevice, Paths, Clipboard, Settings, XMLHttpRequest, pointInExtents, vec3equal, setEntityCustomData, getEntityCustomData */ - var masterResetScript = Script.resolvePath("masterReset.js"); var hiddenEntityScriptURL = Script.resolvePath("hiddenEntityReset.js"); - Script.include(masterResetScript); - - function createHiddenMasterSwitch() { var resetKey = "resetMe"; @@ -31,7 +27,6 @@ function createHiddenMasterSwitch() { }); } - var entities = Entities.findEntities(MyAvatar.position, 100); entities.forEach(function(entity) { @@ -41,5 +36,7 @@ entities.forEach(function(entity) { Entities.deleteEntity(entity); } }); + createHiddenMasterSwitch(); + MasterReset(); \ No newline at end of file diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index 956db41235..099c903ea3 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -14,16 +14,16 @@ var utilitiesScript = Script.resolvePath("../examples/libraries/utils.js"); Script.include(utilitiesScript); - var sprayPaintScriptURL = Script.resolvePath("../examples/toybox/spray_paint/sprayPaintCan.js"); - var catScriptURL = Script.resolvePath("../examples/toybox/cat/cat.js"); - var flashlightScriptURL = Script.resolvePath('../examples/toybox/flashlight/flashlight.js'); - var pingPongScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/pingPongGun.js'); - var wandScriptURL = Script.resolvePath("../examples/toybox/bubblewand/wand.js"); - var dollScriptURL = Script.resolvePath("../examples/toybox/doll/doll.js"); - var lightsScriptURL = Script.resolvePath("../examples/toybox/lights/lightSwitch.js"); - var targetsScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/wallTarget.js'); - - +var sprayPaintScriptURL = Script.resolvePath("../examples/toybox/spray_paint/sprayPaintCan.js"); +var catScriptURL = Script.resolvePath("../examples/toybox/cat/cat.js"); +var flashlightScriptURL = Script.resolvePath('../examples/toybox/flashlight/flashlight.js'); +var pingPongScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/pingPongGun.js'); +var wandScriptURL = Script.resolvePath("../examples/toybox/bubblewand/wand.js"); +var dollScriptURL = Script.resolvePath("../examples/toybox/doll/doll.js"); +var lightsScriptURL = Script.resolvePath("../examples/toybox/lights/lightSwitch.js"); +var targetsScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/wallTarget.js'); +var basketballResetterScriptURL = Script.resolvePath('basketballsResetter.js'); +var targetsResetterScriptURL = Script.resolvePath('targetsResetter.js'); MasterReset = function() { var resetKey = "resetMe"; @@ -84,9 +84,12 @@ MasterReset = function() { }); createPingPongBallGun(); + createTargets(); + createTargetResetter(); createBasketballHoop(); createBasketballRack(); + createBasketballResetter(); createGates(); @@ -109,7 +112,7 @@ MasterReset = function() { z: 503.91 }); - createTargets(); + } @@ -201,6 +204,7 @@ MasterReset = function() { }); } + function createBasketballRack() { var NUMBER_OF_BALLS = 4; var DIAMETER = 0.30; @@ -249,10 +253,11 @@ MasterReset = function() { }) }); - var collidingBalls = []; + function createCollidingBalls() { var position = rackStartPosition; + var collidingBalls = []; var i; for (i = 0; i < NUMBER_OF_BALLS; i++) { @@ -308,6 +313,105 @@ MasterReset = function() { } + + function createBasketballResetter() { + + var position = { + x: 542.86, + y: 494.44, + z: 475.06 + }; + + var dimensions = { + x: 0.5, + y: 0.1, + z: 0.01 + }; + + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); + + var resetter = Entities.addEntity({ + type: "Text", + position: position, + name: "Basketball Resetter", + script: basketballResetterScriptURL, + rotation: rotation, + dimensions: dimensions, + backgroundColor: { + red: 0, + green: 0, + blue: 0 + }, + textColor: { + red: 255, + green: 255, + blue: 255 + }, + text: "RESET BALLS", + lineHeight: 0.07, + faceCamera: true, + userData: JSON.stringify({ + resetMe: { + resetMe: true + }, + grabbableKey: { + wantsTrigger: true + } + }) + }); + + + } + + function createTargetResetter() { + var dimensions = { + x: 0.5, + y: 0.1, + z: 0.01 + }; + + var position = { + x: 548.68, + y: 495.30, + z: 509.74 + }; + + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); + + var resetter = Entities.addEntity({ + type: "Text", + position: position, + name: "Target Resetter", + script: targetsResetterScriptURL, + rotation: rotation, + dimensions: dimensions, + backgroundColor: { + red: 0, + green: 0, + blue: 0 + }, + textColor: { + red: 255, + green: 255, + blue: 255 + }, + faceCamera: true, + text: "RESET TARGETS", + lineHeight: 0.07, + userData: JSON.stringify({ + resetMe: { + resetMe: true + }, + grabbableKey: { + wantsTrigger: true + } + }) + + }); + } + + + function createTargets() { var MODEL_URL = 'http://hifi-public.s3.amazonaws.com/models/ping_pong_gun/target.fbx'; diff --git a/unpublishedScripts/targetsResetter.js b/unpublishedScripts/targetsResetter.js new file mode 100644 index 0000000000..716e98e1e1 --- /dev/null +++ b/unpublishedScripts/targetsResetter.js @@ -0,0 +1,128 @@ +// +// +// Created by James B. Pollack @imgntn on 10/26/2015 +// Copyright 2015 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 + +(function() { + var targetsScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/wallTarget.js'); + + var _this; + Resetter = function() { + _this = this; + }; + + Resetter.prototype = { + + startFarGrabNonColliding: function() { + this.resetObjects(); + }, + + clickReleaseOnEntity: function() { + this.resetObjects(); + }, + + resetObjects: function() { + var ids = Entities.findEntities(this.initialProperties.position, 50); + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var properties = Entities.getEntityProperties(id, "name"); + if (properties.name === "Hifi-Target") { + Entities.deleteEntity(id); + } + } + this.createTargets(); + }, + + preload: function(entityID) { + this.initialProperties = Entities.getEntityProperties(entityID); + this.entityID = entityID; + }, + + createTargets: function() { + + var MODEL_URL = 'http://hifi-public.s3.amazonaws.com/models/ping_pong_gun/target.fbx'; + var COLLISION_HULL_URL = 'http://hifi-public.s3.amazonaws.com/models/ping_pong_gun/target_collision_hull.obj'; + + var MINIMUM_MOVE_LENGTH = 0.05; + var RESET_DISTANCE = 0.5; + var TARGET_USER_DATA_KEY = 'hifi-ping_pong_target'; + var NUMBER_OF_TARGETS = 6; + var TARGETS_PER_ROW = 3; + + var TARGET_DIMENSIONS = { + x: 0.06, + y: 0.42, + z: 0.42 + }; + + var VERTICAL_SPACING = TARGET_DIMENSIONS.y + 0.5; + var HORIZONTAL_SPACING = TARGET_DIMENSIONS.z + 0.5; + + + var startPosition = { + x: 548.68, + y: 497.30, + z: 509.74 + }; + + var rotation = Quat.fromPitchYawRollDegrees(0, -55.25, 0); + + var targets = []; + + function addTargets() { + var i; + var row = -1; + for (i = 0; i < NUMBER_OF_TARGETS; i++) { + + if (i % TARGETS_PER_ROW === 0) { + row++; + } + + var vHat = Quat.getFront(rotation); + var spacer = HORIZONTAL_SPACING * (i % TARGETS_PER_ROW) + (row * HORIZONTAL_SPACING / 2); + var multiplier = Vec3.multiply(spacer, vHat); + var position = Vec3.sum(startPosition, multiplier); + position.y = startPosition.y - (row * VERTICAL_SPACING); + + var targetProperties = { + name: 'Hifi-Target', + type: 'Model', + modelURL: MODEL_URL, + shapeType: 'compound', + collisionsWillMove: true, + dimensions: TARGET_DIMENSIONS, + compoundShapeURL: COLLISION_HULL_URL, + position: position, + rotation: rotation, + script: targetsScriptURL, + userData: JSON.stringify({ + originalPositionKey: { + originalPosition: position + }, + resetMe: { + resetMe: true + }, + grabbableKey: { + grabbable: false + } + }) + }; + + var target = Entities.addEntity(targetProperties); + targets.push(target); + + } + } + + addTargets(); + + } + + }; + + return new Resetter(); +}); \ No newline at end of file From 90131f129129129cfb05b27c5aae58304f7a62b3 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Mon, 26 Oct 2015 16:00:14 -0700 Subject: [PATCH 10/19] make target reset wider --- unpublishedScripts/hiddenEntityReset.js | 2 +- unpublishedScripts/masterReset.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index d81c1a125f..574504fd9f 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -387,7 +387,7 @@ function createTargetResetter() { var dimensions = { - x: 0.5, + x: 1, y: 0.1, z: 0.01 }; diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index 099c903ea3..b90fbeb703 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -365,7 +365,7 @@ MasterReset = function() { function createTargetResetter() { var dimensions = { - x: 0.5, + x: 1, y: 0.1, z: 0.01 }; @@ -377,7 +377,7 @@ MasterReset = function() { }; var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); - + var resetter = Entities.addEntity({ type: "Text", position: position, From da5db326e829e59c866ad514fc65a80a3975402a Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Mon, 26 Oct 2015 16:03:10 -0700 Subject: [PATCH 11/19] make cat quieter --- examples/toybox/AC_scripts/toybox_sounds.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/toybox/AC_scripts/toybox_sounds.js b/examples/toybox/AC_scripts/toybox_sounds.js index 10c7135196..ee87943f00 100644 --- a/examples/toybox/AC_scripts/toybox_sounds.js +++ b/examples/toybox/AC_scripts/toybox_sounds.js @@ -65,7 +65,7 @@ var soundMap = [{ y: 495.60, z: 502.08 }, - volume: 0.05, + volume: 0.03, loop: true } }, { From 2d873012a34dbeaf6ed546034508ecc1488a817d Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Mon, 26 Oct 2015 17:51:55 -0700 Subject: [PATCH 12/19] make reset buttons invisible entities instead of text --- unpublishedScripts/hiddenEntityReset.js | 61 +++++++------------------ unpublishedScripts/masterReset.js | 60 ++++++------------------ 2 files changed, 31 insertions(+), 90 deletions(-) diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index 574504fd9f..ff2f2fa0cc 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -339,39 +339,24 @@ function createBasketballResetter() { var position = { - x: 542.86, - y: 494.44, - z: 475.06 + x: 543.58, + y: 495.47, + z: 469.59 }; var dimensions = { - x: 0.5, - y: 0.1, - z: 0.01 + x: 1.65, + y: 1.71, + z: 1.75 }; - var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); - var resetter = Entities.addEntity({ type: "Text", position: position, name: "Basketball Resetter", script: basketballResetterScriptURL, - rotation: rotation, dimensions: dimensions, - backgroundColor: { - red: 0, - green: 0, - blue: 0 - }, - textColor: { - red: 255, - green: 255, - blue: 255 - }, - text: "RESET BALLS", - lineHeight: 0.07, - faceCamera: true, + visible: false, userData: JSON.stringify({ resetMe: { resetMe: true @@ -387,39 +372,24 @@ function createTargetResetter() { var dimensions = { - x: 1, - y: 0.1, - z: 0.01 + x: 0.21, + y: 0.61, + z: 0.21 }; var position = { - x: 548.68, - y: 495.30, - z: 509.74 + x: 548.42, + y: 496.40, + z: 509.61 }; - var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); - var resetter = Entities.addEntity({ - type: "Text", + type: "Box", position: position, name: "Target Resetter", script: targetsResetterScriptURL, - rotation: rotation, dimensions: dimensions, - backgroundColor: { - red: 0, - green: 0, - blue: 0 - }, - textColor: { - red: 255, - green: 255, - blue: 255 - }, - faceCamera: true, - text: "RESET TARGETS", - lineHeight: 0.07, + visible: false, userData: JSON.stringify({ resetMe: { resetMe: true @@ -433,6 +403,7 @@ } + function createTargets() { var MODEL_URL = 'http://hifi-public.s3.amazonaws.com/models/ping_pong_gun/target.fbx'; diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index b90fbeb703..2b4f978cf9 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -317,39 +317,24 @@ MasterReset = function() { function createBasketballResetter() { var position = { - x: 542.86, - y: 494.44, - z: 475.06 + x: 543.58, + y: 495.47, + z: 469.59 }; var dimensions = { - x: 0.5, - y: 0.1, - z: 0.01 + x: 1.65, + y: 1.71, + z: 1.75 }; - var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); - var resetter = Entities.addEntity({ type: "Text", position: position, name: "Basketball Resetter", script: basketballResetterScriptURL, - rotation: rotation, dimensions: dimensions, - backgroundColor: { - red: 0, - green: 0, - blue: 0 - }, - textColor: { - red: 255, - green: 255, - blue: 255 - }, - text: "RESET BALLS", - lineHeight: 0.07, - faceCamera: true, + visible:false, userData: JSON.stringify({ resetMe: { resetMe: true @@ -365,39 +350,24 @@ MasterReset = function() { function createTargetResetter() { var dimensions = { - x: 1, - y: 0.1, - z: 0.01 + x: 0.21, + y: 0.61, + z: 0.21 }; var position = { - x: 548.68, - y: 495.30, - z: 509.74 + x: 548.42, + y: 496.40, + z: 509.61 }; - var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); - var resetter = Entities.addEntity({ - type: "Text", + type: "Box", position: position, name: "Target Resetter", script: targetsResetterScriptURL, - rotation: rotation, dimensions: dimensions, - backgroundColor: { - red: 0, - green: 0, - blue: 0 - }, - textColor: { - red: 255, - green: 255, - blue: 255 - }, - faceCamera: true, - text: "RESET TARGETS", - lineHeight: 0.07, + visible:false, userData: JSON.stringify({ resetMe: { resetMe: true From 7a7f649bf7132c0f7adb66be02a0652dd1738e06 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Mon, 26 Oct 2015 17:55:13 -0700 Subject: [PATCH 13/19] change from far grab to near grab --- unpublishedScripts/basketballsResetter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unpublishedScripts/basketballsResetter.js b/unpublishedScripts/basketballsResetter.js index 8574bc6e92..6335312d57 100644 --- a/unpublishedScripts/basketballsResetter.js +++ b/unpublishedScripts/basketballsResetter.js @@ -17,7 +17,7 @@ var HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; Resetter.prototype = { - startFarGrabNonColliding: function() { + startNearGrabNonColliding: function() { this.resetObjects(); }, From c8e1aca4b672eb7136ca62d378439d386595acb3 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Mon, 26 Oct 2015 18:10:45 -0700 Subject: [PATCH 14/19] fix box dimensions --- unpublishedScripts/hiddenEntityReset.js | 2 +- unpublishedScripts/masterReset.js | 2 +- unpublishedScripts/targetsResetter.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index ff2f2fa0cc..43d23e4b3c 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -351,7 +351,7 @@ }; var resetter = Entities.addEntity({ - type: "Text", + type: "Box", position: position, name: "Basketball Resetter", script: basketballResetterScriptURL, diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index 2b4f978cf9..74eb3c85ac 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -329,7 +329,7 @@ MasterReset = function() { }; var resetter = Entities.addEntity({ - type: "Text", + type: "Box", position: position, name: "Basketball Resetter", script: basketballResetterScriptURL, diff --git a/unpublishedScripts/targetsResetter.js b/unpublishedScripts/targetsResetter.js index 716e98e1e1..a522c19593 100644 --- a/unpublishedScripts/targetsResetter.js +++ b/unpublishedScripts/targetsResetter.js @@ -17,7 +17,7 @@ Resetter.prototype = { - startFarGrabNonColliding: function() { + startNearGrabNonColliding: function() { this.resetObjects(); }, From a5b95d73073ec1ebae2780eb2bf15d071d2e3f69 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 28 Oct 2015 16:46:56 -0700 Subject: [PATCH 15/19] Fixing the entity properties view with the new properties group --- examples/html/entityProperties.html | 35 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html index cffca523d7..a8eff20df7 100644 --- a/examples/html/entityProperties.html +++ b/examples/html/entityProperties.html @@ -328,6 +328,7 @@ var elZoneSections = document.querySelectorAll(".zone-section"); allSections.push(elZoneSections); var elZoneStageSunModelEnabled = document.getElementById("property-zone-stage-sun-model-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"); @@ -337,6 +338,7 @@ var elZoneKeyLightDirectionX = document.getElementById("property-zone-key-light-direction-x"); var elZoneKeyLightDirectionY = document.getElementById("property-zone-key-light-direction-y"); var elZoneKeyLightDirectionZ = document.getElementById("property-zone-key-light-direction-z"); + var elZoneKeyLightAmbientURL = document.getElementById("property-zone-key-ambient-url"); var elZoneStageLatitude = document.getElementById("property-zone-stage-latitude"); var elZoneStageLongitude = document.getElementById("property-zone-stage-longitude"); @@ -568,15 +570,17 @@ } elZoneStageSunModelEnabled.checked = properties.stage.sunModelEnabled; - elZoneKeyLightColor.style.backgroundColor = "rgb(" + properties.keyLightColor.red + "," + properties.keyLightColor.green + "," + properties.keyLightColor.blue + ")"; - elZoneKeyLightColorRed.value = properties.keyLightColor.red; - elZoneKeyLightColorGreen.value = properties.keyLightColor.green; - elZoneKeyLightColorBlue.value = properties.keyLightColor.blue; - elZoneKeyLightIntensity.value = properties.keyLightIntensity.toFixed(2); - elZoneKeyLightAmbientIntensity.value = properties.keyLightAmbientIntensity.toFixed(2); - elZoneKeyLightDirectionX.value = properties.keyLightDirection.x.toFixed(2); - elZoneKeyLightDirectionY.value = properties.keyLightDirection.y.toFixed(2); - elZoneKeyLightDirectionZ.value = properties.keyLightDirection.z.toFixed(2); + elZoneKeyLightColor.style.backgroundColor = "rgb(" + properties.keyLight.color.red + "," + properties.keyLight.color.green + "," + properties.keyLight.color.blue + ")"; + elZoneKeyLightColorRed.value = properties.keyLight.color.red; + 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); + elZoneKeyLightDirectionZ.value = properties.keyLight.direction.z.toFixed(2); + elZoneKeyLightAmbientURL.value = properties.keyLight.ambientURL; + elZoneStageLatitude.value = properties.stage.latitude.toFixed(2); elZoneStageLongitude.value = properties.stage.longitude.toFixed(2); @@ -819,21 +823,20 @@ onSubmit: function(hsb, hex, rgb, el) { $(el).css('background-color', '#'+hex); $(el).colpickHide(); - emitColorPropertyUpdate('keyLightColor', rgb.r, rgb.g, rgb.b); + emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b, 'keyLight'); } }); - var zoneKeyLightColorChangeFunction = createEmitColorPropertyUpdateFunction( - 'keyLightColor', elZoneKeyLightColorRed, elZoneKeyLightColorGreen, elZoneKeyLightColorBlue); + var zoneKeyLightColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('keyLight','color', elZoneKeyLightColorRed, elZoneKeyLightColorGreen, elZoneKeyLightColorBlue); elZoneKeyLightColorRed.addEventListener('change', zoneKeyLightColorChangeFunction); elZoneKeyLightColorGreen.addEventListener('change', zoneKeyLightColorChangeFunction); elZoneKeyLightColorBlue.addEventListener('change', zoneKeyLightColorChangeFunction); - elZoneKeyLightIntensity.addEventListener('change', createEmitNumberPropertyUpdateFunction('keyLightIntensity')); - elZoneKeyLightAmbientIntensity.addEventListener('change', createEmitNumberPropertyUpdateFunction('keyLightAmbientIntensity')); - var zoneKeyLightDirectionChangeFunction = createEmitVec3PropertyUpdateFunction( - 'keyLightDirection', elZoneKeyLightDirectionX, elZoneKeyLightDirectionY, elZoneKeyLightDirectionZ); + elZoneKeyLightIntensity.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('intensity','keyLight')); + elZoneKeyLightAmbientIntensity.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('keyLight','ambientIntensity')); + var zoneKeyLightDirectionChangeFunction = createEmitGroupVec3PropertyUpdateFunction('keyLight','direction', elZoneKeyLightDirectionX, elZoneKeyLightDirectionY, elZoneKeyLightDirectionZ); elZoneKeyLightDirectionX.addEventListener('change', zoneKeyLightDirectionChangeFunction); elZoneKeyLightDirectionY.addEventListener('change', zoneKeyLightDirectionChangeFunction); elZoneKeyLightDirectionZ.addEventListener('change', zoneKeyLightDirectionChangeFunction); + elZoneKeyLightAmbientURL.addEventListener('change', createEmitGroupTextPropertyUpdateFunction('keyLight','ambientURL')); elZoneStageLatitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','latitude')); elZoneStageLongitude.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('stage','longitude')); From 630cdb8a9dd38e4d2ca9cacbf727101ecd5d3625 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 28 Oct 2015 17:29:06 -0700 Subject: [PATCH 16/19] Modify the html presentiong the zone enity properties to match the internal new representation --- examples/html/entityProperties.html | 61 ++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html index a8eff20df7..b3d7a5f6b6 100644 --- a/examples/html/entityProperties.html +++ b/examples/html/entityProperties.html @@ -1479,8 +1479,12 @@ -
-
Key Light Color
+
+ +
+ +
+
Light Color
R
@@ -1488,20 +1492,16 @@
B
-
-
Key Light Intensity
+ +
+
Light Intensity
-
-
Key Light Ambient Intensity
-
- -
-
-
-
Key Light Direction
+ +
+
Light Direction
Pitch
Yaw
@@ -1509,46 +1509,69 @@
-
+
+
Ambient Intensity
+
+ +
+
+ + +
+
Ambient URL
+
+ +
+
+ +
+ +
+ +
Stage Latitude
-
+
Stage Longitude
-
+
Stage Altitude
-
+
Automatically calculate stage hour and day from location and clock.
-
+
Stage Day
-
+
Stage Hour
-
+
+ +
+ +
Background Mode