Add GET /interface/games/last

This commit is contained in:
Ruben 2016-11-03 02:17:16 +01:00
parent cc55dec827
commit cc5c7ea11c
2 changed files with 89 additions and 0 deletions

View file

@ -24,6 +24,85 @@ class InterfaceControllerProvider implements ControllerProviderInterface
// creates a new controller based on the default route // creates a new controller based on the default route
$controllers = $app['controllers_factory']; $controllers = $app['controllers_factory'];
// /interface/game/last
$controllers->get('/games/last', function (Application $app) {
$gameRepo = $this->_eh->getEm()->getRepository(\EmotionHero\Models\Game::class);
/* @var $hitRepo EmotionHero\Models\HitRepository */
$hitRepo = $this->_eh->getEm()->getRepository(\EmotionHero\Models\Hit::class);
$game = $gameRepo->findOneBy([], ['id'=>'DESC']);
// id
// score
// achievements, level, time, ranking, hits
$output = [
'id' => $game->getId(),
'level' => $game->getLevel()->getName(),
'score' => $game->getScore(),
'achievements' => $game->getAchievements()->count(),
'time' => $game->getCreatedAt()->format("Y-m-d H:i:s"),
'hits' => [],
];
// of one hit is on the same time as another, skip it
// as it is part of the same target group (which has been
// taken into account)
$times = [];
foreach ($game->getHits() as $hit) {
$time = $hit->getTarget()->getTime();
if(in_array($time, $times)) {
continue;
}
$times[] = $time;
$targetSet = $hitRepo->getTargetSetForTarget($hit->getTarget());
$betterHit = $hitRepo->getBetterHit($hit);
// score, emotions, expressions, points
$hitOutput = [
'id' => $hit->getId(),
'score' => $hit->getScore(),
'emotions' => [],
'expressions' => [],
'points' => [],
];
foreach($targetSet as $target) {
$hitOutput['emotions'][$target->getEmotion()->getName()]['target_value'] = $target->getScore();
$hitOutput['emotions'][$target->getEmotion()->getName()]['player_value'] = $hit->getEmotions()->getEmotionScore($target->getEmotion());
}
$expressions = array_keys($hit->getExpressions()::$EXPRESSIONS_2ND_PERSON);
sort($expressions);
foreach ($expressions as $expression) {
$score = $hit->getExpressions()->getExpressionScore($expression);
// if there is no better hit, better score == score
$betterScore = $betterHit ? $betterHit->getExpressions()->getExpressionScore($expression) : $score;
$hitOutput['expressions'][$expression]['target_value'] = $betterScore;
$hitOutput['expressions'][$expression]['player_value'] = $score;
}
foreach($hit->getPoints()->getNormalisedPoints() as $i => $point) {
$hitOutput['points']['player'][$i] = ['x'=> $point->getX(), 'y' => $point->getY()];
}
if(!empty($betterHit)) {
foreach($betterHit->getPoints()->getNormalisedPoints() as $i => $point) {
$hitOutput['points']['target'][$i] = ['x'=> $point->getX(), 'y' => $point->getY()];
}
}
$output['hits'][$time] = $hitOutput;
}
return $app['serializer']->serialize($output, 'json');
});
// /interface/images
$controllers->get('/images', function (Application $app) { $controllers->get('/images', function (Application $app) {
$getEmoBlocks = function($emotion, $feature, $steps = 6) { $getEmoBlocks = function($emotion, $feature, $steps = 6) {

View file

@ -92,4 +92,14 @@ class Level
{ {
return $this->id; return $this->id;
} }
/**
* Gets the Name of the level.
*
* @return string
*/
public function getName()
{
return $this->name;
}
} }