85 lines
4.0 KiB
TypeScript
85 lines
4.0 KiB
TypeScript
import type { OutfitSlot } from './types';
|
|
|
|
// Outfit vocabulary. Types/colours the generator draws from and dress-code rules
|
|
// predicate on. Slot taxonomy cross-checked against the 90sDJsim wardrobe catalog
|
|
// (docs/ASSETS.md §1) so a future art pass maps 1:1.
|
|
|
|
export interface OutfitTypeDef {
|
|
type: string;
|
|
weight: number;
|
|
colours: readonly string[];
|
|
canLogo?: boolean;
|
|
canVintage?: boolean;
|
|
}
|
|
|
|
export const PALETTE: Record<string, number> = {
|
|
white: 0xf2f2f2,
|
|
black: 0x14141c,
|
|
grey: 0x8a8a94,
|
|
navy: 0x1e2a52,
|
|
red: 0xc03434,
|
|
green: 0x2e7d46,
|
|
blue: 0x3465c0,
|
|
pink: 0xe06fa4,
|
|
purple: 0x7a4fc0,
|
|
yellow: 0xd8c23a,
|
|
orange: 0xd07c2e,
|
|
brown: 0x6e4a2e,
|
|
cream: 0xe8ddc0,
|
|
denim: 0x4a6a95,
|
|
};
|
|
|
|
export const OUTFIT_VOCAB: Record<OutfitSlot, readonly OutfitTypeDef[]> = {
|
|
shoes: [
|
|
{ type: 'sneaker', weight: 5, colours: ['white', 'black', 'red', 'grey'], canLogo: true, canVintage: true },
|
|
{ type: 'boot', weight: 2, colours: ['black', 'brown'] },
|
|
{ type: 'dress', weight: 2, colours: ['black', 'brown'] },
|
|
{ type: 'heel', weight: 2, colours: ['black', 'red', 'pink', 'white'] },
|
|
{ type: 'thong', weight: 1, colours: ['black', 'blue', 'yellow'] }, // the footwear, obviously
|
|
{ type: 'loafer', weight: 1, colours: ['brown', 'black', 'cream'] },
|
|
{ type: 'platform', weight: 1, colours: ['black', 'purple', 'pink'], canVintage: true },
|
|
],
|
|
legs: [
|
|
{ type: 'jeans', weight: 5, colours: ['denim', 'black', 'grey'] },
|
|
{ type: 'chinos', weight: 3, colours: ['cream', 'navy', 'brown'] },
|
|
{ type: 'skirt', weight: 3, colours: ['black', 'red', 'denim', 'pink'] },
|
|
{ type: 'trackies', weight: 2, colours: ['grey', 'black', 'navy'], canLogo: true },
|
|
{ type: 'shorts', weight: 2, colours: ['denim', 'cream', 'black'] },
|
|
{ type: 'slacks', weight: 2, colours: ['black', 'grey', 'navy'] },
|
|
{ type: 'cargo', weight: 1, colours: ['green', 'grey', 'brown'] },
|
|
],
|
|
top: [
|
|
{ type: 'tee', weight: 5, colours: ['white', 'black', 'grey', 'red', 'green', 'navy'], canLogo: true, canVintage: true },
|
|
{ type: 'shirt', weight: 4, colours: ['white', 'blue', 'pink', 'cream'] },
|
|
{ type: 'singlet', weight: 2, colours: ['white', 'black', 'grey'], canLogo: true },
|
|
{ type: 'polo', weight: 2, colours: ['navy', 'white', 'green', 'red'], canLogo: true },
|
|
{ type: 'crop', weight: 2, colours: ['white', 'black', 'pink', 'purple'] },
|
|
{ type: 'dressShirt', weight: 2, colours: ['white', 'black'] },
|
|
{ type: 'jersey', weight: 1, colours: ['red', 'blue', 'yellow'], canLogo: true, canVintage: true },
|
|
],
|
|
outer: [
|
|
{ type: 'none', weight: 6, colours: ['black'] },
|
|
{ type: 'blazer', weight: 2, colours: ['black', 'navy', 'grey'] },
|
|
{ type: 'bomber', weight: 2, colours: ['black', 'green', 'navy'], canLogo: true, canVintage: true },
|
|
{ type: 'hoodie', weight: 2, colours: ['black', 'grey', 'red'], canLogo: true },
|
|
{ type: 'leather', weight: 1, colours: ['black', 'brown'], canVintage: true },
|
|
{ type: 'puffer', weight: 1, colours: ['black', 'orange', 'purple'], canLogo: true },
|
|
],
|
|
hair: [
|
|
{ type: 'short', weight: 5, colours: ['black', 'brown', 'yellow', 'grey'] },
|
|
{ type: 'long', weight: 3, colours: ['black', 'brown', 'yellow', 'red'] },
|
|
{ type: 'bun', weight: 2, colours: ['black', 'brown', 'yellow'] },
|
|
{ type: 'mullet', weight: 2, colours: ['brown', 'yellow', 'black'], canVintage: true },
|
|
{ type: 'shaved', weight: 2, colours: ['black', 'brown'] },
|
|
{ type: 'dyed', weight: 1, colours: ['pink', 'green', 'purple', 'blue'] },
|
|
],
|
|
accessory: [
|
|
{ type: 'none', weight: 6, colours: ['black'] },
|
|
{ type: 'bucketHat', weight: 2, colours: ['cream', 'black', 'green'], canLogo: true, canVintage: true },
|
|
{ type: 'cap', weight: 2, colours: ['black', 'red', 'navy'], canLogo: true },
|
|
{ type: 'sunnies', weight: 2, colours: ['black'] }, // sunglasses. at night. a tell in itself
|
|
{ type: 'bumbag', weight: 1, colours: ['black', 'purple', 'yellow'], canLogo: true, canVintage: true },
|
|
{ type: 'chain', weight: 1, colours: ['yellow', 'grey'] },
|
|
],
|
|
};
|