From 66b39e1855926b9593ffbb865db39c7c4bb7daac Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Wed, 28 Jun 2023 22:51:36 +0200 Subject: [PATCH] multiple mobs render --- include/render/WorldRenderer.h | 4 ++-- include/render/loader/MobLoader.h | 3 ++- src/render/WorldRenderer.cpp | 14 +++++++---- src/render/loader/MobLoader.cpp | 39 +++++++++++++++++++++++++++++-- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/include/render/WorldRenderer.h b/include/render/WorldRenderer.h index dfdc006..5e435b7 100644 --- a/include/render/WorldRenderer.h +++ b/include/render/WorldRenderer.h @@ -30,7 +30,7 @@ private: game::World* m_World; std::unique_ptr m_WorldVao; std::unique_ptr m_SelectTileModel; - std::unique_ptr m_MobModel; + std::vector m_MobModels; Vec2f m_CamPos; Vec2f m_CursorPos; Vec2f m_HoldCursorPos; @@ -68,7 +68,7 @@ private: void Click(); void RenderWorld() const; void RenderTowers() const; - void RenderMobs() const; + void RenderMobs(); void RenderTileSelect() const; void RenderPopups(); void RenderMobTooltip() const; diff --git a/include/render/loader/MobLoader.h b/include/render/loader/MobLoader.h index ec28aeb..196ddd7 100644 --- a/include/render/loader/MobLoader.h +++ b/include/render/loader/MobLoader.h @@ -2,13 +2,14 @@ #include "GLLoader.h" #include "render/Renderer.h" +#include "game/Mobs.h" namespace td { namespace render { namespace MobLoader { -TexturedModel LoadMobModel(); +TexturedModel LoadMobModel(game::MobType mobType); } // namespace MobLoader diff --git a/src/render/WorldRenderer.cpp b/src/render/WorldRenderer.cpp index 8bb8b04..6743272 100644 --- a/src/render/WorldRenderer.cpp +++ b/src/render/WorldRenderer.cpp @@ -32,7 +32,9 @@ void WorldRenderer::LoadModels() { m_SelectTileModel = std::make_unique(); m_SelectTileModel->vao = std::make_unique(WorldLoader::LoadTileSelectModel()); - m_MobModel = std::make_unique(MobLoader::LoadMobModel()); + for (std::size_t i = 0; i < static_cast(game::MobType::MOB_COUNT); i++) { + m_MobModels.push_back(MobLoader::LoadMobModel(game::MobType(i))); + } utils::LOGD(utils::format("Vertex Count : %u", m_WorldVao->GetVertexCount())); } @@ -95,11 +97,13 @@ void WorldRenderer::RenderWorld() const { m_Renderer->RenderVAO(*m_WorldVao); } -void WorldRenderer::RenderMobs() const { +void WorldRenderer::RenderMobs() { for (game::MobPtr mob : m_World->GetMobList()) { - m_MobModel->SetPosition({ mob->GetCenterX(), 0, mob->GetCenterY() }); - m_MobModel->SetColor(mob->HasTakenDamage() ? Vec3f{ 1, 0.5, 0.5 } : Vec3f{ 1, 1, 1 }); - m_Renderer->RenderModel(*m_MobModel); + TexturedModel& mobModel = m_MobModels.at(static_cast(mob->GetType())); + + mobModel.SetPosition({ mob->GetCenterX(), 0, mob->GetCenterY() }); + mobModel.SetColor(mob->HasTakenDamage() ? Vec3f{ 1, 0.5, 0.5 } : Vec3f{ 1, 1, 1 }); + m_Renderer->RenderModel(mobModel); } } diff --git a/src/render/loader/MobLoader.cpp b/src/render/loader/MobLoader.cpp index cd79b9d..bb33957 100644 --- a/src/render/loader/MobLoader.cpp +++ b/src/render/loader/MobLoader.cpp @@ -172,8 +172,43 @@ static GL::VertexArray LoadMobVao(const std::string& objFile) { return mobVao; } -TexturedModel LoadMobModel() { - return {LoadMobVao("Assets/zombie.obj"), TextureLoader::LoadTexture("Assets/zombie.png")}; +TexturedModel LoadMobModel(game::MobType mobType) { + switch (mobType){ + + case game::MobType::Blaze: + return {LoadMobVao("Assets/blaze.obj"), TextureLoader::LoadTexture("Assets/blaze.png")}; + + case game::MobType::Creeper: + return {LoadMobVao("Assets/creeper.obj"), TextureLoader::LoadTexture("Assets/creeper.png")}; + + case game::MobType::Giant: + return {LoadMobVao("Assets/giant.obj"), TextureLoader::LoadTexture("Assets/giant.png")}; + + case game::MobType::Pigman: + return {LoadMobVao("Assets/zombified_piglin.obj"), TextureLoader::LoadTexture("Assets/zombified_piglin.png")}; + + case game::MobType::Silverfish: + return {LoadMobVao("Assets/silverfish.obj"), TextureLoader::LoadTexture("Assets/silverfish.png")}; + + case game::MobType::Skeleton: + return {LoadMobVao("Assets/skeleton.obj"), TextureLoader::LoadTexture("Assets/skeleton.png")}; + + case game::MobType::Slime: + return {LoadMobVao("Assets/slime.obj"), TextureLoader::LoadTexture("Assets/slime.png")}; + + case game::MobType::Spider : + return {LoadMobVao("Assets/spider.obj"), TextureLoader::LoadTexture("Assets/spider.png")}; + + case game::MobType::Witch : + return {LoadMobVao("Assets/witch.obj"), TextureLoader::LoadTexture("Assets/witch.png")}; + + case game::MobType::Zombie : + return {LoadMobVao("Assets/zombie.obj"), TextureLoader::LoadTexture("Assets/zombie.png")}; + + default: + return {LoadMobVao("Assets/armor_stand.obj"), TextureLoader::LoadTexture("Assets/armor_stand.png")}; + } + } } // namespace MobLoader