aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-07-03 21:44:48 -0400
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:57:22 +0200
commite34faef774f7dad55cb7f7a5177215b341e5b539 (patch)
tree28315a3d64f9d0468c7f0b1baf055bbdeda801a3
parent4b7f94f9e6e1dcae4d9b46755103bc0952bad981 (diff)
downloadmuhqs-game-e34faef774f7dad55cb7f7a5177215b341e5b539.tar.gz
muhqs-game-e34faef774f7dad55cb7f7a5177215b341e5b539.zip
support remote drafts
-rw-r--r--go/activities/draft.go44
-rw-r--r--go/client/startMenu.go2
2 files changed, 37 insertions, 9 deletions
diff --git a/go/activities/draft.go b/go/activities/draft.go
index 119696ec..85389106 100644
--- a/go/activities/draft.go
+++ b/go/activities/draft.go
@@ -2,6 +2,7 @@ package activities
import (
"log"
+ "time"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil"
@@ -18,19 +19,24 @@ const (
type Draft struct {
ui.Collection
player *game.Player
- ctrl *game.ChanPlayerControl
+ ctrl game.PlayerControl
draft *game.Draft
setInput *ui.TextInput
descInput *ui.TextInput
deckList *ui.PocList
+ timer *ui.TimerBar
}
-func NewDraft(width, height int, playerName string) *Draft {
+func NewLocalDraft(width, height int, playerName string) *Draft {
d := &Draft{
Collection: ui.Collection{Width: width, Height: height},
}
+ d.player = game.NewDraftPlayer(playerName)
+ d.ctrl = game.NewChanPlayerControl(d.player)
+ d.player.Ctrl = d.ctrl
+
d.AddWidget(ui.NewFixedTextBox(
(d.Width-DRAFT_BUTTON_WIDTH)/2-DRAFT_BUTTON_WIDTH,
(d.Height-DRAFT_BUTTON_HEIGHT)/2-3*DRAFT_BUTTON_HEIGHT,
@@ -68,7 +74,7 @@ func NewDraft(width, height int, playerName string) *Draft {
d.AddWidget(ui.NewRoundSimpleButton(
(d.Width-DRAFT_BUTTON_WIDTH)/2+DRAFT_BUTTON_WIDTH+20,
(d.Height-DRAFT_BUTTON_HEIGHT)/2-2*DRAFT_BUTTON_HEIGHT,
- DRAFT_BUTTON_WIDTH,
+ 30,
"?",
func(*ui.SimpleButton) {
ui.OpenUrl("https://muhq.space/muhqs-game/build/en/rules.html#draft-notation")
@@ -100,10 +106,17 @@ func NewDraft(width, height int, playerName string) *Draft {
d.startDraft(d.descInput.TextOrLabel(), d.setInput.TextOrLabel(), aiNInput.GetChoosen())
}))
- d.player = game.NewDraftPlayer(playerName)
- d.ctrl = game.NewChanPlayerControl(d.player)
- d.player.Ctrl = d.ctrl
+ return d
+}
+func StartNewRemoteDraft(width, height int, ctrl game.PlayerControl, firstPack *game.PlayerNotification) *Draft {
+ d := &Draft{
+ Collection: ui.Collection{Width: width, Height: height},
+ player: ctrl.Player(),
+ ctrl: ctrl,
+ }
+
+ d.presentPack(firstPack)
return d
}
@@ -138,11 +151,21 @@ func (d *Draft) presentPack(n *game.PlayerNotification) {
}
card := _card.(*game.Card)
- d.RemoveWidget(grid)
d.ctrl.SendAction(game.NewDraftPick(d.player, pack, card))
+ d.RemoveWidget(grid)
+ if d.timer != nil {
+ d.timer = nil
+ d.RemoveWidget(d.timer)
+ }
}
grid.RegisterHandler("click", selectCard)
d.AddWidget(grid)
+
+ if d.draft == nil {
+ t := time.Duration(pack.Size()*5) * time.Second
+ timer := ui.NewTimerBar(0, 10, d.Width, 5, t)
+ d.AddWidget(timer)
+ }
}
func (d *Draft) Layout(width, height int) (int, int) {
@@ -161,7 +184,12 @@ func (d *Draft) startDraft(desc string, setList string, aiN int) {
return
}
- d.draft = game.NewDraft([]*game.Player{d.player}, desc, sets)
+ d.draft, err = game.NewDraft([]*game.Player{d.player}, desc, sets)
+ if err != nil {
+ d.descInput.Bg(ui.WarningBg)
+ d.descInput.SetInput("")
+ return
+ }
log.Println(aiN)
for _ = range aiN {
diff --git a/go/client/startMenu.go b/go/client/startMenu.go
index c3377a40..dea148ec 100644
--- a/go/client/startMenu.go
+++ b/go/client/startMenu.go
@@ -116,7 +116,7 @@ func (m *startMenu) build() {
START_BUTTON_HEIGHT,
"Draft",
func(*ui.SimpleButton) {
- m.draft = activities.NewDraft(m.Width, m.Height, playerInput.Text())
+ m.draft = activities.NewLocalDraft(m.Width, m.Height, playerInput.Text())
activities.PushActivity(m.draft)
}))