1 | <?php |
||
9 | class CentreRecherche { |
||
10 | private $coef_centre; |
||
11 | private $recherche; |
||
12 | private $type; |
||
13 | |||
14 | |||
15 | //-------------------------- BUILDER ----------------------------------------------------------------------------// |
||
16 | public function __construct() { |
||
19 | //-------------------------- END BUILDER ----------------------------------------------------------------------------// |
||
20 | |||
21 | |||
22 | |||
23 | //-------------------------- GETTER ----------------------------------------------------------------------------// |
||
24 | /** |
||
25 | * @param $recherche |
||
26 | * @param $type |
||
27 | * @return int |
||
28 | * fonction qui va cehrcher le niveau de la recherche actuelle |
||
29 | * renvoi 0 si elle n'a pas été trouvée |
||
30 | */ |
||
31 | private function getNiveauRecherche($recherche, $type) { |
||
49 | |||
50 | /** |
||
51 | * @param $cout |
||
52 | * @param integer $niveau_recherche |
||
53 | * @return array |
||
54 | * fonction qui renvoi le cout d'une recherche |
||
55 | */ |
||
56 | private function getCoutRecherche($cout, $niveau_recherche) { |
||
76 | |||
77 | /** |
||
78 | * @param $temps |
||
79 | * @param int $niveau |
||
80 | * @return double fonction qui renvoi le temps qu'il faut pour effectuer une recherche |
||
81 | */ |
||
82 | private function getTempsRecherche($temps, $niveau = 0) { |
||
91 | |||
92 | /** |
||
93 | * @param $type |
||
94 | * @return array|int |
||
95 | * permet de renvoyer toutes es recherches déjà effectuées pour notre base en fonction |
||
96 | * d'un type donné |
||
97 | */ |
||
98 | public function getAllRechercheType($type) { |
||
120 | |||
121 | /** |
||
122 | * fonction qui renvoi toutes les recherches effectuées ou non dans un tableau |
||
123 | * (ne renvoi que celle que l'on peut faire en fonction du niveau du centre) |
||
124 | */ |
||
125 | public function getAllRecherche() { |
||
126 | $dbc1 = Bataille::getDb(); |
||
127 | |||
128 | //avant de récupérer toutes les recherches, on finit au cas celle en court |
||
129 | if ($this->getRecherche() == false) { |
||
|
|||
130 | $query = $dbc1->select()->from("recherche") |
||
131 | ->where("niveau_centre", "<=", Bataille::getBatiment()->getNiveauBatiment("centre_recherche")) |
||
132 | ->get(); |
||
133 | |||
134 | if ((is_array($query)) && (count($query) > 0)) { |
||
135 | $recherche = []; |
||
136 | foreach ($query as $obj) { |
||
137 | $niveau = $this->getNiveauRecherche($obj->recherche, $obj->type); |
||
138 | $niveau_recherche = $niveau; |
||
139 | |||
140 | $cout = unserialize($obj->cout); |
||
141 | $temps_recherche = $this->getTempsRecherche($obj->temps_recherche); |
||
142 | |||
143 | //si niveau == 0 ca veut dire que la recherche n'a pas encore été effectuée dans la base |
||
144 | if ($niveau > 0) { |
||
145 | $temps_recherche = $this->getTempsRecherche($temps_recherche, $niveau); |
||
146 | } |
||
147 | else { |
||
148 | $niveau_recherche = 1; |
||
149 | } |
||
150 | |||
151 | $cout = $this->getCoutRecherche($cout, $niveau_recherche); |
||
152 | |||
153 | if ($obj->type == "infanterie") { |
||
154 | $special = Bataille::getUnite()->getCaracteristiqueUnite($obj->recherche, $niveau_recherche, $obj->type); |
||
155 | } |
||
156 | |||
157 | $recherche[] = [ |
||
158 | "recherche" => $obj->recherche, |
||
159 | "type" => $obj->type, |
||
160 | "niveau" => $niveau, |
||
161 | "max_level_recherche" => $obj->max_level, |
||
162 | "cout" => $cout, |
||
163 | "temps_recherche" => DateHeure::Secondeenheure($temps_recherche), |
||
164 | "special" => $special, |
||
165 | "coef_amelioration" => Bataille::getParam("coef_niveau_unite") |
||
166 | ]; |
||
167 | } |
||
168 | } |
||
169 | |||
170 | Bataille::setValues(["centre_recherche" => $recherche]); |
||
171 | } |
||
172 | } |
||
173 | |||
174 | /** |
||
175 | * @return bool |
||
176 | * fonction qui renvoi un tableau contenant la recherche en cours si celle-ci n'est pas finie |
||
177 | * sinon elle appelle la fonction setTerminerRecherche |
||
178 | */ |
||
179 | public function getRecherche() { |
||
213 | //-------------------------- END GETTER ----------------------------------------------------------------------------// |
||
214 | |||
215 | |||
216 | |||
217 | //-------------------------- SETTER ----------------------------------------------------------------------------// |
||
218 | /** |
||
219 | * @param $recherche |
||
220 | * @param $type |
||
221 | * @return bool |
||
222 | * fonction qui va initialiser la recherche en question |
||
223 | */ |
||
224 | public function setCommencerRecherche($recherche, $type) { |
||
225 | $dbc = App::getDb(); |
||
226 | $dbc1 = Bataille::getDb(); |
||
227 | |||
228 | //on test si il n'y a pas déjà une recherche en cours |
||
229 | if ($this->getRecherche() == true) { |
||
230 | FlashMessage::setFlash("Une recherche est déjà en cours, merci d'attendre la fin de celle-ci"); |
||
231 | return false; |
||
232 | } |
||
233 | |||
234 | //on récupère la recherche dans notre base savoir si on l'a déjà recherchée pour avoir son lvl |
||
235 | $niveau_recherche = $this->getNiveauRecherche($recherche, $type); |
||
236 | |||
237 | //récupération du cout initial plus temps de recherche initial pour calculer les bon en fonction |
||
238 | //du lvl du centre + du niveau actuel de la recherche |
||
239 | $query = $dbc1->select() |
||
240 | ->from("recherche") |
||
241 | ->where("recherche", "=", $recherche, "AND") |
||
242 | ->where("type", "=", $type) |
||
243 | ->get(); |
||
244 | |||
245 | if ((is_array($query)) && (count($query) == 1)) { |
||
246 | foreach ($query as $obj) { |
||
247 | $cout = unserialize($obj->cout); |
||
248 | $temps_recherche = $obj->temps_recherche; |
||
249 | $max_level_recherche = $obj->max_level; |
||
250 | } |
||
251 | } |
||
252 | |||
253 | if ($niveau_recherche >= $max_level_recherche) { |
||
254 | FlashMessage::setFlash("Cette unité est déjà au niveau maxium"); |
||
255 | return false; |
||
256 | } |
||
257 | |||
258 | if ($niveau_recherche > 0) { |
||
259 | $cout = $this->getCoutRecherche($cout, $niveau_recherche); |
||
260 | $temps_recherche = $this->getTempsRecherche($temps_recherche, $niveau_recherche); |
||
261 | } |
||
262 | |||
263 | //on test si assez de ressources pour effectuer la recherche |
||
264 | $eau = Bataille::getTestAssezRessourceBase("eau", $cout["eau"]["ressource"]); |
||
265 | $electricite = Bataille::getTestAssezRessourceBase("electricite", $cout["electricite"]["ressource"]); |
||
266 | $fer = Bataille::getTestAssezRessourceBase("fer", $cout["fer"]["ressource"]); |
||
267 | $fuel = Bataille::getTestAssezRessourceBase("fuel", $cout["fuel"]["ressource"]); |
||
268 | |||
269 | |||
270 | if (($eau["class"] || $electricite["class"] || $fer["class"] || $fuel["class"]) == "rouge" ) { |
||
271 | FlashMessage::setFlash("Pas assez de ressources pour effectuer cette recherche"); |
||
272 | return false; |
||
273 | } |
||
274 | |||
275 | //on retire les ressources |
||
276 | Bataille::getRessource()->setUpdateRessource($cout["eau"]["ressource"], $cout["electricite"]["ressource"], $cout["fer"]["ressource"], $cout["fuel"]["ressource"], 0, "-"); |
||
277 | |||
278 | $date_fin = Bataille::getToday()+$temps_recherche; |
||
279 | |||
280 | $dbc->insert("recherche", $recherche) |
||
281 | ->insert("type", $type) |
||
282 | ->insert("date_fin", $date_fin) |
||
283 | ->insert("ID_base", Bataille::getIdBase()) |
||
284 | ->into("_bataille_recherche") |
||
285 | ->set(); |
||
286 | |||
287 | return true; |
||
288 | } |
||
289 | |||
290 | /** |
||
291 | * @param $id_recherche |
||
292 | * fonction qui va terminer une recherche en fonction de son ID |
||
293 | */ |
||
294 | private function setTerminerRecherche($id_recherche) { |
||
319 | //-------------------------- END SETTER ----------------------------------------------------------------------------// |
||
320 | |||
321 | } |
When comparing two booleans, it is generally considered safer to use the strict comparison operator.