2016-09-01 10:15:17 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace EmotionHero\Models;
|
|
|
|
|
|
|
|
use Doctrine\ORM\Mapping as ORM;
|
|
|
|
use JMS\Serializer\Annotation as JMS;
|
|
|
|
use Gedmo\Mapping\Annotation as Gedmo;
|
|
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
2016-09-01 15:33:00 +00:00
|
|
|
use EmotionHero\Application;
|
2016-09-01 10:15:17 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* A Single play of a game: combines User, Level and time
|
|
|
|
*
|
|
|
|
* @ORM\Table(name="games")
|
|
|
|
* @ORM\Entity(repositoryClass="EmotionHero\Models\GameRepository")
|
|
|
|
*/
|
|
|
|
class Game
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var integer
|
|
|
|
*
|
|
|
|
* @ORM\Column(name="id")
|
|
|
|
* @ORM\Id
|
|
|
|
* @ORM\GeneratedValue(strategy="UUID")
|
|
|
|
*/
|
|
|
|
private $id;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @ORM\ManyToOne(targetEntity="User", inversedBy="games")
|
|
|
|
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
|
|
|
|
*/
|
|
|
|
private $user;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @ORM\ManyToOne(targetEntity="Level", inversedBy="games")
|
|
|
|
* @ORM\JoinColumn(name="level_id", referencedColumnName="id", nullable=false)
|
|
|
|
*/
|
|
|
|
private $level;
|
|
|
|
|
|
|
|
/**
|
2016-09-03 22:12:00 +00:00
|
|
|
* @ORM\OneToMany(targetEntity="Hit", mappedBy="game", fetch="EXTRA_LAZY", cascade={"persist"})
|
2016-09-01 10:15:17 +00:00
|
|
|
*/
|
|
|
|
private $hits;
|
|
|
|
|
2016-09-01 16:05:47 +00:00
|
|
|
/**
|
2016-09-01 16:16:17 +00:00
|
|
|
* @ORM\Column(type="float")
|
|
|
|
* @var float Total score
|
2016-09-01 16:05:47 +00:00
|
|
|
*/
|
2016-09-01 10:15:17 +00:00
|
|
|
private $score;
|
|
|
|
|
2016-09-03 22:12:00 +00:00
|
|
|
/**
|
|
|
|
* @var \DateTime $originalGameAt
|
|
|
|
*
|
|
|
|
* @ORM\Column(type="datetime")
|
|
|
|
*/
|
|
|
|
private $originalGameAt;
|
|
|
|
|
2016-09-01 10:15:17 +00:00
|
|
|
/**
|
|
|
|
* @var \DateTime $created
|
|
|
|
*
|
|
|
|
* @Gedmo\Timestampable(on="create")
|
|
|
|
* @ORM\Column(type="datetime")
|
|
|
|
*/
|
|
|
|
private $createdAt;
|
2016-09-01 15:33:00 +00:00
|
|
|
|
2016-09-01 16:05:47 +00:00
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
$this->hits = new ArrayCollection();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addHit(Hit $hit) {
|
|
|
|
$this->hits->add($hit);
|
|
|
|
$this->score += $hit->getScore();
|
|
|
|
}
|
|
|
|
|
2016-09-01 15:33:00 +00:00
|
|
|
/**
|
|
|
|
* Gets the value of id.
|
|
|
|
*
|
|
|
|
* @return integer
|
|
|
|
*/
|
|
|
|
public function getId()
|
|
|
|
{
|
|
|
|
return $this->id;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the value of user.
|
|
|
|
*
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public function getUser()
|
|
|
|
{
|
|
|
|
return $this->user;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the value of level.
|
|
|
|
*
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public function getLevel()
|
|
|
|
{
|
|
|
|
return $this->level;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the value of hits.
|
|
|
|
*
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public function getHits()
|
|
|
|
{
|
|
|
|
return $this->hits;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the value of score.
|
|
|
|
*
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public function getScore()
|
|
|
|
{
|
|
|
|
return $this->score;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the value of createdAt.
|
|
|
|
*
|
|
|
|
* @return \DateTime $created
|
|
|
|
*/
|
|
|
|
public function getCreatedAt()
|
|
|
|
{
|
|
|
|
return $this->createdAt;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @todo Em should not be fetched here. Quick fix for now...
|
|
|
|
*
|
|
|
|
* @JMS\VirtualProperty
|
|
|
|
* @return Position
|
|
|
|
*/
|
|
|
|
public function getPosition() {
|
|
|
|
return Application::getInstance()->getEm()->getRepository(static::class)->getPositionForGame($this);
|
|
|
|
}
|
2016-09-03 22:12:00 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the value of user.
|
|
|
|
*
|
|
|
|
* @param mixed $user the user
|
|
|
|
*
|
|
|
|
* @return self
|
|
|
|
*/
|
|
|
|
public function setUser(User $user)
|
|
|
|
{
|
|
|
|
$this->user = $user;
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the value of level.
|
|
|
|
*
|
|
|
|
* @param mixed $level the level
|
|
|
|
*
|
|
|
|
* @return self
|
|
|
|
*/
|
|
|
|
public function setLevel(Level $level)
|
|
|
|
{
|
|
|
|
$this->level = $level;
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the value of originalGameAt.
|
|
|
|
*
|
|
|
|
* @param \DateTime $date Set the time the original game was played on the device.
|
|
|
|
*
|
|
|
|
* @return self
|
|
|
|
*/
|
|
|
|
public function setOriginalGameAt(\DateTime $date)
|
|
|
|
{
|
|
|
|
$this->originalGameAt = $date;
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
2016-09-01 10:15:17 +00:00
|
|
|
}
|