diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index eb18f9d..81afefa 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -935,8 +935,10 @@ void Engine::DrawHud(float elapsedTime, BlockType bloc) { int timer = GetCountdown(elapsedTime); for (int i = 1; i < WORLD_SIZE_X; i++) { - if (timer <= COUNTDOWN - m_timerReductionChunk * i) + if (timer <= COUNTDOWN - m_timerReductionChunk * i) { m_world.RemoveChunk(m_nbReductionChunk * i); + m_renderer.RemoveChunk(m_nbReductionChunk * i); + } } if (m_keyK) { SystemNotification(m_messageNotification); @@ -1081,7 +1083,7 @@ void Engine::Render(float elapsedTime) { - m_remotePlayer.Render(m_textureAtlas, m_shader01, elapsedTime); + //m_remotePlayer.ApplyTransformation(all); if (m_mouseWU) bloc++; @@ -1138,15 +1140,15 @@ void Engine::Render(float elapsedTime) { } } - //m_renderer.RenderWorld(&m_world, m_renderCount, m_player.GetPosition(), m_player.GetDirection(), all, m_shader01, m_textureAtlas); + if (m_isSkybox) m_renderer.RenderWorld(&m_world, m_renderCount, m_player.GetPosition(), m_player.GetDirection(), all, m_shader01, m_textureAtlas); m_world.Update(m_bullets, m_player.GetPosition(), m_blockinfo); m_renderer.UpdateMesh(&m_world, m_player.GetPosition(), m_blockinfo); - + m_remotePlayer.Render(m_textureAtlas, m_shader01, elapsedTime); if (m_isSkybox) m_skybox.Render(skybox); - DrawHud(elapsedTime, bloc); - DisplayPovGun(); + if (m_isSkybox) DrawHud(elapsedTime, bloc); + if (m_isSkybox) DisplayPovGun(); ProcessNotificationQueue(); if (m_damage) { diff --git a/SQCSim2021/mesh.h b/SQCSim2021/mesh.h index 0a070ff..138d0e2 100644 --- a/SQCSim2021/mesh.h +++ b/SQCSim2021/mesh.h @@ -15,7 +15,7 @@ private: Chunk* m_chunk; // NE PAS DÉTRUIRE ICI. void AddBlockToMesh(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s, World* world); - + void RemoveChunk(int nbReduit); public: Mesh(Chunk* chunk); ~Mesh(); diff --git a/SQCSim2021/remoteplayer.cpp b/SQCSim2021/remoteplayer.cpp index 31d396c..9fd493d 100644 --- a/SQCSim2021/remoteplayer.cpp +++ b/SQCSim2021/remoteplayer.cpp @@ -87,15 +87,20 @@ void RemotePlayer::Feed(const netprot::Output out) { void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, float elapsedTime) { + shader.Use(); + //m_texture_front.Bind(); - m_texture_front.Bind(); + + float u, v, w, h; + atlas.Bind(); + atlas.TextureIndexToCoord(0, u, v, w, h); glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2f(0, 500); - glTexCoord2f(1, 0); glVertex2f(500, 500); - glTexCoord2f(1, 1); glVertex2f(500, 0); - glTexCoord2f(0, 1); glVertex2f(0, 0); + glTexCoord2f(u, v); glVertex3f(0, 50., 0); + glTexCoord2f(u+w, v); glVertex3f(50., 50., 0); + glTexCoord2f(u+w, v+h); glVertex3f(50., 0, 0); + glTexCoord2f(u, v+h); glVertex3f(0, 0, 0); glEnd(); - + shader.Disable(); } bool RemotePlayer::LoadTexture(Texture& texture, const std::string& filename, bool useMipmaps, bool stopOnError) diff --git a/SQCSim2021/renderer.cpp b/SQCSim2021/renderer.cpp index b4c8f91..b430b34 100644 --- a/SQCSim2021/renderer.cpp +++ b/SQCSim2021/renderer.cpp @@ -7,6 +7,32 @@ Renderer::Renderer() { Renderer::~Renderer() { } +void Renderer::RemoveChunk(int nbReduit) +{ + for (int x = 0; x < WORLD_SIZE_X; ++x) + for (int y = 0; y < WORLD_SIZE_Y; ++y) + { + Mesh* chk = nullptr; + if (x < nbReduit) + chk = m_meshes.Remove(x, y); + if (y < nbReduit) + chk = m_meshes.Remove(x, y); + if (y > WORLD_SIZE_Y - nbReduit) + chk = m_meshes.Remove(x, y); + if (x > WORLD_SIZE_X - nbReduit) + chk = m_meshes.Remove(x, y); + + // TODO: MakeDirty() les voisins pour qu'ils se redessinent. + + if (!chk) + continue; + + delete chk; + } + + +} + void Renderer::RenderWorld(World* origin, int& rendercount, const Vector3f& player_pos, const Vector3f& player_dir, Transformation& world, Shader& shader, TextureAtlas& atlas) const { rendercount = 0; Vector3f angle; diff --git a/SQCSim2021/renderer.h b/SQCSim2021/renderer.h index 8afdc3b..4c8e9dd 100644 --- a/SQCSim2021/renderer.h +++ b/SQCSim2021/renderer.h @@ -21,6 +21,8 @@ public: Renderer(); ~Renderer(); + void RemoveChunk(int nbReduit); + void UpdateMesh(World* origin, const Vector3f& player, BlockInfo* blockinfo[BTYPE_LAST]); void RenderWorld(World* origin, int& rendercount, const Vector3f& player_pos, const Vector3f& player_dir, Transformation& world, Shader& shader, TextureAtlas& atlas) const;