aboutsummaryrefslogtreecommitdiff
path: root/go/client
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-09-08 22:32:22 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2025-09-08 22:32:22 +0200
commitddd9cc924977201f7d2bc162c0d5fe4f86841ef1 (patch)
tree67ae8a7f34cd1e119b09e0c1925dca52855b70c4 /go/client
parent6438cef725e6310c49b5f4ef615b2ee82261b11b (diff)
downloadmuhqs-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.go37
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: