diff --git a/interface/src/workload/PhysicsBoundary.h b/interface/src/workload/PhysicsBoundary.h index 8f5c1a48ff..4109418e27 100644 --- a/interface/src/workload/PhysicsBoundary.h +++ b/interface/src/workload/PhysicsBoundary.h @@ -61,12 +61,12 @@ public: uint32_t numExits = (uint32_t)regionChanges[exitIndex].size(); for (uint32_t i = 0; i < numExits; ++i) { int32_t proxyID = regionChanges[exitIndex][i]; - void* owner = space->getOwner(proxyID).get(); + auto owner = space->getOwner(proxyID).get(); if (owner) { - EntityItem* entity = static_cast(owner); + //EntityItem* entity = static_cast(owner); std::cout << "adebug - " //<< owner - << " '" << entity->getName().toStdString() << "'" + << " '" << owner->getName().toStdString() << "'" << std::endl; // adebug } } @@ -75,12 +75,12 @@ public: uint32_t numEntries = (uint32_t)regionChanges[enterIndex].size(); for (uint32_t i = 0; i < numEntries; ++i) { int32_t proxyID = regionChanges[enterIndex][i]; - void* owner = space->getOwner(proxyID).get(); + auto owner = space->getOwner(proxyID).get(); if (owner) { - EntityItem* entity = static_cast(owner); + // EntityItem* entity = static_cast(owner); std::cout << "adebug + " //<< owner - << " '" << entity->getName().toStdString() << "'" + << " '" << owner->getName().toStdString() << "'" << std::endl; // adebug } } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index ac3afb3e2b..8a8b71218c 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -284,7 +284,7 @@ void EntityTreeRenderer::addPendingEntities(const render::ScenePointer& scene, r auto spaceIndex = _space->allocateID(); workload::Sphere sphere(entity->getWorldPosition(), entity->getBoundingRadius()); workload::Transaction transaction; - transaction.reset(spaceIndex, sphere, workload::Owner(entity.get())); + transaction.reset(spaceIndex, sphere, workload::Owner(entity)); _space->enqueueTransaction(transaction); entity->setSpaceIndex(spaceIndex); connect(entity.get(), &EntityItem::spaceUpdate, this, &EntityTreeRenderer::handleSpaceUpdate, Qt::QueuedConnection); diff --git a/libraries/workload/src/workload/Proxy.h b/libraries/workload/src/workload/Proxy.h index 0c1c7363cd..d204bd8544 100644 --- a/libraries/workload/src/workload/Proxy.h +++ b/libraries/workload/src/workload/Proxy.h @@ -18,13 +18,32 @@ namespace workload { class Owner { public: Owner() = default; - Owner(void* data) : _data(data) {} Owner(const Owner& other) = default; Owner& operator=(const Owner& other) = default; + + template Owner(const T& data) : _concept(std::make_shared>(data)) {} + ~Owner() {} - void* get() const { return _data; } + + template const T get() const { return std::static_pointer_cast>(_concept)->_data; } + +protected: + class Concept { + public: + virtual ~Concept() = default; + + }; + template class Model : public Concept { + public: + using Data = T; + Data _data; + + Model(const Data& data) : _data(data) {} + virtual ~Model() = default; + }; + private: - void* _data { nullptr }; + std::shared_ptr _concept; }; class Proxy {