mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:38:27 +02:00
use SmartPointer for Zone _model
This commit is contained in:
parent
7b879a7964
commit
bb4d366c40
3 changed files with 20 additions and 25 deletions
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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 };
|
||||||
|
|
Loading…
Reference in a new issue