multiple mobs render

This commit is contained in:
2023-06-28 22:51:36 +02:00
parent b985cc7ade
commit 66b39e1855
4 changed files with 50 additions and 10 deletions

View File

@@ -30,7 +30,7 @@ private:
game::World* m_World; game::World* m_World;
std::unique_ptr<GL::VertexArray> m_WorldVao; std::unique_ptr<GL::VertexArray> m_WorldVao;
std::unique_ptr<Model> m_SelectTileModel; std::unique_ptr<Model> m_SelectTileModel;
std::unique_ptr<TexturedModel> m_MobModel; std::vector<TexturedModel> m_MobModels;
Vec2f m_CamPos; Vec2f m_CamPos;
Vec2f m_CursorPos; Vec2f m_CursorPos;
Vec2f m_HoldCursorPos; Vec2f m_HoldCursorPos;
@@ -68,7 +68,7 @@ private:
void Click(); void Click();
void RenderWorld() const; void RenderWorld() const;
void RenderTowers() const; void RenderTowers() const;
void RenderMobs() const; void RenderMobs();
void RenderTileSelect() const; void RenderTileSelect() const;
void RenderPopups(); void RenderPopups();
void RenderMobTooltip() const; void RenderMobTooltip() const;

View File

@@ -2,13 +2,14 @@
#include "GLLoader.h" #include "GLLoader.h"
#include "render/Renderer.h" #include "render/Renderer.h"
#include "game/Mobs.h"
namespace td { namespace td {
namespace render { namespace render {
namespace MobLoader { namespace MobLoader {
TexturedModel LoadMobModel(); TexturedModel LoadMobModel(game::MobType mobType);
} // namespace MobLoader } // namespace MobLoader

View File

@@ -32,7 +32,9 @@ void WorldRenderer::LoadModels() {
m_SelectTileModel = std::make_unique<Model>(); m_SelectTileModel = std::make_unique<Model>();
m_SelectTileModel->vao = std::make_unique<GL::VertexArray>(WorldLoader::LoadTileSelectModel()); m_SelectTileModel->vao = std::make_unique<GL::VertexArray>(WorldLoader::LoadTileSelectModel());
m_MobModel = std::make_unique<TexturedModel>(MobLoader::LoadMobModel()); for (std::size_t i = 0; i < static_cast<std::size_t>(game::MobType::MOB_COUNT); i++) {
m_MobModels.push_back(MobLoader::LoadMobModel(game::MobType(i)));
}
utils::LOGD(utils::format("Vertex Count : %u", m_WorldVao->GetVertexCount())); utils::LOGD(utils::format("Vertex Count : %u", m_WorldVao->GetVertexCount()));
} }
@@ -95,11 +97,13 @@ void WorldRenderer::RenderWorld() const {
m_Renderer->RenderVAO(*m_WorldVao); m_Renderer->RenderVAO(*m_WorldVao);
} }
void WorldRenderer::RenderMobs() const { void WorldRenderer::RenderMobs() {
for (game::MobPtr mob : m_World->GetMobList()) { for (game::MobPtr mob : m_World->GetMobList()) {
m_MobModel->SetPosition({ mob->GetCenterX(), 0, mob->GetCenterY() }); TexturedModel& mobModel = m_MobModels.at(static_cast<std::size_t>(mob->GetType()));
m_MobModel->SetColor(mob->HasTakenDamage() ? Vec3f{ 1, 0.5, 0.5 } : Vec3f{ 1, 1, 1 });
m_Renderer->RenderModel(*m_MobModel); 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);
} }
} }

View File

@@ -172,8 +172,43 @@ static GL::VertexArray LoadMobVao(const std::string& objFile) {
return mobVao; return mobVao;
} }
TexturedModel LoadMobModel() { TexturedModel LoadMobModel(game::MobType mobType) {
return {LoadMobVao("Assets/zombie.obj"), TextureLoader::LoadTexture("Assets/zombie.png")}; 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 } // namespace MobLoader