diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp index 2f40b6ce6b..6700a35c7b 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp @@ -1,6 +1,6 @@ // // RenderableBoxEntityItem.cpp -// interface/src +// libraries/entities-renderer/src/ // // Created by Brad Hefta-Gaub on 8/6/14. // Copyright 2014 High Fidelity, Inc. @@ -36,8 +36,9 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { getColor()[BLUE_INDEX] / MAX_COLOR, getLocalRenderAlpha()); + bool debugSimulationOwnership = args->_debugFlags & RenderArgs::RENDER_DEBUG_SIMULATION_OWNERSHIP; bool highlightSimulationOwnership = false; - if (args->_debugFlags & RenderArgs::RENDER_DEBUG_SIMULATION_OWNERSHIP) { + if (debugSimulationOwnership) { auto nodeList = DependencyManager::get(); const QUuid& myNodeID = nodeList->getSessionUUID(); highlightSimulationOwnership = (getSimulatorID() == myNodeID); @@ -58,4 +59,6 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { } glPopMatrix(); glPopMatrix(); + + RenderableDebugableEntityItem::render(args); }; diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.h b/libraries/entities-renderer/src/RenderableBoxEntityItem.h index c4495d2328..811eb8c4e4 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.h @@ -1,6 +1,6 @@ // -// RenderableBoxEntityItem.h -// interface/src/entities +// RenderableDebugableEntityItem.h +// libraries/entities-renderer/src/ // // Created by Brad Hefta-Gaub on 8/6/14. // Copyright 2014 High Fidelity, Inc. @@ -13,8 +13,9 @@ #define hifi_RenderableBoxEntityItem_h #include +#include "RenderableDebugableEntityItem.h" -class RenderableBoxEntityItem : public BoxEntityItem { +class RenderableBoxEntityItem : public BoxEntityItem, public RenderableDebugableEntityItem { public: static EntityItem* factory(const EntityItemID& entityID, const EntityItemProperties& properties); diff --git a/libraries/entities-renderer/src/RenderableDebugableEntityItem.cpp b/libraries/entities-renderer/src/RenderableDebugableEntityItem.cpp new file mode 100644 index 0000000000..4f637f0082 --- /dev/null +++ b/libraries/entities-renderer/src/RenderableDebugableEntityItem.cpp @@ -0,0 +1,61 @@ +// +// RenderableDebugableEntityItem.cpp +// libraries/entities-renderer/src/ +// +// Created by Brad Hefta-Gaub on 8/6/14. +// 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 +// + + + +#include +#include +#include + +#include "RenderableDebugableEntityItem.h" + + +void RenderableDebugableEntityItem::renderBoundingBox(RenderArgs* args, bool puffedOut) { + + EntityItem* entity = dynamic_cast(this); + + glm::vec3 position = entity->getPosition(); + glm::vec3 center = entity->getCenter(); + glm::vec3 dimensions = entity->getDimensions(); + glm::quat rotation = entity->getRotation(); + // float size = glm::length(dimensions) / 2.0f; + + glm::vec4 greenColor(0.0f, 1.0f, 0.0f, 1.0f); + + glPushMatrix(); + glTranslatef(position.x, position.y, position.z); + glm::vec3 axis = glm::axis(rotation); + glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); + glPushMatrix(); + glm::vec3 positionToCenter = center - position; + glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); + glScalef(dimensions.x, dimensions.y, dimensions.z); + if (puffedOut) { + DependencyManager::get()->renderWireCube(1.2f, greenColor); + } else { + DependencyManager::get()->renderWireCube(1.0f, greenColor); + } + glPopMatrix(); + glPopMatrix(); +} + + +void RenderableDebugableEntityItem::render(RenderArgs* args) { + EntityItem* entity = dynamic_cast(this); + bool debugSimulationOwnership = args->_debugFlags & RenderArgs::RENDER_DEBUG_SIMULATION_OWNERSHIP; + + if (debugSimulationOwnership) { + quint64 now = usecTimestampNow(); + if (now - entity->getLastEditedFromRemote() < 0.1f * USECS_PER_SECOND) { + renderBoundingBox(args, true); + } + } +} diff --git a/libraries/entities-renderer/src/RenderableDebugableEntityItem.h b/libraries/entities-renderer/src/RenderableDebugableEntityItem.h new file mode 100644 index 0000000000..77357b9437 --- /dev/null +++ b/libraries/entities-renderer/src/RenderableDebugableEntityItem.h @@ -0,0 +1,26 @@ +// +// RenderableBoxEntityItem.h +// interface/src/entities +// +// Created by Seth Alves on 5/1/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_RenderableDebugableEntityItem_h +#define hifi_RenderableDebugableEntityItem_h + +#include + +class RenderableDebugableEntityItem { +public: + RenderableDebugableEntityItem() {} + virtual ~RenderableDebugableEntityItem() {} + + void renderBoundingBox(RenderArgs* args, bool puffedOut); + virtual void render(RenderArgs* args); +}; + +#endif // hifi_RenderableBoxEntityItem_h diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index cedb5b9924..b5cf130672 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -108,34 +108,6 @@ void RenderableModelEntityItem::remapTextures() { _currentTextures = _textures; } - -void RenderableModelEntityItem::renderBoundingBox(RenderArgs* args) { - glm::vec3 position = getPosition(); - glm::vec3 center = getCenter(); - glm::vec3 dimensions = getDimensions(); - glm::quat rotation = getRotation(); - // float size = glm::length(dimensions) / 2.0f; - - const float MAX_COLOR = 255.0f; - glm::vec4 cubeColor(getColor()[RED_INDEX] / MAX_COLOR, - getColor()[GREEN_INDEX] / MAX_COLOR, - getColor()[BLUE_INDEX] / MAX_COLOR, - getLocalRenderAlpha()); - - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - glm::vec3 axis = glm::axis(rotation); - glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - glPushMatrix(); - glm::vec3 positionToCenter = center - position; - glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); - glScalef(dimensions.x, dimensions.y, dimensions.z); - DependencyManager::get()->renderWireCube(1.0f, cubeColor); - glPopMatrix(); - glPopMatrix(); -} - - void RenderableModelEntityItem::render(RenderArgs* args) { PerformanceTimer perfTimer("RMEIrender"); assert(getType() == EntityTypes::Model); @@ -145,8 +117,9 @@ void RenderableModelEntityItem::render(RenderArgs* args) { glm::vec3 position = getPosition(); glm::vec3 dimensions = getDimensions(); + bool debugSimulationOwnership = args->_debugFlags & RenderArgs::RENDER_DEBUG_SIMULATION_OWNERSHIP; bool highlightSimulationOwnership = false; - if (args->_debugFlags & RenderArgs::RENDER_DEBUG_SIMULATION_OWNERSHIP) { + if (debugSimulationOwnership) { auto nodeList = DependencyManager::get(); const QUuid& myNodeID = nodeList->getSessionUUID(); highlightSimulationOwnership = (getSimulatorID() == myNodeID); @@ -219,8 +192,10 @@ void RenderableModelEntityItem::render(RenderArgs* args) { } if (!didDraw) { - renderBoundingBox(args); + renderBoundingBox(args, false); } + + RenderableDebugableEntityItem::render(args); } Model* RenderableModelEntityItem::getModel(EntityTreeRenderer* renderer) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index ec0e30985c..d6a4c81952 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -16,11 +16,12 @@ #include #include +#include "RenderableDebugableEntityItem.h" class Model; class EntityTreeRenderer; -class RenderableModelEntityItem : public ModelEntityItem { +class RenderableModelEntityItem : public ModelEntityItem, public RenderableDebugableEntityItem { public: static EntityItem* factory(const EntityItemID& entityID, const EntityItemProperties& properties); @@ -42,7 +43,6 @@ public: virtual void somethingChangedNotification() { _needsInitialSimulation = true; } - void renderBoundingBox(RenderArgs* args); virtual void render(RenderArgs* args); virtual bool supportsDetailedRayIntersection() const { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index e71f88d723..62e87efcac 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -304,7 +304,9 @@ public: glm::mat4 getWorldToEntityMatrix() const; glm::vec3 worldToEntity(const glm::vec3& point) const; glm::vec3 entityToWorld(const glm::vec3& point) const; - + + quint64 getLastEditedFromRemote() { return _lastEditedFromRemote; } + protected: static bool _sendPhysicsUpdates;