r-type  0.0.0
R-Type main
Loading...
Searching...
No Matches
CreateRoom.hpp
Go to the documentation of this file.
1///
2/// @file CreateRoom.hpp
3/// @brief Lobby creation scene for R-Type multiplayer
4/// @details This file contains the scene where players create new game lobbies.
5/// Players can configure lobby settings including name and maximum player count
6/// before creating the room on the server. The scene provides a user-friendly
7/// interface for lobby customization.
8/// @namespace gme
9/// @author R-Type Team
10/// @date 2025
11///
12
13#pragma once
14
16
17namespace gme
18{
19 ///
20 /// @class CreateRoomScene
21 /// @brief Scene for creating and configuring new multiplayer lobbies
22 /// @details This scene provides an interface for players to:
23 /// - Enter a custom lobby/room name
24 /// - Set maximum player count (2-8 players)
25 /// - Create the lobby on the server
26 /// - Navigate back to multiplayer menu
27 ///
28 /// The scene uses a menu-based navigation system with keyboard input
29 /// and provides visual feedback for the selected option. Upon successful
30 /// lobby creation, the scene transitions to the waiting room.
31 ///
32 /// @namespace gme
33 ///
34 class CreateRoomScene final : public eng::AScene
35 {
36 public:
37 ///
38 /// @brief Constructor
39 /// @param assignedId Unique scene identifier
40 /// @param renderer Shared pointer to the rendering interface
41 /// @details Initializes the create room UI with default values
42 ///
43 CreateRoomScene(eng::id assignedId, const std::shared_ptr<eng::IRenderer> &renderer);
44
45 ///
46 /// @brief Destructor
47 ///
48 ~CreateRoomScene() override = default;
49
50 ///
51 /// @brief Deleted copy constructor (non-copyable)
52 ///
53 CreateRoomScene(const CreateRoomScene &other) = delete;
54
55 ///
56 /// @brief Deleted copy assignment operator (non-copyable)
57 ///
58 CreateRoomScene &operator=(const CreateRoomScene &other) = delete;
59
60 ///
61 /// @brief Deleted move constructor (non-movable)
62 ///
64
65 ///
66 /// @brief Deleted move assignment operator (non-movable)
67 ///
69
70 ///
71 /// @brief Update the scene (called each frame)
72 /// @param dt Delta time since last frame (in seconds)
73 /// @param size Current window dimensions
74 /// @details Updates animations and UI state
75 ///
76 void update(float dt, const eng::WindowSize &size) override;
77
78 ///
79 /// @brief Handle input events
80 /// @param event Input event (keyboard, mouse)
81 /// @details Processes user input for menu navigation and value modification
82 ///
83 void event(const eng::Event &event) override;
84
85 ///
86 /// @brief Process events from the event bus
87 /// @details Handles lobby creation responses from the network layer
88 ///
89 void processEventBus() const;
90
91 ///
92 /// @brief Get reference to music playback flag
93 /// @return Reference to music play state
94 ///
95 bool &playMusic() { return m_playMusic; }
96
97 ///
98 /// @brief Callback invoked when player creates a room
99 /// @details Function signature: (roomName, maxPlayers) -> void
100 ///
101 std::function<void(const std::string &roomName, int maxPlayers)> onCreate;
102
103 ///
104 /// @brief Callback invoked when player navigates back to multiplayer menu
105 ///
106 std::function<void()> onBackToMulti;
107
108 ///
109 /// @brief Callback invoked when room is successfully created on server
110 /// @details Function signature: (lobbyId, lobbyInfo*) -> void
111 ///
112 std::function<void(int lobbyId, const rnp::LobbyInfo *lobbyInfo)> onRoomCreated;
113
114 private:
115 size_t m_selectedIndex = 0; ///< Currently selected menu option index
116 float m_animationTime = 0.0f; ///< Animation timer for visual effects
117
118 ///< Menu options displayed to the player
119 const std::vector<std::string> m_options = {"Room Name", "Max Players", "Create", "Back"};
120
121 bool m_playMusic = false; ///< Music playback state flag
122 std::string m_roomName = "My Room"; ///< Current room name input (default: "My Room")
123 int m_maxPlayers = 4; ///< Maximum players setting (default: 4)
124
125 ecs::Entity m_titleEntity = 0; ///< Title text entity
126 ecs::Entity m_roomNameValueEntity = 0; ///< Text entity displaying room name
127 ecs::Entity m_maxPlayersValueEntity = 0; ///< Text entity displaying max players
128
129 ///
130 /// @brief Update the visual display of configuration values
131 /// @details Refreshes text entities to reflect current room name and max players
132 ///
133 void updateValueDisplay();
134
135 ///
136 /// @brief Send lobby creation request to server
137 /// @details Validates inputs and triggers the onCreate callback
138 ///
139 void createRoom() const;
140 }; // class CreateRoomScene
141} // namespace gme
Abstract class for scene.
Definition IScene.hpp:52
Scene for creating and configuring new multiplayer lobbies.
std::string m_roomName
Current room name input (default: "My Room")
void update(float dt, const eng::WindowSize &size) override
Update the scene (called each frame)
void processEventBus() const
Process events from the event bus.
bool & playMusic()
Get reference to music playback flag.
const std::vector< std::string > m_options
size_t m_selectedIndex
Currently selected menu option index.
void updateValueDisplay()
Update the visual display of configuration values.
CreateRoomScene & operator=(CreateRoomScene &&other)=delete
Deleted move assignment operator (non-movable)
std::function< void(int lobbyId, const rnp::LobbyInfo *lobbyInfo)> onRoomCreated
Callback invoked when room is successfully created on server.
~CreateRoomScene() override=default
Destructor.
CreateRoomScene(const CreateRoomScene &other)=delete
Deleted copy constructor (non-copyable)
int m_maxPlayers
Maximum players setting (default: 4)
ecs::Entity m_titleEntity
Title text entity.
std::function< void()> onBackToMulti
Callback invoked when player navigates back to multiplayer menu.
float m_animationTime
Animation timer for visual effects.
ecs::Entity m_roomNameValueEntity
Text entity displaying room name.
CreateRoomScene(CreateRoomScene &&other)=delete
Deleted move constructor (non-movable)
ecs::Entity m_maxPlayersValueEntity
Text entity displaying max players.
std::function< void(const std::string &roomName, int maxPlayers)> onCreate
Callback invoked when player creates a room.
void event(const eng::Event &event) override
Handle input events.
void createRoom() const
Send lobby creation request to server.
bool m_playMusic
Music playback state flag.
CreateRoomScene & operator=(const CreateRoomScene &other)=delete
Deleted copy assignment operator (non-copyable)
CreateRoomScene(eng::id assignedId, const std::shared_ptr< eng::IRenderer > &renderer)
Constructor.
This file contains the IScene class.
std::uint32_t Entity
Definition Entity.hpp:13
unsigned int id
Definition IScene.hpp:20
Lobby information structure.
Definition Protocol.hpp:237