diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index a5939e6..0581acd 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -684,11 +684,11 @@ void Engine::Render(float elapsedTime) { if (leftright) vstep = Vector3f(m_player.GetPosition().x + m_player.GetDirection().z, m_player.GetPosition().y - 1.7f, m_player.GetPosition().z + m_player.GetDirection().x); else vstep = Vector3f(m_player.GetPosition().x - m_player.GetDirection().z, m_player.GetPosition().y - 1.7f, m_player.GetPosition().z - m_player.GetDirection().x); - m_audio.Create3DAudioObj(step, AUDIO_PATH "step.wav", vstep, m_player.GetVelocity(), .8f); + m_audio.Create3DAudioObj(step, AUDIO_PATH "step.wav", vstep, m_player.GetVelocity(), false,.8f); leftright = !leftright; break; case Player::Sound::FALL: - m_audio.Create3DAudioObj(step, AUDIO_PATH "hit.wav", m_player.GetPosition(), m_player.GetVelocity(), 1.f); + m_audio.Create3DAudioObj(step, AUDIO_PATH "hit.wav", m_player.GetPosition(), m_player.GetVelocity(), false,1.f); break; default: break; } @@ -755,7 +755,7 @@ void Engine::Render(float elapsedTime) { static bool fell = false; if (m_player.GetPosition().y < 1.7f && !fell) { - m_audio.Create3DAudioObj(m_scream, AUDIO_PATH "scream.wav", m_player.GetPOV(), m_player.GetVelocity(), 1.f); + m_audio.Create3DAudioObj(m_scream, AUDIO_PATH "scream.wav", m_player.GetPOV(), m_player.GetVelocity(), false,1.f); fell = true; } else if (m_player.GetPosition().y < -20.f) { diff --git a/SQCSim2021/media/textures/sc2.png b/SQCSim2021/media/textures/sc2.png new file mode 100644 index 0000000..daff7ea Binary files /dev/null and b/SQCSim2021/media/textures/sc2.png differ diff --git a/SQCSim2021/openglcontext.cpp b/SQCSim2021/openglcontext.cpp index 3820003..2683107 100644 --- a/SQCSim2021/openglcontext.cpp +++ b/SQCSim2021/openglcontext.cpp @@ -9,11 +9,43 @@ OpenglContext::~OpenglContext() { } +void OpenglContext::RenderSplashScreen() +{ + m_textureSplash.Load(TEXTURE_PATH "sc2.png", true); + + if (!m_textureSplash.IsValid()) { + std::cerr << "Unable to load texture sc2.png" << std::endl; + } + + m_textureSplash.Bind(); + + glMatrixMode(GL_PROJECTION); + + + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Utilisez une fonction de mélange appropriée + + glBegin(GL_QUADS); + glTexCoord2f(0, 0); + glVertex2i(0, 0); + glTexCoord2f(1, 0); + glVertex2i(BASE_WIDTH, 0); + glTexCoord2f(1, 1); + glVertex2i(BASE_WIDTH, BASE_HEIGHT); + glTexCoord2f(0, 1); + glVertex2i(0, BASE_HEIGHT); + glEnd(); +} + + bool OpenglContext::Start(const std::string& title, int width, int height, bool fullscreen) { m_title = title; m_fullscreen = fullscreen; InitWindow(width, height); + bool showSplashScreen = true; + sf::Clock splashClock; + Init(); LoadResource(); @@ -22,13 +54,29 @@ bool OpenglContext::Start(const std::string& title, int width, int height, bool while (m_app.isOpen()) { - clock.restart(); - - sf::Event Event; - while (m_app.pollEvent(Event)) + if (showSplashScreen) { - switch(Event.type) + m_app.setActive(); + Render(m_lastFrameTime); + m_app.display(); + RenderSplashScreen(); + + if (splashClock.getElapsedTime().asSeconds() >= 3) { + showSplashScreen = false; + } + } + else + { + + + clock.restart(); + + sf::Event Event; + while (m_app.pollEvent(Event)) + { + switch (Event.type) + { case sf::Event::Closed: m_app.close(); break; @@ -51,28 +99,29 @@ bool OpenglContext::Start(const std::string& title, int width, int height, bool MouseReleaseEvent(ConvertMouseButton(Event.mouseButton.button), Event.mouseButton.x, Event.mouseButton.y); break; case sf::Event::MouseWheelMoved: - if(Event.mouseWheel.delta > 0) + if (Event.mouseWheel.delta > 0) MousePressEvent(MOUSE_BUTTON_WHEEL_UP, Event.mouseButton.x, Event.mouseButton.y); else MousePressEvent(MOUSE_BUTTON_WHEEL_DOWN, Event.mouseButton.x, Event.mouseButton.y); break; default: break; + } } - } - m_app.setActive(); - Render(m_lastFrameTime); - m_app.display(); - - m_lastFrameTime = clock.getElapsedTime().asSeconds(); - - // Handle ourself frame rate limit, sf::Window::setFramerateLimit doesn't seems to work - float waitTime = (1.f / m_maxFps) - m_lastFrameTime; - if(waitTime > 0) - { - sf::sleep(sf::seconds(waitTime)); + m_app.setActive(); + Render(m_lastFrameTime); + m_app.display(); m_lastFrameTime = clock.getElapsedTime().asSeconds(); + + // Handle ourself frame rate limit, sf::Window::setFramerateLimit doesn't seems to work + float waitTime = (1.f / m_maxFps) - m_lastFrameTime; + if (waitTime > 0) + { + sf::sleep(sf::seconds(waitTime)); + + m_lastFrameTime = clock.getElapsedTime().asSeconds(); + } } } diff --git a/SQCSim2021/openglcontext.h b/SQCSim2021/openglcontext.h index b82c683..bb7b591 100644 --- a/SQCSim2021/openglcontext.h +++ b/SQCSim2021/openglcontext.h @@ -4,6 +4,7 @@ #include #include #include "define.h" +#include "texture.h" // Documentation de SFML: http://www.sfml-dev.org/documentation/index-fr.php class OpenglContext @@ -30,7 +31,7 @@ public: virtual void MouseMoveEvent(int x, int y) = 0; virtual void MousePressEvent(const MOUSE_BUTTON &button, int x, int y) = 0; virtual void MouseReleaseEvent(const MOUSE_BUTTON &button, int x, int y) = 0; - + virtual void RenderSplashScreen(); bool Start(const std::string& title, int width, int height, bool fullscreen); bool Stop(); @@ -62,6 +63,7 @@ private: bool m_fullscreen; std::string m_title; float m_lastFrameTime; + Texture m_textureSplash; }; #endif // OPENGLCONTEXT_H__