Update TBA match breakdown publishing for 2019.

This commit is contained in:
Patrick Fairbank
2019-09-15 01:29:56 -07:00
parent a39f3a0bd0
commit 26611367ce

View File

@@ -11,6 +11,7 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/Team254/cheesy-arena/game"
"github.com/Team254/cheesy-arena/model" "github.com/Team254/cheesy-arena/model"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@@ -49,31 +50,51 @@ type TbaAlliance struct {
} }
type TbaScoreBreakdown struct { type TbaScoreBreakdown struct {
AutoRunPoints int `json:"autoRunPoints"` PreMatchLevelRobot1 string `json:"preMatchLevelRobot1"`
AutoScaleOwnershipSec int `json:"autoScaleOwnershipSec"` PreMatchLevelRobot2 string `json:"preMatchLevelRobot2"`
AutoSwitchOwnershipSec int `json:"autoSwitchOwnershipSec"` PreMatchLevelRobot3 string `json:"preMatchLevelRobot3"`
AutoOwnershipPoints int `json:"autoOwnershipPoints"` PreMatchBay1 string `json:"preMatchBay1"`
AutoPoints int `json:"autoPoints"` PreMatchBay2 string `json:"preMatchBay2"`
TeleopScaleOwnershipSec int `json:"teleopScaleOwnershipSec"` PreMatchBay3 string `json:"preMatchBay3"`
TeleopScaleBoostSec int `json:"teleopScaleBoostSec"` PreMatchBay6 string `json:"preMatchBay6"`
TeleopSwitchOwnershipSec int `json:"teleopSwitchOwnershipSec"` PreMatchBay7 string `json:"preMatchBay7"`
TeleopSwitchBoostSec int `json:"teleopSwitchBoostSec"` PreMatchBay8 string `json:"preMatchBay8"`
TeleopOwnershipPoints int `json:"teleopOwnershipPoints"` HabLineRobot1 string `json:"habLineRobot1"`
VaultForceTotal int `json:"vaultForceTotal"` HabLineRobot2 string `json:"habLineRobot2"`
VaultForcePlayed int `json:"vaultForcePlayed"` HabLineRobot3 string `json:"habLineRobot3"`
VaultLevitateTotal int `json:"vaultLevitateTotal"` SandstormBonusPoints int `json:"sandStormBonusPoints"`
VaultLevitatePlayed int `json:"vaultLevitatePlayed"` Bay1 string `json:"bay1"`
VaultBoostTotal int `json:"vaultBoostTotal"` Bay2 string `json:"bay2"`
VaultBoostPlayed int `json:"vaultBoostPlayed"` Bay3 string `json:"bay3"`
VaultPoints int `json:"vaultPoints"` Bay4 string `json:"bay4"`
EndgamePoints int `json:"endgamePoints"` Bay5 string `json:"bay5"`
TeleopPoints int `json:"teleopPoints"` Bay6 string `json:"bay6"`
AutoQuestRankingPoint bool `json:"autoQuestRankingPoint"` Bay7 string `json:"bay7"`
FaceTheBossRankingPoint bool `json:"faceTheBossRankingPoint"` Bay8 string `json:"bay8"`
FoulPoints int `json:"foulPoints"` LowLeftRocketNear string `json:"lowLeftRocketNear"`
TotalPoints int `json:"totalPoints"` MidLeftRocketNear string `json:"midLeftRocketNear"`
RP int `json:"rp"` TopLeftRocketNear string `json:"topLeftRocketNear"`
TbaGameData string `json:"tba_gameData"` LowRightRocketNear string `json:"lowRightRocketNear"`
MidRightRocketNear string `json:"midRightRocketNear"`
TopRightRocketNear string `json:"topRightRocketNear"`
LowLeftRocketFar string `json:"lowLeftRocketFar"`
MidLeftRocketFar string `json:"midLeftRocketFar"`
TopLeftRocketFar string `json:"topLeftRocketFar"`
LowRightRocketFar string `json:"lowRightRocketFar"`
MidRightRocketFar string `json:"midRightRocketFar"`
TopRightRocketFar string `json:"topRightRocketFar"`
CargoPoints int `json:"cargoPoints"`
HatchPanelPoints int `json:"hatchPanelPoints"`
EndgameRobot1 string `json:"endgameRobot1"`
EndgameRobot2 string `json:"endgameRobot2"`
EndgameRobot3 string `json:"endgameRobot3"`
HabClimbPoints int `json:"habClimbPoints"`
TeleopPoints int `json:"teleopPoints"`
CompleteRocketRankingPoint bool `json:"completeRocketRankingPoint"`
HabDockingRankingPoint bool `json:"habDockingRankingPoint"`
FoulPoints int `json:"foulPoints"`
TotalPoints int `json:"totalPoints"`
RP int `json:"rp"`
} }
type TbaRanking struct { type TbaRanking struct {
@@ -125,6 +146,10 @@ type TbaMediaItem struct {
Type string `json:"type"` Type string `json:"type"`
} }
var habLevelMapping = []string{"None", "HabLevel1", "HabLevel2", "HabLevel3"}
var bayStatusMapping = []string{"None", "Panel", "PanelAndCargo", "Cargo"}
var sandstormBonusMapping = map[bool]string{false: "None", true: "CrossedHabLineInSandstorm"}
func NewTbaClient(eventCode, secretId, secret string) *TbaClient { func NewTbaClient(eventCode, secretId, secret string) *TbaClient {
return &TbaClient{BaseUrl: tbaBaseUrl, eventCode: eventCode, secretId: secretId, secret: secret, return &TbaClient{BaseUrl: tbaBaseUrl, eventCode: eventCode, secretId: secretId, secret: secret,
eventNamesCache: make(map[string]string)} eventNamesCache: make(map[string]string)}
@@ -503,53 +528,68 @@ func createTbaAlliance(teamIds [3]int, surrogates [3]bool, score *int, cards map
func createTbaScoringBreakdown(match *model.Match, matchResult *model.MatchResult, alliance string) *TbaScoreBreakdown { func createTbaScoringBreakdown(match *model.Match, matchResult *model.MatchResult, alliance string) *TbaScoreBreakdown {
var breakdown TbaScoreBreakdown var breakdown TbaScoreBreakdown
// TODO(pat): Update for 2019. var score *game.Score
/* var scoreSummary, opponentScoreSummary *game.ScoreSummary
var score *game.Score if alliance == "red" {
var scoreSummary, opponentScoreSummary *game.ScoreSummary score = matchResult.RedScore
if alliance == "red" { scoreSummary = matchResult.RedScoreSummary()
score = matchResult.RedScore opponentScoreSummary = matchResult.BlueScoreSummary()
scoreSummary = matchResult.RedScoreSummary() } else {
opponentScoreSummary = matchResult.BlueScoreSummary() score = matchResult.BlueScore
} else { scoreSummary = matchResult.BlueScoreSummary()
score = matchResult.BlueScore opponentScoreSummary = matchResult.RedScoreSummary()
scoreSummary = matchResult.BlueScoreSummary() }
opponentScoreSummary = matchResult.RedScoreSummary()
}
breakdown.AutoRunPoints = 5 * score.AutoRuns breakdown.PreMatchLevelRobot1 = habLevelMapping[score.RobotStartLevels[0]]
breakdown.AutoScaleOwnershipSec = int(score.AutoScaleOwnershipSec) breakdown.PreMatchLevelRobot2 = habLevelMapping[score.RobotStartLevels[1]]
breakdown.AutoSwitchOwnershipSec = int(score.AutoSwitchOwnershipSec) breakdown.PreMatchLevelRobot3 = habLevelMapping[score.RobotStartLevels[2]]
breakdown.AutoOwnershipPoints = scoreSummary.AutoOwnershipPoints breakdown.PreMatchBay1 = bayStatusMapping[score.CargoBaysPreMatch[0]]
breakdown.AutoPoints = scoreSummary.AutoPoints breakdown.PreMatchBay2 = bayStatusMapping[score.CargoBaysPreMatch[1]]
breakdown.TeleopScaleOwnershipSec = int(score.TeleopScaleOwnershipSec) breakdown.PreMatchBay3 = bayStatusMapping[score.CargoBaysPreMatch[2]]
breakdown.TeleopScaleBoostSec = int(score.TeleopScaleBoostSec) breakdown.PreMatchBay6 = bayStatusMapping[score.CargoBaysPreMatch[5]]
breakdown.TeleopSwitchOwnershipSec = int(score.TeleopSwitchOwnershipSec) breakdown.PreMatchBay7 = bayStatusMapping[score.CargoBaysPreMatch[6]]
breakdown.TeleopSwitchBoostSec = int(score.TeleopSwitchBoostSec) breakdown.PreMatchBay8 = bayStatusMapping[score.CargoBaysPreMatch[7]]
breakdown.TeleopOwnershipPoints = scoreSummary.TeleopOwnershipPoints breakdown.HabLineRobot1 = sandstormBonusMapping[score.SandstormBonuses[0]]
breakdown.VaultForceTotal = score.ForceCubes breakdown.HabLineRobot2 = sandstormBonusMapping[score.SandstormBonuses[1]]
breakdown.VaultForcePlayed = score.ForceCubesPlayed breakdown.HabLineRobot3 = sandstormBonusMapping[score.SandstormBonuses[2]]
breakdown.VaultLevitateTotal = score.LevitateCubes breakdown.SandstormBonusPoints = scoreSummary.SandstormBonusPoints
if score.LevitatePlayed { breakdown.Bay1 = bayStatusMapping[score.CargoBays[0]]
breakdown.VaultLevitatePlayed = score.LevitateCubes breakdown.Bay2 = bayStatusMapping[score.CargoBays[1]]
} breakdown.Bay3 = bayStatusMapping[score.CargoBays[2]]
breakdown.VaultBoostTotal = score.BoostCubes breakdown.Bay4 = bayStatusMapping[score.CargoBays[3]]
breakdown.VaultBoostPlayed = score.BoostCubesPlayed breakdown.Bay5 = bayStatusMapping[score.CargoBays[4]]
breakdown.VaultPoints = scoreSummary.VaultPoints breakdown.Bay6 = bayStatusMapping[score.CargoBays[5]]
breakdown.EndgamePoints = scoreSummary.ParkClimbPoints breakdown.Bay7 = bayStatusMapping[score.CargoBays[6]]
breakdown.TeleopPoints = scoreSummary.Score - scoreSummary.AutoPoints - scoreSummary.FoulPoints breakdown.Bay8 = bayStatusMapping[score.CargoBays[7]]
breakdown.AutoQuestRankingPoint = scoreSummary.AutoQuest breakdown.LowLeftRocketNear = bayStatusMapping[score.RocketNearLeftBays[0]]
breakdown.FaceTheBossRankingPoint = scoreSummary.FaceTheBoss breakdown.MidLeftRocketNear = bayStatusMapping[score.RocketNearLeftBays[1]]
breakdown.FoulPoints = scoreSummary.FoulPoints breakdown.TopLeftRocketNear = bayStatusMapping[score.RocketNearLeftBays[2]]
breakdown.TotalPoints = scoreSummary.Score breakdown.LowRightRocketNear = bayStatusMapping[score.RocketNearRightBays[0]]
if match.ShouldUpdateRankings() { breakdown.MidRightRocketNear = bayStatusMapping[score.RocketNearRightBays[1]]
// Calculate and set the ranking points for the match. breakdown.TopRightRocketNear = bayStatusMapping[score.RocketNearRightBays[2]]
var ranking game.Ranking breakdown.LowLeftRocketFar = bayStatusMapping[score.RocketFarLeftBays[0]]
ranking.AddScoreSummary(scoreSummary, opponentScoreSummary, false) breakdown.MidLeftRocketFar = bayStatusMapping[score.RocketFarLeftBays[1]]
breakdown.RP = ranking.RankingPoints breakdown.TopLeftRocketFar = bayStatusMapping[score.RocketFarLeftBays[2]]
} breakdown.LowRightRocketFar = bayStatusMapping[score.RocketFarRightBays[0]]
breakdown.TbaGameData = match.GameSpecificData breakdown.MidRightRocketFar = bayStatusMapping[score.RocketFarRightBays[1]]
*/ breakdown.TopRightRocketFar = bayStatusMapping[score.RocketFarRightBays[2]]
breakdown.CargoPoints = scoreSummary.CargoPoints
breakdown.HatchPanelPoints = scoreSummary.HatchPanelPoints
breakdown.EndgameRobot1 = habLevelMapping[score.RobotEndLevels[0]]
breakdown.EndgameRobot2 = habLevelMapping[score.RobotEndLevels[1]]
breakdown.EndgameRobot3 = habLevelMapping[score.RobotEndLevels[2]]
breakdown.HabClimbPoints = scoreSummary.HabClimbPoints
breakdown.TeleopPoints = scoreSummary.CargoPoints + scoreSummary.HatchPanelPoints + scoreSummary.HabClimbPoints
breakdown.CompleteRocketRankingPoint = scoreSummary.CompleteRocket
breakdown.HabDockingRankingPoint = scoreSummary.HabDocking
breakdown.FoulPoints = scoreSummary.FoulPoints
breakdown.TotalPoints = scoreSummary.Score
if match.ShouldUpdateRankings() {
// Calculate and set the ranking points for the match.
var ranking game.Ranking
ranking.AddScoreSummary(scoreSummary, opponentScoreSummary, false)
breakdown.RP = ranking.RankingPoints
}
return &breakdown return &breakdown
} }