-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathusineinsecte.h
More file actions
122 lines (107 loc) · 5.05 KB
/
usineinsecte.h
File metadata and controls
122 lines (107 loc) · 5.05 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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#ifndef USINEINSECTE_H
#define USINEINSECTE_H
#include "insecte.h"
#include "types.h"
#include <unordered_map>
#include <functional>
#include <memory>
/* ________
_____| |_____
| | | |
| | | |
_______ | | | | _______
______| |_______| | | |_______| |______
| | | | | | | | | |
| | | | | | | | | |
| [] | | [] | | | | [] | | [] |
|_______|_______|_______|_____|______|_____|_______|_______|______|
| | | | | | | | | |
| | | | | | | | | |
___| [] |_______| [] |_____|______|_____| [] |_______| [] |___
| |_______| |_______| | | |_______| |_______| |
| | | | | | | | | | | |
| | [] | | [] | | | | [] | | [] | |
|___|_______|_______|_______|_____|______|_____|_______|_______|_______|___|
| | | | | | | | |
| | | | | | | | |
___| [] |_______| [] |_____|______|_____| [] |_______| [] |___
| |_______| |_______| | | |_______| |_______| |
| | | | | | | | | | | |
| | [] | | [] | | | | [] | | [] | |
|___|_______|_______|_______|_____|______|_____|_______|_______|_______|___|
/ / / / / / / / /
_________/____/____/____/____/____/____/____/____/__________
|______________________________________________|______________|
| USINE A INSECTE |
| _______ _______ _______ _______ _______ |
| | | | | | | | | | | |
| | | | | | | | | | | |
| |_______| |_______| |_______| |_______| |_______| |
|_______________________________________________|______________|
*/
/**
* @brief Classe UsineInsecte : Usine pour créer des objets de type Insecte.
*
* Cette classe utilise le patron de conception singleton pour gérer l'enregistrement
* et la fabrication d'objets Insecte en fonction de leur type.
* Elle permet également de récupérer le nombre maximum de jetons disponibles
* pour un type d'insecte donné.
*/
class UsineInsecte
{
/// Alias pour une fonction fabriquant un Insecte.
using Fabrique = std::function<std::unique_ptr<Insecte>(Joueur*)>;
public:
/**
* @brief Accède à l'instance unique de l'usine (Singleton).
*
* @return Référence vers l'instance unique de l'usine.
*/
static UsineInsecte& get_usine() { static UsineInsecte usine; return usine; }
/**
* @brief Enregistre une fabrique pour un type spécifique d'insecte.
*
* @param t Le type d'insecte à enregistrer.
* @param f La fabrique associée à ce type.
* @return true si l'enregistrement est réussi.
*/
bool enregistrer_type(Type::Type t, Fabrique f) { map[t] = f; return true; }
/**
* @brief Fabrique un objet Insecte du type spécifié.
*
* @param type Le type d'insecte à fabriquer.
* @param joueur Le joueur propriétaire de l'insecte.
* @return std::unique_ptr<Insecte> vers l'objet créé, ou nullptr si le type n'est pas trouvé.
*/
std::unique_ptr<Insecte> fabriquer(Type::Type type, Joueur* joueur) const
{
auto i = map.find(type);
if (i != map.end())
return (i->second)(joueur);
return nullptr;
}
/**
* @brief Récupère le nombre maximum de jetons pour un type d'insecte.
*
* @param type Le type d'insecte.
* @return int Le nombre maximum de jetons, ou 0 si le type n'est pas trouvé.
*/
int get_jetons_max(Type::Type type) const {
auto insecte_temp = fabriquer(type, nullptr);
if (insecte_temp) {
return insecte_temp->get_jetons_max();
}
return 0;
}
std::vector<Type::Type> get_types_enregistres() { std::vector<Type::Type> v; for (const auto& pair : map) { v.push_back(pair.first); } return v; }
private:
std::unordered_map<Type::Type, Fabrique> map;///< Dictionnaire des fabriques enregistrées.
/**
* @brief Constructeur privé (Singleton).
*/
UsineInsecte() {}
// Suppression du constructeur de copie et de l'opérateur d'affectation pour garantir le singleton.
UsineInsecte(const UsineInsecte&) = delete;
UsineInsecte operator=(const UsineInsecte&) = delete;
};
#endif // USINEINSECTE_H