/** * @TODO бонусы и штрафы за коды * @param Game $game * @param Team $team * @return array */ public function getTotalTime(Game $game, Team $team) { $summaryTime = 0; $summaryBonus = 0; $summaryPenalty = 0; $sequence = $this->manager->getRepository('sdGameBundle:TeamTaskSequence')->findBy(['team' => $team, 'completeType' => [TeamTaskSequence::COMPLETE_CODE, TeamTaskSequence::COMPLETE_MANUAL, TeamTaskSequence::COMPLETE_TIMEOUT], 'game' => $game]); foreach ($sequence as $teamTask) { switch ($teamTask->getCompleteType()) { /** @noinspection PhpMissingBreakStatementInspection */ case TeamTaskSequence::COMPLETE_TIMEOUT: $summaryPenalty += $teamTask->getTask()->getPenaltyTime() * 60; case TeamTaskSequence::COMPLETE_CODE: case TeamTaskSequence::COMPLETE_MANUAL: $summaryTime += $teamTask->getCompleted()->getTimestamp() - $teamTask->getStarted()->getTimestamp(); break; default: continue; } } foreach ($game->getTasks() as $task) { if ($task->getType() === Task::TYPE_FREE && $this->isLevelCompleted($task, $team)) { $summaryBonus += $task->getBonusTime() * 60; } } return ['time' => $summaryTime, 'bonus' => $summaryBonus, 'penalty' => $summaryPenalty]; }
/** * @param Game $object */ public function preUpdate($object) { $object->setTasks($object->getTasks()); }