/** * Tranfère l'unité vers un autre qg * @param Qg $qg * @return void */ public function transfert(Qg $qg) { /* * Transfert de l'unité */ $qgSource = $this->getQg(); $this->setIdQg($this->getId()); $this->save(); $qg->resetCacheUnites(); $qgSource->resetCacheUnites(); /* * Transfert des compétences du Qg si le Qg source disparaît */ if ($qgSource->getUnites()->count() == 0) { if ($qgSource->getNiveau() > $qg->getNiveau()) { $qg->setNiveau($qgSource->getNiveau()); $qg->save(); } $qgSource->delete(); } }
/** * En cas de stack, dit qui a la priorité bouger entre $qg1 et $qg2 * Ordre des priorités : * - mission * - taille * - niveau * - rand * @param Qg $qg1 * @param Qg $qg2 * @return int -1 ou 1 . 1 : $qg2 doit bouger. -1 : $qg1 doit bouger */ public static function quiBouge(Qg $qg1, Qg $qg2) { if ($qg1->getMission()->getRule('ordreResolution') < $qg2->getMission()->getRule('ordreResolution')) { return 1; } elseif ($qg1->getMission()->getRule('ordreResolution') > $qg2->getMission()->getRule('ordreResolution')) { return -1; } else { if ($qg1->getUnites()->count() > $qg2->getUnites()->count()) { return 1; } elseif ($qg1->getUnites()->count() < $qg2->getUnites()->count()) { return -1; } if ($qg1->getNiveau() > $qg2->getNiveau()) { return 1; } elseif ($qg1->getNiveau() < $qg2->getNiveau()) { return -1; } else { return rand(0, 1) * 2 - 1; } } }