Show ranking changes on audience and announcer displays.

This commit is contained in:
Patrick Fairbank
2020-03-27 22:17:27 -07:00
parent 2f7d186554
commit d33d10982c
5 changed files with 74 additions and 10 deletions

View File

@@ -194,11 +194,17 @@ func (arena *Arena) generateScorePostedMessage() interface{} {
}
}
rankings := make(map[int]game.Ranking, len(arena.SavedRankings))
for _, ranking := range arena.SavedRankings {
rankings[ranking.TeamId] = ranking
}
return &struct {
MatchType string
Match *model.Match
RedScoreSummary *game.ScoreSummary
BlueScoreSummary *game.ScoreSummary
Rankings map[int]game.Ranking
RedFouls []game.Foul
BlueFouls []game.Foul
RulesViolated map[int]*game.Rule
@@ -207,7 +213,7 @@ func (arena *Arena) generateScorePostedMessage() interface{} {
SeriesStatus string
SeriesLeader string
}{arena.SavedMatch.CapitalizedType(), arena.SavedMatch, arena.SavedMatchResult.RedScoreSummary(true),
arena.SavedMatchResult.BlueScoreSummary(true), arena.SavedMatchResult.RedScore.Fouls,
arena.SavedMatchResult.BlueScoreSummary(true), rankings, arena.SavedMatchResult.RedScore.Fouls,
arena.SavedMatchResult.BlueScore.Fouls,
getRulesViolated(arena.SavedMatchResult.RedScore.Fouls, arena.SavedMatchResult.BlueScore.Fouls),
arena.SavedMatchResult.RedCards, arena.SavedMatchResult.BlueCards, seriesStatus, seriesLeader}

View File

@@ -206,7 +206,7 @@ html {
}
#finalScore {
position: fixed;
width: 950px;
width: 1200px;
height: 550px;
top: 65px;
bottom: 0;
@@ -241,6 +241,7 @@ html {
float: left;
width: 50%;
height: 9%;
overflow: hidden;
line-height: 50px;
text-align: center;
color: #fff;
@@ -250,6 +251,11 @@ html {
.final-teams span {
margin: 0 10px;
}
.final-teams span sup {
margin-left: 3px;
font-size: 18px;
vertical-align: super;
}
.final-avatar {
height: 35px;
position: relative;

View File

@@ -57,11 +57,20 @@ var handleScorePosted = function(data) {
Object.assign(foul, data.RulesViolated[foul.RuleId]);
});
var redRankings = {};
redRankings[data.Match.Red1] = getRankingText(data.Match.Red1, data.Rankings);
redRankings[data.Match.Red2] = getRankingText(data.Match.Red2, data.Rankings);
redRankings[data.Match.Red3] = getRankingText(data.Match.Red3, data.Rankings);
var blueRankings = {};
blueRankings[data.Match.Blue1] = getRankingText(data.Match.Blue1, data.Rankings);
blueRankings[data.Match.Blue2] = getRankingText(data.Match.Blue2, data.Rankings);
blueRankings[data.Match.Blue3] = getRankingText(data.Match.Blue3, data.Rankings);
$("#scoreMatchName").text(data.MatchType + " Match " + data.Match.DisplayName);
$("#redScoreDetails").html(matchResultTemplate({score: data.RedScoreSummary, fouls: data.RedFouls,
rulesViolated: data.RulesViolated, cards: data.RedCards}));
rulesViolated: data.RulesViolated, cards: data.RedCards, rankings: redRankings}));
$("#blueScoreDetails").html(matchResultTemplate({score: data.BlueScoreSummary, fouls: data.BlueFouls,
rulesViolated: data.RulesViolated, cards: data.BlueCards}));
rulesViolated: data.RulesViolated, cards: data.BlueCards, rankings: blueRankings}));
$("#matchResult").modal("show");
// Activate tooltips above the foul listings.
@@ -76,6 +85,25 @@ var formatTeam = function(team) {
return team;
};
// Returns the string to be displayed to indicate change in rank.
var getRankingText = function(teamId, rankings) {
var ranking = rankings[teamId];
if (ranking === null || ranking.Rank === 0) {
return "";
}
var arrow = "";
if (ranking.Rank > ranking.PreviousRank && ranking.PreviousRank > 0) {
arrow = "⬇";
} else if (ranking.Rank < ranking.PreviousRank) {
arrow = "&#11014;";
}
var previousRank = "";
if (ranking.PreviousRank > 0) {
previousRank = " (was " + ranking.PreviousRank + ")";
}
return ranking.Rank + arrow + previousRank;
};
$(function() {
// Set up the websocket back to the server.
websocket = new CheesyWebsocket("/displays/announcer/websocket", {

View File

@@ -96,9 +96,9 @@ var handleRealtimeScore = function(data) {
// Handles a websocket message to populate the final score data.
var handleScorePosted = function(data) {
$("#" + redSide + "FinalScore").text(data.RedScoreSummary.Score);
$("#" + redSide + "FinalTeam1").text(data.Match.Red1);
$("#" + redSide + "FinalTeam2").text(data.Match.Red2);
$("#" + redSide + "FinalTeam3").text(data.Match.Red3);
$("#" + redSide + "FinalTeam1").html(data.Match.Red1 + "" + getRankingText(data.Match.Red1, data.Rankings));
$("#" + redSide + "FinalTeam2").html(data.Match.Red2 + "" + getRankingText(data.Match.Red2, data.Rankings));
$("#" + redSide + "FinalTeam3").html(data.Match.Red3 + "" + getRankingText(data.Match.Red3, data.Rankings));
$("#" + redSide + "FinalTeam1Avatar").attr("src", getAvatarUrl(data.Match.Red1));
$("#" + redSide + "FinalTeam2Avatar").attr("src", getAvatarUrl(data.Match.Red2));
$("#" + redSide + "FinalTeam3Avatar").attr("src", getAvatarUrl(data.Match.Red3));
@@ -112,9 +112,9 @@ var handleScorePosted = function(data) {
$("#" + redSide + "FinalEndgameRankingPoint").html(data.RedScoreSummary.EndgameRankingPoint ? "&#x2714;" : "&#x2718;");
$("#" + redSide + "FinalEndgameRankingPoint").attr("data-checked", data.RedScoreSummary.EndgameRankingPoint);
$("#" + blueSide + "FinalScore").text(data.BlueScoreSummary.Score);
$("#" + blueSide + "FinalTeam1").text(data.Match.Blue1);
$("#" + blueSide + "FinalTeam2").text(data.Match.Blue2);
$("#" + blueSide + "FinalTeam3").text(data.Match.Blue3);
$("#" + blueSide + "FinalTeam1").html(data.Match.Blue1 + "" + getRankingText(data.Match.Blue1, data.Rankings));
$("#" + blueSide + "FinalTeam2").html(data.Match.Blue2 + "" + getRankingText(data.Match.Blue2, data.Rankings));
$("#" + blueSide + "FinalTeam3").html(data.Match.Blue3 + "" + getRankingText(data.Match.Blue3, data.Rankings));
$("#" + blueSide + "FinalTeam1Avatar").attr("src", getAvatarUrl(data.Match.Blue1));
$("#" + blueSide + "FinalTeam2Avatar").attr("src", getAvatarUrl(data.Match.Blue2));
$("#" + blueSide + "FinalTeam3Avatar").attr("src", getAvatarUrl(data.Match.Blue3));
@@ -486,6 +486,21 @@ var setPowerCellText = function(element, scoreSummary, stage) {
element.css("opacity", opacity);
};
// Returns the string to be displayed next to the team number on the final score screen, to indicate change in rank.
var getRankingText = function(teamId, rankings) {
var ranking = rankings[teamId];
if (ranking === null || ranking.Rank === 0) {
return "";
}
var arrow = "";
if (ranking.Rank > ranking.PreviousRank && ranking.PreviousRank > 0) {
arrow = "&#11015;";
} else if (ranking.Rank < ranking.PreviousRank) {
arrow = "&#11014;";
}
return "<sup>" + ranking.Rank + arrow + "</sup>";
};
$(function() {
// Read the configuration for this display from the URL query string.
var urlParams = new URLSearchParams(window.location.search);

View File

@@ -112,6 +112,15 @@
</div>
{{"{{/if}}"}}
{{"{{/eachMapEntry}}"}}
<h4>Rankings</h4>
{{"{{#eachMapEntry rankings}}"}}
{{"{{#if this.value}}"}}
<div class="row">
<div class="col-lg-4 col-lg-offset-1">Team {{"{{this.key}}"}}</div>
<div class="col-lg-7">{{"{{{this.value}}}"}}</div>
</div>
{{"{{/if}}"}}
{{"{{/eachMapEntry}}"}}
</script>
{{end}}
{{define "head"}}