maplist optimations

This commit is contained in:
kremsy 2014-01-15 18:31:06 +01:00 committed by Steffen Schröder
parent ae80995be6
commit 7fa6a0beda
2 changed files with 83 additions and 6 deletions

View File

@ -89,11 +89,20 @@ class ManiaExchangeManager {
$saveMapStatement->close(); $saveMapStatement->close();
} }
/** /**
* Fetch Map Information from Mania Exchange * Fetch Map Information from Mania Exchange
* @param null $map
*/ */
public function fetchManiaExchangeMapInformations() { public function fetchManiaExchangeMapInformations($map = null) {
$maps = $this->maniaControl->mapManager->getMaps(); if(!$map){
//Fetch Informations for whole Maplist
$maps = $this->maniaControl->mapManager->getMaps();
}else{
//Fetch Information for a single map
$maps[] = $map;
}
$mysqli = $this->maniaControl->database->mysqli; $mysqli = $this->maniaControl->database->mysqli;
$mapIdString = ''; $mapIdString = '';

View File

@ -45,6 +45,7 @@ class MapManager implements CallbackListener {
*/ */
private $maniaControl = null; private $maniaControl = null;
private $maps = array(); private $maps = array();
/** @var Map $currentMap */
private $currentMap = null; private $currentMap = null;
/** /**
@ -164,8 +165,9 @@ class MapManager implements CallbackListener {
/** /**
* Remove a Map * Remove a Map
* *
* @param string $uid * @param \ManiaControl\Players\Player $admin
* @param bool $eraseFile * @param string $uid
* @param bool $eraseFile
*/ */
public function removeMap(Player $admin, $uid, $eraseFile = false) { //TODO erasefile? public function removeMap(Player $admin, $uid, $eraseFile = false) { //TODO erasefile?
$map = $this->maps[$uid]; $map = $this->maps[$uid];
@ -183,17 +185,55 @@ class MapManager implements CallbackListener {
unset($this->maps[$uid]); unset($this->maps[$uid]);
} }
/**
* Restructures the Maplist
*/
public function restructureMapList() {
$currentIndex = $this->getMapIndex($this->currentMap);
//No RestructureNeeded
if($currentIndex < 14) {
return true;
}
$lowerMapArray = array();
$higherMapArray = array();
$i = 0;
foreach($this->maps as $map) {
/** @var Map $map */
if($i < $currentIndex) {
$lowerMapArray[] = $map->fileName;
} else {
$higherMapArray[] = $map->fileName;
}
$i++;
}
$mapArray = array_merge($higherMapArray, $lowerMapArray);
if(!$this->maniaControl->client->query('ChooseNextMapList', $mapArray)) {
trigger_error("Error while restructuring the Maplist. " . $this->maniaControl->getClientErrorText());
return false;
}
return true;
}
/** /**
* Shuffles the MapList * Shuffles the MapList
* *
* @param Player $admin
* @return bool * @return bool
*/ */
public function shuffleMapList($admin = null) { public function shuffleMapList($admin = null) {
shuffle($this->maps); $shuffledMaps = $this->maps;
shuffle($shuffledMaps);
$mapArray = array(); $mapArray = array();
foreach($this->maps as $map) { foreach($shuffledMaps as $map) {
/** @var Map $map */ /** @var Map $map */
$mapArray[] = $map->fileName; $mapArray[] = $map->fileName;
} }
@ -211,6 +251,8 @@ class MapManager implements CallbackListener {
$this->maniaControl->log($message, true); $this->maniaControl->log($message, true);
} }
//Restructure if needed
$this->restructureMapList();
return true; return true;
} }
@ -298,7 +340,13 @@ class MapManager implements CallbackListener {
public function handleOnInit(array $callback) { public function handleOnInit(array $callback) {
$this->updateFullMapList(); $this->updateFullMapList();
$this->fetchCurrentMap(); $this->fetchCurrentMap();
//Fetch Mx Infos
$this->mxManager->fetchManiaExchangeMapInformations(); $this->mxManager->fetchManiaExchangeMapInformations();
//Restructure Maplist
$this->restructureMapList();
} }
/** /**
@ -337,8 +385,15 @@ class MapManager implements CallbackListener {
$this->fetchCurrentMap(); $this->fetchCurrentMap();
} }
//Restructure MapList if id is over 15
$this->restructureMapList();
//Update the mx of the map (for update checks, etc.)
$this->mxManager->fetchManiaExchangeMapInformations($this->currentMap);
// Trigger own BeginMap callback // Trigger own BeginMap callback
$this->maniaControl->callbackManager->triggerCallback(self::CB_BEGINMAP, array(self::CB_BEGINMAP, $this->currentMap)); $this->maniaControl->callbackManager->triggerCallback(self::CB_BEGINMAP, array(self::CB_BEGINMAP, $this->currentMap));
} }
/** /**
@ -358,6 +413,19 @@ class MapManager implements CallbackListener {
return array_values($this->maps); return array_values($this->maps);
} }
/**
* Returns the MapIndex of a given map
*
* @param Map $map
* @internal param $uid
* @return mixed
*/
public function getMapIndex(Map $map) {
$maps = $this->getMaps();
return array_search($map, $maps);
}
/** /**
* Adds a Map from Mania Exchange * Adds a Map from Mania Exchange
* *