> */ public const SCENES = [ 'THE EXIT' => GapCircleScene::class, 'MULTIPLY' => MultiplyScene::class, 'BREAK RINGS' => ConcentricScene::class, 'MARBLE RUN' => MarbleScene::class, 'INFINITE ZOOM' => ZoomRingsScene::class, 'GROWING STAIRS' => StairsScene::class, 'TUNNEL' => TunnelScene::class, 'SPIRAL' => SpiralScene::class, 'WAVY GRID' => WaveGridScene::class, 'DOT RIPPLE' => DotRippleScene::class, 'DOMINOES' => DominoScene::class, 'CAT BOUNCE' => CatBounceScene::class, 'RAIN POND' => RainPondScene::class, 'PENDULUMS' => PendulumScene::class, 'PLINKO' => PlinkoScene::class, ]; public function enter(array $params = []): void { $this->engine->device()->keepAwake(); // the screen stays on in the menu too $this->engine->setFont(new TtfFont($this->sdl(), 'assets/fonts/Quicksand-Bold.ttf', 8, true, 0, 0.0, 0.5)); parent::enter($params); } protected function items(): array { $items = []; foreach (self::SCENES as $label => $class) { $items[] = [$label, null, fn () => $this->scenes()->switchTo($class, ['seed' => random_int(1, 99999)])]; } $items[] = ['LANGUAGE', fn () => strtoupper($this->engine->lang->getLang()), null, function (int $dir): void { $this->engine->lang->setLang($this->engine->lang->getLang() === 'fr' ? 'en' : 'fr'); $this->engine->options->set('lang', $this->engine->lang->getLang()); $this->refresh(); }]; if (Platform::isDesktop()) { $items[] = ['QUIT', null, fn () => $this->engine->quit()]; } return $items; } protected function back(): void { } }