42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { type GameObjectRegister } from "."
|
|
import { type Team } from "./Team"
|
|
import { type GameObjectNetcode } from "./GameObject"
|
|
import type { Card } from "./Card"
|
|
|
|
export interface GameNetcode extends GameObjectNetcode {
|
|
market_stack: Array<string>
|
|
market: Array<string>
|
|
gem_stack: Array<string>
|
|
started: boolean
|
|
current_turn: string
|
|
}
|
|
|
|
|
|
export type Game = Omit<GameNetcode, 'market_stack' | 'market' | 'gem_stack' | 'current_turn'> & {
|
|
market_stack: Array<Card>
|
|
market: Array<Card | null>
|
|
gem_stack: Array<Card>
|
|
current_turn: Team
|
|
}
|
|
export function create_game(input: GameNetcode, register: GameObjectRegister) {
|
|
return new Proxy<any>(input, {
|
|
get(target, prop, reciever) {
|
|
if (prop == "market_stack") {
|
|
return input.market_stack.map(e => register.cards.get(e))
|
|
}
|
|
if (prop == "market") {
|
|
return input.market.map(e => register.cards.get(e))
|
|
}
|
|
if (prop == "gem_stack") {
|
|
return input.gem_stack.map(e => register.cards.get(e))
|
|
}
|
|
if (prop == "current_turn") {
|
|
return register.teams.get(input.current_turn)
|
|
}
|
|
return Reflect.get(target, prop, reciever);
|
|
},
|
|
set(target, prop, val, receiver) {
|
|
return Reflect.set(target, prop, val, receiver);
|
|
}
|
|
}) as Game
|
|
} |