SignalSubscription

Namespace:

namespace Lenga\Engine\Core;

class SignalSubscription

Methods

dispose

public function dispose()

isDisposed

public function isDisposed()

Example

use Lenga\Engine\Core\Behaviour;
use Lenga\Engine\Core\Signal;
use Lenga\Engine\Core\SignalSubscription;

final class Door extends Behaviour
{
    public Signal $onOpened;

    public function awake(): void
    {
        $this->onOpened = $this->createSignal();
    }

    public function open(): void
    {
        $this->onOpened->dispatch($this);
    }
}

final class DoorIndicator extends Behaviour
{
    public ?Door $door = null;
    private ?SignalSubscription $subscription = null;

    public function onEnable(): void
    {
        $this->subscription = $this->door?->onOpened->add(function (Door $door): void {
            $this->flashIndicator();
        });
    }

    public function onDisable(): void
    {
        if ($this->subscription !== null && !$this->subscription->isDisposed()) {
            $this->subscription->dispose();
        }

        $this->subscription = null;
    }

    private function flashIndicator(): void
    {
    }
}