diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-09-08 22:32:22 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-09-08 22:32:22 +0200 |
| commit | ddd9cc924977201f7d2bc162c0d5fe4f86841ef1 (patch) | |
| tree | 67ae8a7f34cd1e119b09e0c1925dca52855b70c4 /go/client | |
| parent | 6438cef725e6310c49b5f4ef615b2ee82261b11b (diff) | |
| download | muhqs-game-ddd9cc924977201f7d2bc162c0d5fe4f86841ef1.tar.gz muhqs-game-ddd9cc924977201f7d2bc162c0d5fe4f86841ef1.zip | |
support action targeting from the stack buffer
Diffstat (limited to 'go/client')
| -rw-r--r-- | go/client/game.go | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/go/client/game.go b/go/client/game.go index 5ab70df2..8a3bcae3 100644 --- a/go/client/game.go +++ b/go/client/game.go @@ -62,7 +62,7 @@ type Game struct { storeButton *ui.SimpleButton cardsInStore int - stackBuffer *ui.Buffer + stackBuffer *ui.StackBuffer prompt *ui.Prompt messageBuffer *ui.Buffer triggers []*game.TriggeredAction @@ -132,10 +132,6 @@ func newGame(app *app, gameState game.State) *Game { g.reset() }) - g.stackBuffer = ui.NewBuffer( - g.Width-STACK_BUFFER_WIDTH, g.passButton.Y-400, - STACK_BUFFER_WIDTH, STACK_BUFFER_HEIGHT) - g.messageBuffer = ui.NewBuffer( MESSAGE_BUFFER_MARGIN, g.Height-DEFAULT_BUTTON_HEIGHT-MESSAGE_BUFFER_HEIGHT-MESSAGE_BUFFER_MARGIN, @@ -272,6 +268,21 @@ func (g *Game) showWinners() { }) } +func (g *Game) updateStack() { + if g.visible(g.stackBuffer) { + g.hide(g.stackBuffer) + } + + if !g.gameState.Stack().IsEmpty() { + g.stackBuffer = ui.NewStackBuffer( + g.Width-STACK_BUFFER_WIDTH, g.passButton.Y-400, + STACK_BUFFER_WIDTH, STACK_BUFFER_HEIGHT, + g.gameState.Stack().Actions) + + g.show(g.stackBuffer) + } +} + func (g *Game) showStores() { if g.storesVisible { return @@ -468,6 +479,8 @@ func (g *Game) addHighlight(obj any, color color.Color) { g.mapView.AddHighlightTile(obj, color) case *game.Unit: g.mapView.AddHighlightPermanent(obj, color) + case game.Action: + g.stackBuffer.AddHighlight(obj, color) default: log.Panicf("Unhandled highlight of type %T", obj) } @@ -488,6 +501,9 @@ func (g *Game) clearMapHighlights() { func (g *Game) clearHighlights() { g.clearMapHighlights() g.handLayer.ClearHighlights() + if g.stackBuffer != nil { + g.stackBuffer.ClearHighlights() + } } func (g *Game) declareAction(a game.Action) { @@ -610,18 +626,11 @@ func (g *Game) handlePlayerNotifications() { if n.Error != nil { log.Fatal(n.Error) } - a := n.Context.(game.Action) - g.stackBuffer.AddLine(a.String()) - if !g.gameState.Stack().IsEmpty() && !g.visible(g.stackBuffer) { - g.AddWidget(g.stackBuffer) - } + g.updateStack() case game.ResolvedActionNotification: g.clearMapHighlights() - g.stackBuffer.RemoveLast() - if g.gameState.Stack().IsEmpty() { - g.RemoveWidget(g.stackBuffer) - } + g.updateStack() g.mapView.ForceRedraw() case game.TargetSelectionPrompt: |
