r-type  0.0.0
R-Type main
Loading...
Searching...
No Matches
ServerScene.hpp
Go to the documentation of this file.
1///
2/// @file ServerScene.hpp
3/// @brief Server connection configuration scene for R-Type multiplayer
4/// @details This file contains the scene where players configure their connection settings
5/// before joining a multiplayer game. Players can set their name, server IP,
6/// and port before connecting to the game server.
7/// @namespace gme
8/// @author R-Type Team
9/// @date 2025
10///
11
12#pragma once
13
15
16namespace gme
17{
18 ///
19 /// @class ServerScene
20 /// @brief Scene for configuring and establishing server connection
21 /// @details This scene provides a user interface for players to:
22 /// - Enter their player name
23 /// - Specify server IP address
24 /// - Set server port number
25 /// - Connect to the game server
26 /// - Navigate back to the main menu
27 ///
28 /// The scene uses a menu-based navigation system with keyboard input
29 /// and visual feedback for the selected option.
30 ///
31 /// @namespace gme
32 ///
33 class ServerScene final : public eng::AScene
34 {
35 public:
36 ///
37 /// @brief Constructor
38 /// @param assignedId Scene identifier
39 /// @param renderer Shared pointer to the renderer interface
40 /// @param host Default server host/IP address
41 /// @param port Default server port
42 /// @param playerName Default player name
43 /// @details Initializes the scene with default connection parameters
44 ///
45 ServerScene(eng::id assignedId, const std::shared_ptr<eng::IRenderer> &renderer, const std::string &host,
46 const std::string &port, const std::string &playerName);
47
48 ///
49 /// @brief Destructor
50 ///
51 ~ServerScene() override = default;
52
53 ///
54 /// @brief Deleted copy constructor (non-copyable)
55 ///
56 ServerScene(const ServerScene &other) = delete;
57
58 ///
59 /// @brief Deleted copy assignment operator (non-copyable)
60 ///
61 ServerScene &operator=(const ServerScene &other) = delete;
62
63 ///
64 /// @brief Deleted move constructor (non-movable)
65 ///
66 ServerScene(ServerScene &&other) = delete;
67
68 ///
69 /// @brief Deleted move assignment operator (non-movable)
70 ///
71 ServerScene &operator=(ServerScene &&other) = delete;
72
73 ///
74 /// @brief Update the scene (called each frame)
75 /// @param dt Delta time since last frame
76 /// @param size Current window size
77 /// @details Handles animation updates and UI state changes
78 ///
79 void update(float dt, const eng::WindowSize &size) override;
80
81 ///
82 /// @brief Handle input events
83 /// @param event Input event (keyboard, mouse, etc.)
84 /// @details Processes user input for menu navigation and text entry
85 ///
86 void event(const eng::Event &event) override;
87
88 ///
89 /// @brief Get music playback state
90 /// @return Reference to music playback flag
91 ///
92 bool &playMusic() { return m_playMusic; }
93
94 ///
95 /// @brief Callback triggered when player attempts to connect
96 /// @details Function signature: (playerName, serverIP, serverPort) -> void
97 ///
98 std::function<void(const std::string &playerName, const std::string &serverIP,
99 const std::string &serverPort)>
101
102 ///
103 /// @brief Callback triggered when player returns to main menu
104 ///
105 std::function<void()> onBackToMenu;
106
107 private:
108 size_t m_selectedIndex = 0; ///< Currently selected menu option index
109 float m_animationTime = 0.0f; ///< Animation timer for visual effects
110
111 ///< Menu options displayed to the player
112 const std::vector<std::string> m_serverOptions = {"Player Name", "Server IP", "Server Port", "Connect",
113 "Back"};
114
115 ///
116 /// @brief Initiate server connection with provided settings
117 /// @param playerName Player's display name
118 /// @param serverIP Server IP address or hostname
119 /// @param serverPort Server port number as string
120 /// @details Validates inputs and triggers the onConnect callback
121 ///
122 void connectServer(const std::string &playerName, const std::string &serverIP,
123 const std::string &serverPort) const;
124
125 std::string m_playerName; ///< Player name input field
126 std::string m_host; ///< Server host/IP input field
127 std::string m_port; ///< Server port input field
128
129 ecs::Entity m_playerNameValueEntity = 0; ///< Text entity displaying player name
130 ecs::Entity m_serverIPValueEntity = 0; ///< Text entity displaying server IP
131 ecs::Entity m_serverPortValueEntity = 0; ///< Text entity displaying server port
132 bool m_playMusic = false; ///< Music playback state flag
133
134 ///
135 /// @brief Get reference to the currently selected input field
136 /// @return Reference to the string being edited
137 ///
138 std::string &getCurrentEditField();
139
140 ///
141 /// @brief Update the visual display of input values
142 /// @details Refreshes text entities to reflect current input field values
143 ///
144 void updateValueDisplay();
145 }; // class ServerScene
146} // namespace gme
Abstract class for scene.
Definition IScene.hpp:52
Scene for configuring and establishing server connection.
void event(const eng::Event &event) override
Handle input events.
ecs::Entity m_serverPortValueEntity
Text entity displaying server port.
bool m_playMusic
Music playback state flag.
std::function< void()> onBackToMenu
Callback triggered when player returns to main menu.
~ServerScene() override=default
Destructor.
std::string m_port
Server port input field.
float m_animationTime
Animation timer for visual effects.
void updateValueDisplay()
Update the visual display of input values.
std::function< void(const std::string &playerName, const std::string &serverIP, const std::string &serverPort)> onConnect
Callback triggered when player attempts to connect.
void connectServer(const std::string &playerName, const std::string &serverIP, const std::string &serverPort) const
Initiate server connection with provided settings.
ServerScene & operator=(ServerScene &&other)=delete
Deleted move assignment operator (non-movable)
std::string m_host
Server host/IP input field.
ecs::Entity m_playerNameValueEntity
Text entity displaying player name.
ServerScene & operator=(const ServerScene &other)=delete
Deleted copy assignment operator (non-copyable)
const std::vector< std::string > m_serverOptions
ecs::Entity m_serverIPValueEntity
Text entity displaying server IP.
ServerScene(eng::id assignedId, const std::shared_ptr< eng::IRenderer > &renderer, const std::string &host, const std::string &port, const std::string &playerName)
Constructor.
std::string & getCurrentEditField()
Get reference to the currently selected input field.
bool & playMusic()
Get music playback state.
size_t m_selectedIndex
Currently selected menu option index.
std::string m_playerName
Player name input field.
ServerScene(const ServerScene &other)=delete
Deleted copy constructor (non-copyable)
ServerScene(ServerScene &&other)=delete
Deleted move constructor (non-movable)
void update(float dt, const eng::WindowSize &size) override
Update the scene (called each frame)
This file contains the IScene class.
std::uint32_t Entity
Definition Entity.hpp:13
unsigned int id
Definition IScene.hpp:20