From eed8f5f04a4e04264b238754b0423d14fbf84d36 Mon Sep 17 00:00:00 2001 From: mduval76 <9343789@etu.cegepsth.qc.ca> Date: Sun, 29 Oct 2023 15:39:29 -0400 Subject: [PATCH] Push menu solo ou multi. --- SQCSim2021/engine.cpp | 78 +++++++++++++++++++- SQCSim2021/engine.h | 4 +- SQCSim2021/media/textures/multi_player.png | Bin 0 -> 3731 bytes SQCSim2021/media/textures/single_player.png | Bin 0 -> 4081 bytes 4 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 SQCSim2021/media/textures/multi_player.png create mode 100644 SQCSim2021/media/textures/single_player.png diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index 0a91a89..26cf983 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -72,6 +72,8 @@ void Engine::DrawSplachScreen() glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); + + m_gamestate = GameState::OPTIONS; } @@ -347,6 +349,9 @@ void Engine::LoadResource() { LoadTexture(m_textureGun, TEXTURE_PATH "gun01.png", false); LoadTexture(m_texturePovGun, TEXTURE_PATH "GUN.png", false); LoadTexture(m_textureSoloMultiMenu, TEXTURE_PATH "single_multi.png", false); + LoadTexture(m_textureSoloText, TEXTURE_PATH "single_player.png", false); + LoadTexture(m_textureMultiText, TEXTURE_PATH "multi_player.png", false); + LoadTexture(m_textureSoloMultiMenu, TEXTURE_PATH "single_multi.png", false); LoadTexture(m_textureTitle, TEXTURE_PATH "title.png", false); LoadTexture(MenuTitleTexture, MENU_ITEM_PATH "test.png"); @@ -725,7 +730,8 @@ void Engine::DisplaySingleOrMultiplayerMenu() { float titleWidth = (centerX * 1.85f) * scaleX; float titleHeight = (centerY * 1.85f) * scaleY; - // Solo game indicator + // Title + glColor4f(1.0f, 0.33f, 0.66f, 1.0f); m_textureTitle.Bind(); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(centerX, centerY); @@ -750,10 +756,29 @@ void Engine::DisplaySingleOrMultiplayerMenu() { glTexCoord2f(0.0f, 1.0f); glVertex2f(fPosX, soloHeight); glEnd(); + glBindTexture(GL_TEXTURE_2D, 0); + + float fPosXSoloText = (centerX * 0.75f) * scaleX; + float fPosXWidthSoloText = (centerX * 2.0f) * scaleX; + float soloPosYSoloText = (centerY * 0.35f) * scaleY; + float soloHeightSoloText = (centerY * 1.3) * scaleY; + + m_textureSoloText.Bind(); + glColor4f(0.5f, 0.0f, 0.5f, 1.0f); + glBegin(GL_QUADS); + glTexCoord2f(0.0f, 0.0f); glVertex2f(fPosXSoloText, soloPosYSoloText); + glTexCoord2f(1.0f, 0.0f); glVertex2f(fPosXWidthSoloText, soloPosYSoloText); + glTexCoord2f(1.0f, 1.0f); glVertex2f(fPosXWidthSoloText, soloHeightSoloText); + glTexCoord2f(0.0f, 1.0f); glVertex2f(fPosXSoloText, soloHeightSoloText); + glEnd(); + + glBindTexture(GL_TEXTURE_2D, 0); + // Multiplayer game indicator float multiPosY = (centerY * 0.5f) * scaleY; float multiHeight = (centerY * 0.65f) * scaleY; + glColor4f(1.0f, 1.0f, 1.0f, 0.5f); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(fPosX, multiPosY); glTexCoord2f(1.0f, 0.0f); glVertex2f(fPosXWidth, multiPosY); @@ -761,6 +786,20 @@ void Engine::DisplaySingleOrMultiplayerMenu() { glTexCoord2f(0.0f, 1.0f); glVertex2f(fPosX, multiHeight); glEnd(); + + float fPosXMultiText = (centerX * 0.7f) * scaleX; + float fPosXWidthMultiText = (centerX * 2.0f) * scaleX; + float multiPosYMultiText = (centerY * 0.01f) * scaleY; + float multiHeightMultiText = (centerY * 1.0105) * scaleY; + + m_textureMultiText.Bind(); + glColor4f(0.5f, 0.0f, 0.5f, 1.0f); + glBegin(GL_QUADS); + glTexCoord2f(0.0f, 0.0f); glVertex2f(fPosXMultiText, multiPosYMultiText); + glTexCoord2f(1.0f, 0.0f); glVertex2f(fPosXWidthMultiText, multiPosYMultiText); + glTexCoord2f(1.0f, 1.0f); glVertex2f(fPosXWidthMultiText, multiHeightMultiText); + glTexCoord2f(0.0f, 1.0f); glVertex2f(fPosXMultiText, multiHeightMultiText); + glEnd(); // TODO: Add SOLO / MULTIPLAYER text with font glColor4f(1.0f, 1.0f, 1.0f, 1.0f); @@ -772,6 +811,9 @@ void Engine::DisplaySingleOrMultiplayerMenu() { glMatrixMode(GL_MODELVIEW); glPopMatrix(); + + + ShowCursor(); } void Engine::DrawHud(float elapsedTime, BlockType bloc) { @@ -879,8 +921,9 @@ void Engine::Render(float elapsedTime) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); m_time_SplashScreen += elapsedTime; - if(m_time_SplashScreen < 2) - DrawSplachScreen(); + if (m_time_SplashScreen < 2) { + DrawSplachScreen(); + } else if (m_gamestate == GameState::PLAY) { HideCursor(); @@ -999,7 +1042,12 @@ void Engine::Render(float elapsedTime) { } else if (m_gamestate == GameState::MAIN_MENU || m_gamestate == GameState::OPTIONS) { - DrawMenu(); + if (!m_soloMultiChoiceMade) { + DisplaySingleOrMultiplayerMenu(); + } + else { + DrawMenu(); + } } else if (m_gamestate == GameState::QUIT) Stop(); @@ -1193,6 +1241,28 @@ void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { if ((m_mousemx >= 305 && m_mousemx <= 450) && (m_mousemy >= 300 && m_mousemy <= 400)) m_gamestate = GameState::QUIT; } + else if (m_gamestate == GameState::OPTIONS) + { + auto [scaleX, scaleY] = GetScale(); + float soloLx = ((Width() / 2.0f) + 30) * scaleX; + float soloLy = ((Height() / 2.0f) + 20) * scaleY; + float soloRx = ((Width() / 2.0f) + 240) * scaleX; + float soloRy = ((Height() / 2.0f) + 60) * scaleY; + + float multiLx = ((Width() / 2.0f) + 30) * scaleX; + float multiLy = ((Height() / 2.0f) + 85) * scaleY; + float multiRx = ((Width() / 2.0f) + 240) * scaleX; + float multiRy = ((Height() / 2.0f) + 120) * scaleY; + + if (m_mousemx >= soloLx && m_mousemx <= soloRx && m_mousemy >= soloLy && m_mousemy <= soloRy) { + m_soloMultiChoiceMade = true; + m_gamestate = GameState::PLAY; + } + else if (m_mousemx >= multiLx && m_mousemx <= multiRx && m_mousemy >= multiLy && m_mousemy <= multiRy) { + m_soloMultiChoiceMade = true; + m_gamestate = GameState::PLAY; + } + } } void Engine::MouseReleaseEvent(const MOUSE_BUTTON& button, int x, int y) { diff --git a/SQCSim2021/engine.h b/SQCSim2021/engine.h index 0ed8b39..a12ec8a 100644 --- a/SQCSim2021/engine.h +++ b/SQCSim2021/engine.h @@ -72,6 +72,8 @@ private: Texture m_texturePovGun; Texture m_textureSkybox; Texture m_textureSoloMultiMenu; + Texture m_textureSoloText; + Texture m_textureMultiText; Texture m_textureTitle; Skybox m_skybox; @@ -112,7 +114,7 @@ private: bool m_displayHud = true; bool m_displayInfo = false; bool m_resetcountdown = false; - bool m_soloMultiChoiceMade = true; + bool m_soloMultiChoiceMade = false; bool m_stopcountdown = false; bool m_keyK = false; diff --git a/SQCSim2021/media/textures/multi_player.png b/SQCSim2021/media/textures/multi_player.png new file mode 100644 index 0000000000000000000000000000000000000000..b013b441f8be1d3acff72721308c61306a67e8cb GIT binary patch literal 3731 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 m)Y{Py7!3i23%k_k{jgVDQoH_hmdG4XfOxw4xvX