From 5d45348c03b041e4910e6f567da1318eda762289 Mon Sep 17 00:00:00 2001 From: thomasmuller Date: Mon, 23 Jun 2025 17:34:02 +0200 Subject: [PATCH] test commit --- .../chess/controller/CountdownTimer.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 schach/src/main/java/de/hs_mannheim/informatik/chess/controller/CountdownTimer.java diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/CountdownTimer.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/CountdownTimer.java new file mode 100644 index 0000000..c9a6ca3 --- /dev/null +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/CountdownTimer.java @@ -0,0 +1,51 @@ +package de.hs_mannheim.informatik.chess.controller; + + +import java.util.function.Consumer; + +import javax.swing.Timer; + +public class CountdownTimer { + private Timer timer; + private int secondsLeft; + private Runnable onTimeout; + private Consumer onTick; // <- neue Callback-Funktion + + public CountdownTimer(int minutes, int seconds) { + this.secondsLeft = minutes * 60 + seconds; + } + + public void setOnTimeout(Runnable onTimeout) { + this.onTimeout = onTimeout; + } + + public void setOnTick(Consumer onTick) { + this.onTick = onTick; + } + + public void start() { + if (timer != null) timer.stop(); + timer = new Timer(1000, e -> { + secondsLeft--; + if (onTick != null) onTick.accept(secondsLeft); // <- tick callback + if (secondsLeft <= 0) { + stop(); + if (onTimeout != null) onTimeout.run(); + } + }); + timer.start(); + } + + public void stop() { + if (timer != null) { + timer.stop(); + } + } + + public void reset(int minutes, int seconds) { + stop(); + this.secondsLeft = minutes * 60 + seconds; + } + + +}