multiple mobs render
This commit is contained in:
@@ -30,7 +30,7 @@ private:
|
||||
game::World* m_World;
|
||||
std::unique_ptr<GL::VertexArray> m_WorldVao;
|
||||
std::unique_ptr<Model> m_SelectTileModel;
|
||||
std::unique_ptr<TexturedModel> m_MobModel;
|
||||
std::vector<TexturedModel> 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;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -32,7 +32,9 @@ void WorldRenderer::LoadModels() {
|
||||
m_SelectTileModel = std::make_unique<Model>();
|
||||
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()));
|
||||
}
|
||||
@@ -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<std::size_t>(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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user