diff --git a/application/core/Callbacks/CallbackManager.php b/application/core/Callbacks/CallbackManager.php index d0234204..5dfbba21 100644 --- a/application/core/Callbacks/CallbackManager.php +++ b/application/core/Callbacks/CallbackManager.php @@ -55,7 +55,7 @@ class CallbackManager { private $last1Second = -1; private $last5Second = -1; private $last1Minute = -1; - + private $mapEnded = false; /** * Construct callbacks manager * @@ -204,11 +204,15 @@ class CallbackManager { case 'ManiaPlanet.BeginMap': { $this->triggerCallback(self::CB_MC_BEGINMAP, $callback); + $this->mapEnded = false; break; } case 'ManiaPlanet.EndMap': { - $this->triggerCallback(self::CB_MC_ENDMAP, $callback); + if(!$this->mapEnded){ + $this->triggerCallback(self::CB_MC_ENDMAP, $callback); + $this->mapEnded = true; + } break; } case self::CB_MP_MODESCRIPTCALLBACK: @@ -244,13 +248,19 @@ class CallbackManager { case 'EndMap': { $this->triggerScriptCallback($scriptCallbackName, $scriptCallbackData); - $this->triggerCallback(self::CB_MC_ENDMAP, $callback); + if(!$this->mapEnded){ + $this->triggerCallback(self::CB_MC_ENDMAP, $callback); + $this->mapEnded = true; + } break; } case 'LibXmlRpc_EndMap': { $this->triggerScriptCallback($scriptCallbackName, $scriptCallbackData); - $this->triggerCallback(self::CB_MC_ENDMAP, $callback); + if(!$this->mapEnded){ + $this->triggerCallback(self::CB_MC_ENDMAP, $callback); + $this->mapEnded = true; + } break; } default: diff --git a/application/core/Maps/Jukebox.php b/application/core/Maps/Jukebox.php index e0166a3b..6f91c33f 100644 --- a/application/core/Maps/Jukebox.php +++ b/application/core/Maps/Jukebox.php @@ -1,6 +1,8 @@ maniaControl = $maniaControl; + $this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_BEGINMAP, $this,'beginMap'); + $this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_ENDMAP, $this,'endMap'); } - public function addMapToJukebox($uid){ + /** + * Adds a Map to the jukebox + * @param $login + * @param $uid + */ + public function addMapToJukebox($login, $uid){ //Check if the map is already juked if(array_key_exists($uid, $this->jukedMaps)){ @@ -41,11 +50,77 @@ class Jukebox { //TODO recently maps not able to add to jukebox setting, and management - $this->jukedMaps[$uid] = $this->maniaControl->mapManager->getMapByUid($uid); + //$this->jukedMapsUid[$uid] = array($login, $this->maniaControl->mapManager->getMapByUid($uid)); + $this->jukedMaps[$uid] = array($login, $this->maniaControl->mapManager->getMapByUid($uid)); //TODO Message // Trigger callback $this->maniaControl->callbackManager->triggerCallback(self::CB_JUKEBOX_CHANGED, array('add', $this->jukedMaps[$uid])); + + $this->printAllMaps(); } + + /** + * Revmoes a Map from the jukebox + * @param $login + * @param $uid + */ + public function removeFromJukebox($login, $uid){ + //unset($this->jukedMapsUid[$uid]); + unset($this->jukedMaps[$uid]); + + + } + + public function beginMap(){ + + + } + + public function endMap(){ + var_dump("endmap"); + + //TODO setting admin no skip + //TODO setting skip map if requester left + //Skip Map if requester has left + for($i = 0; $i < count($this->jukedMaps); $i++){ + $jukedMap = reset($this->jukedMaps); + + //found player, so play this map + if($this->maniaControl->playerManager->getPlayer($jukedMap[0]) == null){ + break; + } + + // Trigger callback + $this->maniaControl->callbackManager->triggerCallback(self::CB_JUKEBOX_CHANGED, array('skip', $jukedMap[0])); + + //Player not found, so remove the map from the jukebox + array_shift($this->jukedMaps); + + //TODO Message, report skip + } + + $nextMap = array_shift($this->jukedMaps); + + //Check if Jukebox is empty + if(!isset($nextMap)) + return; + + $nextMap = $nextMap[1]; + //var_dump($nextMap); + var_dump($nextMap->name); + $this->printAllMaps(); + + //Set pointer back to last map + end($this->jukedMaps); + } + + public function printAllMaps(){ + foreach($this->jukedMaps as $map){ + $map = $map[1]; + var_dump($map->name); + } + } + } \ No newline at end of file diff --git a/application/core/Maps/Map.php b/application/core/Maps/Map.php index c4ecca81..890fa9fb 100644 --- a/application/core/Maps/Map.php +++ b/application/core/Maps/Map.php @@ -46,7 +46,7 @@ class Map { * @param array $rpc_infos */ public function __construct(ManiaControl $maniaControl, $rpc_infos = null) { - $this->maniaControl = $maniaControl; + // $this->maniaControl = $maniaControl; $this->startTime = time(); if (!$rpc_infos) { @@ -67,7 +67,7 @@ class Map { $this->authorNick = $this->authorLogin; - $mapsDirectory = $this->maniaControl->server->getMapsDirectory(); + /*$mapsDirectory = $this->maniaControl->server->getMapsDirectory(); if ($this->maniaControl->server->checkAccess($mapsDirectory)) { $this->mapFetcher = new \GBXChallMapFetcher(true); try { @@ -86,6 +86,6 @@ class Map { // TODO: define timeout if mx is down,todo fetch all map infos at once (maybe way faster) $serverInfo = $this->maniaControl->server->getSystemInfo(); $title = strtoupper(substr($serverInfo['TitleId'], 0, 2)); - $this->mx = new \MXInfoFetcher($title, $this->uid, false); + $this->mx = new \MXInfoFetcher($title, $this->uid, false);*/ } } \ No newline at end of file diff --git a/application/core/Maps/MapList.php b/application/core/Maps/MapList.php index 56fa39ba..32196156 100644 --- a/application/core/Maps/MapList.php +++ b/application/core/Maps/MapList.php @@ -34,6 +34,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { const ACTION_ADD_MAP = 'MapList.AddMap'; const ACTION_ERASE_MAP = 'MapList.EraseMap'; const ACTION_SWITCH_MAP = 'MapList.SwitchMap'; + const ACTION_JUKE_MAP = 'MapList.JukeMap'; const MAX_MAPS_PER_PAGE = 15; @@ -173,7 +174,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { } //TODO add MX info screen - //TODO add download Map button //render and display xml $this->maniaControl->manialinkManager->displayWidget($maniaLink, $player); @@ -242,7 +242,17 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { $this->displayMap($id, $map, $mapFrame, $tooltips); $mapFrame->setY($y); - if($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_ADMIN)){ //todoSET as setting who can add maps + //Juke-Map-Button + $jukeQuad = new Quad_UIConstruction_Buttons(); + $mapFrame->add($jukeQuad); + $jukeQuad->setX($this->width/2 - 15); + $jukeQuad->setZ(0.2); + $jukeQuad->setSize(4,4); + $jukeQuad->setSubStyle($jukeQuad::SUBSTYLE_Erase); + $jukeQuad->setAction(self::ACTION_JUKE_MAP . "." . $map->uid); + //TODO description and jukebox button + + if($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_ADMIN)){ //TODO SET as setting who can add maps //erase map quad $eraseQuad = new Quad_UIConstruction_Buttons(); $mapFrame->add($eraseQuad); @@ -263,7 +273,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { $descriptionLabel->setText("Remove Map: {$map->name}"); $tooltips->add($eraseQuad, $descriptionLabel); } - if($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_OPERATOR)){ //todoSET as setting who can add maps + if($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_OPERATOR)){ //TODO SET as setting who can add maps //switch to map quad $switchToQuad = new Quad_Icons64x64_1(); $mapFrame->add($switchToQuad); @@ -349,8 +359,9 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { $addMap = (strpos($actionId, self::ACTION_ADD_MAP) === 0); $eraseMap = (strpos($actionId, self::ACTION_ERASE_MAP) === 0); $switchMap = (strpos($actionId, self::ACTION_SWITCH_MAP) === 0); + $jukeMap = (strpos($actionId, self::ACTION_JUKE_MAP) === 0); - if(!$addMap && !$eraseMap && !$switchMap) + if(!$addMap && !$eraseMap && !$switchMap && !$jukeMap) return; $actionArray = explode(".", $actionId); @@ -368,6 +379,9 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { $this->maniaControl->chat->sendSuccess('Map switched to $z$<' . $mapList[$actionArray[2]]->name . '$>!'); //TODO specified message, who done it? $this->maniaControl->log('Skipped to $z$<' . $mapList[$actionArray[2]]->name . '$>!'); + }else if($jukeMap){ + $this->maniaControl->mapManager->jukebox->addMapToJukebox($callback[1][1], $actionArray[2]); + } }