From e55688e21ce7b902e6e944acfec432e29a93763d Mon Sep 17 00:00:00 2001 From: Daniel Evans Date: Sun, 12 May 2019 00:49:07 +0100 Subject: [PATCH] Render Projectile and Pickup Objects via Atomics --- rwengine/src/objects/PickupObject.cpp | 5 +++++ rwengine/src/objects/ProjectileObject.cpp | 6 ++++++ rwengine/src/render/ObjectRenderer.cpp | 20 ++++---------------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/rwengine/src/objects/PickupObject.cpp b/rwengine/src/objects/PickupObject.cpp index cb66e38b..4d7ce4a1 100644 --- a/rwengine/src/objects/PickupObject.cpp +++ b/rwengine/src/objects/PickupObject.cpp @@ -271,6 +271,11 @@ PickupObject::PickupObject(GameWorld* world, const glm::vec3& position, setEnabled(true); setCollected(false); + + auto modelData = getModelInfo(); + auto atomic = modelData->getAtomic(0)->clone(); + atomic->setFrame(std::make_shared()); + setModel(std::move(atomic)); } PickupObject::~PickupObject() { diff --git a/rwengine/src/objects/ProjectileObject.cpp b/rwengine/src/objects/ProjectileObject.cpp index 185257f1..6002fd9d 100644 --- a/rwengine/src/objects/ProjectileObject.cpp +++ b/rwengine/src/objects/ProjectileObject.cpp @@ -158,6 +158,12 @@ ProjectileObject::ProjectileObject(GameWorld* world, const glm::vec3& position, _ghostBody.get(), btBroadphaseProxy::SensorTrigger, btBroadphaseProxy::AllFilter); } + + const auto& modelData = world->data->findModelInfo( + getProjectileInfo().weapon->modelID); + auto atomic = modelData->getAtomic(0)->clone(); + atomic->setFrame(std::make_shared()); + setModel(std::move(atomic)); } ProjectileObject::~ProjectileObject() { diff --git a/rwengine/src/render/ObjectRenderer.cpp b/rwengine/src/render/ObjectRenderer.cpp index 47586f44..3d23245d 100644 --- a/rwengine/src/render/ObjectRenderer.cpp +++ b/rwengine/src/render/ObjectRenderer.cpp @@ -313,14 +313,8 @@ void ObjectRenderer::renderPickup(PickupObject* pickup, RenderList& outList) { glm::translate(glm::mat4(1.0f), pickup->getPosition()); modelMatrix = glm::rotate(modelMatrix, m_world->getGameTime() * kRotationSpeedCoeff, glm::vec3(0.f, 0.f, 1.f)); - - auto odata = pickup->getModelInfo(); - - RW_CHECK(odata, "Failed to read modelinfo for Pickup"); - - auto atomic = odata->getAtomic(0); - - renderAtomic(atomic, modelMatrix, nullptr, outList); + const auto& atomic = pickup->getAtomic(); + renderAtomic(atomic.get(), modelMatrix, nullptr, outList); } void ObjectRenderer::renderCutsceneObject(CutsceneObject* cutscene, @@ -346,14 +340,8 @@ void ObjectRenderer::renderCutsceneObject(CutsceneObject* cutscene, void ObjectRenderer::renderProjectile(ProjectileObject* projectile, RenderList& outList) { glm::mat4 modelMatrix = projectile->getTimeAdjustedTransform(m_renderAlpha); - - auto odata = m_world->data->findModelInfo( - projectile->getProjectileInfo().weapon->modelID); - - RW_CHECK(odata, "Failed to read modelinfo"); - - auto atomic = odata->getAtomic(0); - renderAtomic(atomic, modelMatrix, nullptr, outList); + const auto& atomic = projectile->getAtomic(); + renderAtomic(atomic.get(), modelMatrix, nullptr, outList); } void ObjectRenderer::buildRenderList(GameObject* object, RenderList& outList) {