First commit >:]
This commit is contained in:
87
leaderboard.go
Normal file
87
leaderboard.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"strings"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
)
|
||||
|
||||
const (
|
||||
MAX_RANDOM_INCREMENT = 50
|
||||
)
|
||||
|
||||
type Leaderboard struct {
|
||||
Board *ebiten.Image //the team board target image
|
||||
teams map[string]*AnimatedScoreBar //collection of teams + score bars
|
||||
}
|
||||
|
||||
func NewLeaderboard(w, h int, teamnames []string) *Leaderboard {
|
||||
t := &Leaderboard{}
|
||||
t.Board = ebiten.NewImage(w, h)
|
||||
t.teams = make(map[string]*AnimatedScoreBar)
|
||||
|
||||
for i, name := range teamnames {
|
||||
cleanname := strings.ToUpper(name)
|
||||
t.teams[cleanname] = NewAnimatedScoreBar(CharacterType(i%CHARACTER_NUMTYPES), strings.ToUpper(name))
|
||||
t.teams[cleanname].SetOrder(i)
|
||||
}
|
||||
|
||||
return t
|
||||
}
|
||||
|
||||
func (t *Leaderboard) SetScaleFactor(sf float64) {
|
||||
for _, team := range t.teams {
|
||||
team.SetScaleFactor(sf)
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Leaderboard) UpdateScoreForTeam(name string, score int) {
|
||||
t := l.teams[strings.ToUpper(name)]
|
||||
if t != nil {
|
||||
t.SetTarget(float64(score))
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Leaderboard) GetLeaders() []*AnimatedScoreBar {
|
||||
leaders := []*AnimatedScoreBar{}
|
||||
|
||||
highScore := 0
|
||||
|
||||
for _, team := range l.teams {
|
||||
teamscore := int(team.GetTarget())
|
||||
if teamscore > highScore {
|
||||
leaders = leaders[:0]
|
||||
leaders = append(leaders, team)
|
||||
highScore = teamscore
|
||||
} else if teamscore == highScore {
|
||||
leaders = append(leaders, team)
|
||||
}
|
||||
}
|
||||
|
||||
return leaders
|
||||
}
|
||||
|
||||
func (t *Leaderboard) Animate() {
|
||||
|
||||
t.Board.Clear()
|
||||
for _, v := range t.teams {
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.GeoM.Translate(0, float64(v.GetOrder())*(ASB_HEIGHT+ASB_BUFFER))
|
||||
t.Board.DrawImage(v.ScoreImage, op)
|
||||
v.Animate()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (l *Leaderboard) SetAllTargets(t float64) {
|
||||
for _, board := range l.teams {
|
||||
board.SetTarget(t)
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Leaderboard) RandomizeTeamTargets() {
|
||||
for _, board := range l.teams {
|
||||
board.SetTarget(board.GetTarget() + float64(rand.Int()%MAX_RANDOM_INCREMENT))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user