libpairtwo/src/Player.php

155 lines
3.7 KiB
PHP
Raw Normal View History

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) {
$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-02-11 17:37:30 +01:00
}