aboutsummaryrefslogtreecommitdiff
path: root/go/client/sealed.go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-02-14 16:05:06 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-01-27 16:43:49 +0100
commitb85c1a85e3f9a53321495e4d015e7620b29f9929 (patch)
tree314469f8bcbe61cea3c055d01e2c961b0e988708 /go/client/sealed.go
parente049500b213c85c9d1556e01717226a191d2dce8 (diff)
downloadmuhqs-game-b85c1a85e3f9a53321495e4d015e7620b29f9929.tar.gz
muhqs-game-b85c1a85e3f9a53321495e4d015e7620b29f9929.zip
add sealed activity to select a starting deck
Diffstat (limited to 'go/client/sealed.go')
-rw-r--r--go/client/sealed.go106
1 files changed, 106 insertions, 0 deletions
diff --git a/go/client/sealed.go b/go/client/sealed.go
new file mode 100644
index 00000000..6096a1d5
--- /dev/null
+++ b/go/client/sealed.go
@@ -0,0 +1,106 @@
+package main
+
+import (
+ "strings"
+
+ "muhq.space/muhqs-game/go/game"
+ "muhq.space/muhqs-game/go/ui"
+)
+
+const (
+ SIDEBARD_WIDTH = 200
+)
+
+type Sealed struct {
+ ui.Collection
+ app *app
+ width, height int
+
+ pool game.PileOfCards
+ deck game.PileOfCards
+}
+
+func NewSealed(width, height int, app *app) *Sealed {
+ s := &Sealed{app: app, width: width, height: height}
+
+ s.AddWidget(ui.NewFixedTextBox(
+ (s.width-START_BUTTON_WIDTH)/2-START_BUTTON_WIDTH,
+ (s.height-START_BUTTON_HEIGHT)/2-START_BUTTON_HEIGHT,
+ START_BUTTON_WIDTH,
+ START_BUTTON_HEIGHT,
+ "sets:",
+ ).Centering(true))
+
+ setInput := ui.NewTextInput(
+ (s.width-START_BUTTON_WIDTH)/2,
+ (s.height-START_BUTTON_HEIGHT)/2-START_BUTTON_HEIGHT,
+ START_BUTTON_WIDTH,
+ START_BUTTON_HEIGHT,
+ "set list",
+ )
+ s.AddWidget(setInput)
+
+ s.AddWidget(ui.NewSimpleButton(
+ (s.width-START_BUTTON_WIDTH)/2,
+ (s.height-START_BUTTON_HEIGHT)/2,
+ START_BUTTON_WIDTH,
+ START_BUTTON_HEIGHT,
+ "Start",
+ func(*ui.SimpleButton) {
+ s.startSealed(setInput.Text())
+ }))
+
+ return s
+}
+
+func (s *Sealed) Layout(width, height int) (int, int) {
+ return s.width, s.height
+}
+
+func (s *Sealed) startSealed(_sets string) {
+ s.pool = game.NewPileOfCards()
+ s.deck = game.NewPileOfCards()
+
+ s.Clear()
+
+ sets := strings.Split(_sets, ",")
+ for _, setName := range sets {
+ set := game.SetNames[setName]
+ setDeck := game.NewDeckFromCardPaths(set.CardPaths())
+ setDeck.MoveInto(s.pool)
+ }
+
+ deckList := ui.NewPocList(s.width-SIDEBARD_WIDTH/2, s.height-START_BUTTON_HEIGHT-20, s.deck)
+ deckList.Bg(ui.Gray)
+ s.AddWidget(deckList)
+
+ grid := ui.NewCardGrid(0, 0, s.width-SIDEBARD_WIDTH, s.height, 0.5, s.pool).Columns(3)
+ selectCard := func(x, y int) {
+ _card := grid.FindObjectAt(x, y)
+ if _card == nil {
+ return
+ }
+
+ card := _card.(*game.Card)
+ s.pool.MoveCard(card, s.deck)
+ grid.ForceRedraw()
+ deckList.ForceRedraw()
+ }
+ s.AddWidget(ui.NewClickWrapper(grid, selectCard))
+
+ s.AddWidget(ui.NewSimpleButton(
+ s.width-SIDEBARD_WIDTH/2-START_BUTTON_WIDTH/2,
+ s.height-START_BUTTON_HEIGHT,
+ START_BUTTON_WIDTH,
+ START_BUTTON_HEIGHT,
+ "Done",
+ func(*ui.SimpleButton) {
+ s.done()
+ }))
+}
+
+func (s *Sealed) done() {
+ startMenu := s.app.activities[len(s.app.activities)-2].(*StartMenu)
+ startMenu.deckInput.SetInput(s.deck.ToList())
+ s.app.popActivity()
+}