From c88143c2bcae75af3ce49e6e878988c954d8bd99 Mon Sep 17 00:00:00 2001 From: mduval76 <9343789@etu.cegepsth.qc.ca> Date: Fri, 8 Dec 2023 23:42:01 -0500 Subject: [PATCH] Push inputs username et server address fonctionnels. --- SQCSim2021/engine.cpp | 144 ++++++++++++++++++++++++++++-------------- SQCSim2021/engine.h | 7 +- 2 files changed, 101 insertions(+), 50 deletions(-) diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index 258480e..4cf9757 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -715,10 +715,6 @@ void Engine::DisplaySplashScreen() { } void Engine::DisplayLobbyMenu(float elapsedTime) { - static float lobbyTime = 0.0f; - lobbyTime += elapsedTime; - float onInterval = 0.5f; - float offInterval = 1.0f; GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); @@ -745,49 +741,12 @@ void Engine::DisplayLobbyMenu(float elapsedTime) { glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - m_textureLobbyIdentify.Bind(); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2i(Width() * 0.6, Height() * 0.75); - glTexCoord2f(1, 0); glVertex2i(Width() * 0.975, Height() * 0.75); - glTexCoord2f(1, 1); glVertex2i(Width() * 0.975, Height() * 0.95); - glTexCoord2f(0, 1); glVertex2i(Width() * 0.6, Height() * 0.95); - glEnd(); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - - m_textureFont.Bind(); - std::ostringstream ss; - glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - - if (m_charChanged) { - if (m_keyBackspace) { - if (!m_currentInputString.empty()) { - m_currentInputString.pop_back(); - } - m_keyBackspace = false; - } - else if (m_currentInputString.size() < 26) { - m_currentInputString += m_inputChar; - } + if (m_settingUsername) { + SetPlayerUsername(elapsedTime); } - - ss << m_currentInputString; - m_charChanged = false; - - if (lobbyTime < onInterval) { - ss << "_"; + else if (m_settingServer) { + SetServerAddress(elapsedTime); } - else if (lobbyTime > onInterval && lobbyTime < offInterval) { - ss << " "; - } - else { - lobbyTime -= offInterval; - } - - PrintText(Width() * 0.6f, Height() * 0.4f, ss.str(), 2.0f); - - glDisable(GL_BLEND); - glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); @@ -798,11 +757,38 @@ void Engine::DisplayLobbyMenu(float elapsedTime) { glMatrixMode(GL_MODELVIEW); glPopMatrix(); - } -void Engine::SetLobbyUsername() { +void Engine::SetPlayerUsername(float elapsedTime) { + m_textureLobbyIdentify.Bind(); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2i(Width() * 0.6, Height() * 0.75); + glTexCoord2f(1, 0); glVertex2i(Width() * 0.975, Height() * 0.75); + glTexCoord2f(1, 1); glVertex2i(Width() * 0.975, Height() * 0.95); + glTexCoord2f(0, 1); glVertex2i(Width() * 0.6, Height() * 0.95); + glEnd(); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + HandlePlayerInput(elapsedTime); + glDisable(GL_BLEND); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); +} + +void Engine::SetServerAddress(float elapsedTime) { + m_textureLobbyServer.Bind(); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2i(Width() * 0.6, Height() * 0.75); + glTexCoord2f(1, 0); glVertex2i(Width() * 0.975, Height() * 0.75); + glTexCoord2f(1, 1); glVertex2i(Width() * 0.975, Height() * 0.95); + glTexCoord2f(0, 1); glVertex2i(Width() * 0.6, Height() * 0.95); + glEnd(); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + HandlePlayerInput(elapsedTime); + glDisable(GL_BLEND); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } void Engine::DisplayMainMenu() { @@ -1890,6 +1876,68 @@ char Engine::SimulateKeyboard(unsigned char key) { return m_inputChar; } +void Engine::HandlePlayerInput(float elapsedTime) { + static float lobbyTime = 0.0f; + lobbyTime += elapsedTime; + float onInterval = 0.5f; + float offInterval = 1.0f; + + m_textureFont.Bind(); + std::ostringstream ss; + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + if (m_charChanged) { + if (m_keyBackspace) { + if (!m_currentInputString.empty()) { + m_currentInputString.pop_back(); + } + m_keyBackspace = false; + } + else if (m_keyEnter) { + if (m_settingUsername) { + if (!m_currentInputString.empty() && + m_currentInputString.size() > 1 && + m_currentInputString.size() < 26) { + m_username = m_currentInputString; + m_currentInputString = ""; + m_settingUsername = false; + m_settingServer = true; + } + } + else if (m_settingServer) { + if (!m_currentInputString.empty()) { + m_serverAddr = m_currentInputString; + m_currentInputString = ""; + m_settingServer = false; + } + } + m_keyEnter = false; + } + else if (m_settingUsername && m_currentInputString.size() < 26) { + m_currentInputString += m_inputChar; + } + else if (m_settingServer && m_currentInputString.size() < 15) { + m_currentInputString += m_inputChar; + } + } + + ss << m_currentInputString; + m_charChanged = false; + + if (lobbyTime < onInterval) { + ss << "_"; + } + else if (lobbyTime > onInterval && lobbyTime < offInterval) { + ss << " "; + } + else { + lobbyTime = 0.0f; + } + + PrintText(Width() * 0.6f, Height() * 0.4f, ss.str(), 2.0f); +} + void Engine::MouseMoveEvent(int x, int y) { if (m_gamestate == GameState::PLAY) { @@ -1979,7 +2027,7 @@ void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { else if (x > leftButton && x < rightButton && y > bottomSecond && y < topSecond) { if (m_selectedPlayOptions) { m_gamestate = GameState::LOBBY; - StartMultiplayerGame(); + m_settingUsername = true; } else { m_gamestate = GameState::OPTIONS; diff --git a/SQCSim2021/engine.h b/SQCSim2021/engine.h index 31b60ec..3303a11 100644 --- a/SQCSim2021/engine.h +++ b/SQCSim2021/engine.h @@ -69,8 +69,8 @@ private: void DrawSingleMultiButtons(float centerX, float centerY); void DisplayLobbyMenu(float elapsedTime); - void SetLobbyUsername(); - void SetLobbyServerAddress(); + void SetPlayerUsername(float elapsedTime); + void SetServerAddress(float elapsedTime); void DisplayOptionsMenu(); void DisplayAudioMenu(float centerX, float centerY); @@ -83,6 +83,7 @@ private: void PrintText(float x, float y, const std::string& t, float charSizeMultiplier = 1.0f); void ProcessNotificationQueue(); char SimulateKeyboard(unsigned char key); + void HandlePlayerInput(float elapsedTime); Connector m_conn; @@ -206,6 +207,8 @@ private: bool m_selectedQuit = false; std::string m_currentInputString; + std::string m_username; + std::string m_serverAddr; char m_inputChar = 0; bool m_invalidChar = false; bool m_charChanged = false;