Draw team status
This commit is contained in:
parent
bc565008ed
commit
1b80420be9
3 changed files with 56 additions and 15 deletions
4
flags.go
4
flags.go
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -7,5 +7,5 @@ import (
|
|||
)
|
||||
|
||||
func parseFlags() *game.Game {
|
||||
return game.NewGame(false, false)
|
||||
return game.NewGame(false, false, 0)
|
||||
}
|
||||
|
|
65
game/game.go
65
game/game.go
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue