updating all the entity types when their bound is changing

This commit is contained in:
samcake 2016-02-10 16:41:09 -08:00
parent b295a3732e
commit 6922c9adf0
5 changed files with 34 additions and 3 deletions

View file

@ -37,8 +37,6 @@ public:
typedef render::Payload<RenderableEntityItemProxy> Payload; typedef render::Payload<RenderableEntityItemProxy> Payload;
typedef Payload::DataPointer Pointer; typedef Payload::DataPointer Pointer;
int touch = 0;
EntityItemPointer entity; EntityItemPointer entity;
}; };
@ -79,7 +77,6 @@ public:
render::ScenePointer scene = AbstractViewStateInterface::instance()->getMain3DScene(); render::ScenePointer scene = AbstractViewStateInterface::instance()->getMain3DScene();
pendingChanges.updateItem<RenderableEntityItemProxy>(_myItem, [](RenderableEntityItemProxy& data) { pendingChanges.updateItem<RenderableEntityItemProxy>(_myItem, [](RenderableEntityItemProxy& data) {
data.touch++;
}); });
scene->enqueuePendingChanges(pendingChanges); scene->enqueuePendingChanges(pendingChanges);

View file

@ -310,3 +310,14 @@ void RenderableParticleEffectEntityItem::createPipelines() {
_texturedPipeline = gpu::Pipeline::create(program, state); _texturedPipeline = gpu::Pipeline::create(program, state);
} }
} }
void RenderableParticleEffectEntityItem::notifyBoundChanged() {
if (_renderItemId == render::Item::INVALID_ITEM_ID) {
return;
}
render::PendingChanges pendingChanges;
pendingChanges.updateItem<ParticlePayloadData>(_renderItemId, [](ParticlePayloadData& payload) {
});
_scene->enqueuePendingChanges(pendingChanges);
}

View file

@ -29,6 +29,11 @@ public:
virtual void removeFromScene(EntityItemPointer self, render::ScenePointer scene, render::PendingChanges& pendingChanges) override; virtual void removeFromScene(EntityItemPointer self, render::ScenePointer scene, render::PendingChanges& pendingChanges) override;
protected: protected:
virtual void locationChanged() override { EntityItem::locationChanged(); notifyBoundChanged(); }
virtual void dimensionsChanged() override { EntityItem::dimensionsChanged(); notifyBoundChanged(); }
void notifyBoundChanged();
void createPipelines(); void createPipelines();
render::ScenePointer _scene; render::ScenePointer _scene;

View file

@ -234,3 +234,17 @@ void RenderableZoneEntityItem::removeFromScene(EntityItemPointer self, std::shar
_model->removeFromScene(scene, pendingChanges); _model->removeFromScene(scene, pendingChanges);
} }
} }
void RenderableZoneEntityItem::notifyBoundChanged() {
if (_myMetaItem == render::Item::INVALID_ITEM_ID) {
return;
}
render::PendingChanges pendingChanges;
render::ScenePointer scene = AbstractViewStateInterface::instance()->getMain3DScene();
pendingChanges.updateItem<RenderableZoneEntityItemMeta>(_myMetaItem, [](RenderableZoneEntityItemMeta& data) {
});
scene->enqueuePendingChanges(pendingChanges);
}

View file

@ -40,6 +40,10 @@ public:
virtual void removeFromScene(EntityItemPointer self, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges); virtual void removeFromScene(EntityItemPointer self, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges);
private: private:
virtual void locationChanged() override { EntityItem::locationChanged(); notifyBoundChanged(); }
virtual void dimensionsChanged() override { EntityItem::dimensionsChanged(); notifyBoundChanged(); }
void notifyBoundChanged();
Model* getModel(); Model* getModel();
void initialSimulation(); void initialSimulation();
void updateGeometry(); void updateGeometry();