use SmartPointer for Zone _model

This commit is contained in:
Andrew Meadows 2017-05-19 15:33:23 -07:00
parent 7b879a7964
commit bb4d366c40
3 changed files with 20 additions and 25 deletions

View file

@ -5348,6 +5348,7 @@ bool Application::nearbyEntitiesAreReadyForPhysics() {
qCDebug(interfaceapp) << "Physics disabled until entity loads: " << entity->getID() << entity->getName(); qCDebug(interfaceapp) << "Physics disabled until entity loads: " << entity->getID() << entity->getName();
// don't break here because we want all the relevant entities to start their downloads // don't break here because we want all the relevant entities to start their downloads
result = false; result = false;
break;
} }
} }
return result; return result;

View file

@ -36,15 +36,17 @@ void RenderableZoneEntityItem::changeProperties(Lambda setNewProperties) {
QString oldShapeURL = getCompoundShapeURL(); QString oldShapeURL = getCompoundShapeURL();
glm::vec3 oldPosition = getPosition(), oldDimensions = getDimensions(); glm::vec3 oldPosition = getPosition(), oldDimensions = getDimensions();
glm::quat oldRotation = getRotation(); glm::quat oldRotation = getRotation();
setNewProperties(); setNewProperties();
if (oldShapeURL != getCompoundShapeURL()) { if (oldShapeURL != getCompoundShapeURL()) {
if (_model) { if (_model) {
delete _model; _model.reset();
} }
_model = getModel(); _model = std::make_shared<Model>();
_model->setIsWireframe(true);
_model->init();
_needsInitialSimulation = true; _needsInitialSimulation = true;
_model->setURL(getCompoundShapeURL()); _model->setURL(getCompoundShapeURL());
} }
@ -80,13 +82,6 @@ int RenderableZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch
return bytesRead; return bytesRead;
} }
Model* RenderableZoneEntityItem::getModel() {
Model* model = new Model();
model->setIsWireframe(true);
model->init();
return model;
}
void RenderableZoneEntityItem::initialSimulation() { void RenderableZoneEntityItem::initialSimulation() {
_model->setScaleToFit(true, getDimensions()); _model->setScaleToFit(true, getDimensions());
_model->setSnapModelToRegistrationPoint(true, getRegistrationPoint()); _model->setSnapModelToRegistrationPoint(true, getRegistrationPoint());
@ -108,7 +103,7 @@ void RenderableZoneEntityItem::updateGeometry() {
void RenderableZoneEntityItem::render(RenderArgs* args) { void RenderableZoneEntityItem::render(RenderArgs* args) {
Q_ASSERT(getType() == EntityTypes::Zone); Q_ASSERT(getType() == EntityTypes::Zone);
if (_drawZoneBoundaries) { if (_drawZoneBoundaries) {
switch (getShapeType()) { switch (getShapeType()) {
case SHAPE_TYPE_COMPOUND: { case SHAPE_TYPE_COMPOUND: {
@ -123,9 +118,9 @@ void RenderableZoneEntityItem::render(RenderArgs* args) {
render::Item::Status::Getters statusGetters; render::Item::Status::Getters statusGetters;
makeEntityItemStatusGetters(getThisPointer(), statusGetters); makeEntityItemStatusGetters(getThisPointer(), statusGetters);
_model->addToScene(scene, transaction); _model->addToScene(scene, transaction);
scene->enqueueTransaction(transaction); scene->enqueueTransaction(transaction);
_model->setVisibleInScene(getVisible(), scene); _model->setVisibleInScene(getVisible(), scene);
} }
break; break;
@ -134,7 +129,7 @@ void RenderableZoneEntityItem::render(RenderArgs* args) {
case SHAPE_TYPE_SPHERE: { case SHAPE_TYPE_SPHERE: {
PerformanceTimer perfTimer("zone->renderPrimitive"); PerformanceTimer perfTimer("zone->renderPrimitive");
glm::vec4 DEFAULT_COLOR(1.0f, 1.0f, 1.0f, 1.0f); glm::vec4 DEFAULT_COLOR(1.0f, 1.0f, 1.0f, 1.0f);
Q_ASSERT(args->_batch); Q_ASSERT(args->_batch);
gpu::Batch& batch = *args->_batch; gpu::Batch& batch = *args->_batch;
@ -159,7 +154,7 @@ void RenderableZoneEntityItem::render(RenderArgs* args) {
break; break;
} }
} }
if ((!_drawZoneBoundaries || getShapeType() != SHAPE_TYPE_COMPOUND) && if ((!_drawZoneBoundaries || getShapeType() != SHAPE_TYPE_COMPOUND) &&
_model && !_model->needsFixupInScene()) { _model && !_model->needsFixupInScene()) {
// If the model is in the scene but doesn't need to be, remove it. // If the model is in the scene but doesn't need to be, remove it.
@ -175,11 +170,11 @@ bool RenderableZoneEntityItem::contains(const glm::vec3& point) const {
return EntityItem::contains(point); return EntityItem::contains(point);
} }
const_cast<RenderableZoneEntityItem*>(this)->updateGeometry(); const_cast<RenderableZoneEntityItem*>(this)->updateGeometry();
if (_model && _model->isActive() && EntityItem::contains(point)) { if (_model && _model->isActive() && EntityItem::contains(point)) {
return _model->convexHullContains(point); return _model->convexHullContains(point);
} }
return false; return false;
} }
@ -188,7 +183,7 @@ public:
RenderableZoneEntityItemMeta(EntityItemPointer entity) : entity(entity){ } RenderableZoneEntityItemMeta(EntityItemPointer entity) : entity(entity){ }
typedef render::Payload<RenderableZoneEntityItemMeta> Payload; typedef render::Payload<RenderableZoneEntityItemMeta> Payload;
typedef Payload::DataPointer Pointer; typedef Payload::DataPointer Pointer;
EntityItemPointer entity; EntityItemPointer entity;
}; };
@ -196,7 +191,7 @@ namespace render {
template <> const ItemKey payloadGetKey(const RenderableZoneEntityItemMeta::Pointer& payload) { template <> const ItemKey payloadGetKey(const RenderableZoneEntityItemMeta::Pointer& payload) {
return ItemKey::Builder::opaqueShape(); return ItemKey::Builder::opaqueShape();
} }
template <> const Item::Bound payloadGetBound(const RenderableZoneEntityItemMeta::Pointer& payload) { template <> const Item::Bound payloadGetBound(const RenderableZoneEntityItemMeta::Pointer& payload) {
if (payload && payload->entity) { if (payload && payload->entity) {
bool success; bool success;
@ -220,7 +215,7 @@ namespace render {
bool RenderableZoneEntityItem::addToScene(EntityItemPointer self, const render::ScenePointer& scene, bool RenderableZoneEntityItem::addToScene(EntityItemPointer self, const render::ScenePointer& scene,
render::Transaction& transaction) { render::Transaction& transaction) {
_myMetaItem = scene->allocateID(); _myMetaItem = scene->allocateID();
auto renderData = std::make_shared<RenderableZoneEntityItemMeta>(self); auto renderData = std::make_shared<RenderableZoneEntityItemMeta>(self);
auto renderPayload = std::make_shared<RenderableZoneEntityItemMeta::Payload>(renderData); auto renderPayload = std::make_shared<RenderableZoneEntityItemMeta::Payload>(renderData);

View file

@ -23,7 +23,7 @@ public:
RenderableZoneEntityItem(const EntityItemID& entityItemID) : RenderableZoneEntityItem(const EntityItemID& entityItemID) :
ZoneEntityItem(entityItemID), ZoneEntityItem(entityItemID),
_model(NULL), _model(nullptr),
_needsInitialSimulation(true) _needsInitialSimulation(true)
{ } { }
@ -48,14 +48,13 @@ private:
virtual void dimensionsChanged() override { EntityItem::dimensionsChanged(); notifyBoundChanged(); } virtual void dimensionsChanged() override { EntityItem::dimensionsChanged(); notifyBoundChanged(); }
void notifyBoundChanged(); void notifyBoundChanged();
Model* getModel();
void initialSimulation(); void initialSimulation();
void updateGeometry(); void updateGeometry();
template<typename Lambda> template<typename Lambda>
void changeProperties(Lambda functor); void changeProperties(Lambda functor);
Model* _model; ModelPointer _model;
bool _needsInitialSimulation; bool _needsInitialSimulation;
render::ItemID _myMetaItem{ render::Item::INVALID_ITEM_ID }; render::ItemID _myMetaItem{ render::Item::INVALID_ITEM_ID };