3
0
Fork 0
mirror of https://github.com/lubosz/overte.git synced 2025-04-27 06:55:40 +02:00

add skybox mode property

This commit is contained in:
ZappoMan 2015-05-04 11:41:03 -07:00
parent 78f7870cbb
commit 8c47736c3b
5 changed files with 78 additions and 1 deletions

View file

@ -89,6 +89,7 @@ EntityItemProperties::EntityItemProperties() :
CONSTRUCT_PROPERTY(stageDay, ZoneEntityItem::DEFAULT_STAGE_DAY),
CONSTRUCT_PROPERTY(stageHour, ZoneEntityItem::DEFAULT_STAGE_HOUR),
CONSTRUCT_PROPERTY(name, ENTITY_ITEM_DEFAULT_NAME),
CONSTRUCT_PROPERTY(skyboxMode, SKYBOX_MODE_INHERIT),
_id(UNKNOWN_ENTITY_ID),
_idSet(false),
@ -236,6 +237,37 @@ void EntityItemProperties::setShapeTypeFromString(const QString& shapeName) {
}
}
const char* skyboxModeNames[] = {"inherit", "atmosphere", "texture" };
QHash<QString, SkyboxMode> stringToSkyboxModeLookup;
void addSkyboxMode(SkyboxMode type) {
stringToSkyboxModeLookup[skyboxModeNames[type]] = type;
}
void buildStringToSkyboxModeLookup() {
addSkyboxMode(SKYBOX_MODE_INHERIT);
addSkyboxMode(SKYBOX_MODE_ATMOSPHERE);
addSkyboxMode(SKYBOX_MODE_TEXTURE);
}
QString EntityItemProperties::getSkyboxModeAsString() const {
if (_skyboxMode < sizeof(skyboxModeNames) / sizeof(char *))
return QString(skyboxModeNames[_skyboxMode]);
return QString(skyboxModeNames[SKYBOX_MODE_INHERIT]);
}
void EntityItemProperties::setSkyboxModeFromString(const QString& shapeName) {
if (stringToSkyboxModeLookup.empty()) {
buildStringToSkyboxModeLookup();
}
auto skyboxModeItr = stringToSkyboxModeLookup.find(shapeName.toLower());
if (skyboxModeItr != stringToSkyboxModeLookup.end()) {
_skyboxMode = skyboxModeItr.value();
_skyboxModeChanged = true;
}
}
EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
EntityPropertyFlags changedProperties;
@ -295,6 +327,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
CHECK_PROPERTY_CHANGE(PROP_STAGE_ALTITUDE, stageAltitude);
CHECK_PROPERTY_CHANGE(PROP_STAGE_DAY, stageDay);
CHECK_PROPERTY_CHANGE(PROP_STAGE_HOUR, stageHour);
CHECK_PROPERTY_CHANGE(PROP_SKYBOX_MODE, skyboxMode);
changedProperties += _atmosphere.getChangedProperties();
@ -379,6 +413,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
COPY_PROPERTY_TO_QSCRIPTVALUE(stageAltitude);
COPY_PROPERTY_TO_QSCRIPTVALUE(stageDay);
COPY_PROPERTY_TO_QSCRIPTVALUE(stageHour);
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(skyboxMode, getSkyboxModeAsString());
// Sitting properties support
if (!skipDefaults) {
@ -484,6 +519,8 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) {
COPY_PROPERTY_FROM_QSCRIPTVALUE_INT(stageDay, setStageDay);
COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stageHour, setStageHour);
COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(skyboxMode, SkyboxMode);
_atmosphere.copyFromScriptValue(object, _defaultSettings);
_lastEdited = usecTimestampNow();
@ -690,6 +727,8 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem
APPEND_ENTITY_PROPERTY(PROP_SHAPE_TYPE, appendValue, (uint32_t)properties.getShapeType());
APPEND_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, appendValue, properties.getCompoundShapeURL());
APPEND_ENTITY_PROPERTY(PROP_SKYBOX_MODE, appendValue, (uint32_t)properties.getSkyboxMode());
_staticAtmosphere.setProperties(properties);
_staticAtmosphere.appentToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState );
@ -942,6 +981,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STAGE_HOUR, float, setStageHour);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHAPE_TYPE, ShapeType, setShapeType);
READ_ENTITY_PROPERTY_STRING_TO_PROPERTIES(PROP_COMPOUND_SHAPE_URL, setCompoundShapeURL);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SKYBOX_MODE, SkyboxMode, setSkyboxMode);
qDebug() << "EntityItemProperties::decodeEntityEditPacket()....";
properties.getAtmosphere().decodeFromEditPacket(propertyFlags, dataAt , processedBytes);
@ -1048,8 +1088,9 @@ void EntityItemProperties::markAllChanged() {
_stageDayChanged = true;
_stageHourChanged = true;
_skyboxModeChanged = true;
_atmosphere.markAllChanged();
}
/// The maximum bounding cube for the entity, independent of it's rotation.

View file

