Merge pull request #629 from SalavecJ/draft_timer_fix

Fixed - broken draft timers
This commit is contained in:
Christian McCarty
2025-04-17 22:25:39 -05:00
committed by GitHub
2 changed files with 24 additions and 20 deletions

View File

@@ -28,6 +28,8 @@ public class TableDraftTournament extends BaseTournament implements Tournament {
private TableDraft table = null;
private final ChatServer chatServer;
private ZonedDateTime nextRoundStart = null;
public ZonedDateTime deckbuildingDeadline = null;
public ZonedDateTime registrationDeadline = null;
public TableDraftTournament(TournamentService tournamentService, CollectionsManager collectionsManager, ProductLibrary productLibrary,
LotroFormatLibrary formatLibrary, SoloDraftDefinitions soloDraftDefinitions, TableDraftDefinitions tableDraftDefinitions,
@@ -89,13 +91,13 @@ public class TableDraftTournament extends BaseTournament implements Tournament {
if (getTournamentStage() == Stage.DRAFT) {
createTable();
} else if (getTournamentStage() == Stage.DECK_BUILDING) {
if (tableDraftInfo.deckbuildingDeadline == null || tableDraftInfo.registrationDeadline == null) {
tableDraftInfo.deckbuildingDeadline = DateUtils.Now().plus(tableDraftInfo.deckbuildingDuration);
tableDraftInfo.registrationDeadline = tableDraftInfo.deckbuildingDeadline.plus(tableDraftInfo.registrationDuration);
if (deckbuildingDeadline == null) {
deckbuildingDeadline = DateUtils.Now().plus(tableDraftInfo.deckbuildingDuration);
registrationDeadline = deckbuildingDeadline.plus(tableDraftInfo.registrationDuration);
}
} else if (getTournamentStage() == Stage.DECK_REGISTRATION) {
if (tableDraftInfo.registrationDeadline == null) {
tableDraftInfo.registrationDeadline = DateUtils.Now().plus(tableDraftInfo.registrationDuration);
if (registrationDeadline == null) {
registrationDeadline = DateUtils.Now().plus(tableDraftInfo.registrationDuration);
}
} else if (_tournamentInfo.Stage == Stage.PLAYING_GAMES) {
var matchesToCreate = new HashMap<String, String>();
@@ -162,30 +164,37 @@ public class TableDraftTournament extends BaseTournament implements Tournament {
_tournamentInfo.Stage = Stage.DECK_BUILDING;
_tournamentService.recordTournamentStage(_tournamentId, getTournamentStage());
tableDraftInfo.deckbuildingDeadline = DateUtils.Now().plus(tableDraftInfo.deckbuildingDuration);
tableDraftInfo.registrationDeadline = tableDraftInfo.deckbuildingDeadline.plus(tableDraftInfo.registrationDuration);
deckbuildingDeadline = DateUtils.Now().plus(tableDraftInfo.deckbuildingDuration);
registrationDeadline = deckbuildingDeadline.plus(tableDraftInfo.registrationDuration);
String duration = DateUtils.HumanDuration(tableDraftInfo.deckbuildingDuration);
result.add(new BroadcastAction("Draft has finished for tournament <b>" + getTournamentName() + "</b>. " +
"Players now have " + duration + " to build a deck with the cards they got. "
+ "<br/><br/>Remember to return to the game hall and register your deck before " + DateUtils.FormatTime(tableDraftInfo.registrationDeadline) + ".", activePlayers));
+ "<br/><br/>Remember to return to the game hall and register your deck before " + DateUtils.FormatTime(registrationDeadline) + ".", activePlayers));
}
}
else if (getTournamentStage() == Stage.DECK_BUILDING) {
if (DateUtils.Now().isAfter(tableDraftInfo.deckbuildingDeadline)) {
if (deckbuildingDeadline == null) {
deckbuildingDeadline = DateUtils.Now().plus(tableDraftInfo.deckbuildingDuration);
registrationDeadline = deckbuildingDeadline.plus(tableDraftInfo.registrationDuration);
}
if (DateUtils.Now().isAfter(deckbuildingDeadline)) {
_tournamentInfo.Stage = Stage.DECK_REGISTRATION;
_tournamentService.recordTournamentStage(_tournamentId, getTournamentStage());
String duration = DateUtils.HumanDuration(tableDraftInfo.registrationDuration);
result.add(new BroadcastAction("Deck building in tournament <b>" + getTournamentName() + "</b> has finished. Players now have "
+ duration + " to finish registering their decks. Any player who has not turned in their deck by the deadline at "
+ DateUtils.FormatTime(tableDraftInfo.registrationDeadline) + " will be auto-disqualified."
+ DateUtils.FormatTime(registrationDeadline) + " will be auto-disqualified."
+ "<br/><br/>Once the deadline has passed, the tournament will begin.", activePlayers));
}
}
if (getTournamentStage() == Stage.DECK_REGISTRATION) {
if (DateUtils.Now().isAfter(tableDraftInfo.registrationDeadline)) {
if (registrationDeadline == null) {
registrationDeadline = DateUtils.Now().plus(tableDraftInfo.registrationDuration);
}
if (DateUtils.Now().isAfter(registrationDeadline)) {
disqualifyUnregisteredPlayers();
_tournamentInfo.Stage = tableDraftInfo.postRegistrationStage();
@@ -268,10 +277,10 @@ public class TableDraftTournament extends BaseTournament implements Tournament {
@Override
public long getSecondsRemaining() throws IllegalStateException {
if (getTournamentStage() == Stage.DECK_BUILDING) {
return Duration.between(DateUtils.Now(), tableDraftInfo.deckbuildingDeadline).getSeconds();
} else if (getTournamentStage() == Stage.DECK_REGISTRATION) {
return Duration.between(DateUtils.Now(), tableDraftInfo.registrationDeadline).getSeconds();
if (getTournamentStage() == Stage.DECK_BUILDING && deckbuildingDeadline != null && DateUtils.Now().isBefore(deckbuildingDeadline)) {
return Duration.between(DateUtils.Now(), deckbuildingDeadline).getSeconds();
} else if (getTournamentStage() == Stage.DECK_REGISTRATION && registrationDeadline != null && DateUtils.Now().isBefore(registrationDeadline)) {
return Duration.between(DateUtils.Now(), registrationDeadline).getSeconds();
} else if (getTournamentStage() == Stage.PLAYING_GAMES && nextRoundStart != null && DateUtils.Now().isBefore(nextRoundStart)) {
return Duration.between(DateUtils.Now(), nextRoundStart).getSeconds();
} else {

View File

@@ -15,9 +15,7 @@ import java.time.ZonedDateTime;
public class TableDraftTournamentInfo extends TournamentInfo {
public final TableDraftDefinition tableDraftDefinition;
public ZonedDateTime deckbuildingDeadline;
public final Duration deckbuildingDuration;
public ZonedDateTime registrationDeadline;
public final Duration registrationDuration;
protected TableDraftTournamentParams tableDraftParams;
@@ -30,9 +28,6 @@ public class TableDraftTournamentInfo extends TournamentInfo {
deckbuildingDuration = Duration.ofMinutes(tableDraftParams.deckbuildingDuration);
registrationDuration = Duration.ofMinutes(tableDraftParams.turnInDuration);
//
deckbuildingDeadline = StartTime.plus(deckbuildingDuration);
// registrationDeadline = deckbuildingDeadline.plus(registrationDuration);
}
//Used by tournament queues to duplicate a template info with fresh parameters