diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-02-14 16:05:06 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-01-27 16:43:49 +0100 |
| commit | b85c1a85e3f9a53321495e4d015e7620b29f9929 (patch) | |
| tree | 314469f8bcbe61cea3c055d01e2c961b0e988708 /go/client/sealed.go | |
| parent | e049500b213c85c9d1556e01717226a191d2dce8 (diff) | |
| download | muhqs-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.go | 106 |
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() +} |
