fertig-classic-games/server/multiplayer/gameRegistry.js

28 lines
1.1 KiB
JavaScript

const registry = new Map();
export function registerGame(definition) {
if (!definition?.slug) throw new Error('Game definition needs a slug.');
registry.set(definition.slug, {
slug: definition.slug,
name: definition.name ?? definition.slug,
category: definition.category ?? 'tabletop',
minPlayers: definition.minPlayers ?? 2,
maxPlayers: definition.maxPlayers ?? 2,
supportsMultiplayer: definition.supportsMultiplayer ?? true,
});
}
export function listGames() {
return [...registry.values()];
}
export function getGame(slug) {
return registry.get(slug) ?? null;
}
// Built-in placeholders so the menu has something to show.
registerGame({ slug: 'backgammon', name: 'Backgammon', category: 'tabletop', minPlayers: 2, maxPlayers: 2 });
registerGame({ slug: 'parchisi', name: 'Parchisi', category: 'tabletop', minPlayers: 2, maxPlayers: 4 });
registerGame({ slug: 'blackjack', name: 'Blackjack', category: 'casino', minPlayers: 1, maxPlayers: 6 });
registerGame({ slug: 'holdem', name: "Texas Hold 'Em", category: 'casino', minPlayers: 2, maxPlayers: 8 });