change WorldRenderer to class

This commit is contained in:
2021-08-21 13:49:23 +02:00
parent 1bb487d7b0
commit 1b5fd2f66f
12 changed files with 97 additions and 71 deletions

View File

@@ -9,29 +9,18 @@
namespace td {
namespace render {
namespace WorldRenderer{
static std::unique_ptr<GL::VAO> worldVAO;
static const game::World* worldPtr = nullptr;
static glm::vec2 camPos{13.5, 13.5};//{60, -10};
static float zoom = 1;
static const float camSensibility = 1;
static std::unique_ptr<GL::VAO> mobVAO;
void init(const game::World* world){
void WorldRenderer::loadModels(){
std::cout << "World Created !\n";
worldVAO = std::make_unique<GL::VAO>(std::move(WorldLoader::loadWorldModel(world)));
mobVAO = std::make_unique<GL::VAO>(std::move(WorldLoader::loadMobModel()));
std::cout << "Vertex Count : " << worldVAO->getVertexCount() << std::endl;
Renderer::setCamPos(camPos);
worldPtr = world;
m_WorldVao = std::make_unique<GL::VAO>(std::move(WorldLoader::loadWorldModel(m_World)));
m_MobVao = std::make_unique<GL::VAO>(std::move(WorldLoader::loadMobModel()));
std::cout << "Vertex Count : " << m_WorldVao->getVertexCount() << std::endl;
}
void update(){
if(worldVAO == nullptr)
WorldRenderer::WorldRenderer(game::World* world) : m_World(world){
}
void WorldRenderer::update(){
if(m_WorldVao == nullptr)
return;
ImGuiIO& io = ImGui::GetIO();
if(io.MouseDown[0] && !ImGui::IsAnyItemActive()){
@@ -45,68 +34,66 @@ void update(){
}
}
void renderWorld(){
Renderer::renderVAO(*worldVAO);
void WorldRenderer::renderWorld() const{
Renderer::renderVAO(*m_WorldVao);
}
void renderMobs(){
for(game::MobPtr mob : worldPtr->getMobList()){
void WorldRenderer::renderMobs() const{
for(game::MobPtr mob : m_World->getMobList()){
Renderer::Model model;
model.vao = mobVAO.get();
model.vao = m_MobVao.get();
model.positon = {mob->getX(), mob->getY()};
Renderer::renderModel(model);
}
}
void renderTowers(){
void WorldRenderer::renderTowers() const{
}
void render(){
if(worldVAO == nullptr)
void WorldRenderer::render() const{
if(m_WorldVao == nullptr)
return;
renderWorld();
renderMobs();
renderTowers();
}
void destroy(){
if(worldVAO == nullptr)
return;
worldVAO.reset();
worldPtr = nullptr;
WorldRenderer::~WorldRenderer(){
}
void moveCam(float relativeX, float relativeY, float aspectRatio){
if(worldVAO == nullptr)
void WorldRenderer::moveCam(float relativeX, float relativeY, float aspectRatio){
if(m_WorldVao == nullptr)
return;
float movementX = -relativeX / zoom * aspectRatio;
float movementY = relativeY / zoom;
float movementX = -relativeX / m_Zoom * aspectRatio;
float movementY = relativeY / m_Zoom;
Renderer::setCamMovement({movementX, movementY});
}
void changeZoom(float zoomStep){
if(worldVAO == nullptr)
void WorldRenderer::changeZoom(float zoomStep){
if(m_WorldVao == nullptr)
return;
static float sensibility = 1.5f;
if (zoomStep < 0){
zoom /= -zoomStep * sensibility;
m_Zoom /= -zoomStep * sensibility;
}
else{
zoom *= zoomStep * sensibility;
m_Zoom *= zoomStep * sensibility;
}
Renderer::setZoom(zoom);
Renderer::setZoom(m_Zoom);
Renderer::setCamMovement({});
}
void click(int mouseX, int mouseY){
if(worldVAO == nullptr)
void WorldRenderer::click(int mouseX, int mouseY){
if(m_WorldVao == nullptr)
return;
}
} // namespace WorldRenderer
void WorldRenderer::setCamPos(float camX, float camY){
m_CamPos = {camX, camY};
Renderer::setCamPos(m_CamPos);
}
} // namespace render
} // namespace td