Matou-Garou / convex /aiTown /playerDescription.ts
Jofthomas's picture
Jofthomas HF staff
bulk
ce8b18b
import { ObjectType, v } from 'convex/values';
import { GameId, parseGameId, playerId } from './ids';
export type CharacterType = 'villager' | 'werewolf';
export const CharacterTypeSchema = v.union(v.literal('villager'), v.literal('werewolf'));
export const serializedPlayerDescription = {
playerId,
name: v.string(),
description: v.string(),
character: v.string(),
type: CharacterTypeSchema,
};
export type SerializedPlayerDescription = ObjectType<typeof serializedPlayerDescription>;
export class PlayerDescription {
playerId: GameId<'players'>;
name: string;
description: string;
character: string;
type: CharacterType;
constructor(serialized: SerializedPlayerDescription) {
const { playerId, name, description, character, type } = serialized;
this.playerId = parseGameId('players', playerId);
this.name = name;
this.description = description;
this.character = character;
this.type = type;
}
serialize(): SerializedPlayerDescription {
const { playerId, name, description, character, type } = this;
return {
playerId,
name,
description,
type: type,
character,
};
}
}