File size: 3,474 Bytes
c703ea3 a46ce65 565e57b b66ef35 d9c705e b66ef35 565e57b b66ef35 565e57b c703ea3 565e57b b66ef35 a46ce65 565e57b b66ef35 565e57b c703ea3 565e57b 9a3c041 b66ef35 565e57b b66ef35 565e57b b66ef35 565e57b b66ef35 565e57b b66ef35 565e57b b66ef35 565e57b b66ef35 565e57b b66ef35 565e57b b66ef35 7428b13 5435413 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
import type { PicletType } from '../types/picletTypes';
// Discovery Status
export enum DiscoveryStatus {
NEW = 'new',
VARIATION = 'variation',
EXISTING = 'existing'
}
// PicletInstance - Individual monster instances discovered by players
export interface PicletInstance {
id?: number;
// Basic Info
typeId: string; // Unique identifier for this specific Piclet
objectName: string; // Canonical object name (e.g., "pillow", "pyramid")
nickname?: string;
primaryType: PicletType;
tier: string; // 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary'
// Discovery Metadata
isCanonical: boolean; // True if this is the canonical version
canonicalId?: string; // Reference to canonical Piclet if this is a variation
variationAttributes?: string[]; // e.g., ["velvet", "blue"] for variations
discoveredBy?: string; // Username of first discoverer
discoveredAt: Date; // When first discovered
scanCount: number; // Total times this Piclet has been scanned
// Collection Management
isInCollection: boolean; // Whether player has discovered this
collectedAt?: Date; // When player discovered it
// Visual Data
imageUrl: string;
imageData?: string; // Base64 encoded image with transparency
imageCaption: string; // Original caption from image
visualDetails?: string; // Extra visual details for monster generation
concept: string; // Generated monster concept
description: string; // Generated monster description
imagePrompt: string; // Prompt used for image generation
// Physical Characteristics
height?: string; // e.g., "1.2m", "3'5\""
weight?: string; // e.g., "15kg", "33 lbs"
personality?: string; // e.g., "Playful and curious", "Shy but loyal"
}
// ActivityEntry - Recent discoveries and leaderboard
export interface ActivityEntry {
id?: number;
// Type
type: 'discovery' | 'variation' | 'milestone';
// Details
title: string;
description: string;
picletTypeId: string;
discovererName: string;
rarity: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary';
// Timing
createdAt: Date;
}
// GameState - Discovery progress and stats
export interface GameState {
id?: number;
// Timing
lastActivityRefresh: Date;
lastPlayed: Date;
// Discovery Stats
totalDiscoveries: number;
uniqueDiscoveries: number; // Canonical Piclets found
variationsFound: number;
rarityScore: number; // Sum of rarity points
currentStreak: number; // Days in a row with discoveries
// Cached server data
lastServerSync?: Date;
cachedLeaderboard?: LeaderboardEntry[];
}
// LeaderboardEntry - For activity feed
export interface LeaderboardEntry {
username: string;
totalDiscoveries: number;
uniqueDiscoveries: number;
rarityScore: number;
rank: number;
}
// Trainer Scanning Progress - Track automated trainer piclet generation
export interface TrainerScanProgress {
id?: number;
// Image Info
imagePath: string; // e.g., "trainer_images/001_Willow_Snap/image_001.jpg"
trainerName: string; // e.g., "001_Willow_Snap"
imageIndex: number; // e.g., 1, 2, 3 for multiple images per trainer
// Processing Status
status: 'pending' | 'processing' | 'completed' | 'failed';
// Results
picletInstanceId?: number; // ID of generated piclet if successful
errorMessage?: string; // Error details if failed
// Timing
startedAt?: Date;
completedAt?: Date;
// Remote URL for reference
remoteUrl: string; // Full HuggingFace URL
}
|