2019-02-01 15:53:39 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Created by PhpStorm.
|
|
|
|
* User: jeroen
|
|
|
|
* Date: 1/02/19
|
|
|
|
* Time: 11:26
|
|
|
|
*/
|
|
|
|
|
2019-03-20 17:33:09 +01:00
|
|
|
namespace JeroenED\Libpairtwo;
|
2019-02-01 15:53:39 +01:00
|
|
|
|
|
|
|
use JeroenED\Libpairtwo\Models\Player as PlayerModel;
|
|
|
|
|
2019-05-01 16:04:37 +02:00
|
|
|
/**
|
|
|
|
* Class Player
|
|
|
|
* @package JeroenED\Libpairtwo
|
|
|
|
*/
|
2019-02-11 17:37:30 +01:00
|
|
|
class Player extends PlayerModel
|
2019-02-01 15:53:39 +01:00
|
|
|
{
|
2019-04-20 16:55:39 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a pairing to the tournament
|
|
|
|
*
|
|
|
|
* @param Pairing $pairing
|
|
|
|
*/
|
|
|
|
public function addPairing(Pairing $pairing)
|
|
|
|
{
|
|
|
|
$newArray = $this->GetPairings();
|
|
|
|
$newArray[] = $pairing;
|
|
|
|
$this->setPairings($newArray);
|
|
|
|
}
|
2019-05-01 16:04:37 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns an array of Player objects where name matches $search
|
|
|
|
*
|
|
|
|
* @param string $search
|
|
|
|
* @param Tournament $tournament
|
|
|
|
* @return Player[]
|
|
|
|
*/
|
|
|
|
public static function getPlayersByName(string $search, Tournament $tournament): array
|
|
|
|
{
|
|
|
|
/** @var Player[] */
|
|
|
|
$players = $tournament->getPlayers();
|
|
|
|
|
|
|
|
/** @var Player[] */
|
|
|
|
$return = [];
|
|
|
|
|
|
|
|
foreach ($players as $player) {
|
|
|
|
if (fnmatch($search, $player->getName())) {
|
|
|
|
$return[] = $player;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $return;
|
|
|
|
}
|
2019-05-29 18:09:19 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $type
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public function getElo(string $type): int
|
|
|
|
{
|
|
|
|
return $this->getElos()[$type];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $type
|
|
|
|
* @param int $value
|
|
|
|
* @return Player
|
|
|
|
*/
|
|
|
|
public function setElo(string $type, int $value): Player
|
|
|
|
{
|
|
|
|
$currentElos = $this->getElos();
|
|
|
|
$currentElos[$type] = $value;
|
|
|
|
$this->setElos($currentElos);
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $type
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function getId(string $type): string
|
|
|
|
{
|
|
|
|
return $this->getElos()[$type];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $type
|
|
|
|
* @param string $value
|
|
|
|
* @return Player
|
|
|
|
*/
|
|
|
|
public function setId(string $type, string $value): Player
|
|
|
|
{
|
|
|
|
$currentIds = $this->getIds();
|
|
|
|
$currentIds[$type] = $value;
|
|
|
|
$this->setIds($currentIds);
|
|
|
|
return $this;
|
|
|
|
}
|
2019-05-30 21:01:30 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public function getNoOfWins()
|
|
|
|
{
|
|
|
|
$wins = 0;
|
|
|
|
foreach ($this->getPairings() as $pairing) {
|
|
|
|
if (array_search($pairing->getResult(), Constants::Won) !== false) {
|
|
|
|
$wins++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $wins;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2019-05-30 21:33:27 +02:00
|
|
|
* @return float
|
2019-05-30 21:01:30 +02:00
|
|
|
*/
|
|
|
|
public function getPoints(): float
|
|
|
|
{
|
|
|
|
$points = 0;
|
|
|
|
foreach ($this->getPairings() as $pairing) {
|
|
|
|
if (array_search($pairing->getResult(), Constants::Won) !== false) {
|
|
|
|
$points = $points + 1;
|
|
|
|
} elseif (array_search($pairing->getResult(), Constants::Draw) !== false) {
|
|
|
|
$points = $points + 0.5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $points;
|
|
|
|
}
|
2019-05-30 21:10:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2019-05-30 21:33:27 +02:00
|
|
|
* @return int
|
2019-05-30 21:10:31 +02:00
|
|
|
*/
|
2019-06-01 13:37:50 +02:00
|
|
|
public function getPerformance(string $type, int $unratedElo) : float
|
2019-05-30 21:10:31 +02:00
|
|
|
{
|
|
|
|
$total = 0;
|
|
|
|
$opponents = 0;
|
|
|
|
foreach ($this->getPairings() as $pairing) {
|
2019-06-01 13:37:50 +02:00
|
|
|
if (array_search($pairing->getResult(), Constants::NotPlayed) === false) {
|
2019-05-31 22:45:26 +02:00
|
|
|
$opponentElo = $pairing->getOpponent()->getElo($type);
|
2019-06-01 13:37:50 +02:00
|
|
|
$opponentElo = $opponentElo != 0 ? $opponentElo : $unratedElo;
|
|
|
|
if (array_search($pairing->getResult(), Constants::Won) !== false) {
|
2019-05-31 10:24:06 +02:00
|
|
|
$total += $opponentElo + 400;
|
2019-06-01 13:37:50 +02:00
|
|
|
} elseif (array_search($pairing->getResult(), Constants::Lost) !== false) {
|
2019-05-31 10:24:06 +02:00
|
|
|
$total += $opponentElo - 400;
|
2019-06-01 13:37:50 +02:00
|
|
|
} elseif (array_search($pairing->getResult(), Constants::Draw) !== false) {
|
2019-05-31 10:24:06 +02:00
|
|
|
$total += $opponentElo;
|
2019-05-30 21:10:31 +02:00
|
|
|
}
|
|
|
|
$opponents++;
|
|
|
|
}
|
|
|
|
}
|
2019-06-01 13:37:50 +02:00
|
|
|
return round($total / $opponents);
|
2019-05-30 21:10:31 +02:00
|
|
|
}
|
2019-06-05 13:23:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public function getPlayedGames(): int
|
|
|
|
{
|
|
|
|
$total = 0;
|
|
|
|
foreach ($this->getPairings() as $pairing) {
|
|
|
|
if (array_search($pairing->getResult(), Constants::Played) !== false) {
|
|
|
|
$total++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $total;
|
|
|
|
}
|
2019-02-11 17:37:30 +01:00
|
|
|
}
|