66 lines
1.1 KiB
Go
66 lines
1.1 KiB
Go
package plays
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"gitea.konchin.com/ytshih/inp2025/game/types"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
)
|
|
|
|
type RoomWaiting struct {
|
|
*Base
|
|
|
|
doneCh chan struct{}
|
|
}
|
|
|
|
func NewRoomWaiting(base *Base) *RoomWaiting {
|
|
m := &RoomWaiting{
|
|
base: base,
|
|
|
|
doneCh: make(chan struct{}),
|
|
}
|
|
return &m
|
|
}
|
|
|
|
func updateRoomWaitingInfo(m *RoomWaiting) error {
|
|
for {
|
|
select {
|
|
case <-m.doneCh:
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
|
|
func (m *RoomWaiting) Init() tea.Cmd {
|
|
go updateRoomWaitingInfo(m)
|
|
return tea.Sequence(tea.ClearScreen, Tick(refreshTick))
|
|
}
|
|
|
|
func (m *RoomWaiting) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
if _, cmd := m.Base.Update(msg); cmd != nil {
|
|
return m, cmd
|
|
}
|
|
|
|
switch msg := msg.(type) {
|
|
case types.TickMsg:
|
|
return m, Tick(refreshTick)
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
func (m *RoomWaiting) View() string {
|
|
var b strings.Builder
|
|
|
|
b.WriteString("waiting for user to join ...")
|
|
return b.String()
|
|
}
|
|
|
|
func (m *RoomWaiting) Next(queue *[]*tea.Program) error {
|
|
m.doneCh <- struct{}{}
|
|
switch m.choice {
|
|
case "":
|
|
*queue = append(*queue,
|
|
tea.NewProgram)
|
|
}
|
|
}
|