weed-sim / src /shared /types.ts
Yufok1
Real-time growth: growTime days become wall-clock seconds
6212a21
Raw
History Blame Contribute Delete
4.64 kB
export type GrowthStage = 'SEED' | 'SEEDLING' | 'MATURE';
export type PlantType = 'Indica' | 'Sativa' | 'Hybrid';
export type NumericTraitKey = 'THC' | 'CBD' | 'Yield' | 'GrowTime';
export type ColorTraitKey = 'LeafColor' | 'BudColor';
export type ColorPattern = 'solid' | 'speckled' | 'split' | 'mosaic' | 'rimmed' | 'polycolor';
export type TraitKey = NumericTraitKey | ColorTraitKey;
export type Rgb = [number, number, number];
export type Hsv = [number, number, number];
export type NumericAlleles = [number, number];
export type ColorAlleles = {
Hue: NumericAlleles;
Saturation: NumericAlleles;
Value: NumericAlleles;
};
export type Alleles = {
THC: NumericAlleles;
CBD: NumericAlleles;
Yield: NumericAlleles;
GrowTime: NumericAlleles;
LeafColor: ColorAlleles;
BudColor: ColorAlleles;
};
export type Stabilities = Record<TraitKey, number>;
export type SeedProfile = {
seedId: string;
strainName: string;
type: PlantType;
alleles: Alleles;
stabilities: Stabilities;
thc: number;
cbd: number;
yield: number;
growTime: number;
budColor: Rgb;
leafColor: Rgb;
budPalette: Rgb[];
leafPalette: Rgb[];
budPattern: ColorPattern;
leafPattern: ColorPattern;
baseImageName: string;
growthStage: GrowthStage;
maturesAt?: string | null;
lineage: [string | null, string | null];
description: string;
quantity: number;
attemptsUsed: number;
maxAttempts: number;
isStarter: boolean;
};
export type StarterProfile = {
name: string;
type: PlantType;
traits_base: {
THC: number;
CBD: number;
Yield: number;
GrowTime: number;
};
alleles: Alleles;
stabilities: Stabilities;
base_image_name: string;
description?: string;
};
export type GameState = {
schema: 'weedsim.game_state/v1';
seeds: SeedProfile[];
selection: string[];
updatedAt: string;
};
export type TraitVariable = {
key: string;
label: string;
unit: string;
min: number;
max: number;
scale: 'numeric' | 'circular';
};
export type GermplasmRecord = {
germplasmDbId: string;
germplasmName: string;
germplasmType: PlantType;
generation: number;
pedigree: string;
parents: [string | null, string | null];
isStarter: boolean;
stage: GrowthStage;
THC: number;
CBD: number;
Yield: number;
GrowTime: number;
BudHue: number;
LeafHue: number;
Stability: number;
Volatility: number;
Bloom: number;
budColor: Rgb;
leafColor: Rgb;
budPalette: Rgb[];
leafPalette: Rgb[];
budPattern: ColorPattern;
leafPattern: ColorPattern;
budBloom: { score: number; colorCount: number; hueSpread: number; averageSaturation: number; averageValue: number; muddyStops: number; pattern: ColorPattern };
leafBloom: { score: number; colorCount: number; hueSpread: number; averageSaturation: number; averageValue: number; muddyStops: number; pattern: ColorPattern };
budFamily: string;
alleles: Alleles;
attemptsUsed: number;
maxAttempts: number;
canAttempt: boolean;
};
export type LabPayload = {
variables: TraitVariable[];
records: GermplasmRecord[];
facets: Record<string, Record<string, number>>;
count: number;
};
export type DistributionSummary = {
min: number;
max: number;
mean: number;
median: number;
values: number[];
};
export type BloomPredictionSummary = {
score: DistributionSummary;
volatility: DistributionSummary;
colorCount: DistributionSummary;
maxColors: number;
patterns: Record<ColorPattern, number>;
hint: string;
};
export type CrossPrediction = {
n: number;
parents: [string, string];
THC: DistributionSummary;
CBD: DistributionSummary;
Yield: DistributionSummary;
GrowTime: DistributionSummary;
budCloud: Rgb[];
leafCloud: Rgb[];
budBloom: BloomPredictionSummary;
leafBloom: BloomPredictionSummary;
};
export type DeckSummary = {
accessions: number;
byStage: Record<string, number>;
byType: Record<string, number>;
byGeneration: Record<string, number>;
byBudFamily: Record<string, number>;
maxGeneration: number;
breedableCount: number;
growingCount: number;
traitAverages: Record<string, number>;
gamut: Rgb[];
recentCrosses: Array<{
id: string;
name: string;
generation: number;
pedigree: string;
budColor: Rgb;
leafColor: Rgb;
THC: number;
}>;
topBloom: Array<{
id: string;
name: string;
generation: number;
pedigree: string;
budColor: Rgb;
leafColor: Rgb;
budPalette: Rgb[];
Bloom: number;
Volatility: number;
budPattern: ColorPattern;
colorCount: number;
hueSpread: number;
THC: number;
}>;
breedable: Array<{ id: string; name: string }>;
};