Files
front/netcode/Game.ts
T
legonzaur dc80228668
release-tag / release-image (push) Successful in 1m9s
Close #14; Add back prepare effect
2024-05-13 11:59:27 +02:00

50 lines
1.7 KiB
TypeScript

import { type GameObjectRegister } from "."
import { type Team } from "./Team"
import { type GameObjectNetcode } from "./GameObject"
import type { Card } from "./Card"
import type { Player } from "./Player"
export interface GameNetcode extends GameObjectNetcode {
market_stack: Array<string>
market: Array<string>
gem_stack: Array<string>
started: boolean
current_turn: string
players: Array<string>
ended: boolean
}
export type Game = Omit<GameNetcode, 'market_stack' | 'market' | 'gem_stack' | 'current_turn' | 'players'> & {
market_stack: Array<Card>
market: Array<Card | null>
gem_stack: Array<Card>
current_turn: Team
players: Array<Player>
}
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)
}
if (prop == "players") {
return target.players.map(e => register.players.get(e))
}
return Reflect.get(target, prop, reciever);
},
set(target, prop, val, receiver) {
return Reflect.set(target, prop, val, receiver);
}
}) as Game
}