{"version":3,"sources":["icon-world.mjs"],"sourcesContent":["// AN ICON IS ITS THING AS THE WORLD DRAWS IT (the owner, Oct 22: \"all textures in the inventory slots should mimic their\n// real world counterparts in isometric form. If an item is larger than 1x1 kube on world, it should be fit into the\n// inventory slot by reducing its size\"; and asked what that means: \"Their world model, shrunk to fit — a 2-wide crate, a\n// 2-high locker or door, a grown seedling: rendered exactly as in the world, isometric, scaled down so the whole thing fits\n// the slot. Moving parts shown shut.\").\n//\n// Pure: no THREE, no canvas. This file says WHAT an item's icon is made of, in the very terms the world draws it in, and\n// app.js (drawWorldIcon) turns that into meshes under the kube icons' own camera and lamp:\n//   * a list of PARTS, each a box in kube units with a MATERIAL (what it wears) and a UV rule (how it wears it), built from\n//     the world's own builders: storage-motion.mjs's shut boards and recessed body, doors.mjs's door pieces and rung frame,\n//     the display case's bars as system-view.js lays them, flora.mjs's micro-cubes, seedlings.mjs's stage-0 plan;\n//   * the ISOMETRIC FIT: the kube icons' camera stands on the (1,1,1) diagonal (app.js KUBE_ICON_DIR), so a point projects\n//     to (p . R, p . U) with R and U the camera's right and up; the parts' corners are projected and the whole model is\n//     scaled so its outline fits the slot's hexagon exactly as a kube's does, never drawn bigger than a kube would be (a\n//     thing of one kube or less is at its true size beside a kube; a bigger one is shrunk until all of it fits);\n//   * the BUFFERS: every part's six faces as positions, normals and UVs, grouped by material, for one mesh a material.\n//\n// THE ICON FRAME is the world's for a piece standing on a +Y cell facing f = 0 (doors.mjs doorAxes, cabinet-doors.mjs\n// cabinetFrame): X across its front, Y up, Z out of its front, its base cell [0, 1]^3. The camera sees the front (+Z) as the\n// left face, the right end (+X) as the right face, and the top: a kube's own view.\n\nimport { doorKindOf, doorMaterialOf, isRungName, rungMaterialOf, doorPieces, boxToGrid, doorAxes, rungFrame, rungSeatOffsets, GLASS_PANE } from './doors.mjs';\nimport { RUNG_STAPLE } from './door-looks.mjs';\nimport { motionKindOf, motionShutBoards, motionBodyBox, MOTION_RECESS } from './storage-motion.mjs';\nimport { isDisplayCaseName } from './storage-machines.mjs';\nimport { isTallBase, upperOf } from './vessel-life.mjs';\nimport { hasMachineIcon } from './machine-icons.mjs';\nimport { floraIcon, FLORA_ITEMS, FLORA_CUBE, FLORA_INSET } from './flora.mjs';\nimport { isSeedlingName, seedlingPlan, boxesAt } from './seedlings.mjs';\nimport { organicMaterial } from './organics.mjs';\nimport { materialOf, itemHexOf, baseItemOf } from './item-ids.mjs';\nimport { toolIconModelOf } from './item-models.mjs';\nimport { tierColour } from './tool-tiers.mjs';\n\n// Bumped whenever what an icon shows changes, and carried in every cached picture's key (app.js), so a picture drawn the\n// old way is never served again.\nexport const WORLD_ICON_LOOK = 'w2';   // w2: one lamp and the ink for every icon (v6, Oct 23)\n\n// ---- THE CAMERA ---------------------------------------------------------------------------------------------------------\nconst S2 = Math.SQRT2, S6 = Math.sqrt(6);\nexport const ISO_RIGHT = Object.freeze([1 / S2, 0, -1 / S2]);\nexport const ISO_UP = Object.freeze([-1 / S6, 2 / S6, -1 / S6]);\n// A point's place on the slot, in the camera's frame (its NDC: the slot spans -1..1 both ways).\nexport const isoXY = (p) => [p[0] * ISO_RIGHT[0] + p[2] * ISO_RIGHT[2], p[0] * ISO_UP[0] + p[1] * ISO_UP[1] + p[2] * ISO_UP[2]];\n// How big a pointy-top hexagon, by its circumradius, has to be to hold (x, y) about its centre (app.js hexReach).\nexport const hexReach = (x, y) => Math.max(Math.abs(x), Math.abs(x) / 2 + Math.abs(y) * Math.sqrt(3) / 2) / (Math.sqrt(3) / 2);\nconst corners = (p) => { const o = []; for (const x of [p.min[0], p.max[0]]) for (const y of [p.min[1], p.max[1]]) for (const z of [p.min[2], p.max[2]]) o.push([x, y, z]); return o; };\n// THE FIT. `target`: the share of the slot (by the socket's circumradius, in slot widths: app.js ICON_IN_SOCKET x\n// SLOT_SOCKET_R) the outline may reach; `kubeScale`: the scale a kube is drawn at (app.js kubeFitScale), the most anything\n// is drawn at. Returns { s, centre (the model's box centre, in its own units), shift ([x, y] on the slot, in NDC at scale 1:\n// how far the outline's middle lies from the centre's projection), reach (at scale 1), box: { min, max } }.\nexport function fitIcon(parts, target, kubeScale) {\n  const lo = [Infinity, Infinity, Infinity], hi = [-Infinity, -Infinity, -Infinity];\n  for (const p of parts) for (let k = 0; k < 3; k++) { if (p.min[k] < lo[k]) lo[k] = p.min[k]; if (p.max[k] > hi[k]) hi[k] = p.max[k]; }\n  const centre = lo.map((v, k) => (v + hi[k]) / 2), pts = [];\n  for (const p of parts) for (const c of corners(p)) pts.push(isoXY([c[0] - centre[0], c[1] - centre[1], c[2] - centre[2]]));\n  let x0 = Infinity, x1 = -Infinity, y0 = Infinity, y1 = -Infinity;\n  for (const [x, y] of pts) { if (x < x0) x0 = x; if (x > x1) x1 = x; if (y < y0) y0 = y; if (y > y1) y1 = y; }\n  const cx = (x0 + x1) / 2, cy = (y0 + y1) / 2;\n  let reach = 0; for (const [x, y] of pts) reach = Math.max(reach, hexReach((x - cx) / 2, (y - cy) / 2));   // NDC spans the slot twice over\n  const s = reach > 0 ? Math.min(kubeScale, target / reach) : kubeScale;\n  return { s, centre, shift: [cx, cy], reach, box: { min: lo, max: hi } };\n}\n\n// ---- THE UV RULES -------------------------------------------------------------------------------------------------------\n// A face is named by its outward axis and sign: '+x', '-x', '+y', '-y', '+z', '-z'.\nexport const FACE_NAMES = Object.freeze(['+x', '-x', '+y', '-y', '+z', '-z']);\n// AN ATLAS FACE: [tile, U, V]: which of the atlas's `tiles` (side by side) the face wears, and the grid axes its picture's\n// columns (U, left to right) and rows (V, top to bottom) run along, each [axis, sign], measured across the part's `ref` box\n// (its cell, so a recessed body's side is cropped where it ends, as the world crops it by grid position: system-view.js\n// machineAtlasGLSL), else the part itself.\n// A PLACED MACHINE'S CELL, as the kube icons and the world lay its tiles (app.js machineLampGeo; machine-icons.mjs atlas: top |\n// front | side | bottom): the top's columns along -Z and rows along +X (the lattice's own top), the front on ±Z, the side on ±X.\nexport const MACHINE_CELL_FACES = Object.freeze({ '+y': [0, [2, -1], [0, 1]], '+z': [1, [0, 1], [1, -1]], '-z': [1, [0, -1], [1, -1]],\n  '+x': [2, [2, -1], [1, -1]], '-x': [2, [2, 1], [1, -1]], '-y': [3, [0, 1], [2, 1]] });\n// A BOARD (a cabinet's or a locker's door, a drawer front, a door's panel): its face tile (0) on its two big faces, the\n// faces across its thin axis N, the edge tile (1) on the rest, every face laid along U and V (system-view.js DOOR_FACE_GLSL).\nconst axisOf = (v) => { const k = v.findIndex((x) => x !== 0); return [k, v[k] > 0 ? 1 : -1]; };\nexport function boardFaces(U, V, N) {\n  const n = Array.isArray(N) ? axisOf(N)[0] : N, u = Array.isArray(U) && U.length === 3 ? axisOf(U) : U, v = Array.isArray(V) && V.length === 3 ? axisOf(V) : V, f = {};\n  for (const nm of FACE_NAMES) f[nm] = ['xyz'.indexOf(nm[1]) === n ? 0 : 1, u, v];\n  return f;\n}\n\n// ---- THE BUFFERS --------------------------------------------------------------------------------------------------------\n// A material's key: the parts that share one share a mesh (and a cached THREE material in app.js for that draw).\nexport function matKey(m) {\n  switch (m.k) {\n    case 'atlas': return 'atlas|' + m.name + '|' + (m.stKey || '');\n    case 'board': return 'board|' + m.name;\n    case 'dface': return 'dface|' + m.kind + '|' + m.mat;\n    case 'kube': return 'kube|' + m.name + '|' + (m.hex || '') + (m.glass ? '|g' : '');\n    case 'life': return 'life|' + (m.fam || '') + '|' + m.hex + (m.glow ? '|1' : '');\n    case 'glass': return 'glass|' + m.hex + '|' + m.opacity;\n    default: return 'flat|' + (m.hex || '#888888') + (m.glow ? '|1' : '');\n  }\n}\n// Every part's six faces, grouped by material: Map key → { mat, pos, nor, uv, idx } (plain arrays). Counter-clockwise seen\n// from outside. UVs per the part's rule: 'grid' (the world's gridUv: a kube's worth of texture to a cell, by position),\n// 'box' (each face 0..1, as a THREE.BoxGeometry: the display case's bars), or an atlas ({ tiles, faces, ref }).\nexport function partBuffers(parts) {\n  const out = new Map();\n  for (const p of parts) {\n    const key = matKey(p.mat);\n    let g = out.get(key); if (!g) out.set(key, (g = { mat: p.mat, pos: [], nor: [], uv: [], idx: [] }));\n    const ref = (p.uv && p.uv.ref) || p;\n    for (let a = 0; a < 3; a++) for (const sg of [1, -1]) {\n      const b = (a + 1) % 3, c = (a + 2) % 3, nm = (sg > 0 ? '+' : '-') + 'xyz'[a];\n      const q = [[0, 0], [1, 0], [1, 1], [0, 1]].map(([i, j]) => { const v = [0, 0, 0]; v[a] = sg > 0 ? p.max[a] : p.min[a]; v[b] = i ? p.max[b] : p.min[b]; v[c] = j ? p.max[c] : p.min[c]; return v; });\n      if (sg < 0) q.reverse();\n      const base = g.pos.length / 3, nrm = [0, 0, 0]; nrm[a] = sg;\n      for (const v of q) {\n        g.pos.push(v[0], v[1], v[2]); g.nor.push(nrm[0], nrm[1], nrm[2]);\n        g.uv.push(...uvOf(p.uv, nm, v, ref, a));\n      }\n      g.idx.push(base, base + 1, base + 2, base, base + 2, base + 3);\n    }\n  }\n  return out;\n}\nconst span01 = (v, axis, ref) => { const [k, s] = axis, e = ref.max[k] - ref.min[k] || 1; return Math.max(0, Math.min(1, s > 0 ? (v[k] - ref.min[k]) / e : (ref.max[k] - v[k]) / e)); };\nfunction uvOf(rule, nm, v, ref, a) {\n  if (!rule || rule === 'grid' || rule.m === 'grid') { const b = (a + 1) % 3, c = (a + 2) % 3; return [v[b], v[c]]; }\n  if (rule === 'box' || rule.m === 'box') { const b = (a + 1) % 3, c = (a + 2) % 3; return [span01(v, [b, 1], ref), span01(v, [c, 1], ref)]; }\n  const f = rule.faces[nm] || rule.def || [0, [0, 1], [1, -1]], T = rule.tiles || 1;\n  const s = Math.max(0.004, Math.min(0.996, span01(v, f[1], ref))), t = Math.max(0.004, Math.min(0.996, span01(v, f[2], ref)));\n  return [(f[0] + s) / T, 1 - t];   // a canvas's rows run down; a texture's v up (flipY)\n}\n\n// ---- WHAT EACH ICON IS ---------------------------------------------------------------------------------------------------\nconst UP = Object.freeze({ a: 1, s: 1 }), FACE = 0;            // a +Y cell, facing +Z (doorAxes: f 0 is +tA, tA = z)\nconst cellBox = (x, y, z) => ({ min: [x, y, z], max: [x + 1, y + 1, z + 1] });\nconst FLORA_BY_NAME = new Map(FLORA_ITEMS.map((f) => [f.name, f]));\n// Which way an item's icon is drawn from its world model, or null for one drawn as before (a kube, a bit, a one-kube\n// machine on the lattice, a thermos, a gas or a liquid: those already are their world look).\nexport function worldIconKind(name) {\n  if (typeof name !== 'string' || !name) return null;\n  if (toolIconModelOf(baseItemOf(name))) return 'tool';          // a tool with a model (item-models.mjs TOOL_ICON_MODELS)\n  if (isSeedlingName(name)) return 'seedling';\n  if (FLORA_BY_NAME.has(name)) return 'flora';\n  if (doorKindOf(name)) return 'door';\n  if (isRungName(name)) return 'rung';\n  if (motionKindOf(name)) return 'storage';\n  if (isDisplayCaseName(name)) return 'display';\n  if (isTallBase(name) && hasMachineIcon(name) && hasMachineIcon(upperOf(name))) return 'tall';\n  return null;\n}\n// Its parts (see the header), or null.\n// `tier`: a tool's (tool-tiers.mjs), whose powered parts take its tier's colour; 1 for anything else.\nexport function worldIconParts(name, tier = 1) {\n  switch (worldIconKind(name)) {\n    case 'storage': return storageParts(name);\n    case 'tall': return tallParts(name);\n    case 'display': return displayParts(name);\n    case 'door': return doorParts(name);\n    case 'rung': return rungParts(name);\n    case 'flora': return floraParts(name);\n    case 'seedling': return seedlingParts(name);\n    case 'tool': { const P = toolIconModelOf(baseItemOf(name))(name, { hex: itemHexOf(name) || null, material: materialOf(name) || null, tier, tierHex: tierColour(tier) }); return Array.isArray(P) && P.length ? P : null; }\n    default: return null;\n  }\n}\n// Which lamp exposure the icon takes (app.js addIconLamp): a machine's painted atlas as a machine's, the rest as a kube's.\nexport const worldIconExposure = (name) => (['storage', 'tall'].includes(worldIconKind(name)) ? 'machine' : 'kube');\n\n// THE CABINET, THE LOCKER AND THE CARGO CRATE (cabinet-doors.mjs, storage-motion.mjs): the body as the world draws it (each\n// cell's machine atlas in its world state, its front recessed by MOTION_RECESS: system-view.js MACH_RECESS_V) and the shut\n// boards in the outermost sixteenth (motionShutBoards), wearing their own faces (machine-icons.mjs cabinetDoorCanvas).\nexport const STORAGE_IDLE = Object.freeze({ powered: false, mode: 'idle', fill: 0, dark: false });\nexport function storageCells(kind) {\n  if (kind === 'locker') return [{ at: [0, 0, 0], part: 'B' }, { at: [0, 1, 0], part: 'U' }];\n  if (kind === 'crate') return [{ at: [0, 0, 0], half: 'L' }, { at: [1, 0, 0], half: 'R' }];\n  return [{ at: [0, 0, 0] }];\n}\nfunction storageParts(name) {\n  const kind = motionKindOf(name), out = [];\n  for (const c of storageCells(kind)) {\n    const ref = cellBox(...c.at), body = { min: ref.min.slice(), max: ref.max.slice() };\n    body.max[2] -= MOTION_RECESS;                                // the front, in by the boards' thickness\n    let st, stKey, faces = MACHINE_CELL_FACES;\n    if (kind === 'crate') {                                      // each half its half of one picture (machine-icons.mjs wideFront)\n      st = { ...STORAGE_IDLE, gaugeColour: 'N', half: c.half, frontSeam: 'b', topSeam: 0, swap: false }; stKey = c.half;\n      const d = c.half === 'L' ? 1 : -1;                         // the picture's outer edge at the half's outer end, its seam in the middle\n      faces = { ...MACHINE_CELL_FACES, '+y': [0, [0, d], [2, 1]], '+z': [1, [0, d], [1, -1]], '-z': [1, [0, -d], [1, -1]] };\n    } else if (kind === 'locker') { st = { ...STORAGE_IDLE, part: c.part, swap: false, world: true }; stKey = c.part + 'w'; }\n    else { st = { ...STORAGE_IDLE, world: true }; stKey = 'w'; }\n    out.push({ min: body.min, max: body.max, mat: { k: 'atlas', name, st, stKey }, uv: { m: 'atlas', tiles: 4, faces, ref } });\n  }\n  for (const bd of motionShutBoards(kind, UP, FACE)) out.push({ min: bd.min, max: bd.max, mat: { k: 'board', name }, uv: { m: 'atlas', tiles: 2, faces: boardFaces(bd.U, bd.V, bd.N), ref: bd } });\n  return out;\n}\n// A TALL MACHINE (the Suit Dock: vessel-life.mjs TALL): its base and its upper half, each a cell wearing its own atlas.\nfunction tallParts(name) {\n  return [[name, 0], [upperOf(name), 1]].map(([nm, y]) => ({ ...cellBox(0, y, 0), mat: { k: 'atlas', name: nm, st: STORAGE_IDLE, stKey: '' }, uv: { m: 'atlas', tiles: 4, faces: MACHINE_CELL_FACES } }));\n}\n// THE DISPLAY CASE, STANDING (system-view.js displayLayerBuild): a frame of its material round the whole cell's glass, on a\n// plinth, the twelve bars DISPLAY_BAR thick; nothing in it (a case in a bag shows nothing).\nexport const DISPLAY_BAR = 0.07;                                 // system-view.js DISP_BAR\nfunction displayParts(name) {\n  const mat = { k: 'kube', name: materialOf(name) || name, hex: itemHexOf(name) || null }, t = DISPLAY_BAR, out = [];\n  const box = (m, uv, x0, y0, z0, x1, y1, z1) => out.push({ min: [x0, y0, z0], max: [x1, y1, z1], mat: m, uv });\n  for (const [a0, a1] of [[0, t], [1 - t, 1]]) for (const [b0, b1] of [[0, t], [1 - t, 1]]) box(mat, 'box', a0, b0, 0, a1, b1, 1);   // the four edges along z\n  for (const [b0, b1] of [[0, t], [1 - t, 1]]) for (const [c0, c1] of [[0, t], [1 - t, 1]]) box(mat, 'box', 0, b0, c0, 1, b1, c1);   // …along x\n  for (const [a0, a1] of [[0, t], [1 - t, 1]]) for (const [c0, c1] of [[0, t], [1 - t, 1]]) box(mat, 'box', a0, 0, c0, a1, 1, c1);   // …along y\n  box(mat, 'box', 0, 0, 0, 1, 0.1, 1);                                                                   // its floor, the plinth\n  box({ k: 'glass', hex: '#cfeaf2', opacity: 0.18 }, 'box', 0.01, 0.01, 0.01, 0.99, 0.99, 0.99);        // the glass\n  return out;\n}\n// A DOOR, SHUT (doors.mjs doorPieces at t 0, laid into the grid by boxToGrid as system-view.js doorLayerBuild lays them): its\n// panels in their face atlas (door-looks.mjs doorFaceAtlas), its frames, panes and knobs in the bits' own materials. A tall\n// door is all of its two kubes; a double door is its one leaf; a shutter its one section, its housing on top.\nfunction doorParts(name) {\n  const kind = doorKindOf(name), mat = doorMaterialOf(name) || 'Drift Wood', ax = doorAxes(UP, FACE), flat = kind === 'hatch';\n  const unit = (axis, sg = 1) => [axis, sg];\n  const U = flat ? unit(ax.nrm) : unit(ax.lat), V = flat ? unit(ax.lat) : unit(ax.up, ax.upS), N = flat ? ax.up : ax.nrm;\n  const ctx = kind === 'double' ? { away: 1 } : kind === 'shutter' ? { row: 0, rows: 1, top: true } : {};\n  return doorPieces(kind, 0, ctx).map((pc) => {\n    const g = boxToGrid(ax, pc.b);\n    if (pc.part === 'panel' || pc.part === 'slat') return { min: g.min, max: g.max, mat: { k: 'dface', kind, mat }, uv: { m: 'atlas', tiles: 2, faces: boardFaces(U, V, N), ref: boxToGrid(ax, pc.uv) } };\n    return { min: g.min, max: g.max, mat: pc.part === 'glass' ? { k: 'kube', name: GLASS_PANE, glass: true } : { k: 'kube', name: pc.part === 'knob' ? 'Gold' : mat }, uv: 'grid' };\n  });\n}\n// RUNGS (door-looks.mjs RUNG_STAPLE, laid as system-view.js doorLayerBuild lays them): a staple standing off a wall at its\n// middle height, in its metal. The wall is the world's, so the icon shows the staple alone.\nfunction rungParts(name) {\n  const fr = rungFrame(rungSeatOffsets(2, 1, UP, 0.5), UP), mat = { k: 'kube', name: rungMaterialOf(name) || 'Steel' };\n  const out = (d) => (fr.wallAt === 0 ? d : 1 - d);\n  return RUNG_STAPLE.map(([l0, l1, h0, h1, d0, d1]) => {\n    const mn = [0, 0, 0], mx = [0, 0, 0];\n    mn[fr.lat] = l0; mx[fr.lat] = l1;\n    mn[fr.up] = fr.upS > 0 ? fr.h + h0 : 1 - fr.h - h1; mx[fr.up] = fr.upS > 0 ? fr.h + h1 : 1 - fr.h - h0;\n    const a = out(d0), c = out(d1); mn[fr.nrm] = Math.min(a, c); mx[fr.nrm] = Math.max(a, c);\n    return { min: mn, max: mx, mat, uv: 'grid' };\n  });\n}\n// A FLORA (flora.mjs floraIcon): its micro-cubes, FLORA_CUBE across and FLORA_INSET in from its cell's sides, as the world\n// stands them, each in its family's texture (lifeTexture) under its own colour; what glows is light.\nfunction floraParts(name) {\n  const fl = FLORA_BY_NAME.get(name);\n  return floraIcon(fl.id).map(([x, y, z, hex, glow, fam]) => ({\n    min: [FLORA_INSET + x * FLORA_CUBE, y * FLORA_CUBE, FLORA_INSET + z * FLORA_CUBE],\n    max: [FLORA_INSET + (x + 1) * FLORA_CUBE, (y + 1) * FLORA_CUBE, FLORA_INSET + (z + 1) * FLORA_CUBE],\n    mat: { k: 'life', fam: glow ? '' : (fam || ''), hex, glow: glow ? 1 : 0 }, uv: 'grid' }));\n}\n// A SEEDLING AS IT IS PLANTED (seedlings.mjs): its tree's plan at minute 0, the small seedling standing in its kube (within\n// 80% of its width and 90% of its height), each bit in its material's colour and its family's texture (system-view.js\n// seedDrawMesh). Planted on a +Y cell of a world big enough for a full-sized tree (sizeKOf 1), at one fixed spot.\nexport const SEEDLING_ICON_AT = Object.freeze({ addr: 'kubipedia.seedling', cell: Object.freeze([0, 48, 0]), R: 48 });\nfunction seedlingParts(name) {\n  const A = SEEDLING_ICON_AT, P = seedlingPlan(name, A.addr, A.cell[0], A.cell[1], A.cell[2], A.R);\n  if (!P) return null;\n  return boxesAt(P, 0).map((q) => {\n    const m = organicMaterial(q.bit.name.replace(/ Bit$/, '')) || { hex: '#228B22', family: 'leaf' };\n    return { min: q.c.map((v) => v - q.h), max: q.c.map((v) => v + q.h), mat: { k: 'life', fam: m.family || 'leaf', hex: m.hex, glow: 0 }, uv: 'grid' };\n  });\n}\n// The textures an icon's parts wait on, so a caller can bake them ahead: { kubes: [names], lives: [families] }.\nexport function worldIconTextures(parts) {\n  const kubes = new Set(), lives = new Set();\n  for (const p of parts || []) { if (p.mat.k === 'kube') kubes.add(p.mat.name); else if (p.mat.k === 'life' && p.mat.fam && !p.mat.glow) lives.add(p.mat.fam); }\n  return { kubes: [...kubes], lives: [...lives] };\n}\n"],"mappings":"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","names":[],"file":"icon-world.mjs"}