* @copyright 2014 ManiaControl Team * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 */ class IconManager implements CallbackListener { /* * Constants */ const DEFAULT_IMG_URL = 'http://images.maniacontrol.com/icons/'; const PRELOAD_MLID = 'IconManager.Preload.MLID'; /* * Default icons */ const MX_ICON = 'ManiaExchange.png'; const MX_ICON_MOVER = 'ManiaExchange_logo_press.png'; const MX_ICON_GREEN = 'ManiaExchangeGreen.png'; const MX_ICON_GREEN_MOVER = 'ManiaExchange_logo_pressGreen.png'; /* * Private properties */ /** @var ManiaControl $maniaControl */ private $maniaControl = null; private $icons = array(); /** * Construct a new icon manager instance * * @param ManiaControl $maniaControl */ public function __construct(ManiaControl $maniaControl) { $this->maniaControl = $maniaControl; $this->addDefaultIcons(); // Callbacks $this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::AFTERINIT, $this, 'handleAfterInit'); $this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect'); } /** * Add the set of default icons */ private function addDefaultIcons() { $this->addIcon(self::MX_ICON); $this->addIcon(self::MX_ICON_MOVER); $this->addIcon(self::MX_ICON_GREEN); $this->addIcon(self::MX_ICON_GREEN_MOVER); } /** * Add an Icon * * @param string $iconName * @param string $iconLink */ public function addIcon($iconName, $iconLink = self::DEFAULT_IMG_URL) { $this->icons[$iconName] = $iconLink . '/' . $iconName; } /** * Get an Icon by its Name * * @param string $iconName * @return string */ public function getIcon($iconName) { if (!isset($this->icons[$iconName])) { return null; } return $this->icons[$iconName]; } /** * Handle OnInit Callback */ public function handleAfterInit() { $this->preloadIcons(); } /** * Preload Icons * * @param Player $player */ public function preloadIcons($player = null) { $maniaLink = new ManiaLink(self::PRELOAD_MLID); $frame = new Frame(); $maniaLink->add($frame); $frame->setPosition(500, 500); foreach ($this->icons as $iconUrl) { $iconQuad = new Quad(); $iconQuad->setImage($iconUrl); $iconQuad->setSize(1, 1); $frame->add($iconQuad); } // Send manialink $this->maniaControl->getManialinkManager()->sendManialink($maniaLink, $player); } /** * Handle PlayerConnect Callback * * @param Player $player */ public function handlePlayerConnect(Player $player) { $this->preloadIcons($player); } }