feat: Implement ASCII theme cycling and add quadrant theme support

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-19 23:29:00 +01:00
parent aab79b5c50
commit add8bcfde1
6 changed files with 219 additions and 11 deletions

View File

@@ -7,9 +7,12 @@ import 'package:wolf_3d_renderer/base_renderer.dart';
/// Displays the game using a text-mode approximation of the original renderer.
class WolfAsciiRenderer extends BaseWolfRenderer {
final AsciiTheme theme;
/// Creates an ASCII renderer bound to [engine].
const WolfAsciiRenderer({
required super.engine,
this.theme = AsciiThemes.blocks,
super.onKeyEvent,
super.key,
});
@@ -30,6 +33,7 @@ class _WolfAsciiRendererState extends BaseWolfRendererState<WolfAsciiRenderer> {
@override
void initState() {
super.initState();
_asciiRenderer.activeTheme = widget.theme;
// ASCII output uses a reduced logical framebuffer because glyph rendering
// expands the final view significantly once laid out in Flutter text.
if (widget.engine.frameBuffer.width != _renderWidth ||
@@ -38,6 +42,14 @@ class _WolfAsciiRendererState extends BaseWolfRendererState<WolfAsciiRenderer> {
}
}
@override
void didUpdateWidget(covariant WolfAsciiRenderer oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.theme != widget.theme) {
_asciiRenderer.activeTheme = widget.theme;
}
}
@override
Color get scaffoldColor => widget.engine.difficulty == null
? _colorFromRgb(widget.engine.menuBackgroundRgb)