multiple mobs render
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user