MyTimer.java

package ch.ladestation.connectncharge.model.game.gameinfo;

import ch.ladestation.connectncharge.controller.ApplicationController;
import javafx.application.Platform;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

import java.util.Timer;
import java.util.TimerTask;

public final class MyTimer {
    private static final int MAX_SECONDS_PER_ROUND = 3600;
    private static final int MINUTES_PER_SECOND = 60;
    public static final int ADD_TIME = 15;

    private static boolean isTimerRunning = false;
    private static int secondsElapsed = 0;
    private static int additionalTime = 0;
    private static Timer timer;
    private static Label timerLabel;
    private static ApplicationController controller;

    private MyTimer() {
        throw new AssertionError();
    }

    public static void start() {
        if (!isTimerRunning) {
            timer = new Timer();
            TimerTask task = new TimerTask() {
                @Override
                public void run() {
                    if (secondsElapsed <= MAX_SECONDS_PER_ROUND) {
                        secondsElapsed++;
                        // Perform any desired actions based on the elapsed time
                        Platform.runLater(() -> {
                            controller.setEndTime(timeFormat(secondsElapsed));
                            timerLabel.setText("Zeit: " + controller.getModel().endTime.get());
                        });
                    }
                }
            };
            // Schedule the task to run every second (1000 milliseconds)
            timer.scheduleAtFixedRate(task, 0, 1000);
            isTimerRunning = true;
        }
    }

    public static void stop() {
        timer.cancel();
        MyTimer.secondsElapsed = 0;
        MyTimer.isTimerRunning = false;
        MyTimer.additionalTime = 0;
    }

    public static void setController(ApplicationController controller) {
        MyTimer.controller = controller;
    }

    public static void setTimerLabel(Label timerLabel) {
        MyTimer.timerLabel = timerLabel;
    }

    public static void addTime(int additionalTime, Button addTimeButton) {

        if (additionalTime != 0) {
            MyTimer.additionalTime += additionalTime;
            secondsElapsed += MyTimer.additionalTime;
        }
        addTimeButton.setText("Tipp +" + timeFormat(MyTimer.additionalTime + ADD_TIME));
    }

    private static String timeFormat(int allSeconds) {
        int seconds = allSeconds;
        int minutes = seconds / MINUTES_PER_SECOND;
        seconds %= MINUTES_PER_SECOND;
        return String.format("%02d:%02d", minutes, seconds);
    }
}