refactored some callback code in trackmania and removed some deprecates

This commit is contained in:
kremsy
2017-05-08 19:55:07 +02:00
parent b3707a47d1
commit c3f5de1f29
9 changed files with 97 additions and 568 deletions

View File

@ -2,7 +2,6 @@
namespace ManiaControl\Callbacks;
use ManiaControl\Callbacks\Models\BaseCallback;
use ManiaControl\General\UsageInformationAble;
use ManiaControl\General\UsageInformationTrait;
use ManiaControl\ManiaControl;
@ -16,7 +15,7 @@ use ManiaControl\ManiaControl;
*/
class CallbackManager implements UsageInformationAble {
use UsageInformationTrait;
/*
* Constants
*/
@ -276,22 +275,16 @@ class CallbackManager implements UsageInformationAble {
/**
* Trigger a specific Callback
*
* @param mixed $callback
* @param mixed $callbackName
*/
public function triggerCallback($callback) {
if ($callback instanceof BaseCallback) {
$callbackName = $callback->name;
} else {
$callbackName = $callback;
}
public function triggerCallback($callbackName) {
if (!$this->callbackListeningExists($callbackName)) {
return;
}
$params = func_get_args();
if (!($callback instanceof BaseCallback)) {
$params = array_slice($params, 1, null, true);
}
$params = array_slice($params, 1, null, true);
foreach ($this->callbackListenings[$callbackName] as $listening) {
/** @var Listening $listening */

View File

@ -1,6 +1,5 @@
<?php
// 22-3-2017 Added/Fixed TM Callback for WayPoint // Need to Add better checks eventually
namespace ManiaControl\Callbacks;
/**
@ -148,189 +147,14 @@ interface Callbacks {
const TM_UIPROPERTIES = 'Trackmania.UI.Properties';
const TM_POINTSREPARTITION = 'Trackmania.PointsRepartition';
//ManiaControl Specific TM Callbacks
const TM_ONFINISHLINE = "ManiaControl.Trackmania.Event.OnFinishLine";
const TM_ONLAPFINISH = "ManiaControl.Trackmania.Event.OnLapFinish";
//ManiaControl Callbacks
/** BeginMap Callback: Map */
const BEGINMAP = 'Callbacks.BeginMap';
/** EndMap Callback: Map*/
const ENDMAP = 'Callbacks.EndMap';
//OLD Callbacks
/** BeginMatch Callback: MatchNumber
*
* @deprecated
*/
const BEGINMATCH = 'Callbacks.BeginMatch';
/** LoadingMap Callback: MapNumber
*
* @deprecated
*/
const LOADINGMAP = 'Callbacks.LoadingMap';
/** BeginSubMatch Callback: SubmatchNumber
*
* @deprecated
*/
const BEGINSUBMATCH = 'Callbacks.BeginSubmatch';
/** BeginRound Callback: RoundNumber
*
* @deprecated
*/
const BEGINROUND = 'Callbacks.BeginRound';
/** BeginTurn Callback: TurnNumber
*
* @deprecated
*/
const BEGINTURN = 'Callbacks.BeginTurn';
/** BeginTurnStop Callback: TurnNumber
*
* @deprecated
*/
const BEGINTURNSTOP = 'Callbacks.BeginTurnStop';
/** BeginPlaying Callback
*
* @deprecated
*/
const BEGINPLAYING = 'Callbacks.BeginPlaying';
/** EndPlaying Callback
*
* @deprecated
*/
const ENDPLAYING = 'Callbacks.EndPlaying';
/** EndTurn Callback: TurnNumber
*
* @deprecated
*/
const ENDTURN = 'Callbacks.EndTurn';
/** EndTurnStop Callback: TurnNumber
*
* @deprecated
*/
const ENDTURNSTOP = 'Callbacks.EndTurnStop';
/** EndRound Callback: RoundNumber
*
* @deprecated
*/
const ENDROUND = 'Callbacks.EndRound';
/** EndRound Callback: RoundNumber
*
* @deprecated
*/
const ENDROUNDSTOP = 'Callbacks.EndRoundStop';
/** EndSubmatch Callback: SubmatchNumber
*
* @deprecated
*/
const ENDSUBMATCH = 'Callbacks.EndSubmatch';
/** BeginPodium Callback
*
* @deprecated
*/
const BEGINPODIUM = 'Callbacks.BeginPodium';
/** EndPodium Callback
*
* @deprecated
*/
const ENDPODIUM = 'Callbacks.EndPodium';
/** UnloadingMap Callback
*
* @deprecated
*/
const UNLOADINGMAP = 'Callbacks.UnloadingMap';
/** EndMatch Callback: MatchNumber
*
* @deprecated
*/
const ENDMATCH = 'Callbacks.EndMatch';
/** BeginWarmup Callback
*
* @deprecated
*/
const BEGINWARMUP = 'Callbacks.BeginWarmUp';
/** EndWarmup Callback
*
* @deprecated
*/
const ENDWARMUP = 'Callbacks.EndWarmUp';
/** Scores Callback (returned after LibXmlRpc_PlayerRanking): Scores
*
* @deprecated
*/
const SCORESREADY = 'Callbacks.ScoresReady';
/** Scores Callback (returned after LibXmlRpc_PlayerRanking in SM, or LibXmlRpc_TeamsScores in Trackmania): Scores
*
* @deprecated
*/
const SCORES = 'Callbacks.Scores';
/** Rankings Callback
*
* @deprecated
*/
const RANKINGS = 'Callbacks.Rankings';
/** PlayerRanking Callback, returned after LibXmlRpc_PlayerRanking
* try to avoid to use this, just use the Get function of the RankingsManager instead
* param1 Player $player
* param2 int $rank
* param3 int $currentPoints
* param4 int AFKStatus
*
* @deprecated
*/
const PLAYERRANKING = 'Callbacks.PlayerRanking';
/*
* ShootMania Callbacks
*/
/** RankingsUpdated Callback: SortedRankings
*
* @deprecated
*/
const RANKINGSUPDATED = 'Callbacks.RankingsUpdated';
/** Returns the AFKStatus of an Player, returned after param1 Scores
*
* @deprecated
*/
const AFKSTATUS = 'Callbacks.AfkStatus';
/** OnPlayerRequestRespawn Callback: Player
*
* @deprecated
*/
const ONPLAYERREQUESTRESPAWN = 'Callbacks.OnPlayerRequestRespawn';
/*
* TrackMania Callbacks
*/
/** OnStartLine Callback
*
* @deprecated
*/
const ONSTARTLINE = 'Callbacks.StartLine';
/** OnWayPoint Callback
*
* @deprecated
*/
const ONWAYPOINT = 'Callbacks.WayPoint';
/** OnGiveUp Callback
*
* @deprecated
*/
const ONGIVEUP = 'Callbacks.GiveUp';
/** OnRespawn Callback
*
* @deprecated
*/
const ONRESPAWN = 'Callbacks.Respawn';
/** OnStunt Callback
*
* @deprecated
*/
const ONSTUNT = 'Callbacks.Stunt';
}

View File

@ -1,38 +0,0 @@
<?php
namespace ManiaControl\Callbacks\Models;
use ManiaControl\Players\Player;
/**
* Base Model Class for Callbacks
*
* @deprecated
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014-2017 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class BaseCallback {
/*
* Public Properties
*/
public $name = null;
public $rawCallback = null;
public $isLegacyCallback = null;
public $pid = null;
public $login = null;
/** @var Player $player */
public $player = null;
/**
* Set the corresponding Player
*
* @param Player $player
*/
public function setPlayer(Player $player) {
$this->pid = $player->pid;
$this->login = $player->login;
$this->player = $player;
}
}

View File

@ -1,39 +0,0 @@
<?php
namespace ManiaControl\Callbacks\Models;
use ManiaControl\Players\Player;
/**
* Base Model Class for Callbacks
*
* @deprecated
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014-2017 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class RecordCallback extends BaseCallback {
/*
* Constants
*/
const CHECKPOINT = 'RecordCallback.Checkpoint';
const FINISH = 'RecordCallback.Finish';
const LAPFINISH = 'RecordCallback.LapFinish';
/*
* Public Properties
*/
public $time = null;
/** @var Player $player */
public $player = null;
public $racetime = null;
public $lapTime = null;
public $stuntsscore = null;
public $checkpointinrace = null;
public $checkpointinlap = null;
public $isendrace = null;
public $isendlap = null;
public $blockid = null;
public $speed = null;
public $distance = null;
}

View File

@ -2,7 +2,6 @@
namespace ManiaControl\Callbacks;
use ManiaControl\Callbacks\Models\RecordCallback;
use ManiaControl\Callbacks\Structures\Common\BasePlayerTimeStructure;
use ManiaControl\Callbacks\Structures\Common\UIPropertiesBaseStructure;
use ManiaControl\Callbacks\Structures\ShootMania\OnActionCustomEventStructure;
@ -157,79 +156,6 @@ class ShootManiaCallbacks implements CallbackListener {
case Callbacks::SM_ROYAL_ROUNDWINNER:
$this->maniaControl->getCallbackManager()->triggerCallback($name, new OnRoyalRoundWinnerStructure($this->maniaControl, $data));
break;
//Old Callbacks
case 'LibXmlRpc_Rankings':
$this->maniaControl->getServer()->getRankingManager()->updateRankings($data[0]);
break;
case 'LibAFK_IsAFK':
$this->triggerAfkStatus($data[0]);
break;
case 'WarmUp_Status':
$this->maniaControl->getCallbackManager()->triggerCallback(Callbacks::WARMUPSTATUS, $data[0]);
break;
case self::CB_TIMEATTACK_ONCHECKPOINT:
$this->handleTimeAttackOnCheckpoint($name, $data);
break;
case self::CB_TIMEATTACK_ONFINISH:
$this->handleTimeAttackOnFinish($name, $data);
break;
}
}
/**
* Triggers the AFK Status of an Player
*
* @param string $login
*/
private function triggerAfkStatus($login) {
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
$this->maniaControl->getCallbackManager()->triggerCallback(Callbacks::AFKSTATUS, $player);
}
/**
* Handle TimeAttack OnCheckpoint Callback
*
* @param string $name
* @param array $data
*/
public function handleTimeAttackOnCheckpoint($name, array $data) {
$login = $data[0];
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
if (!$player) {
return;
}
// Trigger checkpoint callback
$checkpointCallback = new RecordCallback();
$checkpointCallback->rawCallback = array($name, $data);
$checkpointCallback->name = $checkpointCallback::CHECKPOINT;
$checkpointCallback->setPlayer($player);
$checkpointCallback->time = (int) $data[1];
$this->maniaControl->getCallbackManager()->triggerCallback($checkpointCallback);
}
/**
* Handle TimeAttack OnFinish Callback
*
* @param string $name
* @param array $data
*/
public function handleTimeAttackOnFinish($name, array $data) {
$login = $data[0];
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
if (!$player) {
return;
}
// Trigger finish callback
$finishCallback = new RecordCallback();
$finishCallback->rawCallback = array($name, $data);
$finishCallback->name = $finishCallback::FINISH;
$finishCallback->setPlayer($player);
$finishCallback->time = (int) $data[1];
$this->maniaControl->getCallbackManager()->triggerCallback($finishCallback);
}
}

