diff --git a/field/arena_notifiers.go b/field/arena_notifiers.go index 7cbdf24..52e4b68 100755 --- a/field/arena_notifiers.go +++ b/field/arena_notifiers.go @@ -128,18 +128,6 @@ func (arena *Arena) generateMatchLoadMessage() interface{} { teams[station] = allianceStation.Team } - redOffFieldTeamIds, blueOffFieldTeamIds, _ := arena.Database.GetOffFieldTeamIds(arena.CurrentMatch) - redOffFieldTeams := []*model.Team{} - blueOffFieldTeams := []*model.Team{} - for _, teamId := range redOffFieldTeamIds { - team, _ := arena.Database.GetTeamById(teamId) - redOffFieldTeams = append(redOffFieldTeams, team) - } - for _, teamId := range blueOffFieldTeamIds { - team, _ := arena.Database.GetTeamById(teamId) - blueOffFieldTeams = append(blueOffFieldTeams, team) - } - rankings := make(map[string]*game.Ranking) for _, allianceStation := range arena.AllianceStations { if allianceStation.Team != nil { @@ -148,14 +136,39 @@ func (arena *Arena) generateMatchLoadMessage() interface{} { } } + var matchup *bracket.Matchup + redOffFieldTeams := []*model.Team{} + blueOffFieldTeams := []*model.Team{} + if arena.CurrentMatch.Type == "elimination" { + matchup, _ = arena.PlayoffBracket.GetMatchup(arena.CurrentMatch.ElimRound, arena.CurrentMatch.ElimGroup) + redOffFieldTeamIds, blueOffFieldTeamIds, _ := arena.Database.GetOffFieldTeamIds(arena.CurrentMatch) + for _, teamId := range redOffFieldTeamIds { + team, _ := arena.Database.GetTeamById(teamId) + redOffFieldTeams = append(redOffFieldTeams, team) + } + for _, teamId := range blueOffFieldTeamIds { + team, _ := arena.Database.GetTeamById(teamId) + blueOffFieldTeams = append(blueOffFieldTeams, team) + } + } + return &struct { MatchType string Match *model.Match Teams map[string]*model.Team + Rankings map[string]*game.Ranking + Matchup *bracket.Matchup RedOffFieldTeams []*model.Team BlueOffFieldTeams []*model.Team - Rankings map[string]*game.Ranking - }{arena.CurrentMatch.CapitalizedType(), arena.CurrentMatch, teams, redOffFieldTeams, blueOffFieldTeams, rankings} + }{ + arena.CurrentMatch.CapitalizedType(), + arena.CurrentMatch, + teams, + rankings, + matchup, + redOffFieldTeams, + blueOffFieldTeams, + } } func (arena *Arena) generateMatchTimeMessage() interface{} { diff --git a/field/arena_test.go b/field/arena_test.go index f9a168b..e5355f9 100644 --- a/field/arena_test.go +++ b/field/arena_test.go @@ -6,6 +6,7 @@ package field import ( "github.com/Team254/cheesy-arena-lite/game" "github.com/Team254/cheesy-arena-lite/model" + "github.com/Team254/cheesy-arena-lite/tournament" "github.com/stretchr/testify/assert" "testing" "time" @@ -425,6 +426,8 @@ func TestLoadNextMatch(t *testing.T) { func TestSubstituteTeam(t *testing.T) { arena := setupTestArena(t) + tournament.CreateTestAlliances(arena.Database, 2) + arena.CreatePlayoffBracket() arena.Database.CreateTeam(&model.Team{Id: 101}) arena.Database.CreateTeam(&model.Team{Id: 102}) diff --git a/static/css/audience_display.css b/static/css/audience_display.css index 3cd6206..ae6e75a 100644 --- a/static/css/audience_display.css +++ b/static/css/audience_display.css @@ -167,6 +167,21 @@ html { line-height: 30px; color: #fff; } +#elimSeriesStatus { + width: 40px; + height: 18px; + display: none; + justify-content: center; + align-items: center; + background-color: #fc0; + color: #222; + border: 1px solid #222; + border-top: none; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + font-size: 15px; + font-weight: 200; +} .valign-cell { display: table-cell; vertical-align: middle; diff --git a/static/js/audience_display.js b/static/js/audience_display.js index 8e6fd78..7395a47 100644 --- a/static/js/audience_display.js +++ b/static/js/audience_display.js @@ -74,10 +74,20 @@ var handleMatchLoad = function(data) { $("#" + redSide + "ElimAlliance").text(currentMatch.ElimRedAlliance); $("#" + blueSide + "ElimAlliance").text(currentMatch.ElimBlueAlliance); $(".elim-alliance").show(); + + // Show the series status if this playoff round isn't just a single match. + if (data.Matchup.NumWinsToAdvance > 1) { + $("#" + redSide + "ElimAllianceWins").text(data.Matchup.RedAllianceWins); + $("#" + blueSide + "ElimAllianceWins").text(data.Matchup.BlueAllianceWins); + $("#elimSeriesStatus").css("display", "flex"); + } else { + $("#elimSeriesStatus").hide(); + } } else { $("#" + redSide + "ElimAlliance").text(""); $("#" + blueSide + "ElimAlliance").text(""); $(".elim-alliance").hide(); + $("#elimSeriesStatus").hide(); } if (data.Match.Type === "test") { diff --git a/templates/audience_display.html b/templates/audience_display.html index 2cd4e61..0b8bc57 100644 --- a/templates/audience_display.html +++ b/templates/audience_display.html @@ -53,6 +53,9 @@
+
+  -  +
diff --git a/web/match_play_test.go b/web/match_play_test.go index 112157c..b9bf201 100644 --- a/web/match_play_test.go +++ b/web/match_play_test.go @@ -45,6 +45,8 @@ func TestMatchPlay(t *testing.T) { func TestMatchPlayLoad(t *testing.T) { web := setupTestWeb(t) + tournament.CreateTestAlliances(web.arena.Database, 8) + web.arena.CreatePlayoffBracket() web.arena.Database.CreateTeam(&model.Team{Id: 101}) web.arena.Database.CreateTeam(&model.Team{Id: 102})