Skip to content

Instantly share code, notes, and snippets.

@PJZ9n
Last active April 20, 2020 23:39
Show Gist options
  • Save PJZ9n/c92a2f092610f52e4811f7f5d8bd34e7 to your computer and use it in GitHub Desktop.
Save PJZ9n/c92a2f092610f52e4811f7f5d8bd34e7 to your computer and use it in GitHub Desktop.
コルーチンのやつ(無名クラスではない版) 動作未確認、急いで勘で書いたからもしかしたら間違ってるかも
<?php
class TestTask extends Task
{
/** @var \Generator */
private $generator;
public function __construct(\Generator $generator)
{
$this->generator = $generator;
}
public function onRun(int $currentTick): void
{
if ($this->generator->valid()) {//yieldされていたら
$this->generator->next();//進む
echo "進みました" . PHP_EOL;
} else {//yieldされなくなったら(一番下に行った=forを抜けたら)
$this->getHandler()->cancel();//タスクをキャンセル(終了)する
echo "終了しました" . PHP_EOL;
}
}
}
function test(): \Generator
{
for ($i = 1; $i <= 5; $i++) {
yield;//ここでGeneratorを返して、next(16行目)が呼ばれるのを待つ(説明が難しい)
//ここに処理を書く(パーティクル出したり)
echo "Number is" . $i . PHP_EOL;
}
}
/** @var pocketmine\plugin\Plugin $this */
$this->getScheduler()->scheduleRepeatingTask(new TestTask(test()), 20);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment