diff options
Diffstat (limited to 'go/ui/textBox.go')
| -rw-r--r-- | go/ui/textBox.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/go/ui/textBox.go b/go/ui/textBox.go new file mode 100644 index 00000000..e07440b5 --- /dev/null +++ b/go/ui/textBox.go @@ -0,0 +1,67 @@ +package ui + +import ( + "fmt" + "image/color" + + "github.com/hajimehoshi/ebiten/v2" + "github.com/hajimehoshi/ebiten/v2/text" + "muhq.space/muhqs-game/go/game" +) + +var ( + TEXTBOX_BACKGROUND = gray + TEXTBOX_FOREGROUND = color.White +) + +type TextBox struct { + X, Y int + Width, Height int + img *ebiten.Image + text string +} + +func NewFixedTextBox(x, y int, width, height int, t string) *TextBox { + tb := &TextBox{x, y, width, height, nil, t} + tb.render() + return tb +} + +func NewAutoTextBox(x, y int, t string) *TextBox { + tb := &TextBox{x, y, -1, -1, nil, t} + tb.render() + return tb +} + +func NewUnitInfo(x, y int, u *game.Unit) *TextBox { + info := fmt.Sprintf("%s\nDamage: %d\nHealth: %d\nMovement: %d\nAttack %s\nUpkeep: %d", + u.String(), u.GetDamage(), u.Health, u.Movement, u.Attack.String(), u.Upkeep) + return NewAutoTextBox(x, y, info) +} + +func NewPermInfo(x, y int, p game.Permanent) *TextBox { + info := fmt.Sprintf("%s\nDamage: %d", + p.String(), p.GetDamage()) + return NewAutoTextBox(x, y, info) +} + +func (tb *TextBox) render() { + b := text.BoundString(Font, tb.text) + if tb.Width == -1 || tb.Height == -1 { + tb.Width = b.Dx() + tb.Height = b.Dy() + } + tb.img = ebiten.NewImage(tb.Width, tb.Height) + tb.img.Fill(TEXTBOX_BACKGROUND) + text.Draw(tb.img, tb.text, Font, b.Min.X, -b.Min.Y, TEXTBOX_FOREGROUND) +} + +func (tb *TextBox) Draw(screen *ebiten.Image) { + op := &ebiten.DrawImageOptions{} + op.GeoM.Translate(float64(tb.X), float64(tb.Y)) + screen.DrawImage(tb.img, op) +} + +func (tb TextBox) FindObjectAt(x, y int) interface{} { + return nil +} |
