R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
MainMenu.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** r-type
4** File description:
5** MainMenu - Main menu for the game (business logic)
6*/
7
8#pragma once
9
10#include <functional>
11#include <memory>
12
13#include "Menu/BaseMenu.hpp"
14#include "UI/IUIFactory.hpp"
15
16namespace Game {
22 class MainMenu : public BaseMenu {
23 public:
24 explicit MainMenu(UI::IUIFactory &uiFactory);
25 ~MainMenu() override = default;
26
32 void SetOnQuit(std::function<void()> onQuit);
33
37 void SetOnSettings(std::function<void()> onSettings);
38
42 void SetOnPlay(std::function<void()> onPlay);
43
47 void SetOnProfile(std::function<void()> onProfile);
48
52 void SetOnSelectServer(std::function<void()> onSelectServer);
53
57 void SetProfileName(const std::string &name);
58
62 void SetScreenSize(float width, float height);
63
64 void Initialize() override;
65
69 void Show() override;
70
71 private:
72 void OnPlayClicked();
73 void OnQuitClicked();
74 void OnSettingsClicked();
75 void OnProfileClicked();
77
78 std::function<void()> _onPlay{};
79 std::function<void()> _onQuit{};
80 std::function<void()> _onSettings{};
81 std::function<void()> _onProfile{};
82 std::function<void()> _onSelectServer{};
83
84 std::shared_ptr<UI::IButton> _profileButton;
85 std::shared_ptr<UI::IButton> _selectServerButton;
86
87 float _screenWidth = 800.0f;
88 float _screenHeight = 600.0f;
89 };
90} // namespace Game
Base class for all menu implementations.
Definition BaseMenu.hpp:26
Main menu of the game.
Definition MainMenu.hpp:22
void SetOnSettings(std::function< void()> onSettings)
Set callback triggered when the Settings button is clicked.
Definition MainMenu.cpp:18
float _screenWidth
Definition MainMenu.hpp:87
void SetScreenSize(float width, float height)
Set screen size for layout calculations.
Definition MainMenu.cpp:40
~MainMenu() override=default
std::function< void()> _onQuit
Definition MainMenu.hpp:79
void SetProfileName(const std::string &name)
Update the text of the Profile button (e.g. "GUEST" -> "PlayerName").
Definition MainMenu.cpp:34
void SetOnSelectServer(std::function< void()> onSelectServer)
Set callback triggered when the Select Server button is clicked.
Definition MainMenu.cpp:30
void Show() override
Show the menu and play the open sound effect.
Definition MainMenu.cpp:45
std::function< void()> _onPlay
Definition MainMenu.hpp:78
std::shared_ptr< UI::IButton > _profileButton
Definition MainMenu.hpp:84
void OnProfileClicked()
Definition MainMenu.cpp:121
void OnQuitClicked()
Definition MainMenu.cpp:112
void OnSelectServerClicked()
Definition MainMenu.cpp:128
std::function< void()> _onProfile
Definition MainMenu.hpp:81
std::function< void()> _onSettings
Definition MainMenu.hpp:80
void SetOnPlay(std::function< void()> onPlay)
Set callback triggered when the Play button is clicked.
Definition MainMenu.cpp:22
void SetOnQuit(std::function< void()> onQuit)
Set callback triggered when the Quit button is clicked.
Definition MainMenu.cpp:14
void OnPlayClicked()
Definition MainMenu.cpp:97
void Initialize() override
Initialize menu (must be implemented by derived classes).
Definition MainMenu.cpp:52
void SetOnProfile(std::function< void()> onProfile)
Set callback triggered when the Profile/Guest button is clicked.
Definition MainMenu.cpp:26
std::shared_ptr< UI::IButton > _selectServerButton
Definition MainMenu.hpp:85
float _screenHeight
Definition MainMenu.hpp:88
void OnSettingsClicked()
Definition MainMenu.cpp:105
std::function< void()> _onSelectServer
Definition MainMenu.hpp:82
Abstract factory interface for creating UI elements.