Build image / build-and-push (push) Successful in 4s
Co-authored-by: Steve Dudenhoeffer <[email protected]>
35 lines
1.6 KiB
TypeScript
35 lines
1.6 KiB
TypeScript
import type { ObjectShapeKind } from './types'
|
|
|
|
// The seven placeable object kinds with their palette presentation and sensible
|
|
// default sizes (cm), per the #11 brief.
|
|
export interface KindDef {
|
|
kind: string
|
|
label: string
|
|
icon: string
|
|
shape: ObjectShapeKind
|
|
widthCm: number
|
|
heightCm: number
|
|
// Default z-index at placement. Paths/structures/in-ground sit under beds (0);
|
|
// beds and containers sit at 1; trees float above (2). Explicit z still wins.
|
|
defaultZ: number
|
|
}
|
|
|
|
export const OBJECT_KINDS: KindDef[] = [
|
|
{ kind: 'bed', label: 'Bed', icon: '▭', shape: 'rect', widthCm: 120, heightCm: 240, defaultZ: 1 },
|
|
{ kind: 'grow_bag', label: 'Grow bag', icon: '🛍️', shape: 'circle', widthCm: 40, heightCm: 40, defaultZ: 1 },
|
|
{ kind: 'container', label: 'Container', icon: '🪴', shape: 'circle', widthCm: 60, heightCm: 60, defaultZ: 1 },
|
|
{ kind: 'in_ground', label: 'In-ground', icon: '🟫', shape: 'rect', widthCm: 200, heightCm: 200, defaultZ: 0 },
|
|
{ kind: 'tree', label: 'Tree', icon: '🌳', shape: 'circle', widthCm: 300, heightCm: 300, defaultZ: 2 },
|
|
{ kind: 'path', label: 'Path', icon: '🧱', shape: 'rect', widthCm: 100, heightCm: 300, defaultZ: 0 },
|
|
{ kind: 'structure', label: 'Structure', icon: '🏠', shape: 'rect', widthCm: 200, heightCm: 200, defaultZ: 0 },
|
|
]
|
|
|
|
export function kindDef(kind: string): KindDef | undefined {
|
|
return OBJECT_KINDS.find((k) => k.kind === kind)
|
|
}
|
|
|
|
/** A human label for an object: its name, else its kind's label, else "Object". */
|
|
export function objectDisplayName(o: { name: string; kind: string }): string {
|
|
return o.name || kindDef(o.kind)?.label || 'Object'
|
|
}
|