96 lines
1.9 KiB
Go
96 lines
1.9 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/rs/xid"
|
|
)
|
|
|
|
type WordColor string
|
|
|
|
const (
|
|
WordColorWhite = "white"
|
|
WordColorBlue = "blue"
|
|
WordColorRed = "red"
|
|
WordColorBlack = "black"
|
|
WordColorUknown = "beige"
|
|
)
|
|
|
|
func StrToWordColor(s string) WordColor {
|
|
switch s {
|
|
case "white":
|
|
return WordColorWhite
|
|
case "blue":
|
|
return WordColorBlue
|
|
case "red":
|
|
return WordColorRed
|
|
case "black":
|
|
return WordColorBlack
|
|
default:
|
|
return WordColorUknown
|
|
}
|
|
}
|
|
|
|
type Room struct {
|
|
ID string `json:"id" db:"id"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
// RoomName string `json:"room_name"`
|
|
RoomPass string `json:"room_pass"`
|
|
RoomLink string
|
|
CreatorName string `json:"creator_name"`
|
|
PlayerList []string `json:"player_list"`
|
|
TeamTurn string
|
|
RedMime string
|
|
BlueMime string
|
|
RedGuessers []string
|
|
BlueGuessers []string
|
|
Cards []WordCard
|
|
GameSettings *GameSettings `json:"settings"`
|
|
Result uint8 // 0 for unknown; 1 is win for red; 2 if for blue;
|
|
BlueCounter uint8
|
|
RedCounter uint8
|
|
RedTurn bool // false is blue turn
|
|
}
|
|
|
|
type WordCard struct {
|
|
Word string
|
|
Color WordColor
|
|
Revealed bool
|
|
}
|
|
|
|
type GameSettings struct {
|
|
IsRunning bool `json:"is_running"`
|
|
Language string `json:"language" example:"en" form:"language"`
|
|
RoundTime int32 `json:"round_time"`
|
|
ProgressPct uint32 `json:"progress_pct"`
|
|
IsOver bool
|
|
}
|
|
|
|
// =====
|
|
|
|
type RoomReq struct {
|
|
// is not user or not unique
|
|
RoomPass string `json:"room_pass" form:"room_pass"`
|
|
RoomName string `json:"room_name" form:"room_name"`
|
|
// GameSettings
|
|
}
|
|
|
|
func (rr *RoomReq) CreateRoom(creator string) *Room {
|
|
roomID := xid.New().String()
|
|
return &Room{
|
|
// RoomName: ,
|
|
RoomPass: rr.RoomPass,
|
|
ID: roomID,
|
|
CreatedAt: time.Now(),
|
|
PlayerList: []string{creator},
|
|
CreatorName: creator,
|
|
}
|
|
}
|
|
|
|
// ====
|
|
|
|
type FullInfo struct {
|
|
State *UserState
|
|
Room *Room
|
|
}
|