43 lines
1.4 KiB
TypeScript
43 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: GameNetcode, prop, reciever) {
|
|
if (prop == "market_stack") {
|
|
return target.market_stack.map(e => register.cards.get(e))
|
|
}
|
|
if (prop == "market") {
|
|
console.log(target)
|
|
return target.market.map(e => register.cards.get(e))
|
|
}
|
|
if (prop == "gem_stack") {
|
|
return target.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
|
|
} |