LobbyCountdown stuff
Signed-off-by: Aaron Brock <TheMineBench@gmail.com>
This commit is contained in:
parent
b4349a164b
commit
3f202d39ae
@ -10,12 +10,17 @@ namespace mineplex\plugin\gameengine\game\components\countdown;
|
|||||||
|
|
||||||
use mineplex\plugin\gameengine\arenas\Arena;
|
use mineplex\plugin\gameengine\arenas\Arena;
|
||||||
use mineplex\plugin\gameengine\arenas\events\ArenaEndEvent;
|
use mineplex\plugin\gameengine\arenas\events\ArenaEndEvent;
|
||||||
|
use mineplex\plugin\gameengine\arenas\events\ArenaJoinEvent;
|
||||||
|
use mineplex\plugin\gameengine\arenas\events\ArenaQuitEvent;
|
||||||
use mineplex\plugin\gameengine\game\components\gamestate\GameStateComponent;
|
use mineplex\plugin\gameengine\game\components\gamestate\GameStateComponent;
|
||||||
|
use mineplex\plugin\gameengine\game\components\world\event\WorldLoadSuccessEvent;
|
||||||
|
use mineplex\plugin\gameengine\game\components\world\WorldComponent;
|
||||||
use mineplex\plugin\gameengine\time\BenchSchedule;
|
use mineplex\plugin\gameengine\time\BenchSchedule;
|
||||||
use mineplex\plugin\gameengine\time\BenchTask;
|
use mineplex\plugin\gameengine\time\BenchTask;
|
||||||
use mineplex\plugin\gameengine\time\BenchTaskData;
|
use mineplex\plugin\gameengine\time\BenchTaskData;
|
||||||
use pocketmine\event\HandlerList;
|
use pocketmine\event\HandlerList;
|
||||||
use pocketmine\event\Listener;
|
use pocketmine\event\Listener;
|
||||||
|
use pocketmine\Player;
|
||||||
use pocketmine\Server;
|
use pocketmine\Server;
|
||||||
use mineplex\plugin\gameengine\game\components\gamestate\events\GameStateChangeEvent;
|
use mineplex\plugin\gameengine\game\components\gamestate\events\GameStateChangeEvent;
|
||||||
|
|
||||||
@ -24,14 +29,26 @@ class LobbyCountdown implements Listener, BenchTask {
|
|||||||
private $startCount;
|
private $startCount;
|
||||||
private $count;
|
private $count;
|
||||||
private $gameStateComponent;
|
private $gameStateComponent;
|
||||||
|
private $worldComponent;
|
||||||
private $arena;
|
private $arena;
|
||||||
private $startGameState;
|
private $startGameState;
|
||||||
private $setGameState;
|
private $setGameState;
|
||||||
|
private $minPlayers;
|
||||||
|
|
||||||
public function __construct(Arena $arena, GameStateComponent $gameStateComponent, $count, $startGameState, $setGameState)
|
private $message;
|
||||||
|
|
||||||
|
const WAITING_FOR_PLAYERS = "Waiting for players!";
|
||||||
|
|
||||||
|
const POPUP_ID = "popup";
|
||||||
|
const COUNTDOWN_ID = "count";
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct(Arena $arena, GameStateComponent $gameStateComponent, WorldComponent $worldComponent, $startGameState, $setGameState, $count, $minPlayers = 1)
|
||||||
{
|
{
|
||||||
$this->arena = $arena;
|
$this->arena = $arena;
|
||||||
$this->gameStateComponent = $gameStateComponent;
|
$this->gameStateComponent = $gameStateComponent;
|
||||||
|
$this->worldComponent = $worldComponent;
|
||||||
|
$this->minPlayers = $minPlayers;
|
||||||
|
|
||||||
$this->startCount = $count;
|
$this->startCount = $count;
|
||||||
$this->count = $count;
|
$this->count = $count;
|
||||||
@ -39,18 +56,60 @@ class LobbyCountdown implements Listener, BenchTask {
|
|||||||
$this->startGameState = $startGameState;
|
$this->startGameState = $startGameState;
|
||||||
$this->setGameState = $setGameState;
|
$this->setGameState = $setGameState;
|
||||||
|
|
||||||
|
$this->message = self::WAITING_FOR_PLAYERS;
|
||||||
|
|
||||||
Server::getInstance()->getPluginManager()->registerEvents($this, $arena->getPlugin());
|
Server::getInstance()->getPluginManager()->registerEvents($this, $arena->getPlugin());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
function checkCountdown()
|
* @param bool $addOne
|
||||||
|
*/
|
||||||
|
function checkCountdown($addOne = false)
|
||||||
{
|
{
|
||||||
|
$playerCount = (count($this->arena->getPlayers()) + $addOne);
|
||||||
|
|
||||||
|
if ($this->gameStateComponent->getGameState() == $this->startGameState && $this->worldComponent->isWorldReady() && $playerCount >= $this->minPlayers)
|
||||||
|
{
|
||||||
|
if (!BenchSchedule::isRunningWithId($this, self::COUNTDOWN_ID))
|
||||||
|
{
|
||||||
|
$this->count = $this->startCount;
|
||||||
|
$this->setCount();
|
||||||
|
BenchSchedule::runTaskTimerWithId($this, 1000, 1000, self::COUNTDOWN_ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->setWaiting($playerCount);
|
||||||
|
BenchSchedule::cancelTaskWithId($this, self::COUNTDOWN_ID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function onJoin(ArenaJoinEvent $event)
|
||||||
|
{
|
||||||
|
if ($event->getArena() !== $this->arena)
|
||||||
|
return;
|
||||||
|
$this->checkCountdown(true);
|
||||||
|
$this->popup($event->getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onQuit(ArenaQuitEvent $event)
|
||||||
|
{
|
||||||
|
if ($event->getArena() !== $this->arena)
|
||||||
|
return;
|
||||||
|
$this->checkCountdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onWorldCreation(WorldLoadSuccessEvent $event)
|
||||||
|
{
|
||||||
|
if ($event->getArena() !== $this->arena)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$this->checkCountdown();
|
||||||
|
}
|
||||||
|
|
||||||
public function onGameStateChange(GameStateChangeEvent $event)
|
public function onGameStateChange(GameStateChangeEvent $event)
|
||||||
{
|
{
|
||||||
if ($event->getArena() !== $this->arena)
|
if ($event->getArena() !== $this->arena)
|
||||||
@ -58,11 +117,15 @@ class LobbyCountdown implements Listener, BenchTask {
|
|||||||
|
|
||||||
if ($event->getToGameState() == $this->startGameState)
|
if ($event->getToGameState() == $this->startGameState)
|
||||||
{
|
{
|
||||||
BenchSchedule::runTaskTimer($this, 1000, 1000);
|
$this->checkCountdown();
|
||||||
|
BenchSchedule::runTaskTimerWithId($this, 500, 500, self::POPUP_ID);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
elseif ($event->getFromGameState() == $this->startGameState)
|
||||||
{
|
{
|
||||||
|
//Cancels both tasks
|
||||||
BenchSchedule::cancelTask($this);
|
BenchSchedule::cancelTask($this);
|
||||||
|
|
||||||
$this->count = $this->startCount;
|
$this->count = $this->startCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -77,27 +140,51 @@ class LobbyCountdown implements Listener, BenchTask {
|
|||||||
|
|
||||||
public function run(BenchTaskData $data)
|
public function run(BenchTaskData $data)
|
||||||
{
|
{
|
||||||
print "Count: $this->count"."\n";
|
if ($data->getId() == self::POPUP_ID)
|
||||||
|
|
||||||
if ($this->count <= 0)
|
|
||||||
{
|
{
|
||||||
$this->gameStateComponent->setGameState($this->setGameState);
|
$this->popupAll();
|
||||||
$data->end();
|
|
||||||
}
|
}
|
||||||
|
else //if ($data->getId() == self::COUNTDOWN_ID)
|
||||||
|
{
|
||||||
|
if ($this->count <= 0)
|
||||||
|
{
|
||||||
|
$this->gameStateComponent->setGameState($this->setGameState);
|
||||||
|
$data->end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$this->popup();
|
$this->message = "§9Game starting in:§c $this->count";
|
||||||
|
|
||||||
$this->count--;
|
|
||||||
|
|
||||||
|
|
||||||
|
$this->count--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function popup()
|
private function setWaiting($playerCount = null)
|
||||||
|
{
|
||||||
|
if ($playerCount == null)
|
||||||
|
$playerCount = count($this->arena->getPlayers());
|
||||||
|
$this->message = "§2Waiting for players! §a($playerCount/$this->minPlayers)";
|
||||||
|
$this->popupAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setCount($count = null)
|
||||||
|
{
|
||||||
|
if ($count == null)
|
||||||
|
$count = $this->count;
|
||||||
|
$this->message = "§9Game starting in:§c $count";
|
||||||
|
$this->popupAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function popupAll()
|
||||||
{
|
{
|
||||||
foreach ($this->arena->getPlayers() as $player)
|
foreach ($this->arena->getPlayers() as $player)
|
||||||
{
|
{
|
||||||
$player->sendPopup("Countdown: $this->count");
|
$this->popup($player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function popup(Player $player)
|
||||||
|
{
|
||||||
|
$player->sendPopup($this->message);
|
||||||
|
}
|
||||||
}
|
}
|
@ -75,12 +75,14 @@ class GameStateComponent implements Listener {
|
|||||||
|
|
||||||
private function localSetState($gameState)
|
private function localSetState($gameState)
|
||||||
{
|
{
|
||||||
|
$oldGameState = $this->getGameState();
|
||||||
|
|
||||||
$event = new GameStateChangeEvent($this->arena, $this->gameState, $gameState);
|
$this->gameState = $gameState;
|
||||||
|
|
||||||
|
$event = new GameStateChangeEvent($this->arena, $oldGameState, $gameState);
|
||||||
|
|
||||||
//Not sure if I should call the event before of after...
|
//Not sure if I should call the event before of after...
|
||||||
Server::getInstance()->getPluginManager()->callEvent($event);
|
Server::getInstance()->getPluginManager()->callEvent($event);
|
||||||
$this->gameState = $gameState;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGameState()
|
public function getGameState()
|
||||||
|
@ -124,7 +124,7 @@ class WorldComponent implements Listener
|
|||||||
|
|
||||||
print("Successfully Loaded World: " . $this->gameFolder . "\n");
|
print("Successfully Loaded World: " . $this->gameFolder . "\n");
|
||||||
|
|
||||||
Server::getInstance()->getPluginManager()->callEvent(new WorldLoadSuccessEvent($this->arena));
|
Server::getInstance()->getPluginManager()->callEvent(new WorldLoadSuccessEvent($this->arena, $this->world));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -5,13 +5,23 @@ namespace mineplex\plugin\gameengine\game\components\world\event;
|
|||||||
|
|
||||||
use mineplex\plugin\gameengine\arenas\ArenaEvent;
|
use mineplex\plugin\gameengine\arenas\ArenaEvent;
|
||||||
use mineplex\plugin\gameengine\arenas\Arena;
|
use mineplex\plugin\gameengine\arenas\Arena;
|
||||||
|
use pocketmine\level\Level;
|
||||||
|
|
||||||
class WorldLoadSuccessEvent extends ArenaEvent
|
class WorldLoadSuccessEvent extends ArenaEvent
|
||||||
{
|
{
|
||||||
public static $handlerList = null;
|
public static $handlerList = null;
|
||||||
|
|
||||||
public function __construct(Arena $arena)
|
private $level;
|
||||||
|
|
||||||
|
public function __construct(Arena $arena, Level $level)
|
||||||
{
|
{
|
||||||
parent::__construct($arena);
|
parent::__construct($arena);
|
||||||
|
$this->level = $level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getLevel()
|
||||||
|
{
|
||||||
|
return $this->level;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -9,11 +9,13 @@
|
|||||||
namespace mineplex\plugin\gameengine\game\games\sg;
|
namespace mineplex\plugin\gameengine\game\games\sg;
|
||||||
|
|
||||||
use mineplex\plugin\gameengine\game\components\countdown\GameStateCountdown;
|
use mineplex\plugin\gameengine\game\components\countdown\GameStateCountdown;
|
||||||
|
use mineplex\plugin\gameengine\game\components\countdown\LobbyCountdown;
|
||||||
use mineplex\plugin\gameengine\game\components\feature\features\NoBlockBreak;
|
use mineplex\plugin\gameengine\game\components\feature\features\NoBlockBreak;
|
||||||
use mineplex\plugin\gameengine\game\components\feature\GameStateFeatureManager;
|
use mineplex\plugin\gameengine\game\components\feature\GameStateFeatureManager;
|
||||||
use mineplex\plugin\gameengine\game\components\gamestate\GameState;
|
use mineplex\plugin\gameengine\game\components\gamestate\GameState;
|
||||||
use mineplex\plugin\gameengine\game\components\gamestate\GameStateComponent;
|
use mineplex\plugin\gameengine\game\components\gamestate\GameStateComponent;
|
||||||
use mineplex\plugin\gameengine\game\components\lobby\LobbyComponent;
|
use mineplex\plugin\gameengine\game\components\lobby\LobbyComponent;
|
||||||
|
use mineplex\plugin\gameengine\game\components\world\WorldComponent;
|
||||||
use mineplex\plugin\gameengine\game\Game;
|
use mineplex\plugin\gameengine\game\Game;
|
||||||
use mineplex\plugin\gameengine\arenas\Arena;
|
use mineplex\plugin\gameengine\arenas\Arena;
|
||||||
use mineplex\plugin\gameengine\game\components\feature\Feature;
|
use mineplex\plugin\gameengine\game\components\feature\Feature;
|
||||||
@ -40,7 +42,9 @@ class SurvivalGames implements Game {
|
|||||||
|
|
||||||
//new GameStateFeatureManager($arena, $features);
|
//new GameStateFeatureManager($arena, $features);
|
||||||
|
|
||||||
new GameStateCountdown($arena, $gameStateComponent, 20, GameState::LOBBY, GameState::PRE_GAME);
|
$worldComponent = new WorldComponent($arena);
|
||||||
|
|
||||||
|
new LobbyCountdown($arena, $gameStateComponent, $worldComponent, GameState::LOBBY, GameState::PRE_GAME, 50);
|
||||||
|
|
||||||
new GameStateCountdown($arena, $gameStateComponent, 10, GameState::PRE_GAME, GameState::GAME);
|
new GameStateCountdown($arena, $gameStateComponent, 10, GameState::PRE_GAME, GameState::GAME);
|
||||||
|
|
||||||
|
@ -62,31 +62,72 @@ class BenchSchedule extends Task
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param BenchTask $taskToCancel
|
* @param BenchTask $taskToCancel
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function cancelTask(BenchTask $taskToCancel)
|
public static function cancelTask(BenchTask $taskToCancel)
|
||||||
{
|
{
|
||||||
|
$deleted = false;
|
||||||
foreach (self::getInstance()->tasks as $key => $task)
|
foreach (self::getInstance()->tasks as $key => $task)
|
||||||
{
|
{
|
||||||
if ($task->getTaskData()->getTask() === $taskToCancel)
|
if ($task->getTaskData()->getTask() === $taskToCancel)
|
||||||
{
|
{
|
||||||
unset (self::getInstance()->tasks[$key]);
|
unset (self::getInstance()->tasks[$key]);
|
||||||
|
$deleted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param BenchTask $taskToCancel
|
* @param BenchTask $taskToCancel
|
||||||
* @param $id
|
* @param $id
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function cancelTaskWithId(BenchTask $taskToCancel, $id)
|
public static function cancelTaskWithId(BenchTask $taskToCancel, $id)
|
||||||
{
|
{
|
||||||
|
$deleted = false;
|
||||||
foreach (self::getInstance()->tasks as $key => $task)
|
foreach (self::getInstance()->tasks as $key => $task)
|
||||||
{
|
{
|
||||||
if ($task->getTaskData()->getTask() === $taskToCancel && $task->getTaskData()->getId() === $id)
|
if ($task->getTaskData()->getTask() === $taskToCancel && $task->getTaskData()->getId() === $id)
|
||||||
{
|
{
|
||||||
unset (self::getInstance()->tasks[$key]);
|
unset (self::getInstance()->tasks[$key]);
|
||||||
|
$deleted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param BenchTask $taskToCancel
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isRunning(BenchTask $taskToCancel)
|
||||||
|
{
|
||||||
|
foreach (self::getInstance()->tasks as $key => $task)
|
||||||
|
{
|
||||||
|
if ($task->getTaskData()->getTask() === $taskToCancel)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param BenchTask $taskToCancel
|
||||||
|
* @param $id
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isRunningWithId(BenchTask $taskToCancel, $id)
|
||||||
|
{
|
||||||
|
foreach (self::getInstance()->tasks as $key => $task)
|
||||||
|
{
|
||||||
|
if ($task->getTaskData()->getTask() === $taskToCancel && $task->getTaskData()->getId() === $id)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user