diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 83da217a49..21ebb33133 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -29,6 +29,15 @@ #include "EntityItem.h" #include "EntityTree.h" +const float EntityItem::IMMORTAL = -1.0f; /// special lifetime which means the entity lives for ever. default lifetime +const float EntityItem::DEFAULT_GLOW_LEVEL = 0.0f; +const float EntityItem::DEFAULT_MASS = 1.0f; +const float EntityItem::DEFAULT_LIFETIME = EntityItem::IMMORTAL; +const float EntityItem::DEFAULT_DAMPING = 0.99f; +const glm::vec3 EntityItem::DEFAULT_VELOCITY = glm::vec3(0, 0, 0); +const glm::vec3 EntityItem::DEFAULT_GRAVITY = glm::vec3(0, (-9.8f / TREE_SCALE), 0); +const QString EntityItem::DEFAULT_SCRIPT = QString(""); + void EntityItem::initFromEntityItemID(const EntityItemID& entityItemID) { _id = entityItemID.id; _creatorTokenID = entityItemID.creatorTokenID; @@ -42,6 +51,13 @@ void EntityItem::initFromEntityItemID(const EntityItemID& entityItemID) { _radius = 0; _rotation = ENTITY_DEFAULT_ROTATION; _shouldBeDeleted = false; + + _glowLevel = DEFAULT_GLOW_LEVEL; + _mass = DEFAULT_MASS; + _velocity = DEFAULT_VELOCITY; + _gravity = DEFAULT_GRAVITY; + _damping = DEFAULT_DAMPING; + _lifetime = DEFAULT_LIFETIME; } EntityItem::EntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) { @@ -219,129 +235,7 @@ qDebug() << "EntityItem::appendEntityData() ... lastEdited=" << lastEdited; // PROP_SCRIPT // script would go here... - -#if 0 // def HIDE_SUBCLASS_METHODS - // PROP_COLOR - if (requestedProperties.getHasProperty(PROP_COLOR)) { - //qDebug() << "PROP_COLOR requested..."; - LevelDetails propertyLevel = packetData->startLevel(); - successPropertyFits = packetData->appendColor(getColor()); - if (successPropertyFits) { - propertyFlags |= PROP_COLOR; - propertiesDidntFit -= PROP_COLOR; - propertyCount++; - packetData->endLevel(propertyLevel); - } else { - //qDebug() << "PROP_COLOR didn't fit..."; - packetData->discardLevel(propertyLevel); - appendState = OctreeElement::PARTIAL; - } - } else { - //qDebug() << "PROP_COLOR NOT requested..."; - propertiesDidntFit -= PROP_COLOR; - } - - // PROP_MODEL_URL - if (requestedProperties.getHasProperty(PROP_MODEL_URL)) { - //qDebug() << "PROP_MODEL_URL requested..."; - LevelDetails propertyLevel = packetData->startLevel(); - successPropertyFits = packetData->appendValue(getModelURL()); - if (successPropertyFits) { - propertyFlags |= PROP_MODEL_URL; - propertiesDidntFit -= PROP_MODEL_URL; - propertyCount++; - packetData->endLevel(propertyLevel); - } else { - //qDebug() << "PROP_MODEL_URL didn't fit..."; - packetData->discardLevel(propertyLevel); - appendState = OctreeElement::PARTIAL; - } - } else { - //qDebug() << "PROP_MODEL_URL NOT requested..."; - propertiesDidntFit -= PROP_MODEL_URL; - } - - // PROP_ANIMATION_URL - if (requestedProperties.getHasProperty(PROP_ANIMATION_URL)) { - //qDebug() << "PROP_ANIMATION_URL requested..."; - LevelDetails propertyLevel = packetData->startLevel(); - successPropertyFits = packetData->appendValue(getAnimationURL()); - if (successPropertyFits) { - propertyFlags |= PROP_ANIMATION_URL; - propertiesDidntFit -= PROP_ANIMATION_URL; - propertyCount++; - packetData->endLevel(propertyLevel); - } else { - //qDebug() << "PROP_ANIMATION_URL didn't fit..."; - packetData->discardLevel(propertyLevel); - appendState = OctreeElement::PARTIAL; - } - } else { - //qDebug() << "PROP_ANIMATION_URL NOT requested..."; - propertiesDidntFit -= PROP_ANIMATION_URL; - } - - // PROP_ANIMATION_FPS - if (requestedProperties.getHasProperty(PROP_ANIMATION_FPS)) { - //qDebug() << "PROP_ANIMATION_FPS requested..."; - LevelDetails propertyLevel = packetData->startLevel(); - successPropertyFits = packetData->appendValue(getAnimationFPS()); - if (successPropertyFits) { - propertyFlags |= PROP_ANIMATION_FPS; - propertiesDidntFit -= PROP_ANIMATION_FPS; - propertyCount++; - packetData->endLevel(propertyLevel); - } else { - //qDebug() << "PROP_ANIMATION_FPS didn't fit..."; - packetData->discardLevel(propertyLevel); - appendState = OctreeElement::PARTIAL; - } - } else { - //qDebug() << "PROP_ANIMATION_FPS NOT requested..."; - propertiesDidntFit -= PROP_ANIMATION_FPS; - } - - // PROP_ANIMATION_FRAME_INDEX - if (requestedProperties.getHasProperty(PROP_ANIMATION_FRAME_INDEX)) { - //qDebug() << "PROP_ANIMATION_FRAME_INDEX requested..."; - LevelDetails propertyLevel = packetData->startLevel(); - successPropertyFits = packetData->appendValue(getAnimationFrameIndex()); - if (successPropertyFits) { - propertyFlags |= PROP_ANIMATION_FRAME_INDEX; - propertiesDidntFit -= PROP_ANIMATION_FRAME_INDEX; - propertyCount++; - packetData->endLevel(propertyLevel); - } else { - //qDebug() << "PROP_ANIMATION_FRAME_INDEX didn't fit..."; - packetData->discardLevel(propertyLevel); - appendState = OctreeElement::PARTIAL; - } - } else { - //qDebug() << "PROP_ANIMATION_FRAME_INDEX NOT requested..."; - propertiesDidntFit -= PROP_ANIMATION_FRAME_INDEX; - } - - // PROP_ANIMATION_PLAYING - if (requestedProperties.getHasProperty(PROP_ANIMATION_PLAYING)) { - //qDebug() << "PROP_ANIMATION_PLAYING requested..."; - LevelDetails propertyLevel = packetData->startLevel(); - successPropertyFits = packetData->appendValue(getAnimationIsPlaying()); - if (successPropertyFits) { - propertyFlags |= PROP_ANIMATION_PLAYING; - propertiesDidntFit -= PROP_ANIMATION_PLAYING; - propertyCount++; - packetData->endLevel(propertyLevel); - } else { - //qDebug() << "PROP_ANIMATION_PLAYING didn't fit..."; - packetData->discardLevel(propertyLevel); - appendState = OctreeElement::PARTIAL; - } - } else { - //qDebug() << "PROP_ANIMATION_PLAYING NOT requested..."; - propertiesDidntFit -= PROP_ANIMATION_PLAYING; - } - -#endif //def HIDE_SUBCLASS_METHODS + // TO DO - put all the other default items here!!!! } if (propertyCount > 0) { int endOfEntityItemData = packetData->getUncompressedByteOffset(); @@ -542,82 +436,6 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef // PROP_SCRIPT // script would go here... - -#if 0 //def HIDE_SUBCLASS_METHODS - // PROP_COLOR - if (propertyFlags.getHasProperty(PROP_COLOR)) { - rgbColor color; - if (overwriteLocalData) { - memcpy(_color, dataAt, sizeof(_color)); - } - dataAt += sizeof(color); - bytesRead += sizeof(color); - } - - // PROP_MODEL_URL - if (propertyFlags.getHasProperty(PROP_MODEL_URL)) { - - // TODO: fix to new format... - uint16_t modelURLLength; - memcpy(&modelURLLength, dataAt, sizeof(modelURLLength)); - dataAt += sizeof(modelURLLength); - bytesRead += sizeof(modelURLLength); - QString modelURLString((const char*)dataAt); - dataAt += modelURLLength; - bytesRead += modelURLLength; - if (overwriteLocalData) { - setModelURL(modelURLString); - } - } - - // PROP_ANIMATION_URL - if (propertyFlags.getHasProperty(PROP_ANIMATION_URL)) { - // animationURL - uint16_t animationURLLength; - memcpy(&animationURLLength, dataAt, sizeof(animationURLLength)); - dataAt += sizeof(animationURLLength); - bytesRead += sizeof(animationURLLength); - QString animationURLString((const char*)dataAt); - dataAt += animationURLLength; - bytesRead += animationURLLength; - if (overwriteLocalData) { - setAnimationURL(animationURLString); - } - } - - // PROP_ANIMATION_FPS - if (propertyFlags.getHasProperty(PROP_ANIMATION_FPS)) { - float animationFPS; - memcpy(&animationFPS, dataAt, sizeof(animationFPS)); - dataAt += sizeof(animationFPS); - bytesRead += sizeof(animationFPS); - if (overwriteLocalData) { - _animationFPS = animationFPS; - } - } - - // PROP_ANIMATION_FRAME_INDEX - if (propertyFlags.getHasProperty(PROP_ANIMATION_FRAME_INDEX)) { - float animationFrameIndex; - memcpy(&animationFrameIndex, dataAt, sizeof(animationFrameIndex)); - dataAt += sizeof(animationFrameIndex); - bytesRead += sizeof(animationFrameIndex); - if (overwriteLocalData) { - _animationFrameIndex = animationFrameIndex; - } - } - - // PROP_ANIMATION_PLAYING - if (propertyFlags.getHasProperty(PROP_ANIMATION_PLAYING)) { - bool animationIsPlaying; - memcpy(&animationIsPlaying, dataAt, sizeof(animationIsPlaying)); - dataAt += sizeof(animationIsPlaying); - bytesRead += sizeof(animationIsPlaying); - if (overwriteLocalData) { - _animationIsPlaying = animationIsPlaying; - } - } -#endif } return bytesRead; } @@ -628,15 +446,6 @@ void EntityItem::debugDump() const { qDebug(" should die:%s", debug::valueOf(getShouldBeDeleted())); qDebug(" position:%f,%f,%f", _position.x, _position.y, _position.z); qDebug(" radius:%f", getRadius()); - -#if 0 //def HIDE_SUBCLASS_METHODS - qDebug(" color:%d,%d,%d", _color[0], _color[1], _color[2]); - if (!getModelURL().isEmpty()) { - qDebug() << " modelURL:" << qPrintable(getModelURL()); - } else { - qDebug() << " modelURL: NONE"; - } -#endif } @@ -846,14 +655,98 @@ qDebug() << "EntityItem::encodeEntityEditMessageDetails() ... lastEdited=" << la //qDebug() << "PROP_SHOULD_BE_DELETED NOT requested..."; propertiesDidntFit -= PROP_SHOULD_BE_DELETED; } + + // PROP_MASS, + if (requestedProperties.getHasProperty(PROP_MASS)) { + LevelDetails propertyLevel = packetData.startLevel(); + successPropertyFits = packetData.appendValue(properties.getMass()); + if (successPropertyFits) { + propertyFlags |= PROP_MASS; + propertiesDidntFit -= PROP_MASS; + propertyCount++; + packetData.endLevel(propertyLevel); + } else { + packetData.discardLevel(propertyLevel); + appendState = OctreeElement::PARTIAL; + } + } else { + propertiesDidntFit -= PROP_MASS; + } + + // PROP_VELOCITY, + if (requestedProperties.getHasProperty(PROP_VELOCITY)) { + LevelDetails propertyLevel = packetData.startLevel(); + successPropertyFits = packetData.appendValue(properties.getVelocity()); + if (successPropertyFits) { + propertyFlags |= PROP_VELOCITY; + propertiesDidntFit -= PROP_VELOCITY; + propertyCount++; + packetData.endLevel(propertyLevel); + } else { + packetData.discardLevel(propertyLevel); + appendState = OctreeElement::PARTIAL; + } + } else { + propertiesDidntFit -= PROP_VELOCITY; + } + + // PROP_GRAVITY, + if (requestedProperties.getHasProperty(PROP_GRAVITY)) { + LevelDetails propertyLevel = packetData.startLevel(); + successPropertyFits = packetData.appendValue(properties.getGravity()); + if (successPropertyFits) { + propertyFlags |= PROP_GRAVITY; + propertiesDidntFit -= PROP_GRAVITY; + propertyCount++; + packetData.endLevel(propertyLevel); + } else { + packetData.discardLevel(propertyLevel); + appendState = OctreeElement::PARTIAL; + } + } else { + propertiesDidntFit -= PROP_GRAVITY; + } + + // PROP_DAMPING, + if (requestedProperties.getHasProperty(PROP_DAMPING)) { + LevelDetails propertyLevel = packetData.startLevel(); + successPropertyFits = packetData.appendValue(properties.getDamping()); + if (successPropertyFits) { + propertyFlags |= PROP_DAMPING; + propertiesDidntFit -= PROP_DAMPING; + propertyCount++; + packetData.endLevel(propertyLevel); + } else { + packetData.discardLevel(propertyLevel); + appendState = OctreeElement::PARTIAL; + } + } else { + propertiesDidntFit -= PROP_DAMPING; + } + + // PROP_LIFETIME, + if (requestedProperties.getHasProperty(PROP_LIFETIME)) { + LevelDetails propertyLevel = packetData.startLevel(); + successPropertyFits = packetData.appendValue(properties.getLifetime()); + if (successPropertyFits) { + propertyFlags |= PROP_LIFETIME; + propertiesDidntFit -= PROP_LIFETIME; + propertyCount++; + packetData.endLevel(propertyLevel); + } else { + packetData.discardLevel(propertyLevel); + appendState = OctreeElement::PARTIAL; + } + } else { + propertiesDidntFit -= PROP_LIFETIME; + } + // PROP_SCRIPT // script would go here... - -//#if 0 // def HIDE_SUBCLASS_METHODS + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // TODO: move these??? how to handle this for subclass properties??? // PROP_COLOR @@ -978,7 +871,6 @@ qDebug() << "EntityItem EntityItem::encodeEntityEditMessageDetails() model URL=" propertiesDidntFit -= PROP_ANIMATION_PLAYING; } -//#endif //def HIDE_SUBCLASS_METHODS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 95e1139b7e..fce6650da3 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -84,7 +84,6 @@ public: // similar to assignment/copy, but it handles keeping lifetime accurate void copyChangedProperties(const EntityItem& other); - // attributes applicable to all entity types EntityTypes::EntityType getType() const { return _type; } const glm::vec3& getPosition() const { return _position; } /// get position in domain scale units (0.0 - 1.0) @@ -99,17 +98,50 @@ public: bool getShouldBeDeleted() const { return _shouldBeDeleted; } void setShouldBeDeleted(bool shouldBeDeleted) { _shouldBeDeleted = shouldBeDeleted; } + static const float DEFAULT_GLOW_LEVEL; float getGlowLevel() const { return _glowLevel; } void setGlowLevel(float glowLevel) { _glowLevel = glowLevel; } + + static const float DEFAULT_MASS; + float getMass() const { return _mass; } + void setMass(float value) { _mass = value; } + + static const glm::vec3 DEFAULT_VELOCITY; + const glm::vec3& getVelocity() const { return _velocity; } /// velocity in domain scale units (0.0-1.0) per second + void setVelocity(const glm::vec3& value) { _velocity = value; } /// velocity in domain scale units (0.0-1.0) per second + + static const glm::vec3 DEFAULT_GRAVITY; + const glm::vec3& getGravity() const { return _gravity; } /// gravity in domain scale units (0.0-1.0) per second squared + void setGravity(const glm::vec3& value) { _gravity = value; } /// gravity in domain scale units (0.0-1.0) per second squared + + static const float DEFAULT_DAMPING; + float getDamping() const { return _damping; } + void setDamping(float value) { _damping = value; } + + // lifetime related properties. + static const float IMMORTAL; /// special lifetime which means the entity lives for ever. default lifetime + static const float DEFAULT_LIFETIME; + float getLifetime() const { return _lifetime; } /// get the lifetime in seconds for the entity + void setLifetime(float value) { _lifetime = value; } /// set the lifetime in seconds for the entity + + /// is this entity immortal, in that it has no lifetime set, and will exist until manually deleted + bool isImmortal() const { return _lifetime == IMMORTAL; } + + /// is this entity mortal, in that it has a lifetime set, and will automatically be deleted when that lifetime expires + bool isMortal() const { return _lifetime != IMMORTAL; } + /// age of this entity in seconds + float getAge() const { return (float)(usecTimestampNow() - _created) / (float)USECS_PER_SECOND; } + // position, size, and bounds related helpers float getSize() const { return _radius * 2.0f; } /// get maximum dimension in domain scale units (0.0 - 1.0) glm::vec3 getMinimumPoint() const { return _position - glm::vec3(_radius, _radius, _radius); } glm::vec3 getMaximumPoint() const { return _position + glm::vec3(_radius, _radius, _radius); } AACube getAACube() const { return AACube(getMinimumPoint(), getSize()); } /// AACube in domain scale units (0.0 - 1.0) - - + static const QString DEFAULT_SCRIPT; + const QString& getScript() const { return _script; } + void setScript(const QString& value) { _script = value; } protected: virtual void initFromEntityItemID(const EntityItemID& entityItemID); // maybe useful to allow subclasses to init @@ -120,12 +152,19 @@ protected: bool _newlyCreated; quint64 _lastUpdated; quint64 _lastEdited; + quint64 _created; glm::vec3 _position; float _radius; glm::quat _rotation; bool _shouldBeDeleted; float _glowLevel; + float _mass; + glm::vec3 _velocity; + glm::vec3 _gravity; + float _damping; + float _lifetime; + QString _script; }; class SphereEntityItem : public EntityItem { diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 9aab0be2a1..643880089a 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -12,8 +12,6 @@ #ifndef hifi_EntityItemProperties_h #define hifi_EntityItemProperties_h -#define HIDE_SUBCLASS_METHODS 1 - #include #include @@ -33,17 +31,7 @@ #include "EntityTypes.h" -const uint16_t ENTITY_PACKET_CONTAINS_RADIUS = 1; -const uint16_t ENTITY_PACKET_CONTAINS_POSITION = 2; -const uint16_t ENTITY_PACKET_CONTAINS_COLOR = 4; -const uint16_t ENTITY_PACKET_CONTAINS_SHOULDDIE = 8; -const uint16_t ENTITY_PACKET_CONTAINS_MODEL_URL = 16; -const uint16_t ENTITY_PACKET_CONTAINS_ROTATION = 32; -const uint16_t ENTITY_PACKET_CONTAINS_ANIMATION_URL = 64; -const uint16_t ENTITY_PACKET_CONTAINS_ANIMATION_PLAYING = 128; -const uint16_t ENTITY_PACKET_CONTAINS_ANIMATION_FRAME = 256; -const uint16_t ENTITY_PACKET_CONTAINS_ANIMATION_FPS = 512; - +// TODO: should these be static members of EntityItem or EntityItemProperties? const float ENTITY_DEFAULT_RADIUS = 0.1f / TREE_SCALE; const float ENTITY_MINIMUM_ELEMENT_SIZE = (1.0f / 100000.0f) / TREE_SCALE; // smallest size container const QString ENTITY_DEFAULT_MODEL_URL(""); @@ -55,13 +43,22 @@ const float ENTITY_DEFAULT_ANIMATION_FPS = 30.0f; enum EntityPropertyList { PROP_PAGED_PROPERTY, PROP_CUSTOM_PROPERTIES_INCLUDED, + + // these properties are supported by the EntityItem base class PROP_VISIBLE, PROP_POSITION, PROP_RADIUS, PROP_ROTATION, + PROP_MASS, + PROP_VELOCITY, + PROP_GRAVITY, + PROP_DAMPING, + PROP_LIFETIME, PROP_SCRIPT, - PROP_MODEL_URL, + + // these properties are supported by some derived classes PROP_COLOR, + PROP_MODEL_URL, PROP_ANIMATION_URL, PROP_ANIMATION_FPS, PROP_ANIMATION_FRAME_INDEX, @@ -133,15 +130,29 @@ public: void setRadius(float value) { _radius = value; _radiusChanged = true; } void setRotation(const glm::quat& rotation) { _rotation = rotation; _rotationChanged = true; } void setShouldBeDeleted(bool shouldBeDeleted) { _shouldBeDeleted = shouldBeDeleted; _shouldBeDeletedChanged = true; } + + float getMass() const { return _mass; } + void setMass(float value) { _mass = value; } + + const glm::vec3& getVelocity() const { return _velocity; } /// velocity in domain scale units (0.0-1.0) per second + void setVelocity(const glm::vec3& value) { _velocity = value; } /// velocity in domain scale units (0.0-1.0) per second + + const glm::vec3& getGravity() const { return _gravity; } /// gravity in domain scale units (0.0-1.0) per second squared + void setGravity(const glm::vec3& value) { _gravity = value; } /// gravity in domain scale units (0.0-1.0) per second squared + + float getDamping() const { return _damping; } + void setDamping(float value) { _damping = value; } + + float getLifetime() const { return _lifetime; } /// get the lifetime in seconds for the entity + void setLifetime(float value) { _lifetime = value; } /// set the lifetime in seconds for the entity // NOTE: how do we handle _defaultSettings??? bool containsBoundsProperties() const { return (_positionChanged || _radiusChanged); } bool containsPositionChange() const { return _positionChanged; } bool containsRadiusChange() const { return _radiusChanged; } -// TODO: this need to be more generic. for now, we're going to have the properties class support these as -// named getter/setters, but we want to move them to generic types... -//#ifdef HIDE_SUBCLASS_METHODS + // TODO: this need to be more generic. for now, we're going to have the properties class support these as + // named getter/setters, but we want to move them to generic types... // properties we want to move to just models and particles xColor getColor() const { return _color; } const QString& getModelURL() const { return _modelURL; } @@ -159,7 +170,6 @@ public: void setAnimationIsPlaying(bool value) { _animationIsPlaying = value; _animationIsPlayingChanged = true; } void setAnimationFPS(float value) { _animationFPS = value; _animationFPSChanged = true; } void setGlowLevel(float value) { _glowLevel = value; _glowLevelChanged = true; } -//#endif private: friend bool EntityTypes::decodeEntityEditPacket(const unsigned char* data, int bytesToRead, int& processedBytes, @@ -175,15 +185,20 @@ private: float _radius; glm::quat _rotation; bool _shouldBeDeleted; + float _mass; + glm::vec3 _velocity; + glm::vec3 _gravity; + float _damping; + float _lifetime; + QString _script; bool _positionChanged; bool _radiusChanged; bool _rotationChanged; bool _shouldBeDeletedChanged; -// TODO: this need to be more generic. for now, we're going to have the properties class support these as -// named getter/setters, but we want to move them to generic types... -//#ifdef HIDE_SUBCLASS_METHODS + // TODO: this need to be more generic. for now, we're going to have the properties class support these as + // named getter/setters, but we want to move them to generic types... xColor _color; QString _modelURL; QString _animationURL; @@ -200,7 +215,6 @@ private: bool _animationFrameIndexChanged; bool _animationFPSChanged; bool _glowLevelChanged; -//#endif bool _defaultSettings; }; diff --git a/libraries/entities/src/EntityTypes.cpp b/libraries/entities/src/EntityTypes.cpp index fb22549dc4..5bc1c047d4 100644 --- a/libraries/entities/src/EntityTypes.cpp +++ b/libraries/entities/src/EntityTypes.cpp @@ -290,13 +290,10 @@ qDebug() << "EntityTypes::decodeEntityEditPacket() ... lastEdited=" << lastEdite // script would go here... -//#ifdef HIDE_SUBCLASS_METHODS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // TODO: this needs to be reconciled... ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // PROP_COLOR if (propertyFlags.getHasProperty(PROP_COLOR)) { xColor color; @@ -364,7 +361,6 @@ qDebug() << "EntityTypes::decodeEntityEditPacket() ... lastEdited=" << lastEdite processedBytes += sizeof(animationIsPlaying); properties.setAnimationIsPlaying(animationIsPlaying); } -//#endif ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// const bool wantDebugging = false; @@ -378,10 +374,6 @@ qDebug() << "EntityTypes::decodeEntityEditPacket() ... lastEdited=" << lastEdite } bool EntityTypes::registerEntityTypeRenderer(EntityType entityType, EntityTypeRenderer renderMethod) { - qDebug() << "EntityTypes::registerEntityTypeRenderer()"; - qDebug() << " entityType=" << entityType; - qDebug() << " renderMethod=" << (void*)renderMethod; - if (!_renderersInitialized) { memset(&_renderers,0,sizeof(_renderers)); _renderersInitialized = true; diff --git a/libraries/entities/src/todo.txt b/libraries/entities/src/todo.txt index fc412601b5..ebef0fc1b7 100644 --- a/libraries/entities/src/todo.txt +++ b/libraries/entities/src/todo.txt @@ -7,7 +7,9 @@ Base properties... * velocity * gravity * damping + * mass * glow level + * lifetime should these be included for all entities? Light, Models, planes, etc? * rotational velocity? - wouldn't that be cool to be automatic with no edits @@ -38,6 +40,7 @@ Model properties: // REQUIRED TO DO: A) add velocity, gravity, damping to entity base class + Aa) visible??? 2) EntityTree::update()/EntityTreeElement::update()... velocity changes... C) verify "update" works @@ -47,26 +50,35 @@ Model properties: 22a) void ModelItemProperties::copyFromNewModelItem(const ModelItem& modelItem); // XXX ??? Do we need this???? 22b) Local Entities Overlay - from Local Models Overlay 22c) void ModelTree::sendModels(ModelEditPacketSender* packetSender, float x, float y, float z).... + bool EntityTree::sendEntitiesOperation(OctreeElement* element, void* extraData) {... DONE -- 22d) void ModelTree::findModelsInCube(const AACube& cube, QVector& foundModels)... DONE -- 22e) void ModelTreeElement::getModelsInside(const AACube& box, QVector& foundModels)... - F) TODO: do we need to handle "killing" viewed entities as well??? - void EntityTreeElement::updateEntityItemID(const EntityItemID& creatorTokenEntityID, const EntityItemID& knownIDEntityID)... 13) support sitpoints K) verify shadows work - M) change EntityTree::handleAddEntityResponse() to not scan entire tree... it can use the containing element stuff!!! N) Handle the ID -> UUID swap in old files to new files O) Test models -> attachments logic + 12) clean up delete behavior... + 12a) make sure server is deleting items?? + 12b) Use the delete message instead of shouldDelete property + Q) Referentials???? + + R) fix these!!! + EntityItem::encodeEntityEditMessageDetails() + EntityTypes::decodeEntityEditPacket() + These both contain details about non base class properties I think moving this to the EntityItemProperties is better... + // NICE TO DO: P) unit tests? + Pa) OctreeTests::modelItemTests()...???? // G) why does is the Box entity not drawn in it's bounds // H) make the rotated model bounds work for other entity types? @@ -135,9 +147,6 @@ Model properties: // Abort trap: 6 -// 12) clean up delete behavior... -// 12a) make sure server is deleting items?? -// 12b) Use the delete message instead of shouldDelete property // 13b) add user properties // 14) implement "Light" entity, "Fire" entity? @@ -191,4 +200,9 @@ Model properties: // SOLVED - B) enable animation in model class // SOLVED - 18) change ID's to UUIDS???? // SOLVED - L) sometimes assert/crashes in server about containing element? I think we're adding entityIDs with UNKNOWN_ID to our maps -// this crash is definitely caused by starting a server with an existing models file which has ID's already in use... +// this crash is definitely caused by starting a server with an existing models file which has ID's already in use... +// SOLVED - M) change EntityTree::handleAddEntityResponse() to not scan entire tree... it can use the containing element stuff!!! +// SOLVED - F) TODO: do we need to handle "killing" viewed entities as well??? +// void EntityTreeElement::updateEntityItemID(const EntityItemID& creatorTokenEntityID, const EntityItemID& knownIDEntityID)... + + diff --git a/tests/octree/src/ModelTests.cpp b/tests/octree/src/ModelTests.cpp index 2c46af0c55..b91963726f 100644 --- a/tests/octree/src/ModelTests.cpp +++ b/tests/octree/src/ModelTests.cpp @@ -27,7 +27,6 @@ void EntityTests::entityTreeTests(bool verbose) { -//#ifdef HIDE_SUBCLASS_METHODS bool extraVerbose = false; int testsTaken = 0; int testsPassed = 0; @@ -513,8 +512,6 @@ void EntityTests::entityTreeTests(bool verbose) { if (verbose) { qDebug() << "******************************************************************************************"; } -//#endif -//#endif // 0 } diff --git a/tests/octree/src/OctreeTests.cpp b/tests/octree/src/OctreeTests.cpp index 1ac094eefd..e564754974 100644 --- a/tests/octree/src/OctreeTests.cpp +++ b/tests/octree/src/OctreeTests.cpp @@ -1271,7 +1271,7 @@ void OctreeTests::byteCountCodingTests(bool verbose) { void OctreeTests::modelItemTests(bool verbose) { -#if 0 // def HIDE_SUBCLASS_METHODS +#if 0 // TODO - repair/replace these //verbose = true; EntityTreeElementExtraEncodeData modelTreeElementExtraEncodeData;