Update Scene on ZoneEntity update

ZoneEntity is unique in that it is not updated
every frame that it is rendered, but only
when the avatar moves.

This introduces custom code so that the
RenderableZoneEntity initiates an update
in the EntityTreeRenderer on update,
to improve usability of zone editing.
This commit is contained in:
Zach Pomerantz 2016-02-24 19:38:24 -08:00
parent 9000c3479b
commit c20bd6cbbc
4 changed files with 24 additions and 0 deletions

View file

@ -853,3 +853,19 @@ void EntityTreeRenderer::updateEntityRenderStatus(bool shouldRenderEntities) {
}
}
}
void EntityTreeRenderer::updateZone(const EntityItemID& id) {
if (!_bestZone) {
// Get in the zone!
auto zone = getTree()->findEntityByEntityItemID(id);
if (zone && zone->contains(_lastAvatarPosition)) {
_currentEntitiesInside << id;
emit enterEntity(id);
_entitiesScriptEngine->callEntityScriptMethod(id, "enterEntity");
_bestZone = std::dynamic_pointer_cast<ZoneEntityItem>(zone);
}
}
if (_bestZone && _bestZone->getID() == id) {
applyZonePropertiesToScene(_bestZone);
}
}

View file

@ -109,6 +109,7 @@ public slots:
void entitySciptChanging(const EntityItemID& entityID, const bool reload);
void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision);
void updateEntityRenderStatus(bool shouldRenderEntities);
void updateZone(const EntityItemID& id);
// optional slots that can be wired to menu items
void setDisplayModelBounds(bool value) { _displayModelBounds = value; }

View file

@ -18,6 +18,7 @@
#include <GeometryCache.h>
#include <PerfStat.h>
#include "EntityTreeRenderer.h"
#include "RenderableEntityItem.h"
// Sphere entities should fit inside a cube entity of the same size, so a sphere that has dimensions 1x1x1
@ -62,6 +63,10 @@ bool RenderableZoneEntityItem::setProperties(const EntityItemProperties& propert
return somethingChanged;
}
void RenderableZoneEntityItem::somethingChangedNotification() {
DependencyManager::get<EntityTreeRenderer>()->updateZone(_id);
}
int RenderableZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
ReadBitstreamToTreeParams& args,
EntityPropertyFlags& propertyFlags, bool overwriteLocalData,

View file

@ -28,6 +28,8 @@ public:
{ }
virtual bool setProperties(const EntityItemProperties& properties);
virtual void somethingChangedNotification() override;
virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
ReadBitstreamToTreeParams& args,
EntityPropertyFlags& propertyFlags, bool overwriteLocalData,