/* * This file is a part of the SteamWar software. * * Copyright (C) 2025 SteamWar.de-Serverteam * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package de.steamwar.towerrun.countdowns; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.state.GameStateToggleListener; import de.steamwar.towerrun.state.GameStates; import lombok.Getter; import java.util.EnumSet; public abstract class Countdown extends GameStateToggleListener { @Getter protected int time = defaultTime(); private de.steamwar.gamecore.countdown.Countdown countdown; protected Countdown(EnumSet enabledStates) { super(enabledStates); } int defaultTime() { return 0; } void timerEnd() { } boolean timerShouldCancel() { return true; } void run() { } void timerStart() { } void timerReset() { } public void setTime(int time) { this.time = time; if (countdown != null) { countdown.setRemainingTime(time + 1); } } @Override public void enable() { countdown = new de.steamwar.gamecore.countdown.Countdown( TowerRun.getInstance(), defaultTime() + 1, 0, 20, false ) { @Override protected void onTick(int remaining) { time = remaining; if (timerShouldCancel()) { reset(); time = defaultTime(); timerReset(); return; } if (time == defaultTime()) { timerStart(); } if (time > 0) { run(); } } @Override protected void onFinished() { timerEnd(); } }; countdown.enable(); } @Override public void disable() { if (countdown != null) { countdown.disable(); countdown = null; } } }