View File

@ -3,7 +3,6 @@
namespace ManiaControl\Callbacks\Structures\TrackMania;
use ManiaControl\Callbacks\Models\RecordCallback;
use ManiaControl\Callbacks\Structures\Common\BasePlayerTimeStructure;
use ManiaControl\ManiaControl;
use ManiaControl\Utils\Formatter;
@ -27,6 +26,7 @@ class OnWayPointEventStructure extends BasePlayerTimeStructure {
private $blockId;
private $speed;
private $distance;
private $lapNumber;
/**
* OnWayPointEventStructure constructor.
@ -42,36 +42,16 @@ class OnWayPointEventStructure extends BasePlayerTimeStructure {
$this->stuntsScore = $this->getPlainJsonObject()->stuntsscore;
$this->checkPointInRace = (int) $this->getPlainJsonObject()->checkpointinrace;
$this->checkPointInLap = (int) $this->getPlainJsonObject()->checkpointinlap;
$this->isEndRace = $this->getPlainJsonObject()->isendrace;
$this->isEndLap = $this->getPlainJsonObject()->isendlap;
$this->isEndRace = Formatter::parseBoolean($this->getPlainJsonObject()->isendrace);
$this->isEndLap = Formatter::parseBoolean($this->getPlainJsonObject()->isendlap);
$this->blockId = $this->getPlainJsonObject()->blockid;
$this->speed = $this->getPlainJsonObject()->speed;
$this->distance = $this->getPlainJsonObject()->distance;
// Build callback //TODO remove the old lagacy stuff and update the uses to the new Structure
$wayPointCallback = new RecordCallback();
$wayPointCallback->rawCallback = $data;
$wayPointCallback->setPlayer($this->getPlayer());
$wayPointCallback->blockId = $this->blockId;
$wayPointCallback->time = $this->raceTime;
$wayPointCallback->checkpoint = $this->checkPointInRace;
$wayPointCallback->isEndRace = Formatter::parseBoolean($this->isEndRace);
$wayPointCallback->lapTime = $this->lapTime;
$wayPointCallback->lapCheckpoint = $this->checkPointInLap;
$wayPointCallback->lap = 0;
$wayPointCallback->isEndLap = Formatter::parseBoolean($this->isEndLap);
if ($wayPointCallback->checkpoint > 0) {
$currentMap = $this->maniaControl->getMapManager()->getCurrentMap();
$wayPointCallback->lap += $wayPointCallback->checkpoint / $currentMap->nbCheckpoints;
if ($this->checkPointInRace > 0) {
$currentMap = $this->maniaControl->getMapManager()->getCurrentMap();
$this->lapNumber = intval($this->checkPointInRace / $currentMap->nbCheckpoints);
}
if ($wayPointCallback->isEndRace) {
$wayPointCallback->name = $wayPointCallback::FINISH;
} else if ($wayPointCallback->isEndLap) {
$wayPointCallback->name = $wayPointCallback::LAPFINISH;
} else {
$wayPointCallback->name = $wayPointCallback::CHECKPOINT;
}
$this->maniaControl->getCallbackManager()->triggerCallback($wayPointCallback);
}
/**
@ -154,4 +134,13 @@ class OnWayPointEventStructure extends BasePlayerTimeStructure {
return $this->distance;
}
/**
* Gets the Current Lap Number
*
* @return float|int
*/
public function getLapNumber() {
return $this->lapNumber;
}
}

