feat: Add Scryfall ID and set code to card instances for client-side image hydration and update card creation logic.

This commit is contained in:
2025-12-22 22:39:00 +01:00
parent c88c8ced15
commit 784d173fec
4 changed files with 19 additions and 7 deletions

View File

@@ -20,7 +20,9 @@ export interface StackObject {
export interface CardInstance {
instanceId: string;
oracleId: string; // Scryfall ID
scryfallId: string; // Used for cache hydration
setCode?: string; // Used for cache hydration
oracleId: string; // Scryfall Oracle ID
name: string;
imageUrl: string;
controllerId: string;

View File

@@ -61,6 +61,8 @@ export interface CardObject {
position?: { x: number; y: number; z: number };
// Metadata
scryfallId?: string;
setCode?: string;
controlledSinceTurn: number; // For Summoning Sickness check
definition?: any;
}

View File

@@ -342,9 +342,11 @@ const draftInterval = setInterval(() => {
gameManager.addCardToGame(roomId, {
ownerId: p.id,
controllerId: p.id,
oracleId: card.oracle_id || card.id,
oracleId: card.oracle_id || card.id || card.definition?.oracle_id,
scryfallId: card.scryfallId || card.id || card.definition?.id,
setCode: card.setCode || card.set || card.definition?.set,
name: card.name,
imageUrl: card.image || card.image_uris?.normal || card.card_faces?.[0]?.image_uris?.normal || "",
imageUrl: "", // Optimisation: Client hydrates from cache
zone: 'library',
typeLine: card.typeLine || card.type_line || '',
oracleText: card.oracleText || card.oracle_text || '',
@@ -677,9 +679,11 @@ io.on('connection', (socket) => {
gameManager.addCardToGame(room.id, {
ownerId: pid,
controllerId: pid,
oracleId: card.oracle_id || card.id,
oracleId: card.oracle_id || card.id || card.definition?.oracle_id,
scryfallId: card.scryfallId || card.id || card.definition?.id,
setCode: card.setCode || card.set || card.definition?.set,
name: card.name,
imageUrl: card.image_uris?.normal || card.card_faces?.[0]?.image_uris?.normal || "",
imageUrl: "", // Optimisation: Client hydrates from cache
zone: 'library',
typeLine: card.typeLine || card.type_line || '',
oracleText: card.oracleText || card.oracle_text || '',
@@ -799,9 +803,11 @@ io.on('connection', (socket) => {
gameManager.addCardToGame(matchId, {
ownerId: p.id,
controllerId: p.id,
oracleId: card.oracle_id || card.id,
oracleId: card.oracle_id || card.id || card.definition?.oracle_id,
scryfallId: card.scryfallId || card.id || card.definition?.id,
setCode: card.setCode || card.set || card.definition?.set,
name: card.name,
imageUrl: card.image || card.image_uris?.normal || card.card_faces?.[0]?.image_uris?.normal || "",
imageUrl: "", // Optimisation: Client hydrates from cache
zone: 'library',
typeLine: card.typeLine || card.type_line || '',
oracleText: card.oracleText || card.oracle_text || '',

View File

@@ -449,6 +449,8 @@ export class GameManager extends EventEmitter {
controllerId: '',
ownerId: '',
oracleId: '',
scryfallId: cardData.scryfallId || '',
setCode: cardData.setCode || '',
name: '',
...cardData,
damageMarked: 0,