2013-12-14 22:00:59 +01:00
< ? php
namespace ManiaControl\Maps ;
2014-01-02 10:38:46 +01:00
2014-02-07 22:57:39 +01:00
use CustomVotesPlugin ;
2013-12-14 22:00:59 +01:00
use FML\Controls\Control ;
2014-01-02 10:38:46 +01:00
use FML\Controls\Frame ;
2013-12-29 19:21:29 +01:00
use FML\Controls\Gauge ;
2013-12-14 22:00:59 +01:00
use FML\Controls\Label ;
2013-12-31 02:27:40 +01:00
use FML\Controls\Labels\Label_Button ;
2013-12-28 23:52:09 +01:00
use FML\Controls\Labels\Label_Text ;
2014-01-02 10:38:46 +01:00
use FML\Controls\Quad ;
2013-12-31 02:27:40 +01:00
use FML\Controls\Quads\Quad_BgsPlayerCard ;
2013-12-14 22:00:59 +01:00
use FML\Controls\Quads\Quad_Icons64x64_1 ;
2014-01-02 10:38:46 +01:00
use FML\ManiaLink ;
2013-12-15 15:13:56 +01:00
use FML\Script\Script ;
2013-12-30 16:58:35 +01:00
use KarmaPlugin ;
2013-12-15 15:13:56 +01:00
use ManiaControl\Callbacks\CallbackListener ;
use ManiaControl\Callbacks\CallbackManager ;
2013-12-29 19:21:29 +01:00
use ManiaControl\ColorUtil ;
2013-12-31 11:39:54 +01:00
use ManiaControl\Formatter ;
2014-01-02 10:38:46 +01:00
use ManiaControl\ManiaControl ;
2014-01-09 18:19:37 +01:00
use ManiaControl\Manialinks\IconManager ;
2013-12-15 11:29:49 +01:00
use ManiaControl\Manialinks\ManialinkManager ;
2013-12-14 22:00:59 +01:00
use ManiaControl\Manialinks\ManialinkPageAnswerListener ;
use ManiaControl\Players\Player ;
2014-02-13 14:21:25 +01:00
use Maniaplanet\DedicatedServer\Xmlrpc\Exception ;
2013-12-14 22:00:59 +01:00
2013-12-24 13:09:39 +01:00
/**
* MapList Widget Class
*
* @ author steeffeen & kremsy
*/
2013-12-15 15:13:56 +01:00
class MapList implements ManialinkPageAnswerListener , CallbackListener {
2013-12-18 15:48:33 +01:00
/**
* Constants
*/
2014-02-07 22:57:39 +01:00
const ACTION_UPDATE_MAP = 'MapList.UpdateMap' ;
const ACTION_ERASE_MAP = 'MapList.EraseMap' ;
const ACTION_SWITCH_MAP = 'MapList.SwitchMap' ;
const ACTION_START_SWITCH_VOTE = 'MapList.StartMapSwitchVote' ;
const ACTION_QUEUED_MAP = 'MapList.QueueMap' ;
const ACTION_UNQUEUE_MAP = 'MapList.UnQueueMap' ;
const ACTION_CHECK_UPDATE = 'MapList.CheckUpdate' ;
const ACTION_CLEAR_MAPQUEUE = 'MapList.ClearMapQueue' ;
const MAX_MAPS_PER_PAGE = 15 ;
const DEFAULT_KARMA_PLUGIN = 'KarmaPlugin' ;
const DEFAULT_CUSTOM_VOTE_PLUGIN = 'CustomVotesPlugin' ;
2014-01-08 18:07:09 +01:00
2013-12-14 22:00:59 +01:00
/**
2014-01-06 15:54:22 +01:00
* Private Properties
2013-12-14 22:00:59 +01:00
*/
private $maniaControl = null ;
2013-12-28 23:24:54 +01:00
private $mapListShown = array ();
2013-12-14 22:00:59 +01:00
/**
2014-01-06 15:54:22 +01:00
* Create a new MapList Instance
2013-12-14 22:00:59 +01:00
*
* @ param ManiaControl $maniaControl
*/
public function __construct ( ManiaControl $maniaControl ) {
$this -> maniaControl = $maniaControl ;
2014-01-08 18:07:09 +01:00
2014-01-06 15:54:22 +01:00
// Register for Callbacks
2014-01-02 10:38:46 +01:00
$this -> maniaControl -> callbackManager -> registerCallbackListener ( ManialinkManager :: CB_MAIN_WINDOW_CLOSED , $this , 'closeWidget' );
2014-01-11 17:24:03 +01:00
$this -> maniaControl -> callbackManager -> registerCallbackListener ( ManialinkManager :: CB_MAIN_WINDOW_OPENED , $this , 'handleWidgetOpened' );
2014-01-08 18:07:09 +01:00
$this -> maniaControl -> callbackManager -> registerCallbackListener ( CallbackManager :: CB_MP_PLAYERMANIALINKPAGEANSWER , $this , 'handleManialinkPageAnswer' );
2013-12-31 12:25:03 +01:00
$this -> maniaControl -> callbackManager -> registerCallbackListener ( MapQueue :: CB_MAPQUEUE_CHANGED , $this , 'updateWidget' );
2014-01-06 18:50:26 +01:00
$this -> maniaControl -> callbackManager -> registerCallbackListener ( MapManager :: CB_MAPS_UPDATED , $this , 'updateWidget' );
2014-01-06 15:54:22 +01:00
$this -> maniaControl -> callbackManager -> registerCallbackListener ( MapManager :: CB_KARMA_UPDATED , $this , 'updateWidget' );
2014-01-09 19:00:37 +01:00
$this -> maniaControl -> callbackManager -> registerCallbackListener ( MapManager :: CB_BEGINMAP , $this , 'updateWidget' );
2014-01-09 16:41:17 +01:00
2014-01-17 22:35:14 +01:00
$this -> maniaControl -> manialinkManager -> registerManialinkPageAnswerListener ( self :: ACTION_CHECK_UPDATE , $this , 'checkUpdates' );
$this -> maniaControl -> manialinkManager -> registerManialinkPageAnswerListener ( self :: ACTION_CLEAR_MAPQUEUE , $this , 'clearMapQueue' );
2013-12-14 22:00:59 +01:00
}
2014-01-17 22:35:14 +01:00
/**
* Clears the Map Queue
*
* @ param array $chatCallback
* @ param Player $player
*/
2014-01-28 17:04:12 +01:00
public function clearMapQueue ( array $chatCallback , Player $player ) {
2014-01-17 22:35:14 +01:00
//Clears the Map Queue
$this -> maniaControl -> mapManager -> mapQueue -> clearMapQueue ( $player );
}
/**
* Check for Map Updates
*
* @ param array $chatCallback
* @ param Player $player
*/
public function checkUpdates ( array $chatCallback , Player $player ) {
//Update Mx Infos
$this -> maniaControl -> mapManager -> mxManager -> fetchManiaExchangeMapInformations ();
2014-02-07 13:12:53 +01:00
2014-01-17 22:35:14 +01:00
//Reshow the Maplist
$this -> showMapList ( $player );
}
2014-01-09 16:41:17 +01:00
2014-01-02 10:38:46 +01:00
2013-12-15 11:29:49 +01:00
/**
* Displayes a MapList on the screen
2014-01-02 10:38:46 +01:00
*
2013-12-15 11:29:49 +01:00
* @ param Player $player
*/
2014-01-03 18:04:46 +01:00
public function showMapList ( Player $player ) {
2014-01-08 18:07:09 +01:00
$width = $this -> maniaControl -> manialinkManager -> styleManager -> getListWidgetsWidth ();
2014-01-06 15:54:22 +01:00
$height = $this -> maniaControl -> manialinkManager -> styleManager -> getListWidgetsHeight ();
2014-01-08 18:07:09 +01:00
2014-01-28 16:54:23 +01:00
$this -> mapListShown [ $player -> login ] = true ;
2014-01-08 18:07:09 +01:00
2014-01-28 19:28:17 +01:00
// Get Maps
$mapList = $this -> maniaControl -> mapManager -> getMaps ();
2014-01-08 18:07:09 +01:00
2014-01-28 19:28:17 +01:00
$pagesId = '' ;
2014-01-27 21:27:31 +01:00
if ( count ( $mapList ) > self :: MAX_MAPS_PER_PAGE ) {
2014-01-28 19:28:17 +01:00
$pagesId = 'MapListPages' ;
2014-01-02 20:50:09 +01:00
}
2014-01-08 18:07:09 +01:00
2014-01-28 19:28:17 +01:00
//Create ManiaLink
$maniaLink = new ManiaLink ( ManialinkManager :: MAIN_MLID );
$script = $maniaLink -> getScript ();
// Main frame
2014-01-31 13:40:07 +01:00
$frame = $this -> maniaControl -> manialinkManager -> styleManager -> getDefaultListFrame ( $script , $pagesId );
2014-01-28 19:28:17 +01:00
$maniaLink -> add ( $frame );
2014-01-17 22:35:14 +01:00
//Admin Buttons
2014-01-28 20:09:09 +01:00
if ( $this -> maniaControl -> authenticationManager -> checkPermission ( $player , MapQueue :: SETTING_PERMISSION_CLEAR_MAPQUEUE )) {
2014-01-28 19:28:17 +01:00
//Clear Map-Queue
2014-01-17 22:35:14 +01:00
$label = new Label_Button ();
$frame -> add ( $label );
$label -> setText ( " Clear Map-Queue " );
$label -> setTextSize ( 1 );
$label -> setPosition ( $width / 2 - 8 , - $height / 2 + 9 );
$label -> setHAlign ( Control :: RIGHT );
$quad = new Quad_BgsPlayerCard ();
$frame -> add ( $quad );
$quad -> setPosition ( $width / 2 - 5 , - $height / 2 + 9 , 0.01 );
$quad -> setSubStyle ( $quad :: SUBSTYLE_BgPlayerCardBig );
$quad -> setHAlign ( Control :: RIGHT );
$quad -> setSize ( 29 , 4 );
$quad -> setAction ( self :: ACTION_CLEAR_MAPQUEUE );
2014-01-28 20:14:21 +01:00
}
2014-01-17 22:35:14 +01:00
2014-01-28 20:14:21 +01:00
if ( $this -> maniaControl -> authenticationManager -> checkPermission ( $player , MapManager :: SETTING_PERMISSION_CHECK_UPDATE )) {
2014-01-17 22:35:14 +01:00
//Check Update
$label = new Label_Button ();
$frame -> add ( $label );
$label -> setText ( " Check MX Updates " );
$label -> setTextSize ( 1 );
$label -> setPosition ( $width / 2 - 41 , - $height / 2 + 9 , 0.01 );
$label -> setHAlign ( Control :: RIGHT );
$quad = new Quad_BgsPlayerCard ();
$frame -> add ( $quad );
$quad -> setPosition ( $width / 2 - 37 , - $height / 2 + 9 , 0.01 );
$quad -> setSubStyle ( $quad :: SUBSTYLE_BgPlayerCardBig );
$quad -> setHAlign ( Control :: RIGHT );
$quad -> setSize ( 35 , 4 );
$quad -> setAction ( self :: ACTION_CHECK_UPDATE );
$mxQuad = new Quad ();
$frame -> add ( $mxQuad );
$mxQuad -> setSize ( 3 , 3 );
$mxQuad -> setImage ( $this -> maniaControl -> manialinkManager -> iconManager -> getIcon ( IconManager :: MX_ICON_GREEN ));
$mxQuad -> setImageFocus ( $this -> maniaControl -> manialinkManager -> iconManager -> getIcon ( IconManager :: MX_ICON_GREEN_MOVER ));
$mxQuad -> setPosition ( $width / 2 - 67 , - $height / 2 + 9 );
$mxQuad -> setZ ( 0.01 );
$mxQuad -> setAction ( self :: ACTION_CHECK_UPDATE );
}
2014-01-06 15:54:22 +01:00
// Headline
2013-12-15 11:55:44 +01:00
$headFrame = new Frame ();
$frame -> add ( $headFrame );
2014-01-06 15:54:22 +01:00
$headFrame -> setY ( $height / 2 - 5 );
2014-01-08 18:07:09 +01:00
$x = - $width / 2 ;
$array = array ( 'Id' => $x + 5 , 'Mx Id' => $x + 10 , 'Map Name' => $x + 20 , 'Author' => $x + 68 , 'Karma' => $x + 115 , 'Actions' => $width / 2 - 15 );
2014-01-02 10:38:46 +01:00
$this -> maniaControl -> manialinkManager -> labelLine ( $headFrame , $array );
2014-01-08 18:07:09 +01:00
2014-01-31 13:40:07 +01:00
//Predefine description Label
$descriptionLabel = $this -> maniaControl -> manialinkManager -> styleManager -> getDefaultDescriptionLabel ();
2014-01-12 00:28:06 +01:00
$frame -> add ( $descriptionLabel );
2014-01-08 18:07:09 +01:00
2013-12-31 12:36:49 +01:00
$queuedMaps = $this -> maniaControl -> mapManager -> mapQueue -> getQueuedMapsRanking ();
2014-01-06 15:54:22 +01:00
/**
* @ var KarmaPlugin $karmaPlugin
*/
2013-12-29 19:21:29 +01:00
$karmaPlugin = $this -> maniaControl -> pluginManager -> getPlugin ( self :: DEFAULT_KARMA_PLUGIN );
2014-01-08 18:07:09 +01:00
$id = 1 ;
$y = $height / 2 - 10 ;
2014-01-02 20:50:09 +01:00
$pageFrames = array ();
2014-01-06 15:54:22 +01:00
/**
* @ var Map $map
*/
2014-01-08 18:07:09 +01:00
foreach ( $mapList as $map ) {
2014-01-27 21:27:31 +01:00
if ( ! isset ( $pageFrame )) {
2014-01-02 20:50:09 +01:00
$pageFrame = new Frame ();
$frame -> add ( $pageFrame );
2014-01-27 21:27:31 +01:00
if ( ! empty ( $pageFrames )) {
2014-01-02 20:50:09 +01:00
$pageFrame -> setVisible ( false );
}
array_push ( $pageFrames , $pageFrame );
2014-01-06 15:54:22 +01:00
$y = $height / 2 - 10 ;
2014-01-02 20:50:09 +01:00
$script -> addPage ( $pageFrame , count ( $pageFrames ), $pagesId );
}
2014-01-08 18:07:09 +01:00
2014-01-06 15:54:22 +01:00
// Map Frame
2013-12-14 22:00:59 +01:00
$mapFrame = new Frame ();
2014-01-02 20:50:09 +01:00
$pageFrame -> add ( $mapFrame );
2013-12-30 16:58:35 +01:00
$mapFrame -> setZ ( 0.1 );
2013-12-14 22:00:59 +01:00
$mapFrame -> setY ( $y );
2014-01-08 18:07:09 +01:00
2014-01-27 21:27:31 +01:00
if ( $id % 2 != 0 ) {
2013-12-31 02:27:40 +01:00
$lineQuad = new Quad_BgsPlayerCard ();
$mapFrame -> add ( $lineQuad );
2014-01-06 15:54:22 +01:00
$lineQuad -> setSize ( $width , 4 );
2013-12-31 02:27:40 +01:00
$lineQuad -> setSubStyle ( $lineQuad :: SUBSTYLE_BgPlayerCardBig );
$lineQuad -> setZ ( 0.001 );
}
2014-01-08 18:07:09 +01:00
2014-01-27 21:27:31 +01:00
if ( $this -> maniaControl -> mapManager -> getCurrentMap () === $map ) {
2013-12-30 16:58:35 +01:00
$currentQuad = new Quad_Icons64x64_1 ();
2013-12-30 20:15:38 +01:00
$mapFrame -> add ( $currentQuad );
2013-12-30 16:58:35 +01:00
$currentQuad -> setX ( $x + 3.5 );
$currentQuad -> setZ ( 0.2 );
$currentQuad -> setSize ( 4 , 4 );
$currentQuad -> setSubStyle ( $currentQuad :: SUBSTYLE_ArrowBlue );
}
2014-01-08 18:07:09 +01:00
2013-12-30 16:58:35 +01:00
$mxId = '-' ;
2014-01-27 21:27:31 +01:00
if ( isset ( $map -> mx -> id )) {
2013-12-30 16:58:35 +01:00
$mxId = $map -> mx -> id ;
2014-01-12 00:28:06 +01:00
$mxQuad = new Quad ();
$mapFrame -> add ( $mxQuad );
$mxQuad -> setSize ( 3 , 3 );
$mxQuad -> setImage ( $this -> maniaControl -> manialinkManager -> iconManager -> getIcon ( IconManager :: MX_ICON ));
$mxQuad -> setImageFocus ( $this -> maniaControl -> manialinkManager -> iconManager -> getIcon ( IconManager :: MX_ICON_MOVER ));
$mxQuad -> setX ( $x + 65 );
$mxQuad -> setUrl ( $map -> mx -> pageurl );
$mxQuad -> setZ ( 0.01 );
$script -> addTooltip ( $mxQuad , $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => " View $ < " . $map -> name . " $ > on Mania-Exchange " ));
2014-01-27 21:27:31 +01:00
if ( $map -> updateAvailable ()) {
2014-01-12 00:28:06 +01:00
$mxQuad = new Quad ();
$mapFrame -> add ( $mxQuad );
$mxQuad -> setSize ( 3 , 3 );
$mxQuad -> setImage ( $this -> maniaControl -> manialinkManager -> iconManager -> getIcon ( IconManager :: MX_ICON_GREEN ));
$mxQuad -> setImageFocus ( $this -> maniaControl -> manialinkManager -> iconManager -> getIcon ( IconManager :: MX_ICON_GREEN_MOVER ));
$mxQuad -> setX ( $x + 62 );
$mxQuad -> setUrl ( $map -> mx -> pageurl );
$mxQuad -> setZ ( 0.01 );
$script -> addTooltip ( $mxQuad , $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => " Update of $ < " . $map -> name . " $ > available on Mania-Exchange " ));
2014-01-15 20:49:01 +01:00
//Update Button
2014-01-27 21:27:31 +01:00
if ( $this -> maniaControl -> authenticationManager -> checkPermission ( $player , MapManager :: SETTING_PERMISSION_ADD_MAP )) {
2014-01-15 20:49:01 +01:00
$mxQuad -> setAction ( self :: ACTION_UPDATE_MAP . '.' . $map -> uid );
}
2014-01-12 00:28:06 +01:00
}
2014-01-02 10:38:46 +01:00
}
2014-01-08 18:07:09 +01:00
2014-01-06 15:54:22 +01:00
// Display Maps
2014-01-27 21:27:31 +01:00
$array = array ( $id => $x + 5 , $mxId => $x + 10 , Formatter :: stripDirtyCodes ( $map -> name ) => $x + 20 , $map -> authorNick => $x + 68 );
$labels = $this -> maniaControl -> manialinkManager -> labelLine ( $mapFrame , $array );
2014-04-09 10:38:00 +02:00
if ( isset ( $labels [ 3 ])) {
2014-02-26 20:59:32 +01:00
$script -> addTooltip ( $labels [ 3 ], $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => '$<' . $map -> name . '$> made by $<' . $map -> authorLogin . '$>' ));
}
2014-01-27 21:27:31 +01:00
2014-01-09 19:00:37 +01:00
// TODO action detailed map info including mx info
2014-01-08 18:07:09 +01:00
2014-01-06 15:54:22 +01:00
// Map-Queue-Map-Label
2014-01-27 21:27:31 +01:00
if ( isset ( $queuedMaps [ $map -> uid ])) {
2013-12-31 12:36:49 +01:00
$label = new Label_Text ();
$mapFrame -> add ( $label );
2014-01-06 15:54:22 +01:00
$label -> setX ( $width / 2 - 15 );
2014-01-02 10:38:46 +01:00
$label -> setAlign ( Control :: CENTER , Control :: CENTER );
2013-12-31 12:36:49 +01:00
$label -> setZ ( 0.2 );
$label -> setTextSize ( 1.5 );
$label -> setText ( $queuedMaps [ $map -> uid ]);
2014-01-06 15:54:22 +01:00
$label -> setTextColor ( 'fff' );
2014-01-28 20:09:09 +01:00
//Checks if the Player who openend the Widget has queued the map
$queuer = $this -> maniaControl -> mapManager -> mapQueue -> getQueuer ( $map -> uid );
if ( $queuer -> login == $player -> login ) {
$script -> addTooltip ( $label , $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => 'Remove $<' . $map -> name . '$> from the Map Queue' ));
$label -> setAction ( self :: ACTION_UNQUEUE_MAP . '.' . $map -> uid );
} else {
$script -> addTooltip ( $label , $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => '$<' . $map -> name . '$> is on Map-Queue Position: ' . $queuedMaps [ $map -> uid ]));
}
2014-01-08 18:07:09 +01:00
} else {
2014-01-06 15:54:22 +01:00
// Map-Queue-Map-Button
$queueLabel = new Label_Button ();
$mapFrame -> add ( $queueLabel );
$queueLabel -> setX ( $width / 2 - 15 );
$queueLabel -> setZ ( 0.2 );
$queueLabel -> setSize ( 3 , 3 );
$queueLabel -> setAction ( self :: ACTION_QUEUED_MAP . '.' . $map -> uid );
$queueLabel -> setText ( '+' );
$queueLabel -> setTextColor ( '09f' );
2014-01-08 18:07:09 +01:00
2014-01-28 20:09:09 +01:00
$script -> addTooltip ( $queueLabel , $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => 'Add $<' . $map -> name . '$> to the Map Queue' ));
2014-01-06 15:54:22 +01:00
}
2014-01-08 18:07:09 +01:00
2014-01-27 21:27:31 +01:00
if ( $this -> maniaControl -> authenticationManager -> checkPermission ( $player , MapManager :: SETTING_PERMISSION_REMOVE_MAP )) {
2014-01-06 15:54:22 +01:00
// erase map quad
2014-01-06 14:43:26 +01:00
$eraseLabel = new Label_Button ();
$mapFrame -> add ( $eraseLabel );
2014-01-06 15:54:22 +01:00
$eraseLabel -> setX ( $width / 2 - 5 );
2014-01-06 14:43:26 +01:00
$eraseLabel -> setZ ( 0.2 );
$eraseLabel -> setSize ( 3 , 3 );
$eraseLabel -> setTextSize ( 1 );
2014-01-06 15:54:22 +01:00
$eraseLabel -> setText ( 'x' );
$eraseLabel -> setTextColor ( 'a00' );
2014-01-08 18:07:09 +01:00
2014-01-03 18:04:46 +01:00
$confirmFrame = $this -> buildConfirmFrame ( $maniaLink , $y , $id , $map -> uid );
2014-01-12 01:59:23 +01:00
$script -> addToggle ( $eraseLabel , $confirmFrame );
2014-01-12 00:28:06 +01:00
$script -> addTooltip ( $eraseLabel , $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => 'Remove Map: $<' . $map -> name . '$>' ));
2013-12-16 12:41:14 +01:00
}
2014-01-08 18:07:09 +01:00
2014-02-19 22:24:56 +01:00
if ( $this -> maniaControl -> authenticationManager -> checkPermission ( $player , MapManager :: SETTING_PERMISSION_ADD_MAP )) {
// Switch to map
2014-02-07 22:57:39 +01:00
$switchLabel = new Label_Button ();
$mapFrame -> add ( $switchLabel );
$switchLabel -> setX ( $width / 2 - 10 );
$switchLabel -> setZ ( 0.2 );
$switchLabel -> setSize ( 3 , 3 );
$switchLabel -> setTextSize ( 2 );
$switchLabel -> setText ( '»' );
$switchLabel -> setTextColor ( '0f0' );
2014-02-19 22:24:56 +01:00
$confirmFrame = $this -> buildConfirmFrame ( $maniaLink , $y , $id );
$script -> addToggle ( $switchLabel , $confirmFrame );
2014-02-09 22:31:42 +01:00
2014-02-19 22:24:56 +01:00
$script -> addTooltip ( $switchLabel , $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => 'Switch Directly to Map: $<' . $map -> name . '$>' ));
} else if ( $this -> maniaControl -> pluginManager -> isPluginActive ( self :: DEFAULT_CUSTOM_VOTE_PLUGIN )) {
//Switch Map Voting
2014-01-06 15:54:22 +01:00
$switchLabel = new Label_Button ();
$mapFrame -> add ( $switchLabel );
$switchLabel -> setX ( $width / 2 - 10 );
$switchLabel -> setZ ( 0.2 );
$switchLabel -> setSize ( 3 , 3 );
$switchLabel -> setTextSize ( 2 );
$switchLabel -> setText ( '»' );
$switchLabel -> setTextColor ( '0f0' );
2014-01-08 18:07:09 +01:00
2014-02-19 22:24:56 +01:00
$switchLabel -> setAction ( self :: ACTION_START_SWITCH_VOTE . '.' . ( $id - 1 ));
2014-01-08 18:07:09 +01:00
2014-02-19 22:24:56 +01:00
$script -> addTooltip ( $switchLabel , $descriptionLabel , array ( Script :: OPTION_TOOLTIP_TEXT => 'Start Map-Switch vote: $<' . $map -> name . '$>' ));
2013-12-16 12:41:14 +01:00
}
2014-01-08 18:07:09 +01:00
2014-01-06 15:54:22 +01:00
// Display Karma bar
2014-01-27 21:27:31 +01:00
if ( $karmaPlugin ) {
2013-12-29 19:21:29 +01:00
$karma = $karmaPlugin -> getMapKarma ( $map );
$votes = $karmaPlugin -> getMapVotes ( $map );
2014-01-27 21:27:31 +01:00
if ( is_numeric ( $karma )) {
2013-12-29 19:21:29 +01:00
$karmaGauge = new Gauge ();
$mapFrame -> add ( $karmaGauge );
2013-12-31 02:27:40 +01:00
$karmaGauge -> setZ ( 2 );
2013-12-30 23:53:42 +01:00
$karmaGauge -> setX ( $x + 120 );
2013-12-29 19:21:29 +01:00
$karmaGauge -> setSize ( 20 , 9 );
$karmaGauge -> setDrawBg ( false );
$karma = floatval ( $karma );
$karmaGauge -> setRatio ( $karma + 0.15 - $karma * 0.15 );
$karmaColor = ColorUtil :: floatToStatusColor ( $karma );
$karmaGauge -> setColor ( $karmaColor . '9' );
2014-01-08 18:07:09 +01:00
2013-12-29 19:21:29 +01:00
$karmaLabel = new Label ();
$mapFrame -> add ( $karmaLabel );
2013-12-31 02:27:40 +01:00
$karmaLabel -> setZ ( 2 );
2013-12-30 23:53:42 +01:00
$karmaLabel -> setX ( $x + 120 );
2013-12-29 19:21:29 +01:00
$karmaLabel -> setSize ( 20 * 0.9 , 5 );
$karmaLabel -> setTextSize ( 0.9 );
2014-01-06 15:54:22 +01:00
$karmaLabel -> setTextColor ( '000' );
2013-12-29 19:21:29 +01:00
$karmaLabel -> setAlign ( Control :: CENTER , Control :: CENTER );
$karmaLabel -> setText ( ' ' . round ( $karma * 100. ) . '% (' . $votes [ 'count' ] . ')' );
}
}
2014-01-08 18:07:09 +01:00
2013-12-14 22:00:59 +01:00
$y -= 4 ;
2014-01-27 21:27:31 +01:00
if ( $id % self :: MAX_MAPS_PER_PAGE == 0 ) {
2014-01-02 20:50:09 +01:00
unset ( $pageFrame );
}
$id ++ ;
}
2014-01-11 17:24:03 +01:00
$this -> maniaControl -> manialinkManager -> displayWidget ( $maniaLink , $player , 'MapList' );
2013-12-14 22:00:59 +01:00
}
2014-01-03 18:04:46 +01:00
/**
* Builds the confirmation frame
*
* @ param ManiaLink $maniaLink
2014-01-08 18:07:09 +01:00
* @ param $y
* @ param $id
* @ param bool $mapUid
2014-01-03 18:04:46 +01:00
* @ return Frame
*/
public function buildConfirmFrame ( Manialink $maniaLink , $y , $id , $mapUid = false ) {
2014-01-08 18:07:09 +01:00
$width = $this -> maniaControl -> manialinkManager -> styleManager -> getListWidgetsWidth ();
$quadStyle = $this -> maniaControl -> manialinkManager -> styleManager -> getDefaultMainWindowStyle ();
2014-01-06 15:54:22 +01:00
$quadSubstyle = $this -> maniaControl -> manialinkManager -> styleManager -> getDefaultMainWindowSubStyle ();
2014-01-08 18:07:09 +01:00
2014-01-03 18:04:46 +01:00
$confirmFrame = new Frame ();
$maniaLink -> add ( $confirmFrame );
2014-01-06 15:54:22 +01:00
$confirmFrame -> setPosition ( $width / 2 + 6 , $y );
2014-01-12 01:59:23 +01:00
$confirmFrame -> setVisible ( false );
2014-01-08 18:07:09 +01:00
2014-01-03 18:04:46 +01:00
$quad = new Quad ();
$confirmFrame -> add ( $quad );
2014-01-06 15:54:22 +01:00
$quad -> setStyles ( $quadStyle , $quadSubstyle );
2014-01-03 18:04:46 +01:00
$quad -> setSize ( 12 , 4 );
2014-01-08 18:07:09 +01:00
2014-01-03 18:04:46 +01:00
$quad = new Quad_BgsPlayerCard ();
$confirmFrame -> add ( $quad );
$quad -> setSubStyle ( $quad :: SUBSTYLE_BgCardSystem );
$quad -> setSize ( 11 , 3.5 );
2014-01-08 18:07:09 +01:00
2014-01-03 18:04:46 +01:00
$label = new Label_Button ();
$confirmFrame -> add ( $label );
$label -> setAlign ( Control :: CENTER , Control :: CENTER );
2014-01-06 15:54:22 +01:00
$label -> setText ( 'Sure?' );
2014-01-03 18:04:46 +01:00
$label -> setTextSize ( 1 );
$label -> setScale ( 0.90 );
$label -> setX ( - 1.3 );
2014-01-08 18:07:09 +01:00
2014-01-03 18:04:46 +01:00
$buttLabel = new Label_Button ();
$confirmFrame -> add ( $buttLabel );
$buttLabel -> setPosition ( 3.2 , 0.4 , 0.2 );
$buttLabel -> setSize ( 3 , 3 );
$buttLabel -> setAlign ( Control :: CENTER , Control :: CENTER );
2014-01-08 18:07:09 +01:00
2014-01-27 21:27:31 +01:00
if ( ! $mapUid ) {
2014-01-06 15:54:22 +01:00
$quad -> setAction ( self :: ACTION_SWITCH_MAP . '.' . ( $id - 1 ));
$buttLabel -> setText ( '»' );
$buttLabel -> setTextColor ( '0f0' );
2014-01-03 18:04:46 +01:00
$buttLabel -> setTextSize ( 2 );
2014-01-08 18:07:09 +01:00
} else {
2014-01-03 18:04:46 +01:00
$buttLabel -> setTextSize ( 1 );
2014-01-06 15:54:22 +01:00
$buttLabel -> setText ( 'x' );
$buttLabel -> setTextColor ( 'a00' );
$quad -> setAction ( self :: ACTION_ERASE_MAP . '.' . ( $id - 1 ) . '.' . $mapUid );
2014-01-03 18:04:46 +01:00
}
return $confirmFrame ;
}
2014-01-11 17:24:03 +01:00
/**
* Unset the player if he opened another Main Widget
2014-01-12 00:28:06 +01:00
*
2014-02-19 17:37:37 +01:00
* @ param Player $player
* @ param $openedWidget
2014-01-11 17:24:03 +01:00
*/
2014-02-19 17:37:37 +01:00
public function handleWidgetOpened ( Player $player , $openedWidget ) {
2014-01-11 17:24:03 +01:00
//unset when another main widget got opened
2014-01-28 16:54:23 +01:00
if ( $openedWidget != 'MapList' ) {
2014-01-11 17:24:03 +01:00
unset ( $this -> mapListShown [ $player -> login ]);
}
}
2014-01-12 00:28:06 +01:00
2013-12-15 11:29:49 +01:00
/**
* Closes the widget
2014-01-02 10:38:46 +01:00
*
2014-02-19 17:37:37 +01:00
* @ param \ManiaControl\Players\Player $player
2013-12-15 11:29:49 +01:00
*/
2014-02-19 17:37:37 +01:00
public function closeWidget ( Player $player ) {
2014-01-03 18:57:08 +01:00
unset ( $this -> mapListShown [ $player -> login ]);
2014-01-03 18:04:46 +01:00
}
/**
* Closes the widget
*
2014-01-06 15:54:22 +01:00
* @ param Player $player
2014-01-03 18:04:46 +01:00
*/
public function playerCloseWidget ( Player $player ) {
2013-12-28 23:24:54 +01:00
unset ( $this -> mapListShown [ $player -> login ]);
2014-01-03 18:04:46 +01:00
$this -> maniaControl -> manialinkManager -> closeWidget ( $player );
2013-12-14 22:00:59 +01:00
}
2013-12-15 15:13:56 +01:00
/**
2014-01-06 15:54:22 +01:00
* Handle ManialinkPageAnswer Callback
*
2013-12-15 15:13:56 +01:00
* @ param array $callback
*/
2014-01-02 10:38:46 +01:00
public function handleManialinkPageAnswer ( array $callback ) {
2014-01-08 18:07:09 +01:00
$actionId = $callback [ 1 ][ 2 ];
2014-01-06 15:54:22 +01:00
$actionArray = explode ( '.' , $actionId );
2014-01-27 21:27:31 +01:00
if ( count ( $actionArray ) <= 2 ) {
2014-01-08 18:07:09 +01:00
return ;
}
2014-01-06 15:54:22 +01:00
$action = $actionArray [ 0 ] . '.' . $actionArray [ 1 ];
2014-01-08 18:07:09 +01:00
$login = $callback [ 1 ][ 1 ];
2014-01-06 15:54:22 +01:00
$player = $this -> maniaControl -> playerManager -> getPlayer ( $login );
2014-01-08 18:07:09 +01:00
$mapId = ( int ) $actionArray [ 2 ];
switch ( $action ) {
2014-01-12 21:39:27 +01:00
case self :: ACTION_UPDATE_MAP :
$mapUid = $actionArray [ 2 ];
$this -> maniaControl -> mapManager -> updateMap ( $player , $mapUid );
break ;
2014-01-02 10:38:46 +01:00
case self :: ACTION_ERASE_MAP :
2014-01-10 15:58:27 +01:00
$mapUid = $actionArray [ 3 ];
$this -> maniaControl -> mapManager -> removeMap ( $player , $mapUid );
2014-01-02 10:38:46 +01:00
$this -> showMapList ( $player );
break ;
case self :: ACTION_SWITCH_MAP :
2014-01-25 23:33:39 +01:00
try {
$this -> maniaControl -> client -> jumpToMapIndex ( $mapId );
2014-02-13 14:21:25 +01:00
} catch ( Exception $e ) {
// TODO: is it even possible that an exception other than connection errors will be thrown? - remove try-catch?
2014-01-25 23:33:39 +01:00
$this -> maniaControl -> chat -> sendError ( " Error while Jumping to Map Index " );
break ;
}
2014-01-08 18:07:09 +01:00
$mapList = $this -> maniaControl -> mapManager -> getMaps ();
$map = $mapList [ $mapId ];
2014-01-06 15:54:22 +01:00
$message = '$<' . $player -> nickname . '$> skipped to Map $z$<' . $map -> name . '$>!' ;
$this -> maniaControl -> chat -> sendSuccess ( $message );
$this -> maniaControl -> log ( $message , true );
2014-01-08 18:07:09 +01:00
2014-01-03 18:04:46 +01:00
$this -> playerCloseWidget ( $player );
2014-01-02 10:38:46 +01:00
break ;
2014-02-07 22:57:39 +01:00
case self :: ACTION_START_SWITCH_VOTE :
/** @var $votesPlugin CustomVotesPlugin */
$votesPlugin = $this -> maniaControl -> pluginManager -> getPlugin ( self :: DEFAULT_CUSTOM_VOTE_PLUGIN );
$mapList = $this -> maniaControl -> mapManager -> getMaps ();
$map = $mapList [ $mapId ];
2014-02-08 00:00:00 +01:00
$message = '$<' . $player -> nickname . '$>$s started a vote to switch to $<' . $map -> name . '$>!' ;
2014-02-07 22:57:39 +01:00
/** @var Map $map */
2014-02-08 00:00:00 +01:00
$votesPlugin -> defineVote ( 'switchmap' , " Goto " . $map -> name , true , $message );
2014-02-07 22:57:39 +01:00
$votesPlugin -> startVote ( $player , 'switchmap' , function ( $result ) use ( & $votesPlugin , & $map ) {
$this -> maniaControl -> chat -> sendInformation ( '$sVote Successfully -> Map switched!' );
$votesPlugin -> undefineVote ( 'switchmap' );
try {
2014-02-10 23:13:07 +01:00
$index = $this -> maniaControl -> mapManager -> getMapIndex ( $map );
$this -> maniaControl -> client -> jumpToMapIndex ( $index );
2014-02-13 14:21:25 +01:00
} catch ( Exception $e ) {
// TODO: is it even possible that an exception other than connection errors will be thrown? - remove try-catch?
2014-02-07 22:57:39 +01:00
$this -> maniaControl -> chat -> sendError ( " Error while Switching Map " );
}
});
break ;
2014-01-02 10:38:46 +01:00
case self :: ACTION_QUEUED_MAP :
$this -> maniaControl -> mapManager -> mapQueue -> addMapToMapQueue ( $callback [ 1 ][ 1 ], $actionArray [ 2 ]);
break ;
2014-01-28 20:09:09 +01:00
case self :: ACTION_UNQUEUE_MAP :
$this -> maniaControl -> mapManager -> mapQueue -> removeFromMapQueue ( $player , $actionArray [ 2 ]);
break ;
2014-01-02 10:38:46 +01:00
}
2013-12-15 15:13:56 +01:00
}
2013-12-28 23:24:54 +01:00
/**
2014-01-06 15:54:22 +01:00
* Reopen the widget on Map Begin , MapListChanged , etc .
2013-12-28 23:24:54 +01:00
*/
2014-02-19 15:44:00 +01:00
public function updateWidget () {
2014-01-08 18:07:09 +01:00
foreach ( $this -> mapListShown as $login => $shown ) {
2014-01-27 21:27:31 +01:00
if ( $shown ) {
2013-12-28 23:24:54 +01:00
$player = $this -> maniaControl -> playerManager -> getPlayer ( $login );
2014-03-31 21:41:05 +02:00
if ( $player ) {
2014-01-28 17:06:22 +01:00
$this -> showMapList ( $player );
2014-01-08 18:07:09 +01:00
} else {
2013-12-28 23:24:54 +01:00
unset ( $this -> mapListShown [ $login ]);
}
}
}
}
2013-12-14 22:00:59 +01:00
}