finished first version of customvote plugin

This commit is contained in:
kremsy 2014-01-11 23:36:53 +01:00 committed by Steffen Schröder
parent 1acddeb4e1
commit b8758138b3
2 changed files with 134 additions and 12 deletions

View File

@ -23,6 +23,8 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
*/
const ACTION_SET_PAUSE = 'ServerCommands.SetPause';
const ACTION_CANCEL_VOTE = 'ServerCommands.CancelVote';
const CB_VOTE_CANCELED = 'ServerCommands.VoteCanceled';
/**
* Private properties
*/
@ -90,6 +92,9 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
return;
}
$this->maniaControl->chat->sendInformation('$<' . $player->nickname . '$> canceled the Vote!');
// Trigger callback
$this->maniaControl->callbackManager->triggerCallback(self::CB_VOTE_CANCELED, array(self::CB_VOTE_CANCELED, $player));
}
/**

View File

@ -10,9 +10,11 @@ use FML\Controls\Labels\Label_Button;
use FML\Controls\Labels\Label_Text;
use FML\Controls\Quad;
use FML\Controls\Quads\Quad_BgsPlayerCard;
use FML\Controls\Quads\Quad_Icons128x128_1;
use FML\Controls\Quads\Quad_Icons128x32_1;
use FML\Controls\Quads\Quad_Icons64x64_1;
use FML\Controls\Quads\Quad_UIConstruction_Buttons;
use FML\ManiaLink;
use FML\Script\Script;
use ManiaControl\Callbacks\CallbackListener;
use ManiaControl\Callbacks\CallbackManager;
use ManiaControl\ColorUtil;
@ -20,6 +22,7 @@ use ManiaControl\Commands\CommandListener;
use ManiaControl\ManiaControl;
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
use ManiaControl\Players\Player;
use ManiaControl\Server\ServerCommands;
/**
@ -31,7 +34,7 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
/**
* Constants
*/
const PLUGIN_ID = 9;
const PLUGIN_ID = 10;
const PLUGIN_VERSION = 0.1;
const PLUGIN_NAME = 'CustomVotesPlugin';
const PLUGIN_AUTHOR = 'kremsy and steeffeen';
@ -58,6 +61,8 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
const ACTION_POSITIVE_VOTE = 'CustomVotesPlugin.PositivVote';
const ACTION_NEGATIVE_VOTE = 'CustomVotesPlugin.NegativeVote';
const ACTION_START_VOTE = 'CustomVotesPlugin.StartVote.';
const CB_CUSTOM_VOTE_FINISHED = 'CustomVotesPlugin.CustomVoteFinished';
@ -85,6 +90,7 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
$this->maniaControl->commandManager->registerCommandListener('vote', $this, 'chat_vote');
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_1_SECOND, $this, 'handle1Second');
$this->maniaControl->callbackManager->registerCallbackListener(ServerCommands::CB_VOTE_CANCELED, $this, 'handleVoteCanceled');
$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_POSITIVE_VOTE, $this, 'handlePositiveVote');
$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_NEGATIVE_VOTE, $this, 'handleNegativeVote');
@ -106,7 +112,7 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
$this->maniaControl->settingManager->initSetting($this, self::SETTING_DEFAULT_RATIO, 0.65);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_SPECTATOR_ALLOW_VOTE, false);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_SPECTATOR_ALLOW_START_VOTE, false);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_VOTE_TIME, 20);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_VOTE_TIME, 60);
$this->defineVote("teambalance", "Team Balance");
$this->defineVote("skipmap", "Skip Map");
@ -160,7 +166,7 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
$maniaLink = new ManiaLink(self::MLID_ICON);
$script = $maniaLink->getScript();
// Donate Menu Icon Frame
//Custom Vote Menu Iconsframe
$frame = new Frame();
$maniaLink->add($frame);
$frame->setPosition($posX, $posY);
@ -179,12 +185,102 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
$itemQuad->setSize($itemSize, $itemSize);
$iconFrame->add($itemQuad);
//Define Description Label
$menuEntries = 4;
$descriptionFrame = new Frame();
$maniaLink->add($descriptionFrame);
$descriptionFrame->setPosition($posX - $menuEntries * $itemSize * 1.15 - 6, $posY);
$descriptionLabel = new Label();
$descriptionFrame->add($descriptionLabel);
$descriptionLabel->setAlign(Control::RIGHT, Control::TOP);
$descriptionLabel->setSize(40, 4);
$descriptionLabel->setTextSize(1.4);
$descriptionLabel->setTextColor('fff');
//Popout Frame
$popoutFrame = new Frame();
$maniaLink->add($popoutFrame);
$popoutFrame->setPosition($posX - $itemSize * 0.5, $posY);
$popoutFrame->setHAlign(Control::RIGHT);
$popoutFrame->setSize(4 * $itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY);
$backgroundQuad = new Quad();
$popoutFrame->add($backgroundQuad);
$backgroundQuad->setHAlign(Control::RIGHT);
$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
$backgroundQuad->setSize($menuEntries * $itemSize * 1.15 + 2, $itemSize * $itemMarginFactorY);
$script->addToggle($itemQuad, $popoutFrame);
//Menu Items
$x = -1;
//TODO build dynamically
//Vote Balance Teams
$itemQuad = new Quad_Icons128x32_1();
$popoutFrame->add($itemQuad);
$itemQuad->setSubStyle($itemQuad::SUBSTYLE_RT_Team);
$itemQuad->setAction(self::ACTION_START_VOTE . 'teambalance');
$itemQuad->setSize($itemSize, $itemSize);
$itemQuad->setX($x);
$itemQuad->setHAlign(Control::RIGHT);
$description = '$s' . 'Vote for Team-Balance';
$script->addTooltip($itemQuad, $descriptionLabel, array(Script::OPTION_TOOLTIP_TEXT => $description));
$x -= $itemSize * 1.05;
// Vote SkipMap
$itemQuad = new Quad_Icons64x64_1();
$popoutFrame->add($itemQuad);
$itemQuad->setSubStyle($itemQuad::SUBSTYLE_ArrowFastNext);
$itemQuad->setAction(self::ACTION_START_VOTE . 'skipmap');
$itemQuad->setSize($itemSize, $itemSize);
$itemQuad->setX($x);
$itemQuad->setHAlign(Control::RIGHT);
$description = '$s' . 'Vote for Skip-Map';
$script->addTooltip($itemQuad, $descriptionLabel, array(Script::OPTION_TOOLTIP_TEXT => $description));
$x -= $itemSize * 1.05;
// Set Pause
$itemQuad = new Quad_Icons128x32_1(); //TODO check if mode supports it
$itemQuad->setSubStyle($itemQuad::SUBSTYLE_ManiaLinkSwitch);
$popoutFrame->add($itemQuad);
$itemQuad->setAction(self::ACTION_START_VOTE . 'pausegame');
$itemQuad->setSize($itemSize, $itemSize);
$itemQuad->setX($x);
$itemQuad->setHAlign(Control::RIGHT);
$description = '$s' . 'Vote for a pause of Current Game';
$script->addTooltip($itemQuad, $descriptionLabel, array(Script::OPTION_TOOLTIP_TEXT => $description));
$x -= $itemSize * 1.05;
// Vote RestartMap
$itemQuad = new Quad_UIConstruction_Buttons();
$popoutFrame->add($itemQuad);
$itemQuad->setSubStyle($itemQuad::SUBSTYLE_Reload);
$itemQuad->setAction(self::ACTION_START_VOTE . 'restartmap');
$itemQuad->setSize($itemSize, $itemSize);
$itemQuad->setX($x);
$itemQuad->setHAlign(Control::RIGHT);
$description = '$s' . 'Vote for Restart-Map';
$script->addTooltip($itemQuad, $descriptionLabel, array(Script::OPTION_TOOLTIP_TEXT => $description));
//$x -= $itemSize * 1.05;
// Send manialink
$manialinkText = $maniaLink->render()->saveXML();
$this->maniaControl->manialinkManager->sendManialink($manialinkText);
}
/**
* Destroy the Vote on Canceled Callback
*
* @param array $callback
*/
public function handleVoteCanceled(array $callback) {
//reset vote
$this->destroyVote();
}
/**
* Handle Standard Votes
*
@ -224,11 +320,25 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
}
/**
* Handles the ManialinkPageAnswers and start a vote if a button in the panel got clicked
*
* @param array $callback
*/
public function handleManialinkPageAnswer(array $callback) {
//TODO Fx buttons
$actionId = $callback[1][2];
$actionArray = explode('.', $actionId);
if(count($actionArray) <= 2) {
return;
}
$voteIndex = $actionArray[2];
if(isset($this->voteCommands[$voteIndex])) {
$login = $callback[1][1];
$player = $this->maniaControl->playerManager->getPlayer($login);
$this->startVote($player, $voteIndex);
}
}
/**
@ -343,21 +453,28 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
//Check if vote is over
if($timeUntilExpire <= 0) {
$emptyManialink = new ManiaLink(self::MLID_WIDGET);
$manialinkText = $emptyManialink->render()->saveXML();
$this->maniaControl->manialinkManager->sendManialink($manialinkText);
// Trigger callback
$this->maniaControl->callbackManager->triggerCallback(self::CB_CUSTOM_VOTE_FINISHED, array(self::CB_CUSTOM_VOTE_FINISHED, $this->currentVote["Index"], $votePercentage));
//reset vote
$this->playersVotedPositiv = 0;
$this->playersVoted = null;
$this->currentVote = null;
$voter = null;
$this->destroyVote();
}
}
/**
* Destroys the current Vote
*/
private function destroyVote() {
$emptyManialink = new ManiaLink(self::MLID_WIDGET);
$manialinkText = $emptyManialink->render()->saveXML();
$this->maniaControl->manialinkManager->sendManialink($manialinkText);
$this->playersVotedPositiv = 0;
$this->playersVoted = null;
$this->currentVote = null;
$this->voter = null;
}
/**
* Shows the vote widget
*