From f95c129522621383a162c3878f91ff876615d138 Mon Sep 17 00:00:00 2001 From: Hans Kokx Date: Mon, 16 Mar 2026 15:46:19 +0100 Subject: [PATCH] Fixed GUI timers Signed-off-by: Hans Kokx --- packages/wolf_3d_renderer/lib/wolf_3d_ascii_renderer.dart | 7 ++++++- .../wolf_3d_renderer/lib/wolf_3d_flutter_renderer.dart | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/wolf_3d_renderer/lib/wolf_3d_ascii_renderer.dart b/packages/wolf_3d_renderer/lib/wolf_3d_ascii_renderer.dart index 1c285fd..68e38f9 100644 --- a/packages/wolf_3d_renderer/lib/wolf_3d_ascii_renderer.dart +++ b/packages/wolf_3d_renderer/lib/wolf_3d_ascii_renderer.dart @@ -30,6 +30,8 @@ class _WolfAsciiRendererState extends State late Ticker _gameLoop; final FocusNode _focusNode = FocusNode(); + Duration _lastTick = Duration.zero; + // Changed from String to List> List> _asciiFrame = []; final AsciiRasterizer _asciiRasterizer = AsciiRasterizer(); @@ -57,8 +59,11 @@ class _WolfAsciiRendererState extends State void _tick(Duration elapsed) { if (!engine.isInitialized) return; + Duration delta = elapsed - _lastTick; + _lastTick = elapsed; + inputManager.update(); - engine.tick(elapsed, inputManager.currentInput); + engine.tick(delta, inputManager.currentInput); // Calculate frame synchronously and trigger UI rebuild setState(() { diff --git a/packages/wolf_3d_renderer/lib/wolf_3d_flutter_renderer.dart b/packages/wolf_3d_renderer/lib/wolf_3d_flutter_renderer.dart index c798f32..a6abc8b 100644 --- a/packages/wolf_3d_renderer/lib/wolf_3d_flutter_renderer.dart +++ b/packages/wolf_3d_renderer/lib/wolf_3d_flutter_renderer.dart @@ -32,6 +32,8 @@ class _WolfFlutterRendererState extends State late Ticker _gameLoop; final FocusNode _focusNode = FocusNode(); + Duration _lastTick = Duration.zero; + // --- NEW RASTERIZER STATE --- // Lock the internal rendering resolution to the classic 320x200 final FrameBuffer _frameBuffer = FrameBuffer(320, 200); @@ -63,8 +65,11 @@ class _WolfFlutterRendererState extends State void _tick(Duration elapsed) { if (!engine.isInitialized) return; + Duration delta = elapsed - _lastTick; + _lastTick = elapsed; + inputManager.update(); - engine.tick(elapsed, inputManager.currentInput); + engine.tick(delta, inputManager.currentInput); // Only start rendering a new frame if the previous one is finished. // This prevents memory leaks and stuttering on lower-end hardware!