@ -138,6 +138,7 @@ public:
DEFINE_PROPERTY(PROP_STAGE_HOUR, StageHour, stageHour, float);
DEFINE_PROPERTY_REF(PROP_NAME, Name, name, QString);
DEFINE_PROPERTY_GROUP(Atmosphere, atmosphere, AtmospherePropertyGroup);
DEFINE_PROPERTY_REF_ENUM(PROP_SKYBOX_MODE, SkyboxMode, skyboxMode, SkyboxMode);
public:
@ -272,6 +273,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) {
DEBUG_PROPERTY_IF_CHANGED(debug, properties, LocalGravity, localGravity, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, SkyboxMode, skyboxMode, "");
debug << " last edited:" << properties.getLastEdited() << "\n";
debug << " edited ago:" << properties.getEditedAgo() << "\n";

View file

@ -155,4 +155,12 @@ typedef PropertyFlags<EntityPropertyList> EntityPropertyFlags;
// one greater than the last item property due to the enum's auto-incrementing.
extern EntityPropertyList PROP_LAST_ITEM;
enum SkyboxMode {
SKYBOX_MODE_INHERIT,
SKYBOX_MODE_ATMOSPHERE,
SKYBOX_MODE_TEXTURE,
};
#endif // hifi_EntityPropertyFlags_h

View file

@ -60,6 +60,8 @@ ZoneEntityItem::ZoneEntityItem(const EntityItemID& entityItemID, const EntityIte
_stageHour = DEFAULT_STAGE_HOUR;
_shapeType = DEFAULT_SHAPE_TYPE;
_compoundShapeURL = DEFAULT_COMPOUND_SHAPE_URL;
_skyboxMode = SKYBOX_MODE_INHERIT;
setProperties(properties);
}
@ -80,6 +82,8 @@ EntityItemProperties ZoneEntityItem::getProperties() const {
COPY_ENTITY_PROPERTY_TO_PROPERTIES(shapeType, getShapeType);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(compoundShapeURL, getCompoundShapeURL);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(skyboxMode, getSkyboxMode);
_atmospherePropeties.getProperties(properties);
return properties;
@ -102,6 +106,8 @@ bool ZoneEntityItem::setProperties(const EntityItemProperties& properties) {
SET_ENTITY_PROPERTY_FROM_PROPERTIES(shapeType, updateShapeType);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(compoundShapeURL, setCompoundShapeURL);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(skyboxMode, setSkyboxMode);
bool somethingChangedInAtmosphere = _atmospherePropeties.setProperties(properties);
somethingChanged = somethingChanged || somethingChangedInAtmosphere;
@ -116,6 +122,10 @@ bool ZoneEntityItem::setProperties(const EntityItemProperties& properties) {
}
setLastEdited(properties._lastEdited);
}
qDebug() << "ZoneEntityItem::setProperties()";
debugDump();
return somethingChanged;
}
@ -139,9 +149,15 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data,
READ_ENTITY_PROPERTY_SETTER(PROP_SHAPE_TYPE, ShapeType, updateShapeType);
READ_ENTITY_PROPERTY_STRING(PROP_COMPOUND_SHAPE_URL, setCompoundShapeURL);
READ_ENTITY_PROPERTY_SETTER(PROP_SKYBOX_MODE, SkyboxMode, setSkyboxMode);
bytesRead += _atmospherePropeties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args,
propertyFlags, overwriteLocalData);
qDebug() << "ZoneEntityItem::readEntitySubclassDataFromBuffer()";
debugDump();
return bytesRead;
}
@ -163,6 +179,8 @@ EntityPropertyFlags ZoneEntityItem::getEntityProperties(EncodeBitstreamParams& p
requestedProperties += PROP_SHAPE_TYPE;
requestedProperties += PROP_COMPOUND_SHAPE_URL;
requestedProperties += PROP_SKYBOX_MODE;
requestedProperties += _atmospherePropeties.getEntityProperties(params);
return requestedProperties;
@ -190,6 +208,8 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits
APPEND_ENTITY_PROPERTY(PROP_STAGE_HOUR, appendValue, getStageHour());
APPEND_ENTITY_PROPERTY(PROP_SHAPE_TYPE, appendValue, (uint32_t)getShapeType());
APPEND_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, appendValue, getCompoundShapeURL());
APPEND_ENTITY_PROPERTY(PROP_SKYBOX_MODE, appendValue, (uint32_t)getShapeType()); // could this be a uint16??
_atmospherePropeties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties,
propertyFlags, propertiesDidntFit, propertyCount, appendState);
@ -212,6 +232,7 @@ void ZoneEntityItem::debugDump() const {
qCDebug(entities) << " _stageAltitude:" << _stageAltitude;
qCDebug(entities) << " _stageDay:" << _stageDay;
qCDebug(entities) << " _stageHour:" << _stageHour;
qCDebug(entities) << " _skyboxMode:" << _skyboxMode;
_atmospherePropeties.debugDump();
}

View file

@ -101,6 +101,10 @@ public:
const QString getCompoundShapeURL() const { return _compoundShapeURL; }
virtual void setCompoundShapeURL(const QString& url);
void setSkyboxMode(SkyboxMode value) { _skyboxMode = value; }
SkyboxMode getSkyboxMode() const { return _skyboxMode; }
virtual bool supportsDetailedRayIntersection() const { return true; }
virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction,
bool& keepSearching, OctreeElement*& element, float& distance, BoxFace& face,
@ -137,6 +141,7 @@ protected:
ShapeType _shapeType = SHAPE_TYPE_NONE;
QString _compoundShapeURL;
SkyboxMode _skyboxMode = SKYBOX_MODE_INHERIT;
AtmospherePropertyGroup _atmospherePropeties;
static bool _zonesArePickable;