diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index 3ee25cd..cc89cab 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -42,9 +42,9 @@ void Engine::Init() void Engine::DeInit() { } void Engine::LoadResource() { - LoadTexture(m_textureFloor, TEXTURE_PATH "floortile.png"); - LoadTexture(m_textureSkybox, TEXTURE_PATH "curtains.png"); - LoadTexture(m_textureCube, TEXTURE_PATH "laura.png"); + LoadTexture(m_textureFloor, TEXTURE_PATH "grass.png"); + LoadTexture(m_textureSkybox, TEXTURE_PATH "skybox.png"); + LoadTexture(m_textureCube, TEXTURE_PATH "metal.png"); } void Engine::UnloadResource() @@ -76,59 +76,59 @@ void Engine::Render(float elapsedTime) glDisable(GL_DEPTH_TEST); // Pour que tout ce qui est dessiné après soit dessiné par-dessus la skybox. glBegin(GL_QUADS); - glTexCoord2f(0, 1); + glTexCoord2f(0, .75f); glVertex3f(5.f, 5.f, 5.f); - glTexCoord2f(1, 1); + glTexCoord2f(.25f, .75f); glVertex3f(-5.f, 5.f, 5.f); - glTexCoord2f(1, 0); + glTexCoord2f(.25f, .50f); glVertex3f(-5.f, -5.f, 5.f); - glTexCoord2f(0, 0); + glTexCoord2f(0, .50f); glVertex3f(5.f, -5.f, 5.f); - glTexCoord2f(1, 0); - glVertex3f(5.f, -5.f, -5.f); - glTexCoord2f(0, 0); - glVertex3f(-5.f, -5.f, -5.f); - glTexCoord2f(0, 1); - glVertex3f(-5.f, 5.f, -5.f); - glTexCoord2f(1, 1); - glVertex3f(5.f, 5.f, -5.f); - - glTexCoord2f(0, 1); + glTexCoord2f(.25f, .75f); glVertex3f(-5.f, 5.f, 5.f); - glTexCoord2f(1, 1); + glTexCoord2f(.50f, .75f); glVertex3f(-5.f, 5.f, -5.f); - glTexCoord2f(1, 0); + glTexCoord2f(.50f, .50f); glVertex3f(-5.f, -5.f, -5.f); - glTexCoord2f(0, 0); + glTexCoord2f(.25f, .50f); glVertex3f(-5.f, -5.f, 5.f); - glTexCoord2f(0, 1); + glTexCoord2f(.50f, .75f); + glVertex3f(-5.f, 5.f, -5.f); + glTexCoord2f(.75f, .75f); glVertex3f(5.f, 5.f, -5.f); - glTexCoord2f(1, 1); + glTexCoord2f(.75f, .50f); + glVertex3f(5.f, -5.f, -5.f); + glTexCoord2f(.50f, .50f); + glVertex3f(-5.f, -5.f, -5.f); + + glTexCoord2f(.75f, .75f); + glVertex3f(5.f, 5.f, -5.f); + glTexCoord2f(1, .75f); glVertex3f(5.f, 5.f, 5.f); - glTexCoord2f(1, 0); + glTexCoord2f(1, .50f); glVertex3f(5.f, -5.f, 5.f); - glTexCoord2f(0, 0); + glTexCoord2f(.75f, .50f); glVertex3f(5.f, -5.f, -5.f); - //glTexCoord2f(0, 0); // Pas besoin de cette face pour cette version de la skybox. - //glVertex3f(-5.f, 5.f, -5.f); - //glTexCoord2f(0, 1); - //glVertex3f(-5.f, 5.f, 5.f); - //glTexCoord2f(1, 1); - //glVertex3f(5.f, 5.f, 5.f); - //glTexCoord2f(1, 0); - //glVertex3f(5.f, 5.f, -5.f); + glTexCoord2f(.25f, 1); + glVertex3f(5.f, 5.f, 5.f); + glTexCoord2f(.50f, 1); + glVertex3f(5.f, 5.f, -5.f); + glTexCoord2f(.50f, .75f); + glVertex3f(-5.f, 5.f, -5.f); + glTexCoord2f(.25f, .75f); + glVertex3f(-5.f, 5.f, 5.f); - //glTexCoord2f(0, 0); // Pas besoin de cette face pour cette version de la skybox. - //glVertex3f(-5.f, -5.f, -5.f); - //glTexCoord2f(0, 1); - //glVertex3f(-5.f, -5.f, 5.f); - //glTexCoord2f(1, 1); - //glVertex3f(5.f, -5.f, 5.f); - //glTexCoord2f(1, 0); - //glVertex3f(5.f, -5.f, -5.f); + glTexCoord2f(.50f, .50f); + glVertex3f(-5.f, -5.f, -5.f); + glTexCoord2f(.75f, .50f); + glVertex3f(5.f, -5.f, -5.f); + glTexCoord2f(.75f, .25f); + glVertex3f(5.f, -5.f, 5.f); + glTexCoord2f(.50f, .25f); + glVertex3f(-5.f, -5.f, 5.f); glEnd(); glEnable(GL_DEPTH_TEST); @@ -137,7 +137,7 @@ void Engine::Render(float elapsedTime) // Plancher // Les vertex doivent etre affiches dans le sens anti-horaire (CCW) m_textureFloor.Bind(); - float nbRep = 50.f; + float nbRep = 1.f; glBegin(GL_QUADS); glNormal3f(0, 1, 0); // Normal vector glTexCoord2f(0, 0); diff --git a/SQCSim2021/media/textures/blue - Copy.png b/SQCSim2021/media/textures/blue - Copy.png deleted file mode 100644 index 32894b3..0000000 Binary files a/SQCSim2021/media/textures/blue - Copy.png and /dev/null differ diff --git a/SQCSim2021/media/textures/blue.png b/SQCSim2021/media/textures/blue.png index d5296a1..30b70ba 100644 Binary files a/SQCSim2021/media/textures/blue.png and b/SQCSim2021/media/textures/blue.png differ diff --git a/SQCSim2021/media/textures/curtain.png b/SQCSim2021/media/textures/curtain.png deleted file mode 100644 index 045ae69..0000000 Binary files a/SQCSim2021/media/textures/curtain.png and /dev/null differ diff --git a/SQCSim2021/media/textures/curtainsbak.png b/SQCSim2021/media/textures/curtainsbak.png deleted file mode 100644 index db89258..0000000 Binary files a/SQCSim2021/media/textures/curtainsbak.png and /dev/null differ diff --git a/SQCSim2021/media/textures/grass.png b/SQCSim2021/media/textures/grass.png new file mode 100644 index 0000000..ce20b0d Binary files /dev/null and b/SQCSim2021/media/textures/grass.png differ diff --git a/SQCSim2021/media/textures/kyle.png b/SQCSim2021/media/textures/kyle.png deleted file mode 100644 index 5db0ea4..0000000 Binary files a/SQCSim2021/media/textures/kyle.png and /dev/null differ diff --git a/SQCSim2021/media/textures/metal.png b/SQCSim2021/media/textures/metal.png new file mode 100644 index 0000000..cc821f1 Binary files /dev/null and b/SQCSim2021/media/textures/metal.png differ diff --git a/SQCSim2021/media/textures/sky.png b/SQCSim2021/media/textures/sky.png deleted file mode 100644 index 16b9f12..0000000 Binary files a/SQCSim2021/media/textures/sky.png and /dev/null differ diff --git a/SQCSim2021/media/textures/skybox.png b/SQCSim2021/media/textures/skybox.png new file mode 100644 index 0000000..81bd9cc Binary files /dev/null and b/SQCSim2021/media/textures/skybox.png differ diff --git a/SQCSim2021/openglcontext.cpp b/SQCSim2021/openglcontext.cpp index f0b3b52..83462be 100644 --- a/SQCSim2021/openglcontext.cpp +++ b/SQCSim2021/openglcontext.cpp @@ -152,7 +152,7 @@ void OpenglContext::ShowCrossCursor() const void OpenglContext::InitWindow(int width, int height) { - m_app.create((m_fullscreen ? sf::VideoMode::getFullscreenModes()[0] : sf::VideoMode(width, height, 32)), m_title.c_str(), m_fullscreen ? sf::Style::Fullscreen : (sf::Style::Resize | sf::Style::Close), sf::ContextSettings(32, 8, 0)); + m_app.create((m_fullscreen ? sf::VideoMode::getFullscreenModes()[0] : sf::VideoMode(width, height, 32)), m_title.c_str(), m_fullscreen ? sf::Style::Fullscreen : (sf::Style::Resize | sf::Style::Close), sf::ContextSettings(32, 8, 4)); } OpenglContext::MOUSE_BUTTON OpenglContext::ConvertMouseButton(sf::Mouse::Button button) const diff --git a/SQCSim2021/player.cpp b/SQCSim2021/player.cpp index c849cb0..048aa81 100644 --- a/SQCSim2021/player.cpp +++ b/SQCSim2021/player.cpp @@ -8,18 +8,15 @@ void Player::TurnLeftRight(float value) { else if (m_rotX < -45) m_rotX = -45; } -void Player::TurnTopBottom(float value) { - m_rotY += value; -} +void Player::TurnTopBottom(float value) { m_rotY += value; } void Player::Move(bool front, bool back, bool left, bool right, bool jump, float elapsedTime) { - float xrotrad, yrotrad; - if (m_accjmp == 0 && jump && !jumped) { - m_accjmp = 0.3; + if (jump && !jumped) { + m_accjmp = m_jumpheight; jumped = true; } - else if (m_position.y > -0.2f && m_accjmp != 0) + else if (m_position.y > -0.3f && m_accjmp != 0) { if (m_accjmp > 0.1f) { if (jump) { m_accjmp *= 0.95 - m_accjmp * elapsedTime; @@ -34,64 +31,69 @@ void Player::Move(bool front, bool back, bool left, bool right, bool jump, float if (jump) m_accjmp -= elapsedTime * 0.7; else m_accjmp -= elapsedTime * 0.9; } + front = false; // Empêche le déplacement dans les airs. + back = false; + left = false; + right = false; + } else m_accjmp = 0; - - if (!jump) jumped = false; // Bloque les sauts à répétition en tenant le bouton de saut. if (m_position.y < 0) { // Suivi de mouvement pour l'atterrissage. m_position.y += elapsedTime * 5; - if (m_position.y > 0.f) m_position.y = 0; + if (m_position.y > 0.f) { + jumped = false; + m_position.y = 0; + } } m_position.y += m_accjmp; + if (!jumped || left || right || front || back) { + m_yrotrad = (m_rotY / 57.2957795056f); // 180/Pi = 57.295... + m_xrotrad = (m_rotX / 57.2957795056f); + } + if (front) { - if (m_accWS < 10) m_accWS += elapsedTime * 30; else m_accWS = 10; - yrotrad = (m_rotY / 180 * 3.141592654f); - xrotrad = (m_rotX / 180 * 3.141592654f); - m_position.x += float(sin(yrotrad)) * elapsedTime * m_accWS; - m_position.z += float(-cos(yrotrad)) * elapsedTime * m_accWS; + if (m_accWS < m_topspeed) m_accWS += elapsedTime * 30; else m_accWS = m_topspeed; + + m_position.x += float(sin(m_yrotrad)) * elapsedTime * m_accWS; + m_position.z += float(-cos(m_yrotrad)) * elapsedTime * m_accWS; // m_position.y += float(-sin(xrotrad)) * elapsedTime * 20; // à remettre pour implémenter une fonction de vol. } else if (back) { - if (m_accWS > -10) m_accWS -= elapsedTime * 30; else m_accWS = -10; - yrotrad = (m_rotY / 180 * 3.141592654f); - xrotrad = (m_rotX / 180 * 3.141592654f); - m_position.x += float(-sin(yrotrad)) * elapsedTime * -m_accWS; - m_position.z += float(cos(yrotrad)) * elapsedTime * -m_accWS; + if (m_accWS > -m_topspeed) m_accWS -= elapsedTime * 30; else m_accWS = -m_topspeed; + + m_position.x += float(-sin(m_yrotrad)) * elapsedTime * -m_accWS; + m_position.z += float(cos(m_yrotrad)) * elapsedTime * -m_accWS; // m_position.y += float(sin(xrotrad)) * elapsedTime * 20; // à remettre pour implémenter une fonction de vol. } else if (m_accWS != 0) { - m_accWS = m_accWS > 0 ? m_accWS - elapsedTime * 60 : m_accWS + elapsedTime * 60; - yrotrad = (m_rotY / 180 * 3.141592654f); - xrotrad = (m_rotX / 180 * 3.141592654f); - m_position.x += float(sin(yrotrad)) * elapsedTime * m_accWS; - m_position.z += float(-cos(yrotrad)) * elapsedTime * m_accWS; + m_accWS = m_accWS > 0 ? m_accWS - elapsedTime * (jumped? 10 : 60) : m_accWS + elapsedTime * (jumped ? 10 : 60); + + m_position.x += float(sin(m_yrotrad)) * elapsedTime * m_accWS; + m_position.z += float(-cos(m_yrotrad)) * elapsedTime * m_accWS; if (m_accWS < 1 && m_accWS > -1) m_accWS = 0; } if (left) { - if (m_accAD < 10) m_accAD += elapsedTime * 30; else m_accAD = 10; - yrotrad = (m_rotY / 180 * 3.141592654f); - m_position.x += float(-cos(yrotrad)) * elapsedTime * m_accAD; - m_position.z += float(-sin(yrotrad)) * elapsedTime * m_accAD; + if (m_accAD < m_topspeed) m_accAD += elapsedTime * 30; else m_accAD = m_topspeed; + m_position.x += float(-cos(m_yrotrad)) * elapsedTime * m_accAD; + m_position.z += float(-sin(m_yrotrad)) * elapsedTime * m_accAD; } else if (right) { - if (m_accAD > -10) m_accAD -= elapsedTime * 30; else m_accAD = -10; - yrotrad = (m_rotY / 180 * 3.141592654f); - m_position.x += float(cos(yrotrad)) * elapsedTime * -m_accAD; - m_position.z += float(sin(yrotrad)) * elapsedTime * -m_accAD; + if (m_accAD > -m_topspeed) m_accAD -= elapsedTime * 30; else m_accAD = -m_topspeed; + m_position.x += float(cos(m_yrotrad)) * elapsedTime * -m_accAD; + m_position.z += float(sin(m_yrotrad)) * elapsedTime * -m_accAD; } else if (m_accAD != 0) { - m_accAD = m_accAD > 0 ? m_accAD - elapsedTime * 60 : m_accAD + elapsedTime * 60; - yrotrad = (m_rotY / 180 * 3.141592654f); - m_position.x += float(-cos(yrotrad)) * elapsedTime * m_accAD; - m_position.z += float(-sin(yrotrad)) * elapsedTime * m_accAD; + m_accAD = m_accAD > 0 ? m_accAD - elapsedTime * (jumped ? 10 : 60) : m_accAD + elapsedTime * (jumped ? 10 : 60); + m_position.x += float(-cos(m_yrotrad)) * elapsedTime * m_accAD; + m_position.z += float(-sin(m_yrotrad)) * elapsedTime * m_accAD; if (m_accAD < 1 && m_accAD > -1) m_accAD = 0; } - // Gestion de si le personnage va en diagonale pour qu'il n'aille pas plus vite que s'il allait en ligne droite: SQRT(10^2+10^2) = ~12. - if ((m_accWS >= 0? m_accWS: -m_accWS + m_accAD >= 0 ? m_accAD : -m_accAD) > 12) { + // Gestion de si le personnage va en diagonale pour qu'il n'aille pas plus vite que s'il allait en ligne droite: SQRT(15^2+15^2) = ~21.2 + if ((m_accWS >= 0? m_accWS: -m_accWS + m_accAD >= 0 ? m_accAD : -m_accAD) > sqrtf(m_topspeed * m_topspeed + m_topspeed * m_topspeed)) { m_accWS *= 0.9f; m_accAD *= 0.9f; } diff --git a/SQCSim2021/player.h b/SQCSim2021/player.h index c72a1b7..4ee38ba 100644 --- a/SQCSim2021/player.h +++ b/SQCSim2021/player.h @@ -2,6 +2,7 @@ #define _PLAYER_H__ #include "vector3.h" #include "transformation.h" +#include class Player { public: @@ -18,7 +19,14 @@ private: float m_accWS = 0; float m_accAD = 0; float m_accjmp = 0; + float m_yrotrad = 0; + float m_xrotrad = 0; bool jumped = false; + + float m_topspeed = 20; + float m_jumpheight = .4; + + }; #endif //_PLAYER_H__