Started to restructure Widgets of LocalRecords and Dedimania Plugins
This commit is contained in:
		
							
								
								
									
										167
									
								
								plugins/MCTeam/Common/RecordWidget.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								plugins/MCTeam/Common/RecordWidget.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | ||||
| <?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-2017 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 | ||||
| 	 */ | ||||
| 	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; | ||||
|  | ||||
| 		$recordFrame = new Frame(); | ||||
|  | ||||
| 		$largeNumberDiff = 0; | ||||
| 		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; | ||||
| 	} | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -19,7 +19,10 @@ use ManiaControl\Manialinks\ManialinkManager; | ||||
| use ManiaControl\Players\Player; | ||||
| use ManiaControl\Players\PlayerManager; | ||||
| use ManiaControl\Plugins\Plugin; | ||||
| use ManiaControl\Settings\Setting; | ||||
| use ManiaControl\Settings\SettingManager; | ||||
| use ManiaControl\Utils\Formatter; | ||||
| use MCTeam\Common\RecordWidget; | ||||
|  | ||||
| /** | ||||
|  * ManiaControl Dedimania Plugin | ||||
| @@ -56,6 +59,9 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene | ||||
| 	/** @var ManiaControl $maniaControl */ | ||||
| 	private $maniaControl = null; | ||||
|  | ||||
| 	/** @var \MCTeam\Common\RecordWidget $recordWidget */ | ||||
| 	private $recordWidget = null; | ||||
|  | ||||
| 	private $checkpoints = array(); | ||||
|  | ||||
| 	/** @var \MCTeam\Dedimania\DedimaniaWebHandler $webHandler */ | ||||
| @@ -100,6 +106,8 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene | ||||
| 		$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::TM_ONWAYPOINT, $this, 'handleCheckpointCallback'); | ||||
| 		$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::TM_ONFINISHLINE, $this, 'handleFinishCallback'); | ||||
| 		$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::TM_ONLAPFINISH, $this, 'handleFinishCallback'); | ||||
| 		$this->maniaControl->getCallbackManager()->registerCallbackListener(SettingManager::CB_SETTING_CHANGED, $this, 'handleSettingChanged'); | ||||
|  | ||||
|  | ||||
| 		$this->maniaControl->getTimerManager()->registerTimerListening($this, 'updateEverySecond', 1000); | ||||
| 		$this->maniaControl->getTimerManager()->registerTimerListening($this, 'handleEveryHalfMinute', 1000 * 30); | ||||
| @@ -129,6 +137,8 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene | ||||
| 		$this->webHandler = new DedimaniaWebHandler($this->maniaControl); | ||||
| 		$this->webHandler->setDedimaniaData($dedimaniaData); | ||||
| 		$this->webHandler->openDedimaniaSession(true); | ||||
|  | ||||
| 		$this->recordWidget = new RecordWidget($this->maniaControl); | ||||
| 	} | ||||
|  | ||||
|  | ||||
| @@ -174,6 +184,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene | ||||
| 		$height = 7. + $lines * $lineHeight; | ||||
| 		$backgroundQuad->setSize($width * 1.05, $height); | ||||
| 		$backgroundQuad->setStyles($quadStyle, $quadSubstyle); | ||||
| 		$backgroundQuad->setAction(self::ACTION_SHOW_DEDIRECORDSLIST); | ||||
|  | ||||
| 		$titleLabel = new Label(); | ||||
| 		$frame->addChild($titleLabel); | ||||
| @@ -184,54 +195,8 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene | ||||
| 		$titleLabel->setText($title); | ||||
| 		$titleLabel->setTranslate(true); | ||||
|  | ||||
| 		foreach ($records as $index => $record) { | ||||
| 			/** @var RecordData $record */ | ||||
| 			if ($index >= $lines) { | ||||
| 				break; | ||||
| 			} | ||||
|  | ||||
| 			$y = -8. - $index * $lineHeight; | ||||
|  | ||||
| 			$recordFrame = new Frame(); | ||||
| 			$frame->addChild($recordFrame); | ||||
| 			$recordFrame->setPosition(0, $y); | ||||
|  | ||||
| 			/*$backgroundQuad = new Quad(); | ||||
| 			$recordFrame->addChild($backgroundQuad); | ||||
| 			$backgroundQuad->setSize($width * 1.04, $lineHeight * 1.4); | ||||
| 			$backgroundQuad->setStyles($quadStyle, $quadSubstyle);*/ | ||||
|  | ||||
| 			//Rank | ||||
| 			$rankLabel = new Label(); | ||||
| 			$recordFrame->addChild($rankLabel); | ||||
| 			$rankLabel->setHorizontalAlign($rankLabel::LEFT); | ||||
| 			$rankLabel->setX($width * -0.47); | ||||
| 			$rankLabel->setSize($width * 0.06, $lineHeight); | ||||
| 			$rankLabel->setTextSize(1); | ||||
| 			$rankLabel->setTextPrefix('$o'); | ||||
| 			$rankLabel->setText($record->rank); | ||||
| 			$rankLabel->setTextEmboss(true); | ||||
|  | ||||
| 			//Name | ||||
| 			$nameLabel = new Label(); | ||||
| 			$recordFrame->addChild($nameLabel); | ||||
| 			$nameLabel->setHorizontalAlign($nameLabel::LEFT); | ||||
| 			$nameLabel->setX($width * -0.4); | ||||
| 			$nameLabel->setSize($width * 0.6, $lineHeight); | ||||
| 			$nameLabel->setTextSize(1); | ||||
| 			$nameLabel->setText($record->nickName); | ||||
| 			$nameLabel->setTextEmboss(true); | ||||
|  | ||||
| 			//Time | ||||
| 			$timeLabel = new Label(); | ||||
| 			$recordFrame->addChild($timeLabel); | ||||
| 			$timeLabel->setHorizontalAlign($timeLabel::RIGHT); | ||||
| 			$timeLabel->setX($width * 0.47); | ||||
| 			$timeLabel->setSize($width * 0.25, $lineHeight); | ||||
| 			$timeLabel->setTextSize(1); | ||||
| 			$timeLabel->setText(Formatter::formatTime($record->best)); | ||||
| 			$timeLabel->setTextEmboss(true); | ||||
| 		} | ||||
| 		$recordsFrame = $this->recordWidget->generateRecordsFrame($records,$lines); | ||||
| 		$frame->addChild($recordsFrame); | ||||
|  | ||||
| 		$this->maniaControl->getManialinkManager()->sendManialink($manialink); | ||||
| 	} | ||||
| @@ -626,13 +591,13 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene | ||||
| 				$recordFrame->addChild($lineQuad); | ||||
| 				$lineQuad->setSize($width, 4); | ||||
| 				$lineQuad->setSubStyle($lineQuad::SUBSTYLE_BgPlayerCardBig); | ||||
| 				$lineQuad->setZ(0.001); | ||||
| 				$lineQuad->setZ(-0.001); | ||||
| 			} | ||||
|  | ||||
| 			if (strlen($listRecord->nickName) < 2) { | ||||
| 				$listRecord->nickName = $listRecord->login; | ||||
| 			if (strlen($listRecord->nickname) < 2) { | ||||
| 				$listRecord->nickname = $listRecord->login; | ||||
| 			} | ||||
| 			$array = array($listRecord->rank => $posX + 5, '$fff' . $listRecord->nickName => $posX + 18, $listRecord->login => $posX + 70, Formatter::formatTime($listRecord->best) => $posX + 101); | ||||
| 			$array = array($listRecord->rank => $posX + 5, '$fff' . $listRecord->nickname => $posX + 18, $listRecord->login => $posX + 70, Formatter::formatTime($listRecord->best) => $posX + 101); | ||||
| 			$this->maniaControl->getManialinkManager()->labelLine($recordFrame, $array); | ||||
|  | ||||
| 			$recordFrame->setY($posY); | ||||
| @@ -654,6 +619,26 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene | ||||
| 		return $this->webHandler->getDedimaniaData()->records; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Update the RecordWidget variables | ||||
| 	 */ | ||||
| 	private function updateRecordWidget() { | ||||
| 		$width              = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_WIDTH); | ||||
| 		$lineHeight         = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_LINE_HEIGHT); | ||||
|  | ||||
| 		$this->recordWidget->setWidth($width); | ||||
| 		$this->recordWidget->setLineHeight($lineHeight); | ||||
|  | ||||
| 		$this->webHandler->maniaLinkUpdateNeeded(); | ||||
| 	} | ||||
|  | ||||
| 	public function handleSettingChanged(Setting $setting){ | ||||
| 		if (!$setting->belongsToClass($this)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		$this->updateRecordWidget(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::unload() | ||||
| 	 */ | ||||
|   | ||||
| @@ -17,7 +17,7 @@ class RecordData { | ||||
| 	 */ | ||||
| 	public $nullRecord = false; | ||||
| 	public $login = ''; | ||||
| 	public $nickName = ''; | ||||
| 	public $nickname = ''; | ||||
| 	public $best = -1; | ||||
| 	public $rank = -1; | ||||
| 	public $maxRank = -1; | ||||
| @@ -38,7 +38,7 @@ class RecordData { | ||||
| 		} | ||||
|  | ||||
| 		$this->login       = $record['Login']; | ||||
| 		$this->nickName    = Formatter::stripDirtyCodes($record['NickName']); | ||||
| 		$this->nickname    = Formatter::stripDirtyCodes($record['NickName']); | ||||
| 		$this->best        = $record['Best']; | ||||
| 		$this->rank        = $record['Rank']; | ||||
| 		$this->maxRank     = $record['MaxRank']; | ||||
| @@ -54,10 +54,10 @@ class RecordData { | ||||
| 	 * @param int    $checkpoints | ||||
| 	 * @param bool   $newRecord | ||||
| 	 */ | ||||
| 	public function constructNewRecord($login, $nickName, $best, $checkpoints, $newRecord = false) { | ||||
| 	public function constructNewRecord($login, $nickname, $best, $checkpoints, $newRecord = false) { | ||||
| 		$this->nullRecord  = false; | ||||
| 		$this->login       = $login; | ||||
| 		$this->nickName    = $nickName; | ||||
| 		$this->nickname    = $nickname; | ||||
| 		$this->best        = $best; | ||||
| 		$this->checkpoints = $checkpoints; | ||||
| 		$this->newRecord   = $newRecord; | ||||
|   | ||||
| @@ -29,6 +29,7 @@ use ManiaControl\Plugins\Plugin; | ||||
| use ManiaControl\Settings\Setting; | ||||
| use ManiaControl\Settings\SettingManager; | ||||
| use ManiaControl\Utils\Formatter; | ||||
| use MCTeam\Common\RecordWidget; | ||||
|  | ||||
| /** | ||||
|  * ManiaControl Local Records Plugin | ||||
| @@ -66,7 +67,9 @@ class LocalRecordsPlugin implements ManialinkPageAnswerListener, CallbackListene | ||||
| 	 * Private properties | ||||
| 	 */ | ||||
| 	/** @var ManiaControl $maniaControl */ | ||||
| 	private $maniaControl    = null; | ||||
| 	private $maniaControl = null; | ||||
| 	/** @var \MCTeam\Common\RecordWidget $recordWidget */ | ||||
| 	private $recordWidget    = null; | ||||
| 	private $updateManialink = false; | ||||
| 	private $checkpoints     = array(); | ||||
|  | ||||
| @@ -120,6 +123,8 @@ class LocalRecordsPlugin implements ManialinkPageAnswerListener, CallbackListene | ||||
| 		$this->maniaControl = $maniaControl; | ||||
| 		$this->initTables(); | ||||
|  | ||||
| 		$this->recordWidget = new RecordWidget($this->maniaControl); | ||||
|  | ||||
| 		// Settings | ||||
| 		$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_TITLE, 'Local Records'); | ||||
| 		$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WIDGET_POSX, -139.); | ||||
| @@ -266,12 +271,16 @@ class LocalRecordsPlugin implements ManialinkPageAnswerListener, CallbackListene | ||||
| 		$titleLabel->setText($title); | ||||
| 		$titleLabel->setTranslate(true); | ||||
|  | ||||
| 		$topRecordsCount          = $lines - $recordsBeforeAfter * 2 - 1; | ||||
| 		$preGeneratedRecordsFrame = $this->generateRecordsFrame($records, $topRecordsCount); | ||||
| 		$topRecordsCount                    = $lines - $recordsBeforeAfter * 2 - 1; | ||||
| 		$preGeneratedTopRecordsFrame        = $this->recordWidget->generateRecordsFrame($records, $topRecordsCount); | ||||
| 		$preGeneratedRecordsFrameWithRecord = $this->recordWidget->generateRecordsFrame($records, $lines - 1); | ||||
|  | ||||
| 		$players = $this->maniaControl->getPlayerManager()->getPlayers(); | ||||
| 		$players              = $this->maniaControl->getPlayerManager()->getPlayers(); | ||||
| 		$playersWithoutRecord = array(); | ||||
|  | ||||
| 		foreach ($players as $player) { | ||||
| 			$sendManiaLink = true; | ||||
|  | ||||
| 			$maniaLink = new ManiaLink(self::MLID_RECORDS); | ||||
| 			$maniaLink->addChild($frame); | ||||
|  | ||||
| @@ -280,116 +289,68 @@ class LocalRecordsPlugin implements ManialinkPageAnswerListener, CallbackListene | ||||
| 			$listFrame->setPosition($posX, $posY); | ||||
|  | ||||
| 			if (isset($playerRecords[$player->index]) && $playerRecords[$player->index] >= $topRecordsCount) { | ||||
| 				$listFrame->addChild($preGeneratedRecordsFrame); | ||||
| 				$listFrame->addChild($preGeneratedTopRecordsFrame); | ||||
|  | ||||
| 				$y           = -8 - $topRecordsCount * $lineHeight; | ||||
| 				$playerIndex = $playerRecords[$player->index]; | ||||
|  | ||||
| 				//Line separator | ||||
| 				$quad = new Quad(); | ||||
| 				$quad = $this->recordWidget->getLineSeparatorQuad($width); | ||||
| 				$listFrame->addChild($quad); | ||||
| 				$quad->setStyles(Quad_Bgs1InRace::STYLE, Quad_Bgs1InRace::SUBSTYLE_BgCardList); | ||||
| 				$quad->setSize($width, 0.4); | ||||
| 				$quad->setY($y + $lineHeight / 2); | ||||
|  | ||||
| 				//Generate the Records around a player and display below topRecords | ||||
| 				for ($i = $playerIndex - $recordsBeforeAfter; $i <= $playerIndex + $recordsBeforeAfter; $i++) { | ||||
| 					if(array_key_exists($i, $records)){ //If there are no records behind you | ||||
| 						$recordFrame = $this->generateRecordLineFrame($records[$i], $player); | ||||
| 					if (array_key_exists($i, $records)) { //If there are no records behind you | ||||
| 						$recordFrame = $this->recordWidget->generateRecordLineFrame($records[$i], $player); | ||||
| 						$recordFrame->setY($y); | ||||
| 						$listFrame->addChild($recordFrame); | ||||
| 						$y -= $lineHeight; | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| 			} else if (isset($playerRecords[$player->index]) && $playerRecords[$player->index] < $topRecordsCount) { | ||||
| 				$playersWithoutRecord[] = $player; | ||||
| 				$sendManiaLink          = false; | ||||
| 			} else { | ||||
| 				$listFrame->addChild($this->generateRecordsFrame($records, $lines, $player)); //TODO Collect all players with this case and send a common manialink to save resources | ||||
| 				if ($record = $this->getLocalRecord($map, $player)) { | ||||
| 					$record->nickname = $player->nickname; | ||||
| 					$recordFrame      = $preGeneratedRecordsFrameWithRecord; | ||||
| 					$listFrame->addChild($recordFrame); | ||||
|  | ||||
| 					$y = -8 - ($lines - 1) * $lineHeight; | ||||
|  | ||||
| 					//Line separator | ||||
| 					$quad = $this->recordWidget->getLineSeparatorQuad($width); | ||||
| 					$listFrame->addChild($quad); | ||||
| 					$quad->setY($y + $lineHeight / 2); | ||||
|  | ||||
| 					$frame = $this->recordWidget->generateRecordLineFrame($record, $player); | ||||
| 					$listFrame->addChild($frame); | ||||
| 					$frame->setY($y); | ||||
|  | ||||
| 				} else { | ||||
| 					$playersWithoutRecord[] = $player; | ||||
| 					$sendManiaLink          = false; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			$this->maniaControl->getManialinkManager()->sendManialink($maniaLink, $player); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Returns a Frame with one line of the Record | ||||
| 	 * | ||||
| 	 * @param                                   $record | ||||
| 	 * @param \ManiaControl\Players\Player|null $player | ||||
| 	 * @return \FML\Controls\Frame | ||||
| 	 */ | ||||
| 	private function generateRecordLineFrame($record, Player $player = null) { | ||||
| 		$width      = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_WIDTH); | ||||
| 		$lineHeight = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_LINEHEIGHT); | ||||
|  | ||||
| 		$recordFrame = new Frame(); | ||||
|  | ||||
| 		$rankLabel = new Label(); | ||||
| 		$recordFrame->addChild($rankLabel); | ||||
| 		$rankLabel->setHorizontalAlign($rankLabel::LEFT); | ||||
| 		$rankLabel->setX($width * -0.49); | ||||
| 		$rankLabel->setSize($width * 0.09, $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); | ||||
| 		$nameLabel->setSize($width * 0.6, $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); | ||||
| 		$timeLabel->setText(Formatter::formatTime($record->time)); | ||||
| 		$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 | ||||
| 	 */ | ||||
| 	private function generateRecordsFrame($records, $limit, Player $player = null) { | ||||
| 		$lineHeight = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_LINEHEIGHT); | ||||
|  | ||||
| 		$frame = new Frame(); | ||||
|  | ||||
| 		foreach ($records as $index => $record) { | ||||
| 			if ($index >= $limit) { | ||||
| 				break; | ||||
| 			if ($sendManiaLink) { | ||||
| 				$this->maniaControl->getManialinkManager()->sendManialink($maniaLink, $player); | ||||
| 			} | ||||
|  | ||||
| 			$y = -8. - $index * $lineHeight; | ||||
|  | ||||
| 			$recordFrame = $this->generateRecordLineFrame($record, $player); | ||||
| 			$frame->addChild($recordFrame); | ||||
| 			$recordFrame->setPosition(0, $y); | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 		return $frame; | ||||
| 	} | ||||
| 		if ($playersWithoutRecord) { | ||||
| 			$maniaLink = new ManiaLink(self::MLID_RECORDS); | ||||
| 			$maniaLink->addChild($frame); | ||||
|  | ||||
| 			$listFrame = $this->recordWidget->generateRecordsFrame($records, $lines); | ||||
| 			$maniaLink->addChild($listFrame); | ||||
| 			$listFrame->setPosition($posX, $posY); | ||||
|  | ||||
| 			$this->maniaControl->getManialinkManager()->sendManialink($maniaLink, $playersWithoutRecord); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Fetch local records for the given map | ||||
| @@ -442,7 +403,7 @@ class LocalRecordsPlugin implements ManialinkPageAnswerListener, CallbackListene | ||||
| 				break; | ||||
| 			} | ||||
| 			default: | ||||
| 				$this->updateManialink = true; | ||||
| 				$this->updateRecordWidget(); | ||||
| 				break; | ||||
| 		} | ||||
| 	} | ||||
| @@ -765,4 +726,16 @@ class LocalRecordsPlugin implements ManialinkPageAnswerListener, CallbackListene | ||||
| 		$this->maniaControl->getCallbackManager()->triggerCallback(self::CB_LOCALRECORDS_CHANGED, null); | ||||
| 		$this->maniaControl->getChat()->sendInformation('Record no. $<$fff' . $recordId . '$> has been removed!'); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Update the RecordWidget variables | ||||
| 	 */ | ||||
| 	private function updateRecordWidget() { | ||||
| 		$width              = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_WIDTH); | ||||
| 		$lineHeight         = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_LINEHEIGHT); | ||||
|  | ||||
| 		$this->recordWidget->setWidth($width); | ||||
| 		$this->recordWidget->setLineHeight($lineHeight); | ||||
| 		$this->updateManialink = true; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user