Unified usages of Karma-Gauge in new ElementBuilder
This commit is contained in:
		| @@ -1,3 +1,8 @@ | ||||
| ###v0.253### | ||||
| #Changes | ||||
| - //restart got replaced by //reboot | ||||
| - Unified Creations of a Karma-Gauge in new Manialinks\ElementBuilder | ||||
|  | ||||
| ###v0.252### | ||||
| #Additions | ||||
| - Ingame-Changelog | ||||
|   | ||||
| @@ -294,31 +294,13 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener | ||||
| 			} | ||||
|  | ||||
| 			//Map Karma | ||||
| 			$karma     = $map->ratingVoteAverage / 100; | ||||
| 			$voteCount = $map->ratingVoteCount; | ||||
| 			if (is_numeric($karma) && $voteCount > 0) { | ||||
| 				$karmaGauge = new Gauge(); | ||||
| 				$mapFrame->addChild($karmaGauge); | ||||
| 				$karmaGauge->setZ(-0.05); | ||||
| 				$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 . ')'); | ||||
| 			} | ||||
| 			$karmaGauge = $this->maniaControl->getManialinkManager()->getElementBuilder()->buildKarmaGauge( | ||||
| 				$map, | ||||
| 				20, | ||||
| 				10 | ||||
| 			); | ||||
| 			$mapFrame->addChild($karmaGauge); | ||||
| 			$karmaGauge->setX($posX + 87); | ||||
|  | ||||
|  | ||||
| 			$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 */ | ||||
| 	private $sidebarMenuManager = null; | ||||
|  | ||||
| 	/** @var ElementBuilder $elementBuilder */ | ||||
| 	private $elementBuilder = null; | ||||
|  | ||||
| 	// TODO: use listening class | ||||
| 	private $pageAnswerListeners     = array(); | ||||
| 	private $pageAnswerRegexListener = array(); | ||||
| @@ -72,6 +75,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener, | ||||
| 		$this->customUIManager    = new CustomUIManager($maniaControl); | ||||
| 		$this->iconManager        = new IconManager($maniaControl); | ||||
| 		$this->sidebarMenuManager = new SidebarMenuManager($maniaControl); | ||||
| 		$this->elementBuilder     = new ElementBuilder($maniaControl); | ||||
|  | ||||
| 		// Callbacks | ||||
| 		$this->registerManialinkPageAnswerListener(self::ACTION_CLOSEWIDGET, $this, 'closeWidgetCallback'); | ||||
| @@ -133,6 +137,15 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener, | ||||
| 		return $this->iconManager; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Return the element builder | ||||
| 	 *  | ||||
| 	 * @return ElementBuilder | ||||
| 	 */ | ||||
| 	public function getElementBuilder() { | ||||
| 		return $this->elementBuilder; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Register a new manialink page answer reg ex listener | ||||
| 	 * | ||||
|   | ||||
| @@ -142,7 +142,7 @@ class StyleManager implements UsageInformationAble { | ||||
| 		$entry->setName('SearchString'); | ||||
|  | ||||
| 		if ($actionReset) { | ||||
| 			$quad = new Quad_Icons64x64_1();; | ||||
| 			$quad = new Quad_Icons64x64_1(); | ||||
| 			$frame->addChild($quad); | ||||
| 			$quad->setSubStyle($quad::SUBSTYLE_QuitRace); | ||||
| 			$quad->setColorize('aaa'); | ||||
| @@ -150,7 +150,7 @@ class StyleManager implements UsageInformationAble { | ||||
| 			$quad->setPosition(-$width / 2 + 15 + $width * 0.25 - 2, 0); | ||||
| 			$quad->setZ(1); | ||||
| 			$quad->setAction($actionReset); | ||||
| } | ||||
| 		} | ||||
|  | ||||
| 		//Search for Map-Name | ||||
| 		$label = new Label_Button(); | ||||
|   | ||||
| @@ -57,7 +57,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { | ||||
| 	const ACTION_RESET               = 'MapList.ResetMapList'; | ||||
| 	const MAX_MAPS_PER_PAGE          = 13; | ||||
| 	const MAX_PAGES_PER_CHUNK        = 2; | ||||
| 	const DEFAULT_KARMA_PLUGIN       = 'MCTeam\KarmaPlugin'; | ||||
| 	const DEFAULT_CUSTOM_VOTE_PLUGIN = 'MCTeam\CustomVotesPlugin'; | ||||
| 	const CACHE_CURRENT_PAGE         = 'CurrentPage'; | ||||
| 	const WIDGET_NAME                = 'MapList'; | ||||
| @@ -249,8 +248,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { | ||||
| 		$frame->addChild($descriptionLabel); | ||||
|  | ||||
| 		$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; | ||||
| 		$paging->setStartPageNumber($pageIndex + 1); | ||||
| @@ -460,63 +457,14 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { | ||||
| 			} | ||||
|  | ||||
| 			// Display Karma bar | ||||
| 			if ($karmaPlugin) { | ||||
| 				$displayMxKarma = $this->maniaControl->getSettingManager()->getSettingValue($karmaPlugin, $karmaPlugin::SETTING_WIDGET_DISPLAY_MX); | ||||
|  | ||||
| 				//Display Mx Karma | ||||
| 				if ($displayMxKarma && $map->mx) { | ||||
| 					$karma = $map->mx->ratingVoteAverage / 100; | ||||
| 					$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); | ||||
| 					$karmaGauge->setZ(0.2); | ||||
| 					$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); | ||||
| 				} | ||||
| 			$karmaGauge = $this->maniaControl->getManialinkManager()->getElementBuilder()->buildKarmaGauge( | ||||
| 				$map, | ||||
| 				20, | ||||
| 				10 | ||||
| 			); | ||||
| 			if ($karmaGauge) { | ||||
| 				$mapFrame->addChild($karmaGauge); | ||||
| 				$karmaGauge->setX($posX + 120); | ||||
| 			} | ||||
|  | ||||
| 			$posY -= 4; | ||||
|   | ||||
| @@ -21,7 +21,7 @@ abstract class ColorUtil implements UsageInformationAble { | ||||
| 	 * @param float $value | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public static function floatToStatusColor($value) { | ||||
| 	public static function floatToStatusColor($value, $addBlue = true) { | ||||
| 		$value = floatval($value); | ||||
| 		$red   = 1.; | ||||
| 		$green = 1.; | ||||
| @@ -33,7 +33,12 @@ abstract class ColorUtil implements UsageInformationAble { | ||||
| 		} | ||||
| 		$red   = ColorUtil::floatToCode($red); | ||||
| 		$green = ColorUtil::floatToCode($green); | ||||
| 		return $red . $green . '0'; | ||||
|  | ||||
| 		if ($addBlue) { | ||||
| 			return $red . $green . '0'; | ||||
| 		} else { | ||||
| 			return $red . $green; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -55,7 +60,7 @@ abstract class ColorUtil implements UsageInformationAble { | ||||
| 		if ($value < 10) { | ||||
| 			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]; | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -3,7 +3,6 @@ | ||||
| namespace MCTeam; | ||||
|  | ||||
| use FML\Controls\Frame; | ||||
| use FML\Controls\Gauge; | ||||
| use FML\Controls\Label; | ||||
| use FML\Controls\Quad; | ||||
| use FML\ManiaLink; | ||||
| @@ -71,8 +70,6 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin { | ||||
| 	/** @var ManiaControl $maniaControl */ | ||||
| 	private $maniaControl    = null; | ||||
| 	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 | ||||
| 	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_TITLE, 'Map-Karma'); | ||||
| 		$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_HEIGHT, 12.); | ||||
| 		$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_HEIGHT, 10.); | ||||
| 		$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_NEWKARMA, true); | ||||
|  | ||||
| 		// Callbacks | ||||
| @@ -270,9 +267,9 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin { | ||||
| 			} else { | ||||
| 				Logger::logError("Error while authenticating on Mania-Exchange Karma"); | ||||
|  | ||||
| 				if($data->data->message == "invalid server"){ | ||||
| 				if ($data->data->message == "invalid server") { | ||||
| 					Logger::log("You need to get a Karma Key from MX with registering your server"); | ||||
| 				}else{ | ||||
| 				} else { | ||||
| 					// TODO remove temp trigger | ||||
| 					$this->maniaControl->getErrorHandler()->triggerDebugNotice('auth error ' . json_encode($data->data->message)); | ||||
| 				} | ||||
| @@ -775,6 +772,7 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin { | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		$this->updateManialink = true; | ||||
| 		$serverLogin      = $this->maniaControl->getServer()->login; | ||||
| 		$karmaSettingName = self::buildKarmaSettingName($serverLogin); | ||||
|  | ||||
| @@ -785,10 +783,8 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin { | ||||
| 			} | ||||
| 			case self::SETTING_WIDGET_ENABLE: { | ||||
| 				if ($setting->value) { | ||||
| 					$this->updateManialink = true; | ||||
| 					$this->handle1Second(); | ||||
| 				} else { | ||||
| 					$this->updateManialink = false; | ||||
| 					$this->maniaControl->getManialinkManager()->hideManialink(self::MLID_KARMA); | ||||
| 				} | ||||
| 				break; | ||||
| @@ -806,58 +802,21 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin { | ||||
|  | ||||
| 		$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 | ||||
| 		$map = $this->maniaControl->getMapManager()->getCurrentMap(); | ||||
|  | ||||
| 		// 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'])) { | ||||
| 			$karma     = $this->mxKarma['modeVoteAverage'] / 100; | ||||
| 			$voteCount = $this->mxKarma['modeVoteCount']; | ||||
| 		} else { | ||||
| 			$karma     = $this->getMapKarma($map); | ||||
| 			$votes     = $this->getMapVotes($map); | ||||
| 			$voteCount = $votes['count']; | ||||
| 			$map->mx->ratingVoteAverage = $this->mxKarma['modeVoteAverage']; | ||||
| 			$map->mx->ratingVoteCount   = $this->mxKarma['modeVoteCount']; | ||||
| 		} | ||||
|  | ||||
| 		if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_ENABLE)) { | ||||
| 			// Build karma manialink | ||||
| 			$this->buildManialink(); | ||||
|  | ||||
| 			// 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->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(); | ||||
| 			$this->buildManialink($map, $this->updateManialink); | ||||
| 		} | ||||
|  | ||||
| 		$this->updateManialink = false; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -920,10 +879,11 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin { | ||||
| 	/** | ||||
| 	 * Build Karma Voting Manialink if necessary | ||||
| 	 * | ||||
| 	 * @param Map $map | ||||
| 	 * @param bool $forceBuild | ||||
| 	 */ | ||||
| 	private function buildManialink($forceBuild = false) { | ||||
| 		if (is_object($this->manialink) && !$forceBuild) { | ||||
| 	private function buildManialink(Map $map = null, $forceBuild = false) { | ||||
| 		if (!$forceBuild) { | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| @@ -944,39 +904,32 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin { | ||||
|  | ||||
| 		$backgroundQuad = new Quad(); | ||||
| 		$frame->addChild($backgroundQuad); | ||||
| 		$backgroundQuad->setY($height * 0.15); | ||||
| 		$backgroundQuad->setSize($width, $height); | ||||
| 		$backgroundQuad->setStyles($quadStyle, $quadSubstyle); | ||||
|  | ||||
| 		$titleLabel = new Label(); | ||||
| 		$frame->addChild($titleLabel); | ||||
| 		$titleLabel->setY($height * 0.36); | ||||
| 		$titleLabel->setWidth($width * 0.85); | ||||
| 		$titleLabel->setScale(0.9); | ||||
| 		$titleLabel->setStyle($labelStyle); | ||||
| 		$titleLabel->setTranslate(true); | ||||
| 		$titleLabel->setTextSize(1); | ||||
| 		$titleLabel->setScale(0.90); | ||||
| 		$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); | ||||
| 		$karmaGauge->setSize($width * 0.95, $height * 0.92); | ||||
| 		$karmaGauge->setDrawBackground(false); | ||||
| 		$manialink->karmaGauge = $karmaGauge; | ||||
|  | ||||
| 		$karmaLabel = new Label(); | ||||
| 		$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; | ||||
| 		$this->maniaControl->getManialinkManager()->sendManialink($manialink); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user