Draw team status

This commit is contained in:
Trevor Slocum 2024-02-08 16:55:21 -08:00
parent bc565008ed
commit 1b80420be9
3 changed files with 56 additions and 15 deletions

View file

@ -21,11 +21,13 @@ func parseFlags() *game.Game {
flag.IntVar(&debugPort, "debug", 0, "Port to serve pprof debug information on")
flag.Parse()
debug := 0
if debugPort > 0 {
debug = 1
go func() {
log.Fatal(http.ListenAndServe(fmt.Sprintf("localhost:%d", debugPort), nil))
}()
}
return game.NewGame(allTanks, godMode)
return game.NewGame(allTanks, godMode, debug)
}

View file

@ -7,5 +7,5 @@ import (
)
func parseFlags() *game.Game {
return game.NewGame(false, false)
return game.NewGame(false, false, 0)
}

View file

@ -82,6 +82,7 @@ var (
TreadMarkImage = ebiten.NewImage(3, 3)
RoundImage = ebiten.NewImage(4, 4)
IndicatorImage = ebiten.NewImage(75, 75)
CooldownImage = ebiten.NewImage(cooldownWidth, cooldownHeight)
ObjectImages = make([]*ebiten.Image, len(objectNames))
@ -110,6 +111,13 @@ func loadAssets() {
RoundImage.Fill(color.RGBA{0, 0, 0, 255})
CooldownImage.Fill(color.RGBA{0, 0, 255, 255})
indicatorColor := color.RGBA{0, 128, 0, 255}
IndicatorImage.Fill(color.RGBA{0, 255, 0, 10})
IndicatorImage.SubImage(image.Rect(0, 0, 75, 2)).(*ebiten.Image).Fill(indicatorColor)
IndicatorImage.SubImage(image.Rect(0, 73, 75, 75)).(*ebiten.Image).Fill(indicatorColor)
IndicatorImage.SubImage(image.Rect(0, 0, 2, 75)).(*ebiten.Image).Fill(indicatorColor)
IndicatorImage.SubImage(image.Rect(73, 0, 75, 75)).(*ebiten.Image).Fill(indicatorColor)
for i, name := range objectNames {
ObjectImages[i] = loadImage("asset/image/" + name + ".png")
}
@ -120,10 +128,11 @@ type Game struct {
treadMarks [][2]float64
computerPlayers []int
killFeedImage *ebiten.Image
gameOverImage *ebiten.Image
scratchImage *ebiten.Image
debug int
}
func NewGame(allTanks bool, godMode bool) *Game {
func NewGame(allTanks bool, godMode bool, debug int) *Game {
ebiten.SetVsyncEnabled(true)
ebiten.SetScreenClearedEveryFrame(true)
ebiten.SetTPS(100)
@ -141,7 +150,8 @@ func NewGame(allTanks bool, godMode bool) *Game {
g := &Game{
sim: NewSimulation(1, allTanks, godMode),
killFeedImage: ebiten.NewImage(1, 1),
gameOverImage: ebiten.NewImage(100, 20),
scratchImage: ebiten.NewImage(300, 20),
debug: debug,
}
const numComputerPlayers = 25
for i := 0; i < numComputerPlayers+1; i++ {
@ -471,11 +481,9 @@ func (g *Game) Draw(screen *ebiten.Image) {
} else if ty > screenHeight-size {
ty = screenHeight - size
}
indicatorColor := color.RGBA{0, 128, 0, 255}
screen.SubImage(image.Rect(int(tx), int(ty), int(tx)+size, int(ty)+2)).(*ebiten.Image).Fill(indicatorColor)
screen.SubImage(image.Rect(int(tx), int(ty)+size-2, int(tx)+size, int(ty)+size)).(*ebiten.Image).Fill(indicatorColor)
screen.SubImage(image.Rect(int(tx), int(ty), int(tx)+2, int(ty)+size)).(*ebiten.Image).Fill(indicatorColor)
screen.SubImage(image.Rect(int(tx)+size-2, int(ty), int(tx)+size, int(ty)+size)).(*ebiten.Image).Fill(indicatorColor)
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(tx, ty)
screen.DrawImage(IndicatorImage, op)
}
}
}
@ -491,6 +499,35 @@ func (g *Game) Draw(screen *ebiten.Image) {
}
}
}
// Draw team statuses.
{
status1 := fmt.Sprintf("%d", team1)
status2 := fmt.Sprintf("%d", team2)
l1 := len(status1)
l2 := len(status2)
if l2 > l1 {
for i := 0; i < l2-l1; i++ {
status1 = " " + status1
}
} else if l1 > l2 {
for i := 0; i < l1-l2; i++ {
status2 = " " + status2
}
}
statusText := " " + status1 + " | " + status2 + " "
w := len(statusText)*6 + 5
h := 16
g.scratchImage.Clear()
g.scratchImage.SubImage(image.Rect(0, 0, w, h)).(*ebiten.Image).Fill(color.RGBA{0, 0, 0, 54})
ebitenutil.DebugPrintAt(g.scratchImage, statusText, 1, 0)
op := &ebiten.DrawImageOptions{}
op.GeoM.Scale(4, 4)
op.GeoM.Translate(float64(screenWidth/2-(w*4)/2), 0)
screen.DrawImage(g.scratchImage, op)
}
// Draw game over text.
var gameOver string
if team1 == 0 && team2 == 0 {
gameOver = "DOUBLE K.O."
@ -502,13 +539,13 @@ func (g *Game) Draw(screen *ebiten.Image) {
if gameOver != "" {
w := len(gameOver)*6 + 5
h := 16
g.gameOverImage.Clear()
g.gameOverImage.SubImage(image.Rect(0, 0, w, h)).(*ebiten.Image).Fill(color.RGBA{0, 0, 0, 60})
ebitenutil.DebugPrintAt(g.gameOverImage, gameOver, 1, 0)
g.scratchImage.Clear()
g.scratchImage.SubImage(image.Rect(0, 0, w, h)).(*ebiten.Image).Fill(color.RGBA{0, 0, 0, 54})
ebitenutil.DebugPrintAt(g.scratchImage, gameOver, 1, 0)
op := &ebiten.DrawImageOptions{}
op.GeoM.Scale(4, 4)
op.GeoM.Translate(float64(screenWidth/2-(w*4)/2), float64(screenHeight/2-(h*4)/2-h*6))
screen.DrawImage(g.gameOverImage, op)
screen.DrawImage(g.scratchImage, op)
}
// Draw kill feed.
@ -564,7 +601,9 @@ func (g *Game) Draw(screen *ebiten.Image) {
}
// Draw debug information.
ebitenutil.DebugPrintAt(screen, fmt.Sprintf("XPOS %.0f\nYPOS %.0f\nTPS %.0f\nFPS %.0f", viewX, viewY, ebiten.ActualTPS(), ebiten.ActualFPS()), 2, 1)
if g.debug > 0 {
ebitenutil.DebugPrintAt(screen, fmt.Sprintf("XPOS %.0f\nYPOS %.0f\nTPS %.0f\nFPS %.0f", viewX, viewY, ebiten.ActualTPS(), ebiten.ActualFPS()), 2, 1)
}
}
func offset(op *ebiten.DrawImageOptions) {