From 5665c0f298d2b1e4b65b2842b180843b50543fab Mon Sep 17 00:00:00 2001 From: Tleety Date: Wed, 3 Feb 2016 14:20:47 +0100 Subject: [PATCH] Models with Shield and shielded component now added to queues --- .../Schema/Entities/QualityAssurance.xml | 32 +++++----- src/Engine/Rendering/RenderSystem.cpp | 58 +++++++++++++++---- 2 files changed, 63 insertions(+), 27 deletions(-) diff --git a/resources/Schema/Entities/QualityAssurance.xml b/resources/Schema/Entities/QualityAssurance.xml index b15e9309..cb75b7b3 100644 --- a/resources/Schema/Entities/QualityAssurance.xml +++ b/resources/Schema/Entities/QualityAssurance.xml @@ -40,7 +40,7 @@ - + @@ -188,7 +188,7 @@ - + @@ -683,7 +683,7 @@ - + @@ -730,7 +730,7 @@ - + @@ -790,7 +790,7 @@ - + @@ -837,7 +837,7 @@ - + @@ -883,7 +883,7 @@ - + @@ -930,7 +930,7 @@ - + @@ -977,7 +977,7 @@ - + @@ -1377,7 +1377,7 @@ - + @@ -1386,7 +1386,7 @@ true - 0.7502397033169681 + 0.75055150002244431 3.7999999523162842 true @@ -1433,7 +1433,7 @@ - + @@ -1442,7 +1442,7 @@ - 1.2001454539310752 + 1.2004572506365514 Models/Assault.mesh @@ -1485,7 +1485,7 @@ - + @@ -1500,7 +1500,7 @@ true - 0.68359123759100648 + 0.68390303429648269 true @@ -1581,6 +1581,7 @@ Models/Core/UnitCube.mesh + @@ -1690,6 +1691,7 @@ true + 0.0003117967054762083 3.7999999523162842 true diff --git a/src/Engine/Rendering/RenderSystem.cpp b/src/Engine/Rendering/RenderSystem.cpp index 9711cea1..623e7101 100644 --- a/src/Engine/Rendering/RenderSystem.cpp +++ b/src/Engine/Rendering/RenderSystem.cpp @@ -92,7 +92,9 @@ void RenderSystem::fillModels(RenderScene::Queues &Jobs) } glm::mat4 modelMatrix = Transform::ModelMatrix(cModel.EntityID, m_World); + //Loop through all materialgroups of a model for (auto matGroup : model->MaterialGroups()) { + //If the model has an explosioneffect component, we will add an explosioneffectjob if (m_World->HasComponent(cModel.EntityID, "ExplosionEffect")) { auto explosionEffectComponent = m_World->GetComponent(cModel.EntityID, "ExplosionEffect"); std::shared_ptr explosionEffectJob = std::shared_ptr(new ExplosionEffectJob( @@ -106,15 +108,30 @@ void RenderSystem::fillModels(RenderScene::Queues &Jobs) fillColor, fillPercentage )); + if (m_World->HasComponent(cModel.EntityID, "Shield")){ + Jobs.ShieldObjects.push_back(explosionEffectJob); + } else if (m_World->HasComponent(cModel.EntityID, "Shielded") + || m_World->HasComponent(cModel.EntityID, "Player")) { - if(explosionEffectJob->Color.a != 1.f || explosionEffectJob->EndColor.a != 1.f || explosionEffectJob->DiffuseColor.a != 1.f) { - cModel["Transparent"] = true; - } + if (explosionEffectJob->Color.a != 1.f || explosionEffectJob->EndColor.a != 1.f || explosionEffectJob->DiffuseColor.a != 1.f) { + cModel["Transparent"] = true; + } - if (cModel["Transparent"]) { - Jobs.TransparentObjects.push_back(explosionEffectJob); + if (cModel["Transparent"]) { + Jobs.TransparentShieldedObjects.push_back(explosionEffectJob); + } else { + Jobs.OpaqueShieldedObjects.push_back(explosionEffectJob); + } } else { - Jobs.OpaqueObjects.push_back(explosionEffectJob); + if (explosionEffectJob->Color.a != 1.f || explosionEffectJob->EndColor.a != 1.f || explosionEffectJob->DiffuseColor.a != 1.f) { + cModel["Transparent"] = true; + } + + if (cModel["Transparent"]) { + Jobs.TransparentObjects.push_back(explosionEffectJob); + } else { + Jobs.OpaqueObjects.push_back(explosionEffectJob); + } } } else { std::shared_ptr modelJob = std::shared_ptr(new ModelJob( @@ -127,13 +144,30 @@ void RenderSystem::fillModels(RenderScene::Queues &Jobs) fillColor, fillPercentage )); - if (modelJob->Color.a != 1.f || modelJob->DiffuseColor.a != 1.f) { - cModel["Transparent"] = true; - } - if (cModel["Transparent"]) { - Jobs.TransparentObjects.push_back(modelJob); + if (m_World->HasComponent(cModel.EntityID, "Shield")) { + Jobs.ShieldObjects.push_back(modelJob); + } else if (m_World->HasComponent(cModel.EntityID, "Shielded") + || m_World->HasComponent(cModel.EntityID, "Player")) { + + if (modelJob->Color.a != 1.f || modelJob->DiffuseColor.a != 1.f) { + cModel["Transparent"] = true; + } + + if (cModel["Transparent"]) { + Jobs.TransparentShieldedObjects.push_back(modelJob); + } else { + Jobs.OpaqueShieldedObjects.push_back(modelJob); + } } else { - Jobs.OpaqueObjects.push_back(modelJob); + if (modelJob->Color.a != 1.f || modelJob->DiffuseColor.a != 1.f) { + cModel["Transparent"] = true; + } + + if (cModel["Transparent"]) { + Jobs.TransparentObjects.push_back(modelJob); + } else { + Jobs.OpaqueObjects.push_back(modelJob); + } } } }