Skip to content

Commit

Permalink
Adds the option to show unpicked teams during alliance selection
Browse files Browse the repository at this point in the history
  • Loading branch information
Kython89 committed Jun 14, 2024
1 parent e6ef4fb commit 3dc260f
Show file tree
Hide file tree
Showing 9 changed files with 67 additions and 19 deletions.
7 changes: 7 additions & 0 deletions field/arena.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ const (
PostTimeout
)

type RankedTeam struct {
Rank int
TeamId int
Picked bool
}

type Arena struct {
Database *model.Database
EventSettings *model.EventSettings
Expand Down Expand Up @@ -77,6 +83,7 @@ type Arena struct {
SavedRankings game.Rankings
AllianceStationDisplayMode string
AllianceSelectionAlliances []model.Alliance
AllianceSelectionRankedTeams []*RankedTeam
AllianceSelectionShowTimer bool
AllianceSelectionTimeRemainingSec int
PlayoffTournament *playoff.PlayoffTournament
Expand Down
2 changes: 2 additions & 0 deletions field/arena_notifiers.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,12 @@ func (arena *Arena) generateAllianceSelectionMessage() any {
Alliances []model.Alliance
ShowTimer bool
TimeRemainingSec int
RankedTeams []*RankedTeam
}{
arena.AllianceSelectionAlliances,
arena.AllianceSelectionShowTimer,
arena.AllianceSelectionTimeRemainingSec,
arena.AllianceSelectionRankedTeams,
}
}

Expand Down
2 changes: 2 additions & 0 deletions model/event_settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ type EventSettings struct {
NumPlayoffAlliances int
SelectionRound2Order string
SelectionRound3Order string
SelectionShowUnpickedTeams bool
TbaDownloadEnabled bool
TbaPublishingEnabled bool
TbaEventCode string
Expand Down Expand Up @@ -70,6 +71,7 @@ func (database *Database) GetEventSettings() (*EventSettings, error) {
NumPlayoffAlliances: 8,
SelectionRound2Order: "L",
SelectionRound3Order: "",
SelectionShowUnpickedTeams: false,
TbaDownloadEnabled: true,
ApChannel: 36,
WarmupDurationSec: game.MatchTiming.WarmupDurationSec,
Expand Down
20 changes: 20 additions & 0 deletions static/css/audience_display.css
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,26 @@ html {
max-width: 800px;
max-height: 400px;
}
#allianceRankingsCentering {
position: absolute;
height: 100%;
left: 3em;
top: 3em;
}
#allianceRankings {
background-color: #fff;
padding: .5em 1em;
border: 2px solid #222;
font-size: 2em;
color: #222;
font-family: "FuturaLT";
-webkit-column-count: 3;
-moz-column-count: 3;
column-count: 3;
-webkit-column-gap: 1em;
-moz-column-gap: 1em;
column-gap: 1em;
}
#allianceSelectionCentering {
position: absolute;
height: 100%;
Expand Down
13 changes: 13 additions & 0 deletions static/js/audience_display.js
Original file line number Diff line number Diff line change
Expand Up @@ -328,13 +328,23 @@ const handlePlaySound = function(sound) {
// Handles a websocket message to update the alliance selection screen.
const handleAllianceSelection = function(data) {
const alliances = data.Alliances;
const rankedTeams = data.RankedTeams;
if (alliances && alliances.length > 0) {
const numColumns = alliances[0].TeamIds.length + 1;
$.each(alliances, function(k, v) {
v.Index = k + 1;
});
$("#allianceSelection").html(allianceSelectionTemplate({alliances: alliances, numColumns: numColumns}));
}
if (rankedTeams) {
var text = '';
$.each(rankedTeams, function(i, v) {
if (!v.Picked) {
text += v.Rank + '. ' + v.TeamId + '<br />';
}
});
$("#allianceRankings").html(text);
}

if (data.ShowTimer) {
$("#allianceSelectionTimer").text(getCountdownString(data.TimeRemainingSec));
Expand Down Expand Up @@ -373,11 +383,14 @@ const handleLowerThird = function(data) {

const transitionAllianceSelectionToBlank = function(callback) {
$('#allianceSelectionCentering').transition({queue: false, right: "-60em"}, 500, "ease", callback);
$('#allianceRankingsCentering.enabled').transition({queue:false, left: "-60em"}, 500, "ease");
};

const transitionBlankToAllianceSelection = function(callback) {
$('#allianceSelectionCentering').css("right","-60em").show();
$('#allianceSelectionCentering').transition({queue: false, right: "3em"}, 500, "ease", callback);
$('#allianceRankingsCentering.enabled').css('left', '-60em').show();
$('#allianceRankingsCentering.enabled').transition({queue: false, left: "3em"}, 500, "ease");
};

const transitionBlankToBracket = function(callback) {
Expand Down
3 changes: 3 additions & 0 deletions templates/audience_display.html
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,9 @@
<div id="allianceSelectionCentering" style="display: none;">
<div id="allianceSelection"></div>
</div>
<div id="allianceRankingsCentering" {{if .SelectionShowUnpickedTeams}}class="enabled"{{end}} style="display: none;">
<div id="allianceRankings"></div>
</div>
<div id="lowerThird">
<img id="lowerThirdLogo" src="/static/img/lower-third-logo.png" alt="logo" />
<div id="lowerThirdTop"></div>
Expand Down
7 changes: 7 additions & 0 deletions templates/setup_settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,13 @@
</div>
</div>
</div>
<div class="row mb-3">
<label class="col-lg-8 control-label" for="selectionShowUnpickedTeams">Show Unpicked Teams</label>
<div class="col-lg-1 checkbox">
<input type="checkbox" id="selectionShowUnpickedTeams"
name="selectionShowUnpickedTeams"{{if .SelectionShowUnpickedTeams}} checked{{end}}>
</div>
</div>
</fieldset>
<fieldset class="mb-4">
<legend>Automatic Team Info Download</legend>
Expand Down
28 changes: 10 additions & 18 deletions web/alliance_selection.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package web

import (
"fmt"
"github.com/Team254/cheesy-arena/field"
"github.com/Team254/cheesy-arena/model"
"github.com/Team254/cheesy-arena/tournament"
"github.com/Team254/cheesy-arena/websocket"
Expand All @@ -17,15 +18,6 @@ import (
"time"
)

type RankedTeam struct {
Rank int
TeamId int
Picked bool
}

// Global var to hold the team rankings during the alliance selection.
var cachedRankedTeams []*RankedTeam

// Global var to hold configurable time limit for selections. A value of zero disables the timer.
var allianceSelectionTimeLimitSec = 0

Expand Down Expand Up @@ -56,9 +48,9 @@ func (web *Web) allianceSelectionPostHandler(w http.ResponseWriter, r *http.Requ
allianceSelectionTimeLimitSec, _ = strconv.Atoi(r.PostFormValue("timeLimitSec"))

// Reset picked state for each team in preparation for reconstructing it.
newRankedTeams := make([]*RankedTeam, len(cachedRankedTeams))
for i, team := range cachedRankedTeams {
newRankedTeams[i] = &RankedTeam{team.Rank, team.TeamId, false}
newRankedTeams := make([]*field.RankedTeam, len(web.arena.AllianceSelectionRankedTeams))
for i, team := range web.arena.AllianceSelectionRankedTeams {
newRankedTeams[i] = &field.RankedTeam{team.Rank, team.TeamId, false}
}

// Iterate through all selections and update the alliances.
Expand Down Expand Up @@ -100,7 +92,7 @@ func (web *Web) allianceSelectionPostHandler(w http.ResponseWriter, r *http.Requ
}
}
}
cachedRankedTeams = newRankedTeams
web.arena.AllianceSelectionRankedTeams = newRankedTeams

if allianceSelectionTicker != nil {
allianceSelectionTicker.Stop()
Expand Down Expand Up @@ -157,9 +149,9 @@ func (web *Web) allianceSelectionStartHandler(w http.ResponseWriter, r *http.Req
handleWebErr(w, err)
return
}
cachedRankedTeams = make([]*RankedTeam, len(rankings))
web.arena.AllianceSelectionRankedTeams = make([]*field.RankedTeam, len(rankings))
for i, ranking := range rankings {
cachedRankedTeams[i] = &RankedTeam{i + 1, ranking.TeamId, false}
web.arena.AllianceSelectionRankedTeams[i] = &field.RankedTeam{i + 1, ranking.TeamId, false}
}

web.arena.AllianceSelectionNotifier.Notify()
Expand Down Expand Up @@ -191,7 +183,7 @@ func (web *Web) allianceSelectionResetHandler(w http.ResponseWriter, r *http.Req
}

web.arena.AllianceSelectionAlliances = []model.Alliance{}
cachedRankedTeams = []*RankedTeam{}
web.arena.AllianceSelectionRankedTeams = []*field.RankedTeam{}
web.arena.AllianceSelectionNotifier.Notify()
http.Redirect(w, r, "/alliance_selection", 303)
}
Expand Down Expand Up @@ -347,15 +339,15 @@ func (web *Web) renderAllianceSelection(w http.ResponseWriter, r *http.Request,
data := struct {
*model.EventSettings
Alliances []model.Alliance
RankedTeams []*RankedTeam
RankedTeams []*field.RankedTeam
NextRow int
NextCol int
ErrorMessage string
TimeLimitSec int
}{
web.arena.EventSettings,
web.arena.AllianceSelectionAlliances,
cachedRankedTeams,
web.arena.AllianceSelectionRankedTeams,
nextRow,
nextCol,
errorMessage,
Expand Down
4 changes: 3 additions & 1 deletion web/setup_settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package web

import (
"fmt"
"github.com/Team254/cheesy-arena/field"
"io"
"io/ioutil"
"net/http"
Expand Down Expand Up @@ -71,6 +72,7 @@ func (web *Web) settingsPostHandler(w http.ResponseWriter, r *http.Request) {
eventSettings.NumPlayoffAlliances = numAlliances
eventSettings.SelectionRound2Order = r.PostFormValue("selectionRound2Order")
eventSettings.SelectionRound3Order = r.PostFormValue("selectionRound3Order")
eventSettings.SelectionShowUnpickedTeams = r.PostFormValue("selectionShowUnpickedTeams") == "on"
eventSettings.TbaDownloadEnabled = r.PostFormValue("tbaDownloadEnabled") == "on"
eventSettings.TbaPublishingEnabled = r.PostFormValue("tbaPublishingEnabled") == "on"
eventSettings.TbaEventCode = r.PostFormValue("tbaEventCode")
Expand Down Expand Up @@ -256,7 +258,7 @@ func (web *Web) clearDbHandler(w http.ResponseWriter, r *http.Request) {
return
}
web.arena.AllianceSelectionAlliances = []model.Alliance{}
cachedRankedTeams = []*RankedTeam{}
web.arena.AllianceSelectionRankedTeams = []*field.RankedTeam{}
}

http.Redirect(w, r, "/setup/settings", 303)
Expand Down

0 comments on commit 3dc260f

Please sign in to comment.