aa765a0c06
CI / changes (pull_request) Successful in 3s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 14s
CI / ui (pull_request) Successful in 49s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m12s
New Game's quick game gains an explicit opponent selector — 🤖 AI (default) or 👤 Random player. AI starts a game seated with a pooled robot that joins and moves at once: no per-move timeout (a 7-day inactivity loss reusing the turn-timeout sweeper), chat/nudge disabled, no statistics, the opponent shown as 🤖 everywhere. The random path (disguised robot) is unchanged. Driven by one game flag (games.vs_ai), set only on AI-started games so the disguised path is never revealed; Matchmaker.StartVsAI seats the robot directly (no open pool); the robot replies event-driven via the game service's after-commit/after-create hook. Wire: vs_ai on EnqueueRequest + GameView.
94 lines
3.1 KiB
Go
94 lines
3.1 KiB
Go
package notify
|
|
|
|
// The structs below are the wire-agnostic inputs the domain services hand to the
|
|
// enriched event constructors. Keeping them here — rather than importing the wire
|
|
// schema into game/lobby/social — preserves the package boundary: notify owns the
|
|
// FlatBuffers encoding, while the domain only fills in already-resolved values (seat
|
|
// display names, alphabet-index racks). Each mirrors the matching scrabblefb table.
|
|
|
|
// SeatStanding is one seat's public standing inside a GameSummary (mirrors
|
|
// scrabblefb.SeatView).
|
|
type SeatStanding struct {
|
|
Seat int
|
|
AccountID string
|
|
DisplayName string
|
|
Score int
|
|
HintsUsed int
|
|
IsWinner bool
|
|
}
|
|
|
|
// GameSummary is the shared, non-private game state embedded in enriched events
|
|
// (mirrors scrabblefb.GameView). LastActivityUnix is the lobby sort key: the current
|
|
// turn's start for an active game, the finish time once finished.
|
|
type GameSummary struct {
|
|
ID string
|
|
Variant string
|
|
DictVersion string
|
|
Status string
|
|
Players int
|
|
ToMove int
|
|
TurnTimeoutSecs int
|
|
MultipleWordsPerTurn bool
|
|
// VsAI marks an honest-AI game (the opponent is shown as 🤖, chat/nudge/add-friend off).
|
|
VsAI bool
|
|
MoveCount int
|
|
EndReason string
|
|
Seats []SeatStanding
|
|
LastActivityUnix int64
|
|
}
|
|
|
|
// AlphabetLetter is one variant alphabet entry (a display-only row) embedded in an
|
|
// initial PlayerState so a client seeing a variant for the first time can render its
|
|
// rack (mirrors scrabblefb.AlphabetEntry).
|
|
type AlphabetLetter struct {
|
|
Index int
|
|
Letter string
|
|
Value int
|
|
}
|
|
|
|
// PlayerState is a player's full initial view of a game — the shared summary plus
|
|
// their private rack and budgets (mirrors scrabblefb.StateView). Rack carries wire
|
|
// alphabet indices (a blank is the sentinel index 255). Alphabet is set only when the
|
|
// recipient may not have cached the variant yet (match_found / game_started).
|
|
type PlayerState struct {
|
|
Game GameSummary
|
|
Seat int
|
|
Rack []int
|
|
BagLen int
|
|
HintsRemaining int
|
|
Alphabet []AlphabetLetter
|
|
}
|
|
|
|
// AccountRef is a referenced account with its display name resolved (mirrors
|
|
// scrabblefb.AccountRef).
|
|
type AccountRef struct {
|
|
AccountID string
|
|
DisplayName string
|
|
}
|
|
|
|
// InvitationInvitee is one invited player's seat and response inside an
|
|
// InvitationSummary (mirrors scrabblefb.InvitationInvitee).
|
|
type InvitationInvitee struct {
|
|
AccountID string
|
|
DisplayName string
|
|
Seat int
|
|
Response string
|
|
}
|
|
|
|
// InvitationSummary is a friend-game invitation carried by the NotifyInvitation event so
|
|
// the client adds it to its lobby list without a refetch (mirrors scrabblefb.Invitation).
|
|
type InvitationSummary struct {
|
|
ID string
|
|
Inviter AccountRef
|
|
Invitees []InvitationInvitee
|
|
Variant string
|
|
TurnTimeoutSecs int
|
|
HintsAllowed bool
|
|
HintsPerPlayer int
|
|
MultipleWordsPerTurn bool
|
|
DropoutTiles string
|
|
Status string
|
|
GameID string
|
|
ExpiresAtUnix int64
|
|
}
|