Improves ASCII rasterization speed and simplifies API
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -38,9 +38,9 @@ void main() async {
|
||||
|
||||
final AsciiRasterizer asciiRasterizer = AsciiRasterizer(isTerminal: true);
|
||||
final SixelRasterizer sixelRasterizer = SixelRasterizer();
|
||||
Rasterizer rasterizer = sixelRasterizer;
|
||||
CliRasterizer rasterizer = sixelRasterizer;
|
||||
|
||||
FrameBuffer buffer = FrameBuffer(
|
||||
final FrameBuffer initialFrameBuffer = FrameBuffer(
|
||||
stdout.terminalColumns,
|
||||
stdout.terminalLines,
|
||||
);
|
||||
@@ -49,6 +49,7 @@ void main() async {
|
||||
data: availableGames.values.first,
|
||||
difficulty: Difficulty.medium,
|
||||
startingEpisode: 0,
|
||||
frameBuffer: initialFrameBuffer,
|
||||
audio: CliSilentAudio(),
|
||||
input: CliInput(),
|
||||
onGameWon: () {
|
||||
@@ -83,24 +84,17 @@ void main() async {
|
||||
if (stdout.hasTerminal) {
|
||||
int cols = stdout.terminalColumns;
|
||||
int rows = stdout.terminalLines;
|
||||
if (!rasterizer.isTerminalSizeSupported(cols, rows)) {
|
||||
if (!rasterizer.prepareTerminalFrame(engine, columns: cols, rows: rows)) {
|
||||
// Clear the screen and print the warning at the top left
|
||||
stdout.write('\x1b[2J\x1b[H');
|
||||
stdout.write('\x1b[31m[ ERROR ] TERMINAL TOO SMALL\x1b[0m\n\n');
|
||||
stdout.write('${rasterizer.terminalSizeRequirement}\n');
|
||||
stdout.write(
|
||||
'Current size: \x1b[33m${stdout.terminalColumns}x${stdout.terminalLines}\x1b[0m\n\n',
|
||||
rasterizer.buildTerminalSizeWarning(columns: cols, rows: rows),
|
||||
);
|
||||
stdout.write('Please resize your window to resume the game...');
|
||||
|
||||
// Prevent the engine from simulating a massive time jump when resumed
|
||||
lastTick = stopwatch.elapsed;
|
||||
return;
|
||||
}
|
||||
|
||||
if (buffer.width != cols || buffer.height != rows) {
|
||||
buffer = FrameBuffer(cols, rows);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Normal Game Loop
|
||||
@@ -112,8 +106,6 @@ void main() async {
|
||||
stdout.write('\x1b[H');
|
||||
|
||||
engine.tick(elapsed);
|
||||
rasterizer.render(engine, buffer);
|
||||
|
||||
stdout.write(rasterizer.finalizeFrame());
|
||||
stdout.write(rasterizer.render(engine));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ class _GameScreenState extends State<GameScreen> {
|
||||
data: widget.data,
|
||||
difficulty: widget.difficulty,
|
||||
startingEpisode: widget.startingEpisode,
|
||||
frameBuffer: FrameBuffer(320, 200),
|
||||
audio: widget.audio,
|
||||
input: widget.input,
|
||||
onGameWon: () => Navigator.of(context).pop(),
|
||||
|
||||
Reference in New Issue
Block a user