package activities import ( "github.com/hajimehoshi/ebiten/v2" "github.com/hajimehoshi/ebiten/v2/inpututil" "muhq.space/muhqs-game/go/game" "muhq.space/muhqs-game/go/ui" ) const ( SEALED_DECK_STRIP_WIDTH = 200 SEALED_BUTTON_WIDTH = 150 SEALED_BUTTON_HEIGHT = 40 ) type Sealed struct { ui.Collection setInput *ui.TextInput pool game.PileOfCards Deck game.PileOfCards } func NewSealed(width, height int) *Sealed { s := &Sealed{ Collection: ui.Collection{Width: width, Height: height}, } s.AddWidget(ui.NewFixedTextBox( (s.Width-SEALED_BUTTON_WIDTH)/2-SEALED_BUTTON_WIDTH, (s.Height-SEALED_BUTTON_HEIGHT)/2-SEALED_BUTTON_HEIGHT, SEALED_BUTTON_WIDTH, SEALED_BUTTON_HEIGHT, "sets:", ).Centering(true)) s.setInput = ui.NewTextInput( (s.Width-SEALED_BUTTON_WIDTH)/2, (s.Height-SEALED_BUTTON_HEIGHT)/2-SEALED_BUTTON_HEIGHT, SEALED_BUTTON_WIDTH, SEALED_BUTTON_HEIGHT, "base,equipments,magic", false, ) s.AddWidget(s.setInput) s.AddWidget(ui.NewSimpleButton( (s.Width-SEALED_BUTTON_WIDTH)/2, (s.Height-SEALED_BUTTON_HEIGHT)/2, SEALED_BUTTON_WIDTH, SEALED_BUTTON_HEIGHT, "Start", func(*ui.SimpleButton) { s.startSealed(s.setInput.TextOrLabel()) })) return s } func (s *Sealed) Update() error { if err := ui.Update(); err != nil { return err } if err := s.Collection.Update(); err != nil { return err } if inpututil.IsKeyJustPressed(ebiten.KeyEscape) { Activities.PopActivity() } return nil } func (s *Sealed) Layout(width, height int) (int, int) { return s.Width, s.Height } func (s *Sealed) startSealed(setList string) { sets, err := game.SetListToSets(setList) if err != nil { s.setInput.Bg(ui.WarningBg) s.setInput.SetInput("") return } s.pool = game.NewPileOfCards() s.Deck = game.NewPileOfCards() s.Clear() for _, set := range sets { setDeck := game.NewDeck() for _, c := range game.NewDeckFromCardPaths(set.CardPaths()).Cards() { if c.IsBuyable() { setDeck.AddCard(c) } } setDeck.MoveInto(s.pool) } deckList := ui.NewPocList( s.Width-SEALED_DECK_STRIP_WIDTH/2, s.Height-SEALED_BUTTON_HEIGHT-20, s.Deck, &s.Collection) deckList.Bg(ui.Gray) s.AddWidget(deckList) grid := ui.NewCardGrid(0, 0, s.Width-SEALED_DECK_STRIP_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() } grid.RegisterHandler("click", selectCard) s.AddWidget(grid) s.AddWidget(ui.NewSimpleButton( s.Width-SEALED_DECK_STRIP_WIDTH/2-SEALED_BUTTON_WIDTH/2, s.Height-SEALED_BUTTON_HEIGHT, SEALED_BUTTON_WIDTH, SEALED_BUTTON_HEIGHT, "Done", func(*ui.SimpleButton) { s.done() })) } func (s *Sealed) done() { Activities.PopActivity() // startMenu := CurActivity().(*StartMenu) // startMenu.deckInput.SetInput(s.deck.ToList()) }