diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-07-05 22:34:00 -0400 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-07-06 11:49:26 -0400 |
| commit | 793286b8e3e14b3013d0fb7cc69e9c8b28e9d054 (patch) | |
| tree | 74d301e19b37883c637471aa294353855d46eb53 | |
| parent | 28356bb5d54bd8a1a8359a8120b484c8e0a051ca (diff) | |
| download | muhqs-game-793286b8e3e14b3013d0fb7cc69e9c8b28e9d054.tar.gz muhqs-game-793286b8e3e14b3013d0fb7cc69e9c8b28e9d054.zip | |
allow to start a local draft with external values
| -rw-r--r-- | go/activities/draft.go | 65 |
1 files changed, 51 insertions, 14 deletions
diff --git a/go/activities/draft.go b/go/activities/draft.go index 19436075..f1b3fb58 100644 --- a/go/activities/draft.go +++ b/go/activities/draft.go @@ -1,6 +1,7 @@ package activities import ( + "errors" "log" "time" @@ -31,6 +32,7 @@ type Draft struct { deckView *ui.CardGrid } +// NewLocalDraft creates a draft activity ready to configure and start a local draft. func NewLocalDraft(width, height int, playerName string) *Draft { d := &Draft{ Collection: ui.Collection{Width: width, Height: height}, @@ -113,6 +115,22 @@ func NewLocalDraft(width, height int, playerName string) *Draft { return d } +// StartNewLocalDraft creates a new draft from its inputs and immediatly starts it. +// The started draft activiry is returned or any occured error. +func StartNewLocalDraft(width, height int, playerName string, desc string, sets string, aiN int) (*Draft, error) { + d := &Draft{ + Collection: ui.Collection{Width: width, Height: height}, + done: make(chan struct{}), + } + + d.player = game.NewDraftPlayer(playerName) + d.ctrl = game.NewChanPlayerControl(d.player) + d.player.Ctrl = d.ctrl + err := d.startDraft(desc, sets, aiN) + return d, err +} + +// StartNewRemoteDraft returns a draft activity for the initial received pick notification. func StartNewRemoteDraft(width, height int, ctrl game.PlayerControl, firstPack game.PlayerNotification) *Draft { d := &Draft{ Collection: ui.Collection{Width: width, Height: height}, @@ -197,39 +215,35 @@ func (d *Draft) Layout(width, height int) (int, int) { return d.Width, d.Height } -func (d *Draft) startDraft(desc string, setList string, aiN int) { - +func (d *Draft) startDraft(desc string, setList string, aiN int) error { log.Printf("starting %s draft from '%s'\n", desc, setList) var sets []game.SetIdentifier var err error if sets, err = game.SetListToSets(setList); err != nil { - d.setInput.Bg(ui.WarningBg) - d.setInput.SetInput("") - return + return err } d.draft, err = game.NewDraft([]*game.Player{d.player}, desc, sets) if err != nil { - d.descInput.Bg(ui.WarningBg) - d.descInput.SetInput("") - return + return err } - log.Println(aiN) for _ = range aiN { - log.Println("add ai") d.draft.AddRandomAi() } if !d.draft.Valid() { - d.descInput.Bg(ui.WarningBg) - d.descInput.SetInput("") - return + return game.ErrInvalidDraft } + d.Clear() - d.deckList = ui.NewPocList(d.Width-SEALED_DECK_STRIP_WIDTH/2, d.Height-DRAFT_BUTTON_HEIGHT-20, d.player.Deck) + d.deckList = ui.NewPocList( + d.Width-SEALED_DECK_STRIP_WIDTH/2, + d.Height-DRAFT_BUTTON_HEIGHT-20, + d.player.Deck, + ) d.deckList.Bg(ui.Gray) { cardsInDeck := 0 @@ -257,8 +271,31 @@ func (d *Draft) startDraft(desc string, setList string, aiN int) { d.draft.Run() close(d.done) }() + + return nil +} + +func (d *Draft) startDraftSafe(desc string, setList string, aiN int) { + + err := d.startDraft(desc, setList, aiN) + if err == nil { + return + } + + var descErr game.ErrParseDraftDesc + if errors.Is(err, game.ErrUnknownSet) { + d.setInput.Bg(ui.WarningBg) + d.setInput.SetInput("") + } else if errors.As(err, &descErr) { + d.descInput.Bg(ui.WarningBg) + d.descInput.SetInput("") + } else if errors.Is(err, game.ErrInvalidDraft) { + d.descInput.Bg(ui.WarningBg) + d.descInput.SetInput("") + } } +// GetDeckList returns the player's current deck list. func (d *Draft) GetDeckList() string { return d.player.Deck.ToList() } |
