From def1ab284eb48ddfd0beeb55c1f0d3735d43348f Mon Sep 17 00:00:00 2001 From: mduval76 <9343789@etu.cegepsth.qc.ca> Date: Fri, 1 Dec 2023 17:55:25 -0500 Subject: [PATCH] Push sliders fonctionnels (x4) --- SQCSim2021/engine.cpp | 175 +++++++++++++++++++++--------------------- SQCSim2021/engine.h | 16 ++-- 2 files changed, 96 insertions(+), 95 deletions(-) diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index a409b9a..cb4141b 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -572,10 +572,10 @@ void Engine::DrawOption() } void Engine::DisplayAudioMenu(float centerX, float centerY) { - glColor4f(1.0f, 0.5f, 0.0f, 1.0f); - float minBar = centerX - Width() * 0.15; float maxBar = centerX + Width() * 0.3; + + glColor4f(1.0f, 0.5f, 0.0f, 1.0f); m_texturePrincipal.Bind(); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2i(centerX - Width() * 0.15, centerY + Height() * 0.215); @@ -584,22 +584,11 @@ void Engine::DisplayAudioMenu(float centerX, float centerY) { glTexCoord2f(0, 1); glVertex2i(centerX - Width() * 0.15, centerY + Height() * 0.25); glEnd(); - glColor4f(0.0f, 0.0f, 0.0f, 1.0f); - glBindTexture(GL_TEXTURE_2D, 0); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(minBar, centerY + Height() * 0.165); - glTexCoord2f(1, 0); glVertex2i(maxBar, centerY + Height() * 0.165); - glTexCoord2f(1, 1); glVertex2i(maxBar, centerY + Height() * 0.2); - glTexCoord2f(0, 1); glVertex2i(minBar, centerY + Height() * 0.2); - glEnd(); + float principalBottom = centerY + Height() * 0.165f; + float principalTop = centerY + Height() * 0.2f; - glColor4f(0.0f, 1.0f, 0.0f, 1.0f); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(minBar, centerY + Height() * 0.165); - glTexCoord2f(1, 0); glVertex2i(minBar + m_volMain, centerY + Height() * 0.165); - glTexCoord2f(1, 1); glVertex2i(minBar + m_volMain, centerY + Height() * 0.2); - glTexCoord2f(0, 1); glVertex2i(minBar, centerY + Height() * 0.2); - glEnd(); + DrawSliderBackground(centerX, centerY, minBar, maxBar, principalBottom, principalTop); + RedrawSlider(centerX, centerY, m_volPrincipal, minBar, maxBar, principalBottom, principalTop); glColor4f(1.0f, 0.5f, 0.0f, 1.0f); m_textureMusique.Bind(); @@ -610,22 +599,11 @@ void Engine::DisplayAudioMenu(float centerX, float centerY) { glTexCoord2f(0, 1); glVertex2i(centerX - Width() * 0.15, centerY + Height() * 0.125); glEnd(); - glColor4f(0.0f, 0.0f, 0.0f, 1.0f); - glBindTexture(GL_TEXTURE_2D, 0); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(minBar, centerY + Height() * 0.04); - glTexCoord2f(1, 0); glVertex2i(maxBar, centerY + Height() * 0.04); - glTexCoord2f(1, 1); glVertex2i(maxBar, centerY + Height() * 0.075); - glTexCoord2f(0, 1); glVertex2i(minBar, centerY + Height() * 0.075); - glEnd(); + float musiqueBottom = centerY + Height() * 0.04f; + float musiqueTop = centerY + Height() * 0.075f; - glColor4f(0.0f, 1.0f, 0.0f, 1.0f); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(minBar, centerY + Height() * 0.04); - glTexCoord2f(1, 0); glVertex2i(minBar + m_volMusic, centerY + Height() * 0.04); - glTexCoord2f(1, 1); glVertex2i(minBar + m_volMusic, centerY + Height() * 0.075); - glTexCoord2f(0, 1); glVertex2i(minBar, centerY + Height() * 0.075); - glEnd(); + DrawSliderBackground(centerX, centerY, minBar, maxBar, musiqueBottom, musiqueTop); + RedrawSlider(centerX, centerY, m_volMusique, minBar, maxBar, musiqueBottom, musiqueTop); glColor4f(1.0f, 0.5f, 0.0f, 1.0f); m_textureEffets.Bind(); @@ -636,22 +614,11 @@ void Engine::DisplayAudioMenu(float centerX, float centerY) { glTexCoord2f(0, 1); glVertex2i(centerX - Width() * 0.15, centerY - Height() * 0.00001); glEnd(); - glColor4f(0.0f, 0.0f, 0.0f, 1.0f); - glBindTexture(GL_TEXTURE_2D, 0); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(minBar, centerY - Height() * 0.085); - glTexCoord2f(1, 0); glVertex2i(maxBar, centerY - Height() * 0.085); - glTexCoord2f(1, 1); glVertex2i(maxBar, centerY - Height() * 0.05); - glTexCoord2f(0, 1); glVertex2i(minBar, centerY - Height() * 0.05); - glEnd(); + float effectsBottom = centerY - Height() * 0.085f; + float effectsTop = centerY - Height() * 0.05f; - glColor4f(0.0f, 1.0f, 0.0f, 1.0f); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(minBar, centerY - Height() * 0.085); - glTexCoord2f(1, 0); glVertex2i(minBar + m_volEffects, centerY - Height() * 0.085); - glTexCoord2f(1, 1); glVertex2i(minBar + m_volEffects, centerY - Height() * 0.05); - glTexCoord2f(0, 1); glVertex2i(minBar, centerY - Height() * 0.05); - glEnd(); + DrawSliderBackground(centerX, centerY, minBar, maxBar, effectsBottom, effectsTop); + RedrawSlider(centerX, centerY, m_volEffets, minBar, maxBar, effectsBottom, effectsTop); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } @@ -704,6 +671,7 @@ void Engine::DisplayGraphicsMenu(float centerX, float centerY) { float heightRatioBottom = 0.125f; float heightRatioTop = 0.15; + // Checkboxes for (int i = 0; i < 4; i++) { if (static_cast(m_resolution) == i) { m_textureChecked.Bind(); @@ -739,26 +707,45 @@ void Engine::DisplayGameplayMenu(float centerX, float centerY) { glTexCoord2f(0, 1); glVertex2i(centerX - Width() * 0.15, centerY + Height() * 0.25); glEnd(); - glColor4f(0.0f, 0.0f, 0.0f, 1.0f); - glBindTexture(GL_TEXTURE_2D, 0); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(centerX - Width() * 0.15, centerY + Height() * 0.165); - glTexCoord2f(1, 0); glVertex2i(centerX + Width() * 0.3, centerY + Height() * 0.165); - glTexCoord2f(1, 1); glVertex2i(centerX + Width() * 0.3, centerY + Height() * 0.2); - glTexCoord2f(0, 1); glVertex2i(centerX - Width() * 0.15, centerY + Height() * 0.2); - glEnd(); + float sensibleBottom = centerY + Height() * 0.165f; + float sensibleTop = centerY + Height() * 0.2f; - glColor4f(0.0f, 1.0f, 0.0f, 1.0f); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(minBar, centerY + Height() * 0.165); - glTexCoord2f(1, 0); glVertex2i(minBar + m_volSensible, centerY + Height() * 0.165); - glTexCoord2f(1, 1); glVertex2i(minBar + m_volSensible, centerY + Height() * 0.2); - glTexCoord2f(0, 1); glVertex2i(minBar, centerY + Height() * 0.2); - glEnd(); + DrawSliderBackground(centerX, centerY, minBar, maxBar, sensibleBottom, sensibleTop); + RedrawSlider(centerX, centerY, m_volSensible, minBar, maxBar, sensibleBottom, sensibleTop); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } +void Engine::DrawSliderBackground(float centerX, float centerY, float minVal, float maxVal, float bottomSideValue, float topSideValue) { + glColor4f(0.0f, 0.0f, 0.0f, 1.0f); + glBindTexture(GL_TEXTURE_2D, 0); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2i(minVal, bottomSideValue); + glTexCoord2f(1, 0); glVertex2i(maxVal, bottomSideValue); + glTexCoord2f(1, 1); glVertex2i(maxVal, topSideValue); + glTexCoord2f(0, 1); glVertex2i(minVal, topSideValue); + glEnd(); +} + +void Engine::RedrawSlider(float centerX, float centerY, float value, float minVal, float maxVal, float bottomSideValue, float topSideValue) { + if (value < 0.0f) { + value = 0.0f; + } + else if (value > (maxVal - minVal)) { + value = (maxVal - minVal); + } + + if (value >= 0.0f && value <= (maxVal - minVal)) { + glColor4f(0.0f, 1.0f, 0.0f, 1.0f); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2i(minVal, bottomSideValue); + glTexCoord2f(1, 0); glVertex2i(minVal + value, bottomSideValue); + glTexCoord2f(1, 1); glVertex2i(minVal + value, topSideValue); + glTexCoord2f(0, 1); glVertex2i(minVal, topSideValue); + glEnd(); + } +} + void Engine::InstantDamage() { m_player.InflictDamage(0.10f); @@ -1700,17 +1687,37 @@ void Engine::KeyReleaseEvent(unsigned char key) { } void Engine::MouseMoveEvent(int x, int y) { - m_player.TurnLeftRight(x - (Width() / 2)); - m_player.TurnTopBottom(y - (Height() / 2)); + if (m_gamestate == GameState::PLAY) { + m_player.TurnLeftRight(x - (Width() / 2)); + m_player.TurnTopBottom(y - (Height() / 2)); - // Centrer la souris seulement si elle n'est pas d�j� centr�e - // Il est n�cessaire de faire la v�rification pour �viter de tomber - // dans une boucle infinie o� l'appel � CenterMouse g�n�re un - // MouseMoveEvent, qui rapelle CenterMouse qui rapelle un autre - // MouseMoveEvent, etc - if (x == (Width() / 2) && y == (Height() / 2)) - return; + // Centrer la souris seulement si elle n'est pas d�j� centr�e + // Il est n�cessaire de faire la v�rification pour �viter de tomber + // dans une boucle infinie o� l'appel � CenterMouse g�n�re un + // MouseMoveEvent, qui rapelle CenterMouse qui rapelle un autre + // MouseMoveEvent, etc + if (x == (Width() / 2) && y == (Height() / 2)) + return; + } + else if (m_gamestate == GameState::OPTIONS) { + float centerX = Width() * 0.5f; + float centerY = Height() * 0.5f; + float leftBar = centerX - Width() * 0.15f; + float rightBar = centerX + Width() * 0.3f; + if (m_selectedOption == 0 && m_selectedPrincipalBar) { + m_volPrincipal = x - leftBar; + } + else if (m_selectedOption == 0 && m_selectedMusiqueBar) { + m_volMusique = x - leftBar; + } + else if (m_selectedOption == 0 && m_selectedEffetsBar) { + m_volEffets = x - leftBar; + } + else if (m_selectedOption == 2 && m_selectedSensibleBar) { + m_volSensible = x - leftBar; + } + } } void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { @@ -1790,19 +1797,16 @@ void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { float bottomBarEffets = centerY + Height() * 0.05f; if (m_selectedOption == 0 && x > leftBar && x < rightBar && y > bottomBarPrincipal && y < topBarPrincipal) { - std::cout << "Hit PRINCIPAL BAR" << std::endl; - m_volMain = x - leftBar; + m_volPrincipal = x - leftBar; m_selectedPrincipalBar = true; } else if (m_selectedOption == 0 && x > leftBar && x < rightBar && y > bottomBarMusique && y < topBarMusique) { - std::cout << "Hit MUSIQUE BAR" << std::endl; - m_volMusic = x - leftBar; - m_selectedMusicBar = true; + m_volMusique = x - leftBar; + m_selectedMusiqueBar = true; } else if (m_selectedOption == 0 && x > leftBar && x < rightBar && y > bottomBarEffets && y < topBarEffets) { - std::cout << "Hit EFFETS BAR" << std::endl; - m_volEffects = x - leftBar; - m_selectedEffectsBar = true; + m_volEffets = x - leftBar; + m_selectedEffetsBar = true; } // Resolution @@ -1822,27 +1826,22 @@ void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { float bottomChkUHD = centerY; if (m_selectedOption == 1 && leftChk && x < rightChk && y > bottomChkHD && y < topChkHD) { - std::cout << "HD" << std::endl; m_resolution = HD; } else if (m_selectedOption == 1 && x > leftChk && x < rightChk && y > bottomChkFHD && y < topChkFHD) { - std::cout << "FHD" << std::endl; m_resolution = FHD; } else if (m_selectedOption == 1 && x > leftChk && x < rightChk && y > bottomChkQHD && y < topChkQHD) { - std::cout << "QHD" << std::endl; m_resolution = QHD; } else if (m_selectedOption == 1 && x > leftChk && x < rightChk && y > bottomChkUHD && y < topChkUHD) { - std::cout << "UHD" << std::endl; m_resolution = UHD; } // Gameplay if (m_selectedOption == 2 && x > leftBar && x < rightBar && y > bottomBarPrincipal && y < topBarPrincipal) { - std::cout << "Hit SENSIBILITE BAR" << std::endl; m_volSensible = x - leftBar; - m_selectedSensibilityBar = true; + m_selectedSensibleBar = true; } } else if (m_gamestate == GameState::SINGLEMULTI) @@ -1882,9 +1881,9 @@ void Engine::MouseReleaseEvent(const MOUSE_BUTTON& button, int x, int y) { m_mouseL = false; m_block = false; m_selectedPrincipalBar = false; - m_selectedMusicBar = false; - m_selectedEffectsBar = false; - m_selectedSensibilityBar = false; + m_selectedMusiqueBar = false; + m_selectedEffetsBar = false; + m_selectedSensibleBar = false; break; case MOUSE_BUTTON_RIGHT: m_mouseR = false; diff --git a/SQCSim2021/engine.h b/SQCSim2021/engine.h index 4548e58..cfe5c47 100644 --- a/SQCSim2021/engine.h +++ b/SQCSim2021/engine.h @@ -64,6 +64,8 @@ private: void DisplayAudioMenu(float centerX, float centerY); void DisplayGraphicsMenu(float centerX, float centerY); void DisplayGameplayMenu(float centerX, float centerY); + void DrawSliderBackground(float centerX, float centerY, float minVal, float maxVal, float bottomSideValue, float topSideValue); + void RedrawSlider(float centerX, float centerY, float value, float minVal, float maxVal, float bottomSideValue, float topSideValue); void DrawHud(float elapsedTime, BlockType bloc); void PrintText(float x, float y, const std::string& t, float charSizeMultiplier = 1.0f); void ProcessNotificationQueue(); @@ -152,17 +154,17 @@ private: int m_nbReductionChunk = 4; int m_timerReductionChunk = 30; - float m_volMain = 50.0f; - float m_volMusic = 50.0f; - float m_volEffects = 50.0f; - float m_volSensible = 50.0f; + float m_volPrincipal = 0.0f; + float m_volMusique = 0.0f; + float m_volEffets = 0.0f; + float m_volSensible = 0.0f; int m_selectedOption = 0; bool m_selectedPrincipalBar = false; - bool m_selectedMusicBar = false; - bool m_selectedEffectsBar = false; - bool m_selectedSensibilityBar = false; + bool m_selectedMusiqueBar = false; + bool m_selectedEffetsBar = false; + bool m_selectedSensibleBar = false; bool m_damage = false;