aboutsummaryrefslogtreecommitdiff
path: root/invaders/hud.go
diff options
context:
space:
mode:
Diffstat (limited to 'invaders/hud.go')
-rw-r--r--invaders/hud.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/invaders/hud.go b/invaders/hud.go
new file mode 100644
index 0000000..cbe2c8e
--- /dev/null
+++ b/invaders/hud.go
@@ -0,0 +1,61 @@
+package invaders
+
+import (
+ "fmt"
+ tl "github.com/JoelOtter/termloop"
+)
+
+type Hud struct {
+ Title string
+ PressToQuit string
+ Score *tl.FpsText
+}
+
+func NewHud(arena *Arena, level *tl.BaseLevel) *Hud {
+ hud := Hud{Title: "Go Invaders", PressToQuit: "Press BACKSPACE to quit"}
+ hud.drawTitle(arena, level)
+ hud.drawPressToQuit(arena, level)
+ hud.drawScore(arena, level)
+
+ return &hud
+}
+
+func (hud *Hud) drawTitle(arena *Arena, level *tl.BaseLevel) {
+ arenaX, arenaY := arena.Position()
+ x := arenaX + 1
+ y := arenaY - 1
+
+ title := tl.NewText(x, y, hud.Title, tl.ColorWhite, tl.ColorBlack)
+ level.AddEntity(title)
+}
+
+func (hud *Hud) drawPressToQuit(arena *Arena, level *tl.BaseLevel) {
+ arenaX, arenaY := arena.Position()
+ arenaW, arenaH := arena.Size()
+
+ x := arenaX + arenaW - len(hud.PressToQuit) - 1
+ y := arenaY + arenaH
+
+ title := tl.NewText(x, y, hud.PressToQuit, tl.ColorWhite, tl.ColorBlack)
+ level.AddEntity(title)
+}
+
+func (hud *Hud) drawScore(arena *Arena, level *tl.BaseLevel) {
+ arenaX, arenaY := arena.Position()
+ _, arenaH := arena.Size()
+
+ x := arenaX + 1
+ y := arenaY + arenaH
+
+ hud.Score = tl.NewFpsText(x, y, tl.ColorWhite, tl.ColorBlack, 60)
+ level.AddEntity(hud.Score)
+}
+
+func (hud *Hud) UpdateScore(score int) {
+ hud.Score.SetText(hud.getScoreText(score))
+}
+
+func (hud *Hud) getScoreText(score int) string {
+ txtScore := fmt.Sprintf("Score: %4d", score)
+ return txtScore
+}