package ui import ( "fmt" "github.com/hajimehoshi/ebiten/v2" "muhq.space/muhqs-game/go/game" ) type StateBar struct { EventHandlersMap X, Y int Width, Height int gameState game.State activePlayerId int resourceView *TextBox phaseView *TextBox } func NewStateBar(x, y int, width, height int, s game.State, p *game.Player) *StateBar { sb := &StateBar{NewEventHandlersMap(), x, y, width, height, s, p.Id, nil, nil} return sb } func (sb *StateBar) resourceLabel() string { activePlayer := sb.gameState.PlayerById(sb.activePlayerId) return fmt.Sprintf("%d/%+d", activePlayer.Resource, activePlayer.UpkeepGain()) } func (sb *StateBar) phaseLabel() string { return fmt.Sprintf("%s: %s", sb.gameState.ActivePlayer().Name, sb.gameState.ActivePhase().String()) } func (sb *StateBar) Draw(screen *ebiten.Image) { if sb.resourceView == nil { sb.resourceView = NewFixedTextBox(sb.X, sb.Y, sb.Height*2, sb.Height, sb.resourceLabel()).Centering(true).Bg(ResourceBg) } sb.resourceView.Draw(screen) if sb.phaseView == nil { sb.phaseView = NewFixedTextBox(sb.X+sb.Height*2, sb.Y, sb.Width-sb.resourceView.Width, sb.Height, sb.phaseLabel()) } sb.phaseView.Draw(screen) } func (sb *StateBar) FindObjectAt(x, y int) any { return nil } func (sb *StateBar) ForceRedraw() { if sb.resourceView != nil { sb.resourceView.text = sb.resourceLabel() sb.resourceView.ForceRedraw() } if sb.phaseView != nil { sb.phaseView.text = sb.phaseLabel() sb.phaseView.ForceRedraw() } } func (sb *StateBar) Contains(x, y int) bool { return sb.resourceView.Contains(x, y) || sb.phaseView.Contains(x, y) } func (sb *StateBar) Layout() (int, int) { return sb.Width, sb.Height }