diff --git a/application/core/Callbacks/CallbackManager.php b/application/core/Callbacks/CallbackManager.php index 8bdbfc61..7dbfafad 100644 --- a/application/core/Callbacks/CallbackManager.php +++ b/application/core/Callbacks/CallbackManager.php @@ -55,6 +55,7 @@ class CallbackManager { */ public $libXmlRpcCallbacks = null; public $shootManiaCallbacks = null; + public $trackManiaCallbacks = null; /* * Private Properties @@ -71,8 +72,9 @@ class CallbackManager { public function __construct(ManiaControl $maniaControl) { $this->maniaControl = $maniaControl; - $this->shootManiaCallbacks = new ShootManiaCallbacks($maniaControl, $this); $this->libXmlRpcCallbacks = new LibXmlRpcCallbacks($maniaControl, $this); + $this->shootManiaCallbacks = new ShootManiaCallbacks($maniaControl, $this); + $this->trackManiaCallbacks = new TrackManiaCallbacks($maniaControl, $this); } /** diff --git a/application/core/Callbacks/Models/RecordCallback.php b/application/core/Callbacks/Models/RecordCallback.php index d20ad6f2..434adec1 100644 --- a/application/core/Callbacks/Models/RecordCallback.php +++ b/application/core/Callbacks/Models/RecordCallback.php @@ -15,9 +15,16 @@ class RecordCallback extends BaseCallback { */ const CHECKPOINT = 'RecordCallback.Checkpoint'; const FINISH = 'RecordCallback.Finish'; + const LAPFINISH = 'RecordCallback.LapFinish'; /* * Public Properties */ + public $isEndRace = null; + public $isEndLap = null; public $time = null; + public $lapTime = null; + public $checkpoint = null; + public $lapCheckpoint = null; + public $blockId = null; } diff --git a/application/core/Callbacks/TrackManiaCallbacks.php b/application/core/Callbacks/TrackManiaCallbacks.php new file mode 100644 index 00000000..7da5c83d --- /dev/null +++ b/application/core/Callbacks/TrackManiaCallbacks.php @@ -0,0 +1,68 @@ + + * @copyright 2014 ManiaControl Team + * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 + */ +class TrackManiaCallbacks implements CallbackListener { + /* + * Private Properties + */ + private $maniaControl = null; + + /** + * Create a new TrackMania Callbacks Instance + * + * @param ManiaControl $maniaControl + * @param CallbackManager $callbackManager + */ + public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) { + $this->maniaControl = $maniaControl; + + // Register for callbacks + $callbackManager->registerCallbackListener(Callbacks::ONWAYPOINT, $this, 'handleOnWayPointCallback'); + } + + /** + * Handle OnWayPoint Callback + * + * @param array $callback + */ + public function handleOnWayPointCallback(array $callback) { + $login = $callback[0]; + $player = $this->maniaControl->playerManager->getPlayer($login); + if (!$player) { + return; + } + + // Build callback + $checkpointCallback = new RecordCallback(); + $checkpointCallback->rawCallback = $callback; + $checkpointCallback->setPlayer($player); + $checkpointCallback->blockId = $callback[1]; + $checkpointCallback->time = (int)$callback[2]; + $checkpointCallback->checkpoint = (int)$callback[3]; + $checkpointCallback->isEndRace = (bool)$callback[4]; + $checkpointCallback->lapTime = (int)$callback[5]; + $checkpointCallback->lapCheckpoint = (int)$callback[6]; + $checkpointCallback->isEndLap = (bool)$callback[7]; + + if ($checkpointCallback->isEndRace) { + $checkpointCallback->name = $checkpointCallback::FINISH; + } else if ($checkpointCallback->isEndLap) { + $checkpointCallback->name = $checkpointCallback::LAPFINISH; + } else { + $checkpointCallback->name = $checkpointCallback::CHECKPOINT; + } + + $this->maniaControl->callbackManager->triggerCallback($checkpointCallback); + } +}