Initial commit.

This commit is contained in:
Greyson Parrelli
2026-07-22 23:07:29 -04:00
commit 612a4e6227
38 changed files with 6106 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
// Mirrors of the Go view types (internal/game/view.go).
export type Suit = 'sun' | 'moon' | 'star' | 'leaf'
export type CardKind = 'pet' | 'food'
export type Phase = 'lobby' | 'shop' | 'cleanup' | 'arrange' | 'battle' | 'gameover'
export interface Card {
id: string
kind: CardKind
name: string
tier: number
power?: number
suit?: Suit
effect?: string
food?: string
}
export interface PlayerView {
id: string
name: string
seat: number
coins: number
trophies: number
ready: boolean
connected: boolean
deckSize: number
petCount: number
deck?: Card[]
}
export interface PendingTrade {
playerId: string
tier: number
options: [Card, Card]
}
export interface BattleUnit {
card: Card
foods: Card[] | null
bonus: number
damage: number
}
export interface BattleEvent {
type: 'clash'
units: number[]
damage: number[]
died: boolean[]
}
export interface BattleResult {
round: number
lineups: BattleUnit[][]
wastedFoods: (Card[] | null)[]
events: BattleEvent[] | null
winnerSeat: number
trophies: number
}
export interface GameView {
gameId: string
code: string
phase: Phase
round: number
maxRounds: number
maxPets: number
youSeat: number
turn: number
shopRow: Card[]
deckCounts: number[]
players: PlayerView[]
pending?: PendingTrade
battle?: BattleResult
winnerSeat: number
}
export type ClientMessage =
| { type: 'buy'; row: number }
| { type: 'discard'; cards: string[] }
| { type: 'trade'; cards: string[] }
| { type: 'tradeChoose'; pick: number }
| { type: 'pass' }
| { type: 'arrange'; order: string[] }
| { type: 'ready' }
export interface Session {
gameId: string
code: string
playerId: string
token: string
}