R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
AccessibilityMenu.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2026
3** r-type
4** File description:
5** AccessibilityMenu - Accessibility features menu
6*/
7
8#pragma once
9
10#include <functional>
11#include <memory>
12#include <string>
13
15#include "Menu/BaseMenu.hpp"
16#include "UI/IUIFactory.hpp"
17
18namespace Game {
28 class AccessibilityMenu : public BaseMenu {
29 public:
33 enum class ColorblindFilter {
34 NONE,
39 };
40
44 enum class Mode {
46 OVERLAY
47 };
48
54 explicit AccessibilityMenu(UI::IUIFactory &uiFactory, Graphics::IGraphics &graphics);
55 ~AccessibilityMenu() override = default;
56
60 void Initialize() override;
61
62 void Update() override;
63 void Render() override;
64
65 // --- Display Mode ---
66 void SetMode(Mode mode);
67 [[nodiscard]] Mode GetMode() const;
68
69 void SetOverlayDimColor(unsigned int color);
70 [[nodiscard]] unsigned int GetOverlayDimColor() const;
71 [[nodiscard]] bool ShouldDimBackground() const;
72
73 // --- Colorblind Filters ---
79
84 [[nodiscard]] ColorblindFilter GetColorblindFilter() const;
85
89 void SetOnColorblindFilterChanged(std::function<void(ColorblindFilter)> callback);
90
95
96 // --- Game Speed ---
101 void SetGameSpeed(float speed);
102
106 [[nodiscard]] float GetGameSpeed() const;
107
111 void SetOnGameSpeedChanged(std::function<void(float)> callback);
112
116 void SetGameSpeedSilent(float speed);
117
118 // --- Key Bindings ---
123
127 void SetOnConfigureKeyBindings(std::function<void()> callback);
128
129 // --- Callbacks ---
133 void SetOnBack(std::function<void()> callback);
134
138 void SetOnMainMenu(std::function<void()> callback);
139
143 void RefreshVisuals();
144
145 private:
146 // Helper methods
148 [[nodiscard]] ColorblindFilter NextColorblindFilter(ColorblindFilter current) const;
149 [[nodiscard]] const char *ColorblindFilterToString(ColorblindFilter filter) const;
150 [[nodiscard]] float ClampGameSpeed(float speed) const;
151
152 // Member variables
154
157 float _gameSpeed{1.0f}; // Normal speed
158 unsigned int _overlayDimColor{0x88000000};
159
160 // Callbacks
162 std::function<void(float)> _onGameSpeedChanged{};
163 std::function<void()> _onConfigureKeyBindings{};
164 std::function<void()> _onBack{};
165 std::function<void()> _onMainMenu{};
166
167 // Button indices
168 static constexpr size_t COLORBLIND_FILTER_INDEX = 0;
169 static constexpr size_t KEY_BINDINGS_INDEX = 1;
170 static constexpr size_t BACK_INDEX = 2;
171 static constexpr size_t MAIN_MENU_INDEX = 3;
172 };
173} // namespace Game
Accessibility menu for configuring accessibility features.
static constexpr size_t MAIN_MENU_INDEX
void SetGameSpeedSilent(float speed)
Set game speed without emitting callbacks.
ColorblindFilter
Colorblind filter types.
@ MONOCHROMACY
Complete color blindness.
void SetOnColorblindFilterChanged(std::function< void(ColorblindFilter)> callback)
Set callback invoked when colorblind filter changes.
std::function< void()> _onBack
void SetGameSpeed(float speed)
Set game speed multiplier (0.5 = 50% speed, 1.0 = normal)
std::function< void(float)> _onGameSpeedChanged
void RefreshVisuals()
Refresh button labels/colors to match current state.
static constexpr size_t BACK_INDEX
~AccessibilityMenu() override=default
void SetColorblindFilter(ColorblindFilter filter)
Set the colorblind filter type.
void SetOverlayDimColor(unsigned int color)
void Initialize() override
Initialize UI elements.
void OpenKeyBindingsConfig()
Open key bindings configuration dialog.
Graphics::IGraphics & _graphics
float ClampGameSpeed(float speed) const
static constexpr size_t COLORBLIND_FILTER_INDEX
void SetOnMainMenu(std::function< void()> callback)
Set callback invoked when "Main Menu" is clicked (overlay mode)
void Update() override
Update menu state (should be called every frame).
ColorblindFilter GetColorblindFilter() const
Get the current colorblind filter.
void SetOnBack(std::function< void()> callback)
Set callback invoked when Back is clicked.
unsigned int GetOverlayDimColor() const
std::function< void(ColorblindFilter)> _onColorblindFilterChanged
static constexpr size_t KEY_BINDINGS_INDEX
const char * ColorblindFilterToString(ColorblindFilter filter) const
void Render() override
Render menu (should be called every frame).
ColorblindFilter _colorblindFilter
void SetOnGameSpeedChanged(std::function< void(float)> callback)
Set callback invoked when game speed changes.
std::function< void()> _onConfigureKeyBindings
float GetGameSpeed() const
Get current game speed multiplier.
void SetOnConfigureKeyBindings(std::function< void()> callback)
Set callback invoked when user wants to configure key bindings.
std::function< void()> _onMainMenu
ColorblindFilter NextColorblindFilter(ColorblindFilter current) const
Mode
Display mode for the accessibility menu.
@ OVERLAY
Displays over the game with a dimmed background.
@ FULLSCREEN
Takes the whole window (main menu context)
void SetColorblindFilterSilent(ColorblindFilter filter)
Set colorblind filter without emitting callbacks.
Base class for all menu implementations.
Definition BaseMenu.hpp:26
Abstract interface for graphics rendering operations.
Definition IGraphics.hpp:32
Abstract factory interface for creating UI elements.