From f9e4f083639e79670c04613211e04f11285f30b5 Mon Sep 17 00:00:00 2001 From: Hans Kokx Date: Tue, 17 Mar 2026 23:12:35 +0100 Subject: [PATCH] Added ability to switch ascii themes by pressing tab Signed-off-by: Hans Kokx --- apps/wolf_3d_cli/bin/main.dart | 6 ++++++ .../engine/rasterizer/ascii_rasterizer.dart | 19 +++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/apps/wolf_3d_cli/bin/main.dart b/apps/wolf_3d_cli/bin/main.dart index 0c62b29..5bbd6c5 100644 --- a/apps/wolf_3d_cli/bin/main.dart +++ b/apps/wolf_3d_cli/bin/main.dart @@ -66,6 +66,12 @@ void main() async { if (bytes.contains(113) || bytes.contains(27)) { exitCleanly(0); } + + if (bytes.contains(9)) { + rasterizer.activeTheme = AsciiThemes.nextOf(rasterizer.activeTheme); + print("Switched to ${rasterizer.activeTheme.name} theme!"); + } + input.handleKey(bytes); }); diff --git a/packages/wolf_3d_dart/lib/src/engine/rasterizer/ascii_rasterizer.dart b/packages/wolf_3d_dart/lib/src/engine/rasterizer/ascii_rasterizer.dart index 10d1367..578e924 100644 --- a/packages/wolf_3d_dart/lib/src/engine/rasterizer/ascii_rasterizer.dart +++ b/packages/wolf_3d_dart/lib/src/engine/rasterizer/ascii_rasterizer.dart @@ -5,10 +5,12 @@ import 'package:wolf_3d_dart/wolf_3d_data_types.dart'; import 'package:wolf_3d_dart/wolf_3d_engine.dart'; class AsciiTheme { + final String name; + /// The character ramp, ordered from most dense (index 0) to least dense (last index). final String ramp; - const AsciiTheme(this.ramp); + const AsciiTheme(this.name, this.ramp); /// Always returns the densest character (e.g., for walls, UI, floors) String get solid => ramp[0]; @@ -27,9 +29,18 @@ class AsciiTheme { /// A collection of pre-defined character sets abstract class AsciiThemes { - static const AsciiTheme blocks = AsciiTheme("█▓▒░ "); - static const AsciiTheme classic = AsciiTheme("@%#*+=-:. "); - static const AsciiTheme dense = AsciiTheme("█▇▆▅▄▃▂ "); + static const AsciiTheme blocks = AsciiTheme('Blocks', "█▓▒░ "); + static const AsciiTheme classic = AsciiTheme('Classic', "@%#*+=-:. "); + + static const List values = [blocks, classic]; + + static AsciiTheme nextOf(AsciiTheme current) { + final int currentIndex = values.indexOf(current); + final int nextIndex = currentIndex == -1 + ? 0 + : (currentIndex + 1) % values.length; + return values[nextIndex]; + } } class ColoredChar {