View File

@ -2,7 +2,6 @@
namespace ManiaControl\Callbacks;
use ManiaControl\Callbacks\Models\RecordCallback;
use ManiaControl\Callbacks\Structures\Common\BasePlayerTimeStructure;
use ManiaControl\Callbacks\Structures\Common\UIPropertiesBaseStructure;
use ManiaControl\Callbacks\Structures\TrackMania\OnCommandStructure;
@ -15,7 +14,6 @@ use ManiaControl\Callbacks\Structures\TrackMania\OnStuntEventStructure;
use ManiaControl\Callbacks\Structures\TrackMania\OnWarmupStartEndRoundStructure;
use ManiaControl\Callbacks\Structures\TrackMania\OnWayPointEventStructure;
use ManiaControl\ManiaControl;
use ManiaControl\Utils\Formatter;
/**
* Class handling and parsing TrackMania Callbacks
@ -75,7 +73,9 @@ class TrackManiaCallbacks implements CallbackListener {
$this->maniaControl->getCallbackManager()->triggerCallback($name, new BasePlayerTimeStructure($this->maniaControl, $data));
break;
case Callbacks::TM_ONWAYPOINT:
$this->maniaControl->getCallbackManager()->triggerCallback($name, new OnWayPointEventStructure($this->maniaControl, $data));
$this->handleWayPointCallback(new OnWayPointEventStructure($this->maniaControl, $data));
//$this->maniaControl->getCallbackManager()->triggerCallback($name, $wayPointStructure);
break;
case Callbacks::TM_ONRESPAWN:
$this->maniaControl->getCallbackManager()->triggerCallback($name, new OnRespawnStructure($this->maniaControl, $data));
@ -100,106 +100,18 @@ class TrackManiaCallbacks implements CallbackListener {
}
}
/**
* Handle OnWayPoint Callback
* Trigger the three different Types of Callbacks
*
* @param array $callback
* @param \ManiaControl\Callbacks\Structures\TrackMania\OnWayPointEventStructure $structure
*/
public function handleOnWayPointCallback(array $callback) {
$login = $callback[0];
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
if (!$player) {
return;
}
// Build callback
$wayPointCallback = new RecordCallback();
$wayPointCallback->rawCallback = $callback;
$wayPointCallback->setPlayer($player);
$wayPointCallback->blockId = $callback[1];
$wayPointCallback->time = (int) $callback[2];
$wayPointCallback->checkpoint = (int) $callback[3];
$wayPointCallback->isEndRace = Formatter::parseBoolean($callback[4]);
$wayPointCallback->lapTime = (int) $callback[5];
$wayPointCallback->lapCheckpoint = (int) $callback[6];
$wayPointCallback->lap = 0;
$wayPointCallback->isEndLap = Formatter::parseBoolean($callback[7]);
if ($wayPointCallback->checkpoint > 0) {
$currentMap = $this->maniaControl->getMapManager()->getCurrentMap();
$wayPointCallback->lap += $wayPointCallback->checkpoint / $currentMap->nbCheckpoints;
}
if ($wayPointCallback->isEndRace) {
$wayPointCallback->name = $wayPointCallback::FINISH;
} else if ($wayPointCallback->isEndLap) {
$wayPointCallback->name = $wayPointCallback::LAPFINISH;
private function handleWayPointCallback(OnWayPointEventStructure $structure) {
if ($structure->getIsEndRace()) {
$this->maniaControl->getCallbackManager()->triggerCallback(Callbacks::TM_ONFINISHLINE, $structure);
} else if ($structure->getIsEndLap()) {
$this->maniaControl->getCallbackManager()->triggerCallback(Callbacks::TM_ONLAPFINISH, $structure);
} else {
$wayPointCallback->name = $wayPointCallback::CHECKPOINT;
$this->maniaControl->getCallbackManager()->triggerCallback(Callbacks::TM_ONWAYPOINT, $structure);
}
$this->maniaControl->getCallbackManager()->triggerCallback($wayPointCallback);
}
/**
* Handle Hard-Coded Player Checkpoint Callback
*
* @param array $callback
*/
public function handlePlayerCheckpointCallback(array $callback) {
$data = $callback[1];
$login = $data[1];
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
if (!$player) {
return;
}
// Build checkpoint callback
$checkpointCallback = new RecordCallback();
$checkpointCallback->isLegacyCallback = true;
$checkpointCallback->rawCallback = $callback;
$checkpointCallback->setPlayer($player);
$checkpointCallback->time = (int) $data[2];
$checkpointCallback->lap = (int) $data[3];
$checkpointCallback->checkpoint = (int) $data[4];
$checkpointCallback->lapCheckpoint = $checkpointCallback->checkpoint;
if ($checkpointCallback->lap > 0) {
$currentMap = $this->maniaControl->getMapManager()->getCurrentMap();
$checkpointCallback->lapCheckpoint -= $checkpointCallback->lap * $currentMap->nbCheckpoints;
}
if ($checkpointCallback->lapCheckpoint === 0) {
$checkpointCallback->name = $checkpointCallback::LAPFINISH;
} else {
$checkpointCallback->name = $checkpointCallback::CHECKPOINT;
}
$this->maniaControl->getCallbackManager()->triggerCallback($checkpointCallback);
}
/**
* Handle Hard-Coded Player Finish Callback
*
* @param array $callback
*/
public function handlePlayerFinishCallback(array $callback) {
$data = $callback[1];
$login = $data[1];
$player = $this->maniaControl->getPlayerManager()->getPlayer($login);
if (!$player) {
return;
}
// Build finish callback
$finishCallback = new RecordCallback();
$finishCallback->name = $finishCallback::FINISH;
$finishCallback->isLegacyCallback = true;
$finishCallback->rawCallback = $callback;
$finishCallback->setPlayer($player);
$finishCallback->time = (int) $data[2];
$this->maniaControl->getCallbackManager()->triggerCallback($finishCallback);
}
}