Draft: big refactor

This commit is contained in:
2025-09-16 16:03:27 +08:00
parent f527230f1e
commit 85fa3dfe73
47 changed files with 1166 additions and 351 deletions

89
plays/joinRoom.go Normal file
View File

@@ -0,0 +1,89 @@
package plays
import (
"fmt"
"net/http"
"strings"
"gitea.konchin.com/ytshih/inp2025/game/types"
ea "github.com/charmbracelet/bubbletea"
)
type JoinRoom struct {
*Base
rooms []types.Room
cursor int
choice *types.Room
}
func NewJoinRoom(base *Base, rooms []types.Room) *JoinRoom {
return &JoinRoom{
Base: base,
rooms: rooms,
}
}
func (m *JoinRoom) Init() ea.Cmd {
return ea.ClearScreen
}
func (m *JoinRoom) Update(msg ea.Msg) (ea.Model, ea.Cmd) {
switch msg := msg.(type) {
case ea.KeyMsg:
switch msg.String() {
case "ctrl+c", "q":
return m, ea.Quit
case "enter":
if m.cursor < len(m.rooms) {
m.choice = &m.rooms[m.cursor]
}
return m, ea.Quit
case "up":
if m.cursor > 0 {
m.cursor--
}
case "down":
if m.cursor < len(m.rooms)-1 {
m.cursor++
}
}
}
return m, nil
}
func (m *JoinRoom) View() string {
var b strings.Builder
b.WriteString("Select a room to join:\n\n")
for i, room := range m.rooms {
if m.cursor == i {
b.WriteString("(•) ")
} else {
b.WriteString("( ) ")
}
b.WriteString(room.View() + "\n")
}
return b.String()
}
func (m *JoinRoom) Next(queue *[]*ea.Program) error {
if m.choice == nil {
*queue = append(*queue, ea.NewProgram(NewLobby(m.Base)))
return nil
}
resp, err := m.Base.client.R().
SetResult(&types.Room{}).
Post(fmt.Sprintf("/api/rooms/%s/join", m.choice.ID))
if err != nil || resp.StatusCode() != http.StatusOK {
*queue = append(*queue, ea.NewProgram(NewRedirect("Failed to join room")))
*queue = append(*queue, ea.NewProgram(NewLobby(m.Base)))
return nil
}
room := resp.Result().(*types.Room)
*queue = append(*queue, ea.NewProgram(NewRoomWaiting(m.Base, room.ID)))
return nil
}