167 lines
4.0 KiB
PHP
167 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace MCTeam\Common;
|
|
|
|
use FML\Controls\Frame;
|
|
use FML\Controls\Label;
|
|
use FML\Controls\Quad;
|
|
use FML\Controls\Quads\Quad_Bgs1InRace;
|
|
use ManiaControl\ManiaControl;
|
|
use ManiaControl\Players\Player;
|
|
use ManiaControl\Utils\Formatter;
|
|
|
|
/**
|
|
* ManiaControl Local Records Plugin
|
|
*
|
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
|
* @copyright 2014-2019 ManiaControl Team
|
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
|
*/
|
|
class RecordWidget {
|
|
|
|
private $maniaControl;
|
|
private $lineHeight = 4.;
|
|
private $width = 40.;
|
|
|
|
/**
|
|
* RecordWidget constructor.
|
|
*
|
|
* @param \ManiaControl\ManiaControl $maniaControl
|
|
*/
|
|
public function __construct(ManiaControl $maniaControl) {
|
|
$this->maniaControl = $maniaControl;
|
|
}
|
|
|
|
/**
|
|
* Returns a Frame with one line of the Record
|
|
*
|
|
* @param $record
|
|
* @param \ManiaControl\Players\Player|null $player
|
|
* @return \FML\Controls\Frame
|
|
*/
|
|
public function generateRecordLineFrame($record, Player $player = null) {
|
|
$width = $this->width;
|
|
$lineHeight = $this->lineHeight;
|
|
$largeNumberDiff = 0;
|
|
|
|
$recordFrame = new Frame();
|
|
|
|
if ($record->rank > 999) {
|
|
$largeNumberDiff = 0.03;
|
|
}
|
|
|
|
$rankLabel = new Label();
|
|
$recordFrame->addChild($rankLabel);
|
|
$rankLabel->setHorizontalAlign($rankLabel::LEFT);
|
|
$rankLabel->setX($width * -0.49);
|
|
$rankLabel->setSize($width * (0.09 + $largeNumberDiff), $lineHeight);
|
|
$rankLabel->setTextSize(1);
|
|
$rankLabel->setTextPrefix('$o');
|
|
$rankLabel->setText($record->rank);
|
|
$rankLabel->setTextEmboss(true);
|
|
|
|
$nameLabel = new Label();
|
|
$recordFrame->addChild($nameLabel);
|
|
$nameLabel->setHorizontalAlign($nameLabel::LEFT);
|
|
$nameLabel->setX($width * (-0.39 + $largeNumberDiff));
|
|
$nameLabel->setSize($width * (0.6 - $largeNumberDiff), $lineHeight);
|
|
$nameLabel->setTextSize(1);
|
|
$nameLabel->setText($record->nickname);
|
|
$nameLabel->setTextEmboss(true);
|
|
|
|
$timeLabel = new Label();
|
|
$recordFrame->addChild($timeLabel);
|
|
$timeLabel->setHorizontalAlign($timeLabel::RIGHT);
|
|
$timeLabel->setX($width * 0.49);
|
|
$timeLabel->setSize($width * 0.27, $lineHeight);
|
|
$timeLabel->setTextSize(1);
|
|
if (isset($record->time)) {
|
|
$timeLabel->setText(Formatter::formatTime($record->time));
|
|
} else {
|
|
$timeLabel->setText(Formatter::formatTime($record->best));
|
|
}
|
|
$timeLabel->setTextEmboss(true);
|
|
|
|
if ($player && $player->index == $record->playerIndex) {
|
|
$quad = new Quad();
|
|
$recordFrame->addChild($quad);
|
|
$quad->setStyles(Quad_Bgs1InRace::STYLE, Quad_Bgs1InRace::SUBSTYLE_BgCardList);
|
|
$quad->setSize($width, $lineHeight);
|
|
}
|
|
|
|
return $recordFrame;
|
|
}
|
|
|
|
/**
|
|
* Returns a Frame with Records to a given limit
|
|
*
|
|
* @param $records
|
|
* @param $limit
|
|
* @param \ManiaControl\Players\Player|null $player
|
|
* @return \FML\Controls\Frame
|
|
*/
|
|
public function generateRecordsFrame($records, $limit, Player $player = null) {
|
|
$lineHeight = $this->lineHeight;
|
|
|
|
$frame = new Frame();
|
|
|
|
foreach ($records as $index => $record) {
|
|
if ($index >= $limit) {
|
|
break;
|
|
}
|
|
|
|
$y = -8. - $index * $lineHeight;
|
|
|
|
$recordFrame = $this->generateRecordLineFrame($record, $player);
|
|
$frame->addChild($recordFrame);
|
|
$recordFrame->setPosition(0, $y);
|
|
|
|
}
|
|
|
|
return $frame;
|
|
}
|
|
|
|
/**
|
|
* Returns the default separator Quad for the RecordWidget
|
|
*
|
|
* @param $width
|
|
* @return \FML\Controls\Quad
|
|
*/
|
|
public function getLineSeparatorQuad($width) {
|
|
$quad = new Quad();
|
|
$quad->setStyles(Quad_Bgs1InRace::STYLE, Quad_Bgs1InRace::SUBSTYLE_BgCardList);
|
|
$quad->setSize($width, 0.4);
|
|
|
|
return $quad;
|
|
}
|
|
|
|
/**
|
|
* @return float
|
|
*/
|
|
public function getLineHeight() {
|
|
return $this->lineHeight;
|
|
}
|
|
|
|
/**
|
|
* @param float $lineHeight
|
|
*/
|
|
public function setLineHeight($lineHeight) {
|
|
$this->lineHeight = $lineHeight;
|
|
}
|
|
|
|
/**
|
|
* @return float
|
|
*/
|
|
public function getWidth() {
|
|
return $this->width;
|
|
}
|
|
|
|
/**
|
|
* @param float $width
|
|
*/
|
|
public function setWidth($width) {
|
|
$this->width = $width;
|
|
}
|
|
|
|
|
|
} |