From 094be1ce5b3a8f8d834e4d44908d85ab03d8b7a4 Mon Sep 17 00:00:00 2001 From: Patrick Fairbank Date: Tue, 26 Jul 2022 20:08:20 -0700 Subject: [PATCH] Show playoff alliance numbers and 4th teams on announcer display. --- field/arena_notifiers.go | 24 ++++++++++++++---- static/js/announcer_display.js | 42 +++++++++++++++++++++++++++----- templates/announcer_display.html | 11 ++------- 3 files changed, 57 insertions(+), 20 deletions(-) diff --git a/field/arena_notifiers.go b/field/arena_notifiers.go index 4b256ef..22cd8e9 100755 --- a/field/arena_notifiers.go +++ b/field/arena_notifiers.go @@ -127,6 +127,18 @@ 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 { @@ -136,11 +148,13 @@ func (arena *Arena) generateMatchLoadMessage() interface{} { } return &struct { - MatchType string - Match *model.Match - Teams map[string]*model.Team - Rankings map[string]*game.Ranking - }{arena.CurrentMatch.CapitalizedType(), arena.CurrentMatch, teams, rankings} + MatchType string + Match *model.Match + Teams map[string]*model.Team + RedOffFieldTeams []*model.Team + BlueOffFieldTeams []*model.Team + Rankings map[string]*game.Ranking + }{arena.CurrentMatch.CapitalizedType(), arena.CurrentMatch, teams, redOffFieldTeams, blueOffFieldTeams, rankings} } func (arena *Arena) generateMatchTimeMessage() interface{} { diff --git a/static/js/announcer_display.js b/static/js/announcer_display.js index c46b071..f1caafd 100644 --- a/static/js/announcer_display.js +++ b/static/js/announcer_display.js @@ -26,12 +26,29 @@ var handleAudienceDisplayMode = function(targetScreen) { // Handles a websocket message to update the teams for the current match. var handleMatchLoad = function(data) { $("#matchName").text(data.MatchType + " Match " + data.Match.DisplayName); - $("#red1").html(teamTemplate(formatTeam(data.Teams["R1"]))); - $("#red2").html(teamTemplate(formatTeam(data.Teams["R2"]))); - $("#red3").html(teamTemplate(formatTeam(data.Teams["R3"]))); - $("#blue1").html(teamTemplate(formatTeam(data.Teams["B1"]))); - $("#blue2").html(teamTemplate(formatTeam(data.Teams["B2"]))); - $("#blue3").html(teamTemplate(formatTeam(data.Teams["B3"]))); + + const teams = $("#teams"); + teams.empty(); + + if (data.Match.Type === "elimination") { + teams.append(createAllianceElement("red", data.Match.ElimRedAlliance)); + } + teams.append(createTeamElement("red", data.Teams["R1"], false)); + teams.append(createTeamElement("red", data.Teams["R2"], false)); + teams.append(createTeamElement("red", data.Teams["R3"], false)); + for (team of data.RedOffFieldTeams) { + teams.append(createTeamElement("red", team, true)); + } + + if (data.Match.Type === "elimination") { + teams.append(createAllianceElement("blue", data.Match.ElimBlueAlliance)); + } + teams.append(createTeamElement("blue", data.Teams["B1"], false)); + teams.append(createTeamElement("blue", data.Teams["B2"], false)); + teams.append(createTeamElement("blue", data.Teams["B3"], false)); + for (team of data.BlueOffFieldTeams) { + teams.append(createTeamElement("blue", team, true)); + } }; // Handles a websocket message to update the match time countdown. @@ -65,6 +82,19 @@ var handleScorePosted = function(data) { $("#matchResult").modal("show"); }; +// Creates the block containing the playoff alliance number. +var createAllianceElement = function(alliance, allianceNumber) { + return $(`

Alliance ${allianceNumber}

`); +}; + +// Creates the block containing the information for a single team. +var createTeamElement = function(alliance, team, isOffField) { + team.isOffField = isOffField; + const element = $(`
`) + element.html(teamTemplate(formatTeam(team))); + return element; +}; + // Replaces newlines in team fields with HTML line breaks. var formatTeam = function(team) { if (team) { diff --git a/templates/announcer_display.html b/templates/announcer_display.html index 3532062..2f706a4 100644 --- a/templates/announcer_display.html +++ b/templates/announcer_display.html @@ -6,14 +6,7 @@

Name

Recent Accomplishments

-
-
-
-
-
-
-
-
+

 
@@ -47,7 +40,7 @@