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
}