refactor: Update renderer mode enum and input key handling for improved clarity

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-20 10:54:10 +01:00
parent e060aef3f1
commit cbbcd3223a
2 changed files with 55 additions and 32 deletions

View File

@@ -10,10 +10,10 @@ import 'package:wolf_3d_renderer/wolf_3d_ascii_renderer.dart';
import 'package:wolf_3d_renderer/wolf_3d_flutter_renderer.dart';
import 'package:wolf_3d_renderer/wolf_3d_glsl_renderer.dart';
enum _RendererMode {
enum RendererMode {
software,
ascii,
glsl,
hardware,
}
/// Launches a [WolfEngine] via [Wolf3d] and exposes renderer/input integrations.
@@ -33,7 +33,7 @@ class GameScreen extends StatefulWidget {
class _GameScreenState extends State<GameScreen> {
late final WolfEngine _engine;
_RendererMode _rendererMode = _RendererMode.software;
RendererMode _rendererMode = RendererMode.hardware;
AsciiTheme _asciiTheme = AsciiThemes.blocks;
@override
@@ -109,7 +109,7 @@ class _GameScreenState extends State<GameScreen> {
top: 16,
right: 16,
child: Text(
'TAB: ${_modeLabel(_rendererMode)} T: ${_asciiTheme.name} `: FPS ${_engine.showFpsCounter ? 'On' : 'Off'}',
'<${widget.wolf3d.input.rendererToggleKeyLabel}> ${_rendererMode.name}${_rendererMode == RendererMode.ascii ? ' <${widget.wolf3d.input.asciiThemeCycleKeyLabel}> ${_asciiTheme.name}' : ''} <${widget.wolf3d.input.fpsToggleKeyLabel}> FPS ${_engine.showFpsCounter ? 'On' : 'Off'}',
style: TextStyle(
color: Colors.white.withValues(alpha: 0.5),
),
@@ -128,18 +128,18 @@ class _GameScreenState extends State<GameScreen> {
// Keep all renderers behind the same engine so mode switching does not
// reset level state or audio playback.
switch (_rendererMode) {
case _RendererMode.software:
case RendererMode.software:
return WolfFlutterRenderer(
engine: _engine,
onKeyEvent: _handleRendererKeyEvent,
);
case _RendererMode.ascii:
case RendererMode.ascii:
return WolfAsciiRenderer(
engine: _engine,
theme: _asciiTheme,
onKeyEvent: _handleRendererKeyEvent,
);
case _RendererMode.glsl:
case RendererMode.hardware:
return WolfGlslRenderer(
engine: _engine,
onKeyEvent: _handleRendererKeyEvent,
@@ -153,44 +153,41 @@ class _GameScreenState extends State<GameScreen> {
return;
}
if (event.logicalKey == LogicalKeyboardKey.tab) {
if (event.logicalKey == widget.wolf3d.input.rendererToggleKey) {
setState(_cycleRendererMode);
return;
}
if (event.logicalKey == LogicalKeyboardKey.backquote ||
event.character == '`') {
if (event.logicalKey == widget.wolf3d.input.fpsToggleKey) {
setState(_toggleFpsCounter);
return;
}
if (event.logicalKey == LogicalKeyboardKey.keyT ||
event.character == 't' ||
event.character == 'T') {
if (event.logicalKey == widget.wolf3d.input.asciiThemeCycleKey) {
setState(_cycleAsciiTheme);
}
}
void _cycleRendererMode() {
switch (_rendererMode) {
case _RendererMode.software:
_rendererMode = _RendererMode.ascii;
case RendererMode.hardware:
_rendererMode = RendererMode.software;
break;
case _RendererMode.ascii:
_rendererMode = _RendererMode.glsl;
case RendererMode.software:
_rendererMode = RendererMode.ascii;
break;
case _RendererMode.glsl:
_rendererMode = _RendererMode.software;
case RendererMode.ascii:
_rendererMode = RendererMode.hardware;
break;
}
}
void _onGlslUnavailable() {
if (!mounted || _rendererMode != _RendererMode.glsl) {
if (!mounted || _rendererMode != RendererMode.hardware) {
return;
}
setState(() {
_rendererMode = _RendererMode.software;
_rendererMode = RendererMode.software;
});
}
@@ -201,15 +198,4 @@ class _GameScreenState extends State<GameScreen> {
void _cycleAsciiTheme() {
_asciiTheme = AsciiThemes.nextOf(_asciiTheme);
}
String _modeLabel(_RendererMode mode) {
switch (mode) {
case _RendererMode.software:
return 'Software';
case _RendererMode.ascii:
return 'ASCII';
case _RendererMode.glsl:
return 'GLSL';
}
}
}