<?php require __DIR__ . '/../bootstrap.php'; error_reporting(E_ALL);ini_set('display_errors', true); $em = \EmotionHero\Application::getInstance()->getEm(); /* @var $hitRepo EmotionHero\Models\HitRepository */ $hitRepo = $em->getRepository(\EmotionHero\Models\Hit::class); /* @var $currentHit \EmotionHero\Models\Hit */ $currentHit = $hitRepo->findOneBy(['hasImage'=>true], ['id'=>'DESC']); $targetSet = $hitRepo->getTargetSetForTarget($currentHit->getTarget()); $betterHit = $hitRepo->getBetterHit($currentHit); $printEmoBlocks = function($emotion, $feature, $steps = 6) use($em) { foreach(range(0, 100, 100/($steps-1)) as $i) { /* @var $hitRepo EmotionHero\Models\HitRepository */ $hitRepo = $em->getRepository(EmotionHero\Models\Hit::class); // if($feature == 'nose'){ // $items = [992, 1035, 701, 888, 671, 906, 693, 725, 762, 666, 751,992,728]; // $hit = $hitRepo->find($items[array_rand($items)]); // } elseif($feature == 'mouth_left') { // $items = [992, 1035, 1034, 888]; // $hit = $hitRepo->find($items[array_rand($items)]); // } else{ $hit = $hitRepo->getClosestHitWithImage($emotion, $i); // } $img = $hit->getFeatureImgAsString($feature); $score = $hit->getEmotions()->getEmotionScore($emotion); $percentage = sprintf("%.0f %%",$score); echo <<< EOSNIPPET <div class="block"> <img src="data:image/x-icon;base64,$img" title="{$hit->getId()}"> <span class="perc">$percentage</span> </div> EOSNIPPET; } }; ?> <html> <head> <title>Emotion Hero</title> </head> <meta http-equiv="refresh" content="30" /> <style type="text/css"> html{ height:100%; overflow:hidden; } body{ background:blue; font-family:"Unifont"; font-weight:bold; font-size:1vw; margin:0.5em; font-family: sans-serif; } body.presentation{ background:black; } h3{ margin:0.5%; text-align:center; /*! background: white; */ /*! color: black; */ } h3 span{ background:none; color:white; padding:0.2%; /*! border-bottom: solid 0.2em white; */ } .block{ width:100%; font-size:80%; } .mouth .emo-block{ width:50%; float:left; height:5em; } .mouth .emotitle{ display:block; width:14%; margin-right:0.14%; margin-left:0.14%; float:left; font-size:80%; padding-top:2.5%; } .mouth .block { width:14%; margin-right:0.14%; margin-left:0.14%; float:left; } /*.emotitle span:before{content:"‹";} .emotitle span:after{content:"›";}*/ .emotitle{/*! font-style:italic; *//*! display: none; */} .emotitle:before{content:"«";} .emotitle:after{content:"»";} img{ width:100%; /*! filter:saturate(0%); */ /*! mix-blend-mode: multiply; */ /*mix-blend-mode: exclusion;*/ } .perc{ display:block; width:100%; text-align:center; } .emo-block{ float:left; text-align:center; } .brows .emo-block { width:23%; margin-left:1%; margin-right:1%; height: 22em; } .nose .emo-block { width:12%; margin-left:1.14%; margin-right:1.14%; } .nose .emotitle{ font-size:80%; } .emo-block-emos{ position:relative; } .emo{ text-align:center; float:left; background:black; color: white; } .brows{ width:40%; margin-right:1%; } .nose{ width:40%; margin-right:1%; } .mouth{ width:81%; margin-top:1%; } img.curImg{ position:absolute; left:0; mix-blend-mode:difference; } .currentHit svg{ border-top: 1em solid blue; margin: 0px -0.5em; width: 100%; padding: 0.5em; width:100%; } .presentation .currentHit svg { border-top: solid 0.1em white; } .nose .block{position:relative;margin-bottom:2%;} .nose .block span{position:absolute;top:0;right:0;color:white;text-align:right;padding:0.5%;} .brows .emo-block.brow_explainer { margin-top:3%;font-size:85%; border-left: 0.3em solid blue; width: 22%; padding-left: 0.4em; margin-left: -0.1em; } .presentation .brows .emo-block.brow_explainer{ border-left-color: black; } .brow_explainer img{filter:unset;margin-bottom:5%;} .brow_explainer ol{ margin:0;padding:0; counter-reset:li 4; } .brow_explainer li{ text-align:left; margin-bottom:5%; list-style:none; } .brow_explainer li:before{ content:counter(li) ". "; /* Use the counter as content */ counter-increment:li; /* Increment the counter by 1 */ color:red; } .currentHit{ width:17%; position:absolute; right:0.5em; top:0.5em; background:yellow; padding:0.5%; } .presentation .currentHit { background:none; color:white; } .presentation .currentHit h3 span{ color:white; background: none; } .currentHit h3 span{ color:yellow; } .presentation .currentHit h3 span{ color:white; } .currentHit h3 .last{color:red;} .currentHit h3 .vs{background:none;color:black;padding-left:0.5em;padding-right:0.5em;} .currentHit h3 .perfect{} ul{ font-size:80%; list-style:none; margin:0; padding:0; } .presentation ul{ font-size:1.1em; } .currentHit li{ clear:both; } .currentHit li .value{ float:right; } .currentHit li .diff{ float:right; clear:both; font-size:72%; color:gray; } .currentHit li .diff.negative{ color:red; } .currentHit li .diff.positive{ color:green; } .presentation .currentHit li .diff.positive{ color:yellow; } .currentHit p { margin: 0 -0.5em 1% -0.5em; border-bottom: solid 1em blue; padding: 0.5em; text-align: center; } .presentation .currentHit p { border-bottom: solid 0.1em white; } </style> <body class='presentation'> <?php echo "<div class='brows emo'><h3><span>eye brows</span></h3>"; foreach(EmotionHero\Models\Emotions::$EMOTIONS as $emotion) { echo "<div class='emo-block'><span class='emotitle'>$emotion</span><div class='emo-block-emos'>"; $printEmoBlocks($emotion, 'brows'); //echo "<img class='curImg' src=\"data:image/x-icon;base64,{$currentHit->getFeatureImgAsString("brows")}\" title=\"{$currentHit->getId()}\" style=\"top:{$currentHit->getEmotions()->getEmotionScore($emotion)}%\">"; echo "</div></div>"; } ?> <div class="emo-block brow_explainer"> <img src="brow_explain_color.png"> <ol start="5"> <li>Outer Right Brow Corner</li> <li>Right Brow Center</li> <li>Inner Right Brow Corner</li> <li>Inner Left Brow Corner</li> <li>Left Brow Center</li> <li>Outer Left Brow Corner</li> </ol> </div> <?php echo "</div>"; // .brows echo "<div class='nose emo'><h3><span>nose</span></h3>"; foreach(EmotionHero\Models\Emotions::$EMOTIONS as $emotion) { echo "<div class='emo-block'><span class='emotitle'>$emotion</span><div class='emo-block-emos'>"; $printEmoBlocks($emotion, 'nose'); //echo "<img class='curImg' src=\"data:image/x-icon;base64,{$currentHit->getFeatureImgAsString("nose")}\" title=\"{$currentHit->getId()}\" style=\"top:{$currentHit->getEmotions()->getEmotionScore($emotion)}%\">"; echo "</div></div>"; } echo "</div>"; // .nose echo "<div class='mouth emo'><h3><span>mouth</span></h3>"; foreach(EmotionHero\Models\Emotions::$EMOTIONS as $emotion) { echo "<div class='emo-block'><span class='emotitle'>$emotion</span><div class='emo-block-emos'>"; $printEmoBlocks($emotion, 'mouth_left'); echo "</div></div>"; } echo "</div>"; // .mouth echo "<div class='currentHit'>"; echo "<h3><span class='last'>last</span><span class='vs'>vs</span><span class='perfect'>perfect</span></h3>"; // echo "<p>".\PrettyDateTime\PrettyDateTime::parse($currentHit->getGame()->getOriginalGameAt())."</p>"; echo "<p>aim:"; foreach($targetSet as $target) { echo " {$target->getScore()}% {$target->getEmotion()->getName()}"; } echo "</p>"; if(empty($betterHit)) { echo "<p>Best attempt so far</p>"; } //echo "<p>aim: {$currentHit->getTarget()->getScore()}% ".$currentHit->getTarget()->getEmotion()->getName()."</p>"; echo "<ul>"; $expressions = array_keys($currentHit->getExpressions()::$EXPRESSIONS_2ND_PERSON); sort($expressions); foreach ($expressions as $expression) { $currentScore = $currentHit->getExpressions()->getExpressionScore($expression); echo "<li>"; echo "<span class='name'>$expression</span>"; echo "<span class='value'>". sprintf("%.5f", $currentScore)." %</span>"; if(!empty($betterHit)) { $betterScore = $betterHit->getExpressions()->getExpressionScore($expression); $diff = $betterScore - $currentScore; if ($diff > 0) { $diffclass = "positive"; } elseif ($diff < 0) { $diffclass = "negative"; } echo "<span class='diff $diffclass'>". sprintf("%+.5f", $diff)." %</span>"; } echo "</li>"; } echo "</ul>"; $circles = ""; if(!empty($betterHit)) { foreach($betterHit->getPoints()->getNormalisedPoints() as $i => $point) { /* $circles .= '<circle style="fill:gray;" id="point'.$i.'" cx="'.$point->getX().'" cy="'.$point->getY().'" r="0.7" />';*/ $circles .= '<text style="fill:green;font-size:4" id="point'.$i.'" x="'.$point->getX().'" y="'.$point->getY().'" r="0.7">'.$i.'</text>'; } } foreach($currentHit->getPoints()->getNormalisedPoints() as $i => $point) { $circles .= '<text style="fill:red;font-size:4" id="point'.$i.'" x="'.$point->getX().'" y="'.$point->getY().'" r="0.7">'.$i.'</text>'; } echo <<< EOSVG <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="-4 -4 108 108" id="svg2" version="1.1"> <g id="layer1"> $circles </g> </svg> EOSVG; echo "</div>"; // .currentHit ?> </body> </html>