From 76ca5a4dcd5fdac5db7abcfc33c70c563a0d224d Mon Sep 17 00:00:00 2001 From: Ken Schenke Date: Wed, 18 Dec 2019 16:27:45 -0600 Subject: [PATCH] Custom match times --- db/migrations/20191218083501_AddMatchTimes.sql | 12 ++++++++++++ field/arena.go | 8 ++++---- field/arena_notifiers.go | 2 ++ field/driver_station_connection.go | 8 ++++---- game/match_timing.go | 18 +----------------- model/event_settings.go | 4 ++++ templates/setup_settings.html | 12 ++++++++++++ web/setup_settings.go | 2 ++ 8 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 db/migrations/20191218083501_AddMatchTimes.sql diff --git a/db/migrations/20191218083501_AddMatchTimes.sql b/db/migrations/20191218083501_AddMatchTimes.sql new file mode 100644 index 0000000..08a2350 --- /dev/null +++ b/db/migrations/20191218083501_AddMatchTimes.sql @@ -0,0 +1,12 @@ +-- +goose Up +-- +goose StatementBegin +ALTER TABLE event_settings ADD durationauto int; +ALTER TABLE event_settings ADD durationteleop int; +UPDATE event_settings SET durationauto = 15, durationteleop = 135; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +ALTER TABLE event_settings DROP durationauto; +ALTER TABLE event_settings DROP durationteleop; +-- +goose StatementEnd diff --git a/field/arena.go b/field/arena.go index 5ff1648..2634294 100644 --- a/field/arena.go +++ b/field/arena.go @@ -401,7 +401,7 @@ func (arena *Arena) Update() { case AutoPeriod: auto = true enabled = true - if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec) { + if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+arena.EventSettings.DurationAuto) { auto = false sendDsPacket = true if game.MatchTiming.PauseDurationSec > 0 { @@ -415,7 +415,7 @@ func (arena *Arena) Update() { case PausePeriod: auto = false enabled = false - if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec+ + if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+arena.EventSettings.DurationAuto+ game.MatchTiming.PauseDurationSec) { arena.MatchState = TeleopPeriod auto = false @@ -425,8 +425,8 @@ func (arena *Arena) Update() { case TeleopPeriod: auto = false enabled = true - if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec+ - game.MatchTiming.PauseDurationSec+game.MatchTiming.TeleopDurationSec) { + if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+arena.EventSettings.DurationAuto+ + game.MatchTiming.PauseDurationSec+arena.EventSettings.DurationTeleop) { arena.MatchState = PostMatch auto = false enabled = false diff --git a/field/arena_notifiers.go b/field/arena_notifiers.go index 61f5b73..fcff131 100644 --- a/field/arena_notifiers.go +++ b/field/arena_notifiers.go @@ -148,6 +148,8 @@ func (arena *Arena) generateMatchTimeMessage() interface{} { } func (arena *Arena) generateMatchTimingMessage() interface{} { + game.MatchTiming.TeleopDurationSec = arena.EventSettings.DurationTeleop + game.MatchTiming.AutoDurationSec = arena.EventSettings.DurationAuto return &game.MatchTiming } diff --git a/field/driver_station_connection.go b/field/driver_station_connection.go index 39fbfd9..0e247a7 100644 --- a/field/driver_station_connection.go +++ b/field/driver_station_connection.go @@ -223,15 +223,15 @@ func (dsConn *DriverStationConnection) encodeControlPacket(arena *Arena) [22]byt case TimeoutActive: fallthrough case PostTimeout: - matchSecondsRemaining = game.MatchTiming.AutoDurationSec + matchSecondsRemaining = arena.EventSettings.DurationAuto case StartMatch: fallthrough case AutoPeriod: - matchSecondsRemaining = game.MatchTiming.AutoDurationSec - int(arena.MatchTimeSec()) + matchSecondsRemaining = arena.EventSettings.DurationAuto - int(arena.MatchTimeSec()) case PausePeriod: - matchSecondsRemaining = game.MatchTiming.TeleopDurationSec + matchSecondsRemaining = arena.EventSettings.DurationTeleop case TeleopPeriod: - matchSecondsRemaining = game.MatchTiming.AutoDurationSec + game.MatchTiming.TeleopDurationSec + + matchSecondsRemaining = arena.EventSettings.DurationAuto + arena.EventSettings.DurationTeleop + game.MatchTiming.PauseDurationSec - int(arena.MatchTimeSec()) default: matchSecondsRemaining = 0 diff --git a/game/match_timing.go b/game/match_timing.go index 97bc86b..2ec16db 100644 --- a/game/match_timing.go +++ b/game/match_timing.go @@ -5,26 +5,10 @@ package game -import "time" - var MatchTiming = struct { WarmupDurationSec int AutoDurationSec int PauseDurationSec int TeleopDurationSec int TimeoutDurationSec int -}{0, 15, 0, 135, 0} - -func GetAutoEndTime(matchStartTime time.Time) time.Time { - return matchStartTime.Add(time.Duration(MatchTiming.WarmupDurationSec+MatchTiming.AutoDurationSec) * time.Second) -} - -func GetTeleopStartTime(matchStartTime time.Time) time.Time { - return matchStartTime.Add(time.Duration(MatchTiming.WarmupDurationSec+MatchTiming.AutoDurationSec+ - MatchTiming.PauseDurationSec) * time.Second) -} - -func GetMatchEndTime(matchStartTime time.Time) time.Time { - return matchStartTime.Add(time.Duration(MatchTiming.WarmupDurationSec+MatchTiming.AutoDurationSec+ - MatchTiming.PauseDurationSec+MatchTiming.TeleopDurationSec) * time.Second) -} +}{0, 0, 0, 0, 0} diff --git a/model/event_settings.go b/model/event_settings.go index 8ddea47..521ab1b 100644 --- a/model/event_settings.go +++ b/model/event_settings.go @@ -9,6 +9,8 @@ type EventSettings struct { Id int Name string NumElimAlliances int + DurationAuto int + DurationTeleop int SelectionRound2Order string SelectionRound3Order string TBADownloadEnabled bool @@ -43,6 +45,8 @@ func (database *Database) GetEventSettings() (*EventSettings, error) { // Database record doesn't exist yet; create it now. eventSettings.Name = "Untitled Event" eventSettings.NumElimAlliances = 8 + eventSettings.DurationAuto = 15 + eventSettings.DurationTeleop = 135 eventSettings.SelectionRound2Order = "L" eventSettings.SelectionRound3Order = "" eventSettings.TBADownloadEnabled = true diff --git a/templates/setup_settings.html b/templates/setup_settings.html index 4effc40..5357686 100644 --- a/templates/setup_settings.html +++ b/templates/setup_settings.html @@ -30,6 +30,18 @@ +
+ +
+ +
+
+
+ +
+ +
+
diff --git a/web/setup_settings.go b/web/setup_settings.go index 5dc47dc..d9f8863 100644 --- a/web/setup_settings.go +++ b/web/setup_settings.go @@ -48,6 +48,8 @@ func (web *Web) settingsPostHandler(w http.ResponseWriter, r *http.Request) { } eventSettings.NumElimAlliances = numAlliances + eventSettings.DurationAuto, _ = strconv.Atoi(r.PostFormValue("durationAuto")) + eventSettings.DurationTeleop, _ = strconv.Atoi(r.PostFormValue("durationTeleop")) eventSettings.SelectionRound2Order = r.PostFormValue("selectionRound2Order") eventSettings.SelectionRound3Order = r.PostFormValue("selectionRound3Order") eventSettings.TBADownloadEnabled = r.PostFormValue("TBADownloadEnabled") == "on"