Unified usages of Karma-Gauge in new ElementBuilder
This commit is contained in:
parent
c2064c8d78
commit
66eb685688
@ -1,3 +1,8 @@
|
|||||||
|
###v0.253###
|
||||||
|
#Changes
|
||||||
|
- //restart got replaced by //reboot
|
||||||
|
- Unified Creations of a Karma-Gauge in new Manialinks\ElementBuilder
|
||||||
|
|
||||||
###v0.252###
|
###v0.252###
|
||||||
#Additions
|
#Additions
|
||||||
- Ingame-Changelog
|
- Ingame-Changelog
|
||||||
|
@ -294,31 +294,13 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Map Karma
|
//Map Karma
|
||||||
$karma = $map->ratingVoteAverage / 100;
|
$karmaGauge = $this->maniaControl->getManialinkManager()->getElementBuilder()->buildKarmaGauge(
|
||||||
$voteCount = $map->ratingVoteCount;
|
$map,
|
||||||
if (is_numeric($karma) && $voteCount > 0) {
|
20,
|
||||||
$karmaGauge = new Gauge();
|
10
|
||||||
|
);
|
||||||
$mapFrame->addChild($karmaGauge);
|
$mapFrame->addChild($karmaGauge);
|
||||||
$karmaGauge->setZ(-0.05);
|
|
||||||
$karmaGauge->setX($posX + 87);
|
$karmaGauge->setX($posX + 87);
|
||||||
$karmaGauge->setY(0.2);
|
|
||||||
$karmaGauge->setSize(20, 10);
|
|
||||||
$karmaGauge->setDrawBackground(false);
|
|
||||||
$karma = floatval($karma);
|
|
||||||
$karmaGauge->setRatio($karma + 0.15 - $karma * 0.15);
|
|
||||||
$karmaColor = ColorUtil::floatToStatusColor($karma);
|
|
||||||
$karmaGauge->setColor($karmaColor . '9');
|
|
||||||
|
|
||||||
$karmaLabel = new Label();
|
|
||||||
$mapFrame->addChild($karmaLabel);
|
|
||||||
$karmaLabel->setZ(1);
|
|
||||||
$karmaLabel->setX($posX + 87);
|
|
||||||
$karmaLabel->setSize(20 * 0.9, 5);
|
|
||||||
$karmaLabel->setY(-0.2);
|
|
||||||
$karmaLabel->setTextSize(0.9);
|
|
||||||
$karmaLabel->setTextColor('000');
|
|
||||||
$karmaLabel->setText(' ' . round($karma * 100.) . '% (' . $voteCount . ')');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$posY -= 4;
|
$posY -= 4;
|
||||||
|
376
core/Manialinks/ElementBuilder.php
Normal file
376
core/Manialinks/ElementBuilder.php
Normal file
@ -0,0 +1,376 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace ManiaControl\Manialinks;
|
||||||
|
|
||||||
|
use FML\Controls\Frame;
|
||||||
|
use FML\Controls\Gauge;
|
||||||
|
use FML\Controls\Labels\Label_Button;
|
||||||
|
use FML\Controls\Labels\Label_Text;
|
||||||
|
use FML\Controls\Quads\Quad_BgsPlayerCard;
|
||||||
|
use FML\ManiaLink;
|
||||||
|
use FML\Script\Features\Paging;
|
||||||
|
use ManiaControl\ManiaControl;
|
||||||
|
use ManiaControl\ManiaExchange\MXMapInfo;
|
||||||
|
use ManiaControl\Manialinks\ManialinkManager;
|
||||||
|
use ManiaControl\Maps\Map;
|
||||||
|
use ManiaControl\Players\Player;
|
||||||
|
use ManiaControl\Utils\ColorUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ElementBuilder Class
|
||||||
|
*
|
||||||
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
|
* @copyright 2014-2020 ManiaControl Team
|
||||||
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
|
*/
|
||||||
|
class ElementBuilder {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
*/
|
||||||
|
const COLUMN_ACTION_WIDTH = 4;
|
||||||
|
const COLUMN_ACTION_WIDTH_MIN = 20;
|
||||||
|
const COLUMN_ENTRY_WIDTH = 4;
|
||||||
|
const FOOTER_BUTTON_HEIGHT = 4;
|
||||||
|
const FOOTER_HEIGHT = 5;
|
||||||
|
const FOOTER_SPACING = 2;
|
||||||
|
const FOOTER_SPACING_BOTTOM = 10;
|
||||||
|
const HEADER_HEIGHT = 5;
|
||||||
|
const HEADER_SPACING = 2;
|
||||||
|
const HEADER_WIDTH_FACTOR = 0.9;
|
||||||
|
const ROW_LINE_HEIGHT = 4;
|
||||||
|
const ROW_SPACING_BOTTOM = 5;
|
||||||
|
const ROW_SPACING_SIDES = 2;
|
||||||
|
const ROW_SPACING_TOP = 5;
|
||||||
|
|
||||||
|
const DEFAULT_KARMA_PLUGIN = 'MCTeam\KarmaPlugin';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private Properties
|
||||||
|
*/
|
||||||
|
/** @var array $actions */
|
||||||
|
private $actions = array();
|
||||||
|
/** @var array $columns */
|
||||||
|
private $columns = array();
|
||||||
|
/** @var callable $entryCurrent */
|
||||||
|
private $entryCurrent = null;
|
||||||
|
/** @var array $footerButtons */
|
||||||
|
private $footerButtons = array();
|
||||||
|
/** @var Frame $headerFrame */
|
||||||
|
private $headerFrame = null;
|
||||||
|
/** @var array $rowData */
|
||||||
|
private $rowData = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a new ElementBuilder instance
|
||||||
|
*
|
||||||
|
* @param ManiaControl $maniaControl
|
||||||
|
*/
|
||||||
|
public function __construct(ManiaControl $maniaControl) {
|
||||||
|
$this->maniaControl = $maniaControl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds actions to list entry
|
||||||
|
* @param string $icon
|
||||||
|
* @param bool $confirmation
|
||||||
|
* @param callable $tooltipFunction
|
||||||
|
*/
|
||||||
|
public function addAction($icon, $confirmation, $tooltipFunction) {
|
||||||
|
array_push($this->actions, array($icon, $confirmation, $tooltipFunction));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a column to the list
|
||||||
|
* @param string $name
|
||||||
|
* @param float $widthFactor
|
||||||
|
* @param callable $dataFunction
|
||||||
|
*/
|
||||||
|
public function addColumn($name, $widthFactor, $dataFunction) {
|
||||||
|
array_push($this->columns, array($name, $widthFactor, $dataFunction));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a arrow to point to the current/personal entry
|
||||||
|
* @param callable $function
|
||||||
|
*/
|
||||||
|
public function addEntryCurrent($function) {
|
||||||
|
$this->entryCurrent = $function;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a footer button to the list
|
||||||
|
* @param string $description
|
||||||
|
* @param string $action
|
||||||
|
* @param callable $tooltipFunction
|
||||||
|
*/
|
||||||
|
public function addFooterButton($description, $action, $tooltipFunction = null) {
|
||||||
|
array_push($this->footerButtons, array($description, $action, $tooltipFunction));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a header frame to the list
|
||||||
|
* @param Frame $headerFrame
|
||||||
|
*/
|
||||||
|
public function addHeaderFrame(Frame $headerFrame) {
|
||||||
|
$this->headerFrame = $headerFrame;
|
||||||
|
$this->headerFrame->setHeight(self::HEADER_HEIGHT);
|
||||||
|
$this->headerFrame->setWidth($this->getHeaderFrameWidth());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds rows to the list
|
||||||
|
* @param array $rows
|
||||||
|
*/
|
||||||
|
public function addRows(array $rows) {
|
||||||
|
$this->rowData = array_merge($this->rowData, $rows);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build Karma Gauge
|
||||||
|
* @param Map|MXMapInfo $map
|
||||||
|
* @param float $width
|
||||||
|
* @param float $height
|
||||||
|
* @param float $textSize
|
||||||
|
*/
|
||||||
|
public function buildKarmaGauge($map, $width, $height, $textSize = 0.9) {
|
||||||
|
$karmaPlugin = $this->maniaControl->getPluginManager()->getPlugin(self::DEFAULT_KARMA_PLUGIN);
|
||||||
|
if (!$karmaPlugin) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// default elements
|
||||||
|
$frame = new Frame();
|
||||||
|
|
||||||
|
$karmaGauge = new Gauge();
|
||||||
|
$frame->addChild($karmaGauge);
|
||||||
|
$karmaGauge->setDrawBackground(false);
|
||||||
|
$karmaGauge->setSize($width, $height);
|
||||||
|
$karmaGauge->setZ(-1);
|
||||||
|
|
||||||
|
$karmaLabel = new Label_Text();
|
||||||
|
$frame->addChild($karmaLabel);
|
||||||
|
$karmaLabel->setSize($width/2, $height * $textSize);
|
||||||
|
$karmaLabel->setStyle($this->maniaControl->getManialinkManager()->getStyleManager()->getDefaultLabelStyle());
|
||||||
|
$karmaLabel->setTextColor('fff');
|
||||||
|
$karmaLabel->setTextSize($textSize);
|
||||||
|
$karmaLabel->setY(-$height/50);
|
||||||
|
$karmaLabel->setZ(1);
|
||||||
|
|
||||||
|
// fetch MX Karma
|
||||||
|
$displayMxKarma = $this->maniaControl->getSettingManager()->getSettingValue($karmaPlugin, $karmaPlugin::SETTING_WIDGET_DISPLAY_MX);
|
||||||
|
$karma = null;
|
||||||
|
$votes = null;
|
||||||
|
$mxInfo = null;
|
||||||
|
if ($map instanceof Map && isset($map->mx)) {
|
||||||
|
$mxInfo = $map->mx;
|
||||||
|
} elseif ($map instanceof MXMapInfo) {
|
||||||
|
$mxInfo = $map;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($displayMxKarma && $mxInfo) {
|
||||||
|
$karma = $mxInfo->ratingVoteAverage / 100;
|
||||||
|
$votes = array("count" => $mxInfo->ratingVoteCount);
|
||||||
|
} elseif ($map instanceof Map) {
|
||||||
|
$karma = $karmaPlugin->getMapKarma($map);
|
||||||
|
$votes = $karmaPlugin->getMapVotes($map);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_numeric($karma) || $votes['count'] <= 0) {
|
||||||
|
// No Karma
|
||||||
|
$karmaGauge->setColor('00fb');
|
||||||
|
$karmaGauge->setRatio(0.);
|
||||||
|
|
||||||
|
$karmaLabel->setText('-');
|
||||||
|
return $frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Karma available
|
||||||
|
$karma = floatval($karma);
|
||||||
|
$karmaText = '';
|
||||||
|
if ($this->maniaControl->getSettingManager()->getSettingValue($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA)) {
|
||||||
|
$karmaText = ' ' . round($karma * 100.) . '% (' . $votes['count'] . ')';
|
||||||
|
} else {
|
||||||
|
$minus = 0;
|
||||||
|
$plus = 0;
|
||||||
|
foreach ($votes as $vote) {
|
||||||
|
if (!isset($vote->vote) || $vote->vote === 0.5) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($vote->vote < 0.5) {
|
||||||
|
$minus += $vote->count;
|
||||||
|
} else {
|
||||||
|
$plus += $vote->count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$endKarma = $plus - $minus;
|
||||||
|
$karmaText = ' ' . $endKarma . ' (' . $votes['count'] . 'x / ' . round($karma * 100.) . '%)';
|
||||||
|
}
|
||||||
|
|
||||||
|
$karmaColor = ColorUtil::floatToStatusColor($karma);
|
||||||
|
$karmaGauge->setColor($karmaColor . '8');
|
||||||
|
$karmaGauge->setRatio(0.15 + 0.85*$karma);
|
||||||
|
|
||||||
|
$karmaLabel->setText($karmaText);
|
||||||
|
|
||||||
|
return $frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the width of the optional header frame
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getHeaderFrameWidth() {
|
||||||
|
return (int) (self::HEADER_WIDTH_FACTOR * $this->maniaControl->getManialinkManager()->getStyleManager()->getListWidgetsWidth());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderList(Player $player) {
|
||||||
|
$nbActions = count($this->actions);
|
||||||
|
$nbFooterButtons = count($this->footerButtons);
|
||||||
|
|
||||||
|
$hasActions = $nbActions > 0;
|
||||||
|
$hasEntryCurrent = $this->entryCurrent !== null;
|
||||||
|
$hasFooter = $nbFooterButtons > 0;
|
||||||
|
$hasHeader = $this->headerFrame !== null;
|
||||||
|
|
||||||
|
$height = $this->maniaControl->getManialinkManager()->getStyleManager()->getListWidgetsHeight();
|
||||||
|
$width = $this->maniaControl->getManialinkManager()->getStyleManager()->getListWidgetsWidth();
|
||||||
|
|
||||||
|
$heightRows = $height - self::ROW_SPACING_TOP - self::ROW_SPACING_BOTTOM;
|
||||||
|
$posYRows = $height/2 - self::ROW_SPACING_TOP - self::ROW_LINE_HEIGHT/2;
|
||||||
|
|
||||||
|
// Create ManiaLink
|
||||||
|
$maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID);
|
||||||
|
$script = $maniaLink->getScript();
|
||||||
|
$paging = new Paging();
|
||||||
|
$script->addFeature($paging);
|
||||||
|
|
||||||
|
// Main frame
|
||||||
|
$frame = $this->maniaControl->getManialinkManager()->getStyleManager()->getDefaultListFrame($script, $paging);
|
||||||
|
$maniaLink->addChild($frame);
|
||||||
|
|
||||||
|
// Header frame
|
||||||
|
if ($hasHeader) {
|
||||||
|
$frame->addChild($this->headerFrame);
|
||||||
|
$this->headerFrame->setY($height/2 - self::HEADER_SPACING - self::HEADER_HEIGHT/2);
|
||||||
|
|
||||||
|
$headerSize = 2*self::HEADER_SPACING + self::HEADER_HEIGHT;
|
||||||
|
$heightRows -= $headerSize;
|
||||||
|
if ($posYRows > $height/2 - $headerSize)
|
||||||
|
$posYRows = $height/2 - $headerSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Footer
|
||||||
|
if ($hasFooter) {
|
||||||
|
$nbFooterSections = 3*$nbFooterButtons + 1;
|
||||||
|
$buttonSpacing = (1. / $nbFooterSections) * $width;
|
||||||
|
$buttonWidth = $buttonSpacing * 2;
|
||||||
|
for ($i = 0; $i < $nbFooterButtons; $i++) {
|
||||||
|
list($description, $action, $tooltipFunction) = $this->footerButtons[$i];
|
||||||
|
|
||||||
|
$label = new Label_Button();
|
||||||
|
$frame->addChild($label);
|
||||||
|
$label->setHeight(self::FOOTER_HEIGHT);
|
||||||
|
$label->setText($description);
|
||||||
|
$label->setTextSize(1);
|
||||||
|
$label->setWidth($buttonWidth);
|
||||||
|
$label->setX(-$width/2 + ($i+1)*$buttonSpacing + $i*$buttonWidth + $buttonWidth/2);
|
||||||
|
$label->setY(-$height/2 + self::FOOTER_SPACING_BOTTOM);
|
||||||
|
$label->setZ(0.1);
|
||||||
|
|
||||||
|
$quad = new Quad_BgsPlayerCard();
|
||||||
|
$frame->addChild($quad);
|
||||||
|
$quad->setAction($action);
|
||||||
|
$quad->setHeight(self::FOOTER_HEIGHT);
|
||||||
|
$quad->setSubStyle($quad::SUBSTYLE_BgPlayerCardBig);
|
||||||
|
$quad->setWidth($buttonWidth);
|
||||||
|
$quad->setX(-$width/2 + ($i+1)*$buttonSpacing + $i*$buttonWidth + $buttonWidth/2);
|
||||||
|
$quad->setY(-$height/2 + self::FOOTER_SPACING_BOTTOM);
|
||||||
|
$quad->setZ(0.01);
|
||||||
|
}
|
||||||
|
|
||||||
|
$footerSize = self::FOOTER_SPACING_BOTTOM + self::FOOTER_HEIGHT + self::FOOTER_SPACING;
|
||||||
|
$heightRows -= $footerSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
$actionsWidth = max(self::COLUMN_ACTION_WIDTH_MIN, $nbActions * self::COLUMN_ACTION_WIDTH);
|
||||||
|
$baseColumnPosX = -$width / 2 + self::ROW_SPACING_SIDES + self::COLUMN_ENTRY_WIDTH;
|
||||||
|
$baseRowPosY = $posYRows;
|
||||||
|
$baseColumnWidth = $width - 2*self::ROW_SPACING_SIDES - self::COLUMN_ENTRY_WIDTH - $actionsWidth;
|
||||||
|
$nbRows = (int) ($heightRows / self::ROW_LINE_HEIGHT) - 1;
|
||||||
|
|
||||||
|
// Description Row
|
||||||
|
$descriptionFrame = new Frame();
|
||||||
|
$frame->addChild($descriptionFrame);
|
||||||
|
$descriptionFrame->setX($baseColumnPosX);
|
||||||
|
$descriptionFrame->setY($baseRowPosY);
|
||||||
|
|
||||||
|
$labelLine = new LabelLine($descriptionFrame);
|
||||||
|
$columnPosX = self::ROW_SPACING_SIDES;
|
||||||
|
if ($hasEntryCurrent) {
|
||||||
|
$columnPosX += self::COLUMN_ENTRY_WIDTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->columns as $column) {
|
||||||
|
list($name, $widthFactor, $dataFunction) = $column;
|
||||||
|
$labelLine->addLabelEntryText($name, $columnPosX);
|
||||||
|
$columnPosX += $widthFactor * $baseColumnWidth;
|
||||||
|
}
|
||||||
|
$labelLine->addLabelEntryText('Actions', $columnPosX);
|
||||||
|
$labelLine->render();
|
||||||
|
|
||||||
|
// Data Rows
|
||||||
|
$pageFrame = null;
|
||||||
|
$columnPosX = self::ROW_SPACING_SIDES;
|
||||||
|
$baseRowPosY -= self::ROW_LINE_HEIGHT;
|
||||||
|
$rowPosY = $baseRowPosY;
|
||||||
|
$pageNumber = 1;
|
||||||
|
for ($i = 0; $i < count($this->rowData); $i++) {
|
||||||
|
$data = $this->rowData[$i];
|
||||||
|
|
||||||
|
if ($i % $nbRows === 0) {
|
||||||
|
$pageFrame = new Frame();
|
||||||
|
$frame->addChild($pageFrame);
|
||||||
|
|
||||||
|
$paging->addPageControl($pageFrame, $pageNumber);
|
||||||
|
$pageNumber++;
|
||||||
|
$rowPosY = $baseRowPosY;
|
||||||
|
}
|
||||||
|
|
||||||
|
$playerFrame = new Frame();
|
||||||
|
$pageFrame->addChild($playerFrame);
|
||||||
|
$playerFrame->setX($baseColumnPosX);
|
||||||
|
$playerFrame->setY($rowPosY);
|
||||||
|
|
||||||
|
if ($i % 2 === 1) {
|
||||||
|
$lineQuad = new Quad_BgsPlayerCard();
|
||||||
|
$playerFrame->addChild($lineQuad);
|
||||||
|
$lineQuad->setSize($width, self::ROW_LINE_HEIGHT);
|
||||||
|
$lineQuad->setSubStyle($lineQuad::SUBSTYLE_BgPlayerCardBig);
|
||||||
|
$lineQuad->setZ(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($hasEntryCurrent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$rowPosY -= self::ROW_LINE_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->maniaControl->getManialinkManager()->sendManialink($maniaLink, $player);
|
||||||
|
$this->reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the internal builder data
|
||||||
|
*/
|
||||||
|
private function reset() {
|
||||||
|
$this->actions = array();
|
||||||
|
$this->columns = array();
|
||||||
|
$this->entryCurrent = null;
|
||||||
|
$this->footerButtons = array();
|
||||||
|
$this->headerFrame = null;
|
||||||
|
$this->rowData = array();
|
||||||
|
}
|
||||||
|
}
|
@ -55,6 +55,9 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
/** @var SidebarMenuManager $sidebarMenuManager */
|
/** @var SidebarMenuManager $sidebarMenuManager */
|
||||||
private $sidebarMenuManager = null;
|
private $sidebarMenuManager = null;
|
||||||
|
|
||||||
|
/** @var ElementBuilder $elementBuilder */
|
||||||
|
private $elementBuilder = null;
|
||||||
|
|
||||||
// TODO: use listening class
|
// TODO: use listening class
|
||||||
private $pageAnswerListeners = array();
|
private $pageAnswerListeners = array();
|
||||||
private $pageAnswerRegexListener = array();
|
private $pageAnswerRegexListener = array();
|
||||||
@ -72,6 +75,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
$this->customUIManager = new CustomUIManager($maniaControl);
|
$this->customUIManager = new CustomUIManager($maniaControl);
|
||||||
$this->iconManager = new IconManager($maniaControl);
|
$this->iconManager = new IconManager($maniaControl);
|
||||||
$this->sidebarMenuManager = new SidebarMenuManager($maniaControl);
|
$this->sidebarMenuManager = new SidebarMenuManager($maniaControl);
|
||||||
|
$this->elementBuilder = new ElementBuilder($maniaControl);
|
||||||
|
|
||||||
// Callbacks
|
// Callbacks
|
||||||
$this->registerManialinkPageAnswerListener(self::ACTION_CLOSEWIDGET, $this, 'closeWidgetCallback');
|
$this->registerManialinkPageAnswerListener(self::ACTION_CLOSEWIDGET, $this, 'closeWidgetCallback');
|
||||||
@ -133,6 +137,15 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
return $this->iconManager;
|
return $this->iconManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the element builder
|
||||||
|
*
|
||||||
|
* @return ElementBuilder
|
||||||
|
*/
|
||||||
|
public function getElementBuilder() {
|
||||||
|
return $this->elementBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a new manialink page answer reg ex listener
|
* Register a new manialink page answer reg ex listener
|
||||||
*
|
*
|
||||||
|
@ -142,7 +142,7 @@ class StyleManager implements UsageInformationAble {
|
|||||||
$entry->setName('SearchString');
|
$entry->setName('SearchString');
|
||||||
|
|
||||||
if ($actionReset) {
|
if ($actionReset) {
|
||||||
$quad = new Quad_Icons64x64_1();;
|
$quad = new Quad_Icons64x64_1();
|
||||||
$frame->addChild($quad);
|
$frame->addChild($quad);
|
||||||
$quad->setSubStyle($quad::SUBSTYLE_QuitRace);
|
$quad->setSubStyle($quad::SUBSTYLE_QuitRace);
|
||||||
$quad->setColorize('aaa');
|
$quad->setColorize('aaa');
|
||||||
|
@ -57,7 +57,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
const ACTION_RESET = 'MapList.ResetMapList';
|
const ACTION_RESET = 'MapList.ResetMapList';
|
||||||
const MAX_MAPS_PER_PAGE = 13;
|
const MAX_MAPS_PER_PAGE = 13;
|
||||||
const MAX_PAGES_PER_CHUNK = 2;
|
const MAX_PAGES_PER_CHUNK = 2;
|
||||||
const DEFAULT_KARMA_PLUGIN = 'MCTeam\KarmaPlugin';
|
|
||||||
const DEFAULT_CUSTOM_VOTE_PLUGIN = 'MCTeam\CustomVotesPlugin';
|
const DEFAULT_CUSTOM_VOTE_PLUGIN = 'MCTeam\CustomVotesPlugin';
|
||||||
const CACHE_CURRENT_PAGE = 'CurrentPage';
|
const CACHE_CURRENT_PAGE = 'CurrentPage';
|
||||||
const WIDGET_NAME = 'MapList';
|
const WIDGET_NAME = 'MapList';
|
||||||
@ -249,8 +248,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$frame->addChild($descriptionLabel);
|
$frame->addChild($descriptionLabel);
|
||||||
|
|
||||||
$queuedMaps = $this->maniaControl->getMapManager()->getMapQueue()->getQueuedMapsRanking();
|
$queuedMaps = $this->maniaControl->getMapManager()->getMapQueue()->getQueuedMapsRanking();
|
||||||
/** @var KarmaPlugin $karmaPlugin */
|
|
||||||
$karmaPlugin = $this->maniaControl->getPluginManager()->getPlugin(self::DEFAULT_KARMA_PLUGIN);
|
|
||||||
|
|
||||||
$pageNumber = 1 + $chunkIndex * self::MAX_PAGES_PER_CHUNK;
|
$pageNumber = 1 + $chunkIndex * self::MAX_PAGES_PER_CHUNK;
|
||||||
$paging->setStartPageNumber($pageIndex + 1);
|
$paging->setStartPageNumber($pageIndex + 1);
|
||||||
@ -460,63 +457,14 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Display Karma bar
|
// Display Karma bar
|
||||||
if ($karmaPlugin) {
|
$karmaGauge = $this->maniaControl->getManialinkManager()->getElementBuilder()->buildKarmaGauge(
|
||||||
$displayMxKarma = $this->maniaControl->getSettingManager()->getSettingValue($karmaPlugin, $karmaPlugin::SETTING_WIDGET_DISPLAY_MX);
|
$map,
|
||||||
|
20,
|
||||||
//Display Mx Karma
|
10
|
||||||
if ($displayMxKarma && $map->mx) {
|
);
|
||||||
$karma = $map->mx->ratingVoteAverage / 100;
|
if ($karmaGauge) {
|
||||||
$votes = array("count" => $map->mx->ratingVoteCount);
|
|
||||||
|
|
||||||
//Display Local Karma
|
|
||||||
} else {
|
|
||||||
$karma = $karmaPlugin->getMapKarma($map);
|
|
||||||
$votes = $karmaPlugin->getMapVotes($map);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_numeric($karma) && $votes['count'] > 0) {
|
|
||||||
if ($this->maniaControl->getSettingManager()->getSettingValue($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA)) {
|
|
||||||
$karmaText = ' ' . round($karma * 100.) . '% (' . $votes['count'] . ')';
|
|
||||||
} else {
|
|
||||||
$min = 0;
|
|
||||||
$plus = 0;
|
|
||||||
foreach ($votes as $vote) {
|
|
||||||
if (isset($vote->vote)) {
|
|
||||||
if ($vote->vote !== 0.5) {
|
|
||||||
if ($vote->vote < 0.5) {
|
|
||||||
$min = $min + $vote->count;
|
|
||||||
} else {
|
|
||||||
$plus = $plus + $vote->count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$endKarma = $plus - $min;
|
|
||||||
$karmaText = ' ' . $endKarma . ' (' . $votes['count'] . 'x / ' . round($karma * 100.) . '%)';
|
|
||||||
}
|
|
||||||
|
|
||||||
$karmaGauge = new Gauge();
|
|
||||||
$mapFrame->addChild($karmaGauge);
|
$mapFrame->addChild($karmaGauge);
|
||||||
$karmaGauge->setZ(0.2);
|
|
||||||
$karmaGauge->setX($posX + 120);
|
$karmaGauge->setX($posX + 120);
|
||||||
$karmaGauge->setY(0.2);
|
|
||||||
$karmaGauge->setSize(20, 10);
|
|
||||||
$karmaGauge->setDrawBackground(false);
|
|
||||||
$karma = floatval($karma);
|
|
||||||
$karmaGauge->setRatio($karma + 0.15 - $karma * 0.15);
|
|
||||||
$karmaColor = ColorUtil::floatToStatusColor($karma);
|
|
||||||
$karmaGauge->setColor($karmaColor . '9');
|
|
||||||
|
|
||||||
$karmaLabel = new Label();
|
|
||||||
$mapFrame->addChild($karmaLabel);
|
|
||||||
$karmaLabel->setZ(2);
|
|
||||||
$karmaLabel->setX($posX + 120);
|
|
||||||
$karmaLabel->setSize(20 * 0.9, 5);
|
|
||||||
$karmaLabel->setY(-0.2);
|
|
||||||
$karmaLabel->setTextSize(0.9);
|
|
||||||
$karmaLabel->setTextColor('000');
|
|
||||||
$karmaLabel->setText($karmaText);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$posY -= 4;
|
$posY -= 4;
|
||||||
|
@ -21,7 +21,7 @@ abstract class ColorUtil implements UsageInformationAble {
|
|||||||
* @param float $value
|
* @param float $value
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function floatToStatusColor($value) {
|
public static function floatToStatusColor($value, $addBlue = true) {
|
||||||
$value = floatval($value);
|
$value = floatval($value);
|
||||||
$red = 1.;
|
$red = 1.;
|
||||||
$green = 1.;
|
$green = 1.;
|
||||||
@ -33,7 +33,12 @@ abstract class ColorUtil implements UsageInformationAble {
|
|||||||
}
|
}
|
||||||
$red = ColorUtil::floatToCode($red);
|
$red = ColorUtil::floatToCode($red);
|
||||||
$green = ColorUtil::floatToCode($green);
|
$green = ColorUtil::floatToCode($green);
|
||||||
|
|
||||||
|
if ($addBlue) {
|
||||||
return $red . $green . '0';
|
return $red . $green . '0';
|
||||||
|
} else {
|
||||||
|
return $red . $green;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,7 +60,7 @@ abstract class ColorUtil implements UsageInformationAble {
|
|||||||
if ($value < 10) {
|
if ($value < 10) {
|
||||||
return (string) $value;
|
return (string) $value;
|
||||||
}
|
}
|
||||||
$codes = array(10 => 'a', 11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e', 15 => 'f');
|
static $codes = array(10 => 'a', 11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e', 15 => 'f');
|
||||||
return $codes[$value];
|
return $codes[$value];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace MCTeam;
|
namespace MCTeam;
|
||||||
|
|
||||||
use FML\Controls\Frame;
|
use FML\Controls\Frame;
|
||||||
use FML\Controls\Gauge;
|
|
||||||
use FML\Controls\Label;
|
use FML\Controls\Label;
|
||||||
use FML\Controls\Quad;
|
use FML\Controls\Quad;
|
||||||
use FML\ManiaLink;
|
use FML\ManiaLink;
|
||||||
@ -71,8 +70,6 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
/** @var ManiaControl $maniaControl */
|
/** @var ManiaControl $maniaControl */
|
||||||
private $maniaControl = null;
|
private $maniaControl = null;
|
||||||
private $updateManialink = false;
|
private $updateManialink = false;
|
||||||
/** @var ManiaLink $manialink */
|
|
||||||
private $manialink = null;
|
|
||||||
// TODO: use some sort of model class instead of various array keys that you can't remember
|
// TODO: use some sort of model class instead of various array keys that you can't remember
|
||||||
private $mxKarma = array();
|
private $mxKarma = array();
|
||||||
|
|
||||||
@ -150,9 +147,9 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_ENABLE, true);
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_ENABLE, true);
|
||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_TITLE, 'Map-Karma');
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_TITLE, 'Map-Karma');
|
||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_POSX, 160 - 27.5);
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_POSX, 160 - 27.5);
|
||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_POSY, 90 - 10 - 6);
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_POSY, 90 - 9 - 5);
|
||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_WIDTH, 25.);
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_WIDTH, 25.);
|
||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_HEIGHT, 12.);
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_HEIGHT, 10.);
|
||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_NEWKARMA, true);
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_NEWKARMA, true);
|
||||||
|
|
||||||
// Callbacks
|
// Callbacks
|
||||||
@ -775,6 +772,7 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->updateManialink = true;
|
||||||
$serverLogin = $this->maniaControl->getServer()->login;
|
$serverLogin = $this->maniaControl->getServer()->login;
|
||||||
$karmaSettingName = self::buildKarmaSettingName($serverLogin);
|
$karmaSettingName = self::buildKarmaSettingName($serverLogin);
|
||||||
|
|
||||||
@ -785,10 +783,8 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
}
|
}
|
||||||
case self::SETTING_WIDGET_ENABLE: {
|
case self::SETTING_WIDGET_ENABLE: {
|
||||||
if ($setting->value) {
|
if ($setting->value) {
|
||||||
$this->updateManialink = true;
|
|
||||||
$this->handle1Second();
|
$this->handle1Second();
|
||||||
} else {
|
} else {
|
||||||
$this->updateManialink = false;
|
|
||||||
$this->maniaControl->getManialinkManager()->hideManialink(self::MLID_KARMA);
|
$this->maniaControl->getManialinkManager()->hideManialink(self::MLID_KARMA);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -806,58 +802,21 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
|
|
||||||
$displayMxKarma = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_DISPLAY_MX);
|
$displayMxKarma = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_DISPLAY_MX);
|
||||||
|
|
||||||
// Get players
|
|
||||||
$players = $this->updateManialink;
|
|
||||||
if ($players === true) {
|
|
||||||
$players = $this->maniaControl->getPlayerManager()->getPlayers();
|
|
||||||
}
|
|
||||||
$this->updateManialink = false;
|
|
||||||
|
|
||||||
// Get map karma
|
// Get map karma
|
||||||
$map = $this->maniaControl->getMapManager()->getCurrentMap();
|
$map = $this->maniaControl->getMapManager()->getCurrentMap();
|
||||||
|
|
||||||
// Display the mx Karma if the setting is chosen and the MX session is available
|
// Display the mx Karma if the setting is chosen and the MX session is available
|
||||||
if ($displayMxKarma && isset($this->mxKarma['session']) && isset($this->mxKarma['voteCount'])) {
|
if ($displayMxKarma && isset($this->mxKarma['session']) && isset($this->mxKarma['voteCount'])) {
|
||||||
$karma = $this->mxKarma['modeVoteAverage'] / 100;
|
$map->mx->ratingVoteAverage = $this->mxKarma['modeVoteAverage'];
|
||||||
$voteCount = $this->mxKarma['modeVoteCount'];
|
$map->mx->ratingVoteCount = $this->mxKarma['modeVoteCount'];
|
||||||
} else {
|
|
||||||
$karma = $this->getMapKarma($map);
|
|
||||||
$votes = $this->getMapVotes($map);
|
|
||||||
$voteCount = $votes['count'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_ENABLE)) {
|
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_ENABLE)) {
|
||||||
// Build karma manialink
|
// Build karma manialink
|
||||||
$this->buildManialink();
|
$this->buildManialink($map, $this->updateManialink);
|
||||||
|
|
||||||
// Update karma gauge & label
|
|
||||||
/**
|
|
||||||
* @var Gauge $karmaGauge
|
|
||||||
*/
|
|
||||||
$karmaGauge = $this->manialink->karmaGauge;
|
|
||||||
/**
|
|
||||||
* @var Label $karmaLabel
|
|
||||||
*/
|
|
||||||
$karmaLabel = $this->manialink->karmaLabel;
|
|
||||||
if (is_numeric($karma) && $voteCount > 0) {
|
|
||||||
$karma = floatval($karma);
|
|
||||||
$karmaGauge->setRatio($karma + 0.15 - $karma * 0.15);
|
|
||||||
$karmaColor = ColorUtil::floatToStatusColor($karma);
|
|
||||||
$karmaGauge->setColor($karmaColor . '7');
|
|
||||||
$karmaLabel->setText(' ' . round($karma * 100.) . '% (' . $voteCount . ')');
|
|
||||||
} else {
|
|
||||||
$karmaGauge->setRatio(0.);
|
|
||||||
$karmaGauge->setColor('00fb');
|
|
||||||
$karmaLabel->setText('-');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->updateManialink = false;
|
||||||
$this->maniaControl->getManialinkManager()->sendManialink($this->manialink, $players);
|
|
||||||
// TODO: show the player his own vote in some way
|
|
||||||
// $vote = $this->getPlayerVote($player, $map);
|
|
||||||
// $votesFrame = $this->manialink->votesFrame;
|
|
||||||
// $votesFrame->removeChildren();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -920,10 +879,11 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
/**
|
/**
|
||||||
* Build Karma Voting Manialink if necessary
|
* Build Karma Voting Manialink if necessary
|
||||||
*
|
*
|
||||||
|
* @param Map $map
|
||||||
* @param bool $forceBuild
|
* @param bool $forceBuild
|
||||||
*/
|
*/
|
||||||
private function buildManialink($forceBuild = false) {
|
private function buildManialink(Map $map = null, $forceBuild = false) {
|
||||||
if (is_object($this->manialink) && !$forceBuild) {
|
if (!$forceBuild) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -944,39 +904,32 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
|
|
||||||
$backgroundQuad = new Quad();
|
$backgroundQuad = new Quad();
|
||||||
$frame->addChild($backgroundQuad);
|
$frame->addChild($backgroundQuad);
|
||||||
$backgroundQuad->setY($height * 0.15);
|
|
||||||
$backgroundQuad->setSize($width, $height);
|
$backgroundQuad->setSize($width, $height);
|
||||||
$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
|
$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
|
||||||
|
|
||||||
$titleLabel = new Label();
|
$titleLabel = new Label();
|
||||||
$frame->addChild($titleLabel);
|
$frame->addChild($titleLabel);
|
||||||
$titleLabel->setY($height * 0.36);
|
$titleLabel->setScale(0.9);
|
||||||
$titleLabel->setWidth($width * 0.85);
|
|
||||||
$titleLabel->setStyle($labelStyle);
|
$titleLabel->setStyle($labelStyle);
|
||||||
$titleLabel->setTranslate(true);
|
|
||||||
$titleLabel->setTextSize(1);
|
|
||||||
$titleLabel->setScale(0.90);
|
|
||||||
$titleLabel->setText($title);
|
$titleLabel->setText($title);
|
||||||
|
$titleLabel->setTextSize(1);
|
||||||
|
$titleLabel->setTranslate(true);
|
||||||
|
$titleLabel->setWidth(0.85*$width);
|
||||||
|
$titleLabel->setY(0.2*$height);
|
||||||
|
|
||||||
$karmaGauge = new Gauge();
|
if ($map === null) {
|
||||||
|
$map = $this->maniaControl->getMapManager()->getCurrentMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
$karmaGauge = $this->maniaControl->getManialinkManager()->getElementBuilder()->buildKarmaGauge(
|
||||||
|
$map,
|
||||||
|
0.95*$width,
|
||||||
|
0.95*$height
|
||||||
|
);
|
||||||
|
$karmaGauge->setY(-0.15*$height);
|
||||||
$frame->addChild($karmaGauge);
|
$frame->addChild($karmaGauge);
|
||||||
$karmaGauge->setSize($width * 0.95, $height * 0.92);
|
|
||||||
$karmaGauge->setDrawBackground(false);
|
|
||||||
$manialink->karmaGauge = $karmaGauge;
|
|
||||||
|
|
||||||
$karmaLabel = new Label();
|
$this->maniaControl->getManialinkManager()->sendManialink($manialink);
|
||||||
$frame->addChild($karmaLabel);
|
|
||||||
$karmaLabel->setPosition(0, -0.4, 1);
|
|
||||||
$karmaLabel->setSize($width * 0.9, $height * 0.9);
|
|
||||||
$karmaLabel->setStyle($labelStyle);
|
|
||||||
$karmaLabel->setTextSize(1);
|
|
||||||
$manialink->karmaLabel = $karmaLabel;
|
|
||||||
|
|
||||||
$votesFrame = new Frame();
|
|
||||||
$frame->addChild($votesFrame);
|
|
||||||
$manialink->votesFrame = $votesFrame;
|
|
||||||
|
|
||||||
$this->manialink = $manialink;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user