1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-09-03 09:09:47 +02:00

Render Projectile and Pickup Objects via Atomics

This commit is contained in:
Daniel Evans 2019-05-12 00:49:07 +01:00
parent ff10f3769e
commit e55688e21c
3 changed files with 15 additions and 16 deletions

View File

@ -271,6 +271,11 @@ PickupObject::PickupObject(GameWorld* world, const glm::vec3& position,
setEnabled(true); setEnabled(true);
setCollected(false); setCollected(false);
auto modelData = getModelInfo<SimpleModelInfo>();
auto atomic = modelData->getAtomic(0)->clone();
atomic->setFrame(std::make_shared<ModelFrame>());
setModel(std::move(atomic));
} }
PickupObject::~PickupObject() { PickupObject::~PickupObject() {

View File

@ -158,6 +158,12 @@ ProjectileObject::ProjectileObject(GameWorld* world, const glm::vec3& position,
_ghostBody.get(), btBroadphaseProxy::SensorTrigger, _ghostBody.get(), btBroadphaseProxy::SensorTrigger,
btBroadphaseProxy::AllFilter); btBroadphaseProxy::AllFilter);
} }
const auto& modelData = world->data->findModelInfo<SimpleModelInfo>(
getProjectileInfo().weapon->modelID);
auto atomic = modelData->getAtomic(0)->clone();
atomic->setFrame(std::make_shared<ModelFrame>());
setModel(std::move(atomic));
} }
ProjectileObject::~ProjectileObject() { ProjectileObject::~ProjectileObject() {

View File

@ -313,14 +313,8 @@ void ObjectRenderer::renderPickup(PickupObject* pickup, RenderList& outList) {
glm::translate(glm::mat4(1.0f), pickup->getPosition()); glm::translate(glm::mat4(1.0f), pickup->getPosition());
modelMatrix = glm::rotate(modelMatrix, m_world->getGameTime() * kRotationSpeedCoeff, modelMatrix = glm::rotate(modelMatrix, m_world->getGameTime() * kRotationSpeedCoeff,
glm::vec3(0.f, 0.f, 1.f)); glm::vec3(0.f, 0.f, 1.f));
const auto& atomic = pickup->getAtomic();
auto odata = pickup->getModelInfo<SimpleModelInfo>(); renderAtomic(atomic.get(), modelMatrix, nullptr, outList);
RW_CHECK(odata, "Failed to read modelinfo for Pickup");
auto atomic = odata->getAtomic(0);
renderAtomic(atomic, modelMatrix, nullptr, outList);
} }
void ObjectRenderer::renderCutsceneObject(CutsceneObject* cutscene, void ObjectRenderer::renderCutsceneObject(CutsceneObject* cutscene,
@ -346,14 +340,8 @@ void ObjectRenderer::renderCutsceneObject(CutsceneObject* cutscene,
void ObjectRenderer::renderProjectile(ProjectileObject* projectile, void ObjectRenderer::renderProjectile(ProjectileObject* projectile,
RenderList& outList) { RenderList& outList) {
glm::mat4 modelMatrix = projectile->getTimeAdjustedTransform(m_renderAlpha); glm::mat4 modelMatrix = projectile->getTimeAdjustedTransform(m_renderAlpha);
const auto& atomic = projectile->getAtomic();
auto odata = m_world->data->findModelInfo<SimpleModelInfo>( renderAtomic(atomic.get(), modelMatrix, nullptr, outList);
projectile->getProjectileInfo().weapon->modelID);
RW_CHECK(odata, "Failed to read modelinfo");
auto atomic = odata->getAtomic(0);
renderAtomic(atomic, modelMatrix, nullptr, outList);
} }
void ObjectRenderer::buildRenderList(GameObject* object, RenderList& outList) { void ObjectRenderer::buildRenderList(GameObject* object, RenderList& outList) {