import { type GameObjectRegister } from "." import type { Card } from "./Card" import type { GameObjectNetcode } from "./GameObject" import { type Team } from "./Team" import { type Turn } from "./Turn" export interface PlayerNetcode extends GameObjectNetcode { stack_pile: Array discard_pile: Array hand: Array board: Array team: string username: string turn: string discord_id?: string image?: string ready: boolean } export type Player = Omit & { stack_pile: Array discard_pile: Array hand: Array board: Array team: Team | undefined turn: Turn | undefined } export function create_player(input: PlayerNetcode, register: GameObjectRegister) { return new Proxy(input, { get(target: PlayerNetcode, prop, reciever) { if (prop == "stack_pile") { return target.stack_pile.map(e => register.cards.get(e)) } if (prop == "discard_pile") { return target.discard_pile.map(e => register.cards.get(e)) } if (prop == "hand") { return target.hand.map(e => register.cards.get(e)) } if (prop == "board") { return target.board.map(e => register.cards.get(e)) } if (prop == "team") { return register.teams.get(target.team) } if (prop == "turn") { return register.turns.get(target.turn) } return Reflect.get(target, prop, reciever); }, set(target, prop, val, receiver) { return Reflect.set(target, prop, val, receiver); } }) as Player }