-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGameEngine.hpp
More file actions
85 lines (72 loc) · 2.29 KB
/
Copy pathGameEngine.hpp
File metadata and controls
85 lines (72 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#ifndef GAMEENGINE_HPP
#define GAMEENGINE_HPP
#include "ChallengeFactory.hpp"
#include "IGameMode.hpp"
#include "IMidiInput.hpp"
#include "ITransport.hpp"
#include "Logger.hpp"
#include <memory>
/**
* @brief Moteur de jeu principal
* Orchestrateur qui coordonne les composants et gère le cycle de vie
*/
class GameEngine {
private:
ITransport& transport; ///< Référence au transport
IMidiInput& midi; ///< Référence à l'entrée MIDI
std::unique_ptr<IGameMode> currentGame; ///< Mode de jeu actuel
ChallengeFactory factory; ///< Fabrique de challenges
bool running{false}; ///< État du moteur
private:
/**
* @brief Gère la connexion d'un client
*/
void handleClientConnection();
/**
* @brief Traite une session de jeu
* @param config Configuration du jeu
*/
void processGameSession(const GameConfig& config);
/**
* @brief Crée un mode de jeu selon la configuration
* @param config Configuration du jeu
* @return Mode de jeu créé
*/
std::unique_ptr<IGameMode> createGameMode(const GameConfig& config);
/**
* @brief Parse une configuration depuis un message
* @param msg Message reçu
* @return Configuration parsée
*/
GameConfig parseConfig(const Message& msg);
/**
* @brief Envoie un accusé de réception
* @param ok true si configuration OK, false sinon
* @param errorCode Code d'erreur éventuel
* @param errorMessage Message d'erreur éventuel
*/
void sendAck(bool ok, const std::string& errorCode = "",
const std::string& errorMessage = "");
public:
GameEngine(const GameEngine&) = delete;
GameEngine& operator=(const GameEngine&) = delete;
GameEngine(GameEngine&&) = delete;
GameEngine& operator=(GameEngine&&) = delete;
GameEngine(ITransport& transport, IMidiInput& midi)
: transport(transport), midi(midi) {
Logger::log("[GameEngine] Instance créée");
}
~GameEngine() {
stop();
Logger::log("[GameEngine] Instance détruite");
}
/**
* @brief Lance le moteur de jeu
*/
void run();
/**
* @brief Arrête le moteur de jeu
*/
void stop();
};
#endif // GAMEENGINE_HPP