{"version":3,"sources":["../src/render/ShadoEntity2D.ts","../src/render/ShadoTextureAtlas.ts","../src/render/wasm/shado-dynamic-entity-reducer-wasm-gz-b64.ts","../src/render/ShadoDynamicEntityReducers.ts","../src/render/ShadoDynamicEntityContainer.ts","../src/render/ShadoAsyncPicking.ts","../src/render/ShadoDynamicEntityRenderer.ts","../src/render/ShadoDynamicEntityNameplates.ts"],"names":["ShadoEntity2D","Shado","__decorateClass","field","gpuStruct","BABYLON","ShadoDynamicEntityDeltaRecord","ascField","ascRecord","ShadoDynamicEntityExpirationRecord","ShadoDynamicEntityContainer","moved","NameplateData","createMSDFNameplateLayer"],"mappings":"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","file":"chunk-ND7J6KN5.cjs","sourcesContent":["import { Shado } from '../core/Shado';\nimport { field, gpuStruct } from '../decorators';\n\nexport const SHADO_ENTITY_VISIBLE = 1 << 0;\nexport const SHADO_ENTITY_SELECTED = 1 << 1;\nexport const SHADO_ENTITY_HIGHLIGHTED = 1 << 2;\nexport const SHADO_ENTITY2D_MESH_INDEX_MOTION_COMPONENT = 3;\n\nexport type ShadoUvRect = readonly [number, number, number, number];\nexport type ShadoRgba = readonly [number, number, number, number];\n\nexport interface ShadoEntity2DInput {\n  id?: string;\n  x: number;\n  y: number;\n  z?: number;\n  width: number;\n  depth?: number;\n  height?: number;\n  rotationRad?: number;\n  rotationDeg?: number;\n  opacity?: number;\n  visible?: boolean;\n  selected?: boolean;\n  highlighted?: boolean;\n  textureLayer?: number;\n  uvRect?: ShadoUvRect;\n  color?: ShadoRgba;\n  sortKey?: number;\n  entityIdHash?: number;\n  transitionSpeed?: number;\n  meshIndex?: number;\n  meshTypeId?: number;\n}\n\nexport interface ShadoEntity2DDestinationInput {\n  x: number;\n  y: number;\n  z?: number;\n  width?: number;\n  depth?: number;\n  transition?: boolean;\n  transitionSpeed?: number;\n}\n\nexport function hashEntityId(id: string | undefined): number {\n  if (!id) return 0;\n  let h = 2166136261;\n  for (let i = 0; i < id.length; i++) {\n    h ^= id.charCodeAt(i);\n    h = Math.imul(h, 16777619);\n  }\n  return h >>> 0;\n}\n\nexport function entityFlags(input: ShadoEntity2DInput): number {\n  let flags = 0;\n  if (input.visible !== false) flags |= SHADO_ENTITY_VISIBLE;\n  if (input.selected) flags |= SHADO_ENTITY_SELECTED;\n  if (input.highlighted) flags |= SHADO_ENTITY_HIGHLIGHTED;\n  return flags;\n}\n\n@gpuStruct({ name: 'ShadoEntity2D', useWasm: false })\nexport class ShadoEntity2D extends Shado {\n  @field('vec4')\n  positionSize!: Float32Array;\n\n  @field('vec4')\n  render!: Float32Array;\n\n  @field('vec4')\n  destinationSize!: Float32Array;\n\n  @field('vec4')\n  motion!: Float32Array;\n\n  @field('vec4')\n  uvRect!: Float32Array;\n\n  @field('vec4')\n  color!: Float32Array;\n\n  @field('vec4')\n  renderState!: Float32Array;\n\n  public setFrom(input: ShadoEntity2DInput): this {\n    const rotation =\n      input.rotationRad ?? ((input.rotationDeg ?? 0) * Math.PI) / 180;\n    const flags = entityFlags(input);\n    const layer = input.textureLayer ?? 0;\n    const uv = input.uvRect ?? [0, 0, 1, 1];\n    const color = input.color ?? [1, 1, 1, 1];\n    const hash = input.entityIdHash ?? hashEntityId(input.id);\n\n    const positionSize = [\n      input.x,\n      input.y,\n      Math.max(0.0001, input.width),\n      Math.max(0.0001, input.depth ?? input.width),\n    ];\n    this.positionSize = positionSize as any;\n    this.destinationSize = positionSize as any;\n    this.motion = [\n      0,\n      input.transitionSpeed ?? 10,\n      0.002,\n      input.meshIndex ?? input.meshTypeId ?? 0,\n    ] as any;\n    this.render = [\n      input.z ?? 0,\n      Math.max(0.0001, input.height ?? 0.2),\n      rotation,\n      input.opacity ?? 1,\n    ] as any;\n    this.uvRect = uv as any;\n    this.color = color as any;\n    this.renderState = [layer, flags, hash, input.sortKey ?? input.y] as any;\n\n    return this;\n  }\n\n  public setDestination(input: ShadoEntity2DDestinationInput): this {\n    const width = Math.max(0.0001, input.width ?? this.positionSize[2]);\n    const depth = Math.max(0.0001, input.depth ?? this.positionSize[3]);\n    this.destinationSize = [input.x, input.y, width, depth] as any;\n    if (input.z !== undefined) this.render[0] = input.z;\n    this.renderState[1] = this.renderState[1] | SHADO_ENTITY_VISIBLE;\n    if (input.transition === false) {\n      this.positionSize = [input.x, input.y, width, depth] as any;\n      this.motion[0] = 0;\n      this.renderState[3] = input.y;\n      return this;\n    }\n\n    this.motion[0] = input.transition === undefined ? this.motion[0] : 1;\n    this.motion[1] = input.transitionSpeed ?? this.motion[1] ?? 10;\n    this.renderState[3] = input.y;\n    return this;\n  }\n\n  public get isVisible(): boolean {\n    return ((this.renderState[1] | 0) & SHADO_ENTITY_VISIBLE) !== 0;\n  }\n\n  public setVisible(visible: boolean): void {\n    const flags = this.renderState[1] | 0;\n    this.renderState[1] = visible\n      ? flags | SHADO_ENTITY_VISIBLE\n      : flags & ~SHADO_ENTITY_VISIBLE;\n  }\n}\n","import { BABYLON, type RawTexture2DArray, type Scene } from '../babylon';\n\nexport type ShadoAtlasRect = { u0: number; v0: number; u1: number; v1: number };\nexport type ShadoAtlasEntry = { layer: number; rect: ShadoAtlasRect };\n\nexport interface ShadoTextureAtlas {\n  texture: RawTexture2DArray;\n  entries: Record<string, ShadoAtlasEntry>;\n  get(key: string): ShadoAtlasEntry;\n  dispose(): void;\n}\n\nexport type ShadoAtlasColor = readonly [number, number, number, number];\n\nexport function createSolidColorAtlas(\n  scene: Scene,\n  colors: Record<string, ShadoAtlasColor>,\n  size = 4\n): ShadoTextureAtlas {\n  const keys = Object.keys(colors);\n  if (!keys.length) {\n    throw new Error('createSolidColorAtlas requires at least one color');\n  }\n\n  const layers = keys.length;\n  const bytesPerLayer = size * size * 4;\n  const data = new Uint8Array(bytesPerLayer * layers);\n  const entries: Record<string, ShadoAtlasEntry> = {};\n\n  for (let layer = 0; layer < layers; layer++) {\n    const key = keys[layer];\n    const [r, g, b, a] = colors[key];\n    const rgba = [\n      Math.max(0, Math.min(255, Math.round(r * 255))),\n      Math.max(0, Math.min(255, Math.round(g * 255))),\n      Math.max(0, Math.min(255, Math.round(b * 255))),\n      Math.max(0, Math.min(255, Math.round(a * 255))),\n    ];\n    const off = layer * bytesPerLayer;\n    for (let px = 0; px < size * size; px++) {\n      data[off + px * 4 + 0] = rgba[0];\n      data[off + px * 4 + 1] = rgba[1];\n      data[off + px * 4 + 2] = rgba[2];\n      data[off + px * 4 + 3] = rgba[3];\n    }\n    entries[key] = { layer, rect: { u0: 0, v0: 0, u1: 1, v1: 1 } };\n  }\n\n  const texture = new BABYLON.RawTexture2DArray(\n    data,\n    size,\n    size,\n    layers,\n    BABYLON.Engine.TEXTUREFORMAT_RGBA,\n    scene,\n    false,\n    false,\n    BABYLON.Texture.NEAREST_SAMPLINGMODE,\n    BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE\n  );\n  texture.wrapU = BABYLON.Texture.CLAMP_ADDRESSMODE;\n  texture.wrapV = BABYLON.Texture.CLAMP_ADDRESSMODE;\n\n  return {\n    texture,\n    entries,\n    get(key: string): ShadoAtlasEntry {\n      return entries[key] ?? entries[keys[0]];\n    },\n    dispose(): void {\n      texture.dispose();\n    },\n  };\n}\n","// Generated by shado asc build.\nexport const SHADO_DYNAMIC_ENTITY_REDUCER_WASM_GZ_BASE64 = \"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\";\n","import { ascField, ascRecord } from '../asc/records';\nimport { SHADO_DYNAMIC_ENTITY_REDUCER_WASM_GZ_BASE64 } from './wasm/shado-dynamic-entity-reducer-wasm-gz-b64';\n\nexport const SHADO_DYNAMIC_ENTITY_REDUCER_MAGIC = 0x44524453;\nexport const SHADO_DYNAMIC_ENTITY_REDUCER_VERSION = 1;\nexport const SHADO_DYNAMIC_ENTITY_DELTA_HEADER_BYTES = 16;\nexport const SHADO_DYNAMIC_ENTITY_DELTA_RECORD_BYTES = 48;\nexport const SHADO_DYNAMIC_ENTITY_EXPIRATION_RECORD_BYTES = 24;\n\nexport const SHADO_DYNAMIC_ENTITY_VISIBLE = 1 << 0;\n\nexport const SHADO_DYNAMIC_ENTITY_EXPIRATION_BY_FRAME = 1 << 0;\nexport const SHADO_DYNAMIC_ENTITY_EXPIRATION_BY_SIMULATION_TIME = 1 << 1;\n\nexport const ShadoDynamicEntityReducerOp = {\n  SetDestination: 1,\n  DirectPlace: 2,\n  SetVisibility: 3,\n  SetExpiration: 4,\n  MarkActive: 5,\n} as const;\n\nexport type ShadoDynamicEntityReducerOp =\n  (typeof ShadoDynamicEntityReducerOp)[keyof typeof ShadoDynamicEntityReducerOp];\n\n@ascRecord({ name: 'ShadoDynamicEntityDeltaRecord', byteSize: SHADO_DYNAMIC_ENTITY_DELTA_RECORD_BYTES })\nexport class ShadoDynamicEntityDeltaRecord {\n  @ascField('u32')\n  op!: number;\n\n  @ascField('i32')\n  index!: number;\n\n  @ascField('vec4')\n  positionSize!: Float32Array;\n\n  @ascField('f32')\n  z!: number;\n\n  @ascField('f32')\n  speed!: number;\n\n  @ascField('u32')\n  flags!: number;\n\n  @ascField('i32')\n  removeAfterFrame!: number;\n\n  @ascField('f64')\n  removeAfterSimulationTime!: number;\n}\n\n@ascRecord({\n  name: 'ShadoDynamicEntityExpirationRecord',\n  byteSize: SHADO_DYNAMIC_ENTITY_EXPIRATION_RECORD_BYTES,\n})\nexport class ShadoDynamicEntityExpirationRecord {\n  @ascField('i32')\n  index!: number;\n\n  @ascField('i32')\n  removeAfterFrame!: number;\n\n  @ascField('i32')\n  flags!: number;\n\n  @ascField('i32')\n  padding!: number;\n\n  @ascField('f64')\n  removeAfterSimulationTime!: number;\n}\n\nexport const SHADO_ENTITY2D_REDUCER_LAYOUT = {\n  strideBytes: 112,\n  positionSizeOffset: 0,\n  renderOffset: 16,\n  destinationSizeOffset: 32,\n  motionOffset: 48,\n  uvRectOffset: 64,\n  colorOffset: 80,\n  renderStateOffset: 96,\n} as const;\n\nexport type ShadoDynamicEntityReducerDeltaRecord = {\n  op: ShadoDynamicEntityReducerOp;\n  index: number;\n  x?: number;\n  y?: number;\n  width?: number;\n  depth?: number;\n  z?: number;\n  speed?: number;\n  flags?: number;\n  removeAfterFrame?: number;\n  removeAfterSimulationTime?: number;\n};\n\nexport type ShadoDynamicEntityReducerInit = {\n  entityBasePtr: number;\n  entityCapacity: number;\n  entityStrideBytes?: number;\n  positionSizeOffset?: number;\n  renderOffset?: number;\n  destinationSizeOffset?: number;\n  motionOffset?: number;\n  renderStateOffset?: number;\n  activeIndexPtr?: number;\n  activeIndexCapacity?: number;\n  changedIndexPtr?: number;\n  changedIndexCapacity?: number;\n  expirationPtr?: number;\n  expirationCapacity?: number;\n  expirationStrideBytes?: number;\n};\n\nexport type ShadoDynamicEntityReducerOptions = {\n  wasmBytes?: BufferSource;\n  wasmModule?: WebAssembly.Module;\n  imports?: WebAssembly.Imports;\n};\n\nexport type ShadoDynamicEntityReducerExports = {\n  memory: WebAssembly.Memory;\n  alloc(byteLength: number): number;\n  resetAllocator(byteOffset?: number): void;\n  init(\n    entityBasePtr: number,\n    entityCapacity: number,\n    entityStrideBytes: number,\n    positionSizeOffset: number,\n    renderOffset: number,\n    destinationSizeOffset: number,\n    motionOffset: number,\n    renderStateOffset: number,\n    activeIndexPtr: number,\n    activeIndexCapacity: number,\n    changedIndexPtr: number,\n    changedIndexCapacity: number,\n    expirationPtr: number,\n    expirationCapacity: number,\n    expirationStrideBytes: number\n  ): void;\n  applyDelta(deltaPtr: number, deltaByteLength: number): number;\n  stepTransitions(nowMs: number, dtMs: number): number;\n  sweepExpired(frameId: number, simulationTime: number): number;\n  buildTimeline(recordPtr: number, recordByteLength: number): number;\n  scrubTimeline(anchorOffset: number, nextOffset: number): number;\n  getChangedIndexPtr(): number;\n  getChangedIndexCount(): number;\n  clearChanged(): void;\n  getActiveIndexPtr(): number;\n  getActiveIndexCount(): number;\n  setActiveIndexCount(count: number): void;\n  getExpirationPtr(): number;\n  getExpirationCount(): number;\n  setExpirationCount(count: number): void;\n};\n\nexport type ShadoDynamicEntityReducer = {\n  exports: ShadoDynamicEntityReducerExports;\n  memory: WebAssembly.Memory;\n  initArena(config: ShadoDynamicEntityReducerInit): ShadoDynamicEntityReducerResolvedInit;\n  alloc(byteLength: number): number;\n  writeDelta(\n    records: readonly ShadoDynamicEntityReducerDeltaRecord[],\n    ptr?: number\n  ): {\n    ptr: number;\n    byteLength: number;\n  };\n  applyDelta(records: readonly ShadoDynamicEntityReducerDeltaRecord[]): number;\n  changedIndices(): Int32Array;\n  clearChanged(): void;\n};\n\nexport type ShadoDynamicEntityReducerResolvedInit = Required<\n  Pick<\n    ShadoDynamicEntityReducerInit,\n    | 'entityBasePtr'\n    | 'entityCapacity'\n    | 'entityStrideBytes'\n    | 'positionSizeOffset'\n    | 'renderOffset'\n    | 'destinationSizeOffset'\n    | 'motionOffset'\n    | 'renderStateOffset'\n    | 'activeIndexPtr'\n    | 'activeIndexCapacity'\n    | 'changedIndexPtr'\n    | 'changedIndexCapacity'\n    | 'expirationPtr'\n    | 'expirationCapacity'\n    | 'expirationStrideBytes'\n  >\n>;\n\nlet defaultWasmBytesPromise: Promise<ArrayBuffer> | undefined;\nlet debugWasmBytesPromise: Promise<ArrayBuffer> | undefined;\n\nexport async function createShadoDynamicEntityReducer(\n  options: ShadoDynamicEntityReducerOptions = {}\n): Promise<ShadoDynamicEntityReducer> {\n  const imports = {\n    env: {\n      abort() {\n        throw new Error('Shado dynamic entity reducer aborted');\n      },\n    },\n    ...(options.imports ?? {}),\n  };\n  const instance = options.wasmModule\n    ? await WebAssembly.instantiate(options.wasmModule, imports)\n    : await WebAssembly.instantiate(\n        options.wasmBytes ?? (await defaultShadoDynamicEntityReducerWasmBytes()),\n        imports\n      );\n  const exports = assertReducerExports(\n    (instance instanceof WebAssembly.Instance ? instance : instance.instance).exports\n  );\n\n  return wrapShadoDynamicEntityReducerExports(exports);\n}\n\nexport function wrapShadoDynamicEntityReducerExports(\n  reducerExports: WebAssembly.Exports | ShadoDynamicEntityReducerExports\n): ShadoDynamicEntityReducer {\n  const exports = assertReducerExports(reducerExports as WebAssembly.Exports);\n  const reducer: ShadoDynamicEntityReducer = {\n    exports,\n    memory: exports.memory,\n    initArena(config) {\n      const resolved = resolveInitConfig(exports, config);\n      exports.init(\n        resolved.entityBasePtr,\n        resolved.entityCapacity,\n        resolved.entityStrideBytes,\n        resolved.positionSizeOffset,\n        resolved.renderOffset,\n        resolved.destinationSizeOffset,\n        resolved.motionOffset,\n        resolved.renderStateOffset,\n        resolved.activeIndexPtr,\n        resolved.activeIndexCapacity,\n        resolved.changedIndexPtr,\n        resolved.changedIndexCapacity,\n        resolved.expirationPtr,\n        resolved.expirationCapacity,\n        resolved.expirationStrideBytes\n      );\n      return resolved;\n    },\n    alloc(byteLength) {\n      return exports.alloc(byteLength | 0);\n    },\n    writeDelta(records, ptr) {\n      const bytes = encodeShadoDynamicEntityReducerDelta(records);\n      const outPtr = ptr ?? exports.alloc(bytes.byteLength);\n      new Uint8Array(exports.memory.buffer, outPtr, bytes.byteLength).set(bytes);\n      return { ptr: outPtr, byteLength: bytes.byteLength };\n    },\n    applyDelta(records) {\n      const delta = reducer.writeDelta(records);\n      return exports.applyDelta(delta.ptr, delta.byteLength);\n    },\n    changedIndices() {\n      const count = exports.getChangedIndexCount();\n      if (count <= 0) return new Int32Array();\n      const ptr = exports.getChangedIndexPtr();\n      return new Int32Array(exports.memory.buffer, ptr, count).slice();\n    },\n    clearChanged() {\n      exports.clearChanged();\n    },\n  };\n\n  return reducer;\n}\n\nexport async function defaultShadoDynamicEntityReducerWasmBytes(): Promise<ArrayBuffer> {\n  defaultWasmBytesPromise ??= maybeGunzipReducerBytes(\n    decodeBase64Bytes(SHADO_DYNAMIC_ENTITY_REDUCER_WASM_GZ_BASE64)\n  );\n  return defaultWasmBytesPromise;\n}\n\nexport async function defaultShadoDynamicEntityReducerDebugWasmBytes(): Promise<ArrayBuffer> {\n  debugWasmBytesPromise ??= import('./wasm/shado-dynamic-entity-reducer-debug-wasm-gz-b64').then(\n    mod =>\n      maybeGunzipReducerBytes(\n        decodeBase64Bytes(mod.SHADO_DYNAMIC_ENTITY_REDUCER_DEBUG_WASM_GZ_BASE64)\n      )\n  );\n  return debugWasmBytesPromise;\n}\n\nexport function encodeShadoDynamicEntityReducerDelta(\n  records: readonly ShadoDynamicEntityReducerDeltaRecord[]\n): Uint8Array {\n  const bytes = new Uint8Array(\n    SHADO_DYNAMIC_ENTITY_DELTA_HEADER_BYTES +\n      records.length * SHADO_DYNAMIC_ENTITY_DELTA_RECORD_BYTES\n  );\n  const view = new DataView(bytes.buffer);\n  view.setUint32(0, SHADO_DYNAMIC_ENTITY_REDUCER_MAGIC, true);\n  view.setUint32(4, SHADO_DYNAMIC_ENTITY_REDUCER_VERSION, true);\n  view.setInt32(8, records.length, true);\n\n  for (let i = 0; i < records.length; i++) {\n    const record = records[i];\n    const offset =\n      SHADO_DYNAMIC_ENTITY_DELTA_HEADER_BYTES + i * SHADO_DYNAMIC_ENTITY_DELTA_RECORD_BYTES;\n    view.setUint32(offset, record.op, true);\n    view.setInt32(offset + 4, record.index, true);\n    view.setFloat32(offset + 8, record.x ?? 0, true);\n    view.setFloat32(offset + 12, record.y ?? 0, true);\n    view.setFloat32(offset + 16, record.width ?? 0.0001, true);\n    view.setFloat32(offset + 20, record.depth ?? record.width ?? 0.0001, true);\n    view.setFloat32(offset + 24, record.z ?? 0, true);\n    view.setFloat32(offset + 28, record.speed ?? 10, true);\n    view.setUint32(offset + 32, record.flags ?? SHADO_DYNAMIC_ENTITY_VISIBLE, true);\n    view.setInt32(offset + 36, record.removeAfterFrame ?? 0, true);\n    view.setFloat64(offset + 40, record.removeAfterSimulationTime ?? 0, true);\n  }\n\n  return bytes;\n}\n\nfunction resolveInitConfig(\n  exports: ShadoDynamicEntityReducerExports,\n  config: ShadoDynamicEntityReducerInit\n): ShadoDynamicEntityReducerResolvedInit {\n  const entityCapacity = Math.max(0, config.entityCapacity | 0);\n  const activeIndexCapacity = Math.max(1, config.activeIndexCapacity ?? entityCapacity);\n  const changedIndexCapacity = Math.max(1, config.changedIndexCapacity ?? entityCapacity * 2);\n  const expirationCapacity = Math.max(1, config.expirationCapacity ?? entityCapacity);\n  return {\n    entityBasePtr: config.entityBasePtr,\n    entityCapacity,\n    entityStrideBytes: config.entityStrideBytes ?? SHADO_ENTITY2D_REDUCER_LAYOUT.strideBytes,\n    positionSizeOffset:\n      config.positionSizeOffset ?? SHADO_ENTITY2D_REDUCER_LAYOUT.positionSizeOffset,\n    renderOffset: config.renderOffset ?? SHADO_ENTITY2D_REDUCER_LAYOUT.renderOffset,\n    destinationSizeOffset:\n      config.destinationSizeOffset ?? SHADO_ENTITY2D_REDUCER_LAYOUT.destinationSizeOffset,\n    motionOffset: config.motionOffset ?? SHADO_ENTITY2D_REDUCER_LAYOUT.motionOffset,\n    renderStateOffset: config.renderStateOffset ?? SHADO_ENTITY2D_REDUCER_LAYOUT.renderStateOffset,\n    activeIndexPtr: config.activeIndexPtr ?? exports.alloc(activeIndexCapacity * 4),\n    activeIndexCapacity,\n    changedIndexPtr: config.changedIndexPtr ?? exports.alloc(changedIndexCapacity * 4),\n    changedIndexCapacity,\n    expirationPtr:\n      config.expirationPtr ??\n      exports.alloc(expirationCapacity * SHADO_DYNAMIC_ENTITY_EXPIRATION_RECORD_BYTES),\n    expirationCapacity,\n    expirationStrideBytes:\n      config.expirationStrideBytes ?? SHADO_DYNAMIC_ENTITY_EXPIRATION_RECORD_BYTES,\n  };\n}\n\nfunction assertReducerExports(exports: WebAssembly.Exports): ShadoDynamicEntityReducerExports {\n  const candidate = exports as unknown as ShadoDynamicEntityReducerExports;\n  const required: Array<keyof ShadoDynamicEntityReducerExports> = [\n    'memory',\n    'alloc',\n    'init',\n    'applyDelta',\n    'stepTransitions',\n    'sweepExpired',\n    'buildTimeline',\n    'scrubTimeline',\n    'getChangedIndexPtr',\n    'getChangedIndexCount',\n    'clearChanged',\n  ];\n  for (const key of required) {\n    if (candidate[key] == null) {\n      throw new Error(`Shado dynamic entity reducer missing export '${key}'`);\n    }\n  }\n  return candidate;\n}\n\nasync function maybeGunzipReducerBytes(bytes: Uint8Array): Promise<ArrayBuffer> {\n  if (bytes[0] === 0x00 && bytes[1] === 0x61 && bytes[2] === 0x73 && bytes[3] === 0x6d) {\n    return copyBytes(bytes);\n  }\n  if (typeof DecompressionStream === 'undefined') {\n    throw new Error('This runtime cannot decompress the embedded Shado reducer gzip payload');\n  }\n  const stream = new Blob([copyBytes(bytes)]).stream().pipeThrough(new DecompressionStream('gzip'));\n  return new Response(stream).arrayBuffer();\n}\n\nfunction copyBytes(bytes: Uint8Array): ArrayBuffer {\n  const copy = new Uint8Array(bytes.byteLength);\n  copy.set(bytes);\n  return copy.buffer;\n}\n\nfunction decodeBase64Bytes(value: string): Uint8Array {\n  if (typeof globalThis.atob === 'function') {\n    const binary = globalThis.atob(value);\n    const bytes = new Uint8Array(binary.length);\n    for (let i = 0; i < binary.length; i++) {\n      bytes[i] = binary.charCodeAt(i);\n    }\n    return bytes;\n  }\n  const bufferCtor = (globalThis as unknown as { Buffer?: typeof Buffer }).Buffer;\n  if (bufferCtor) {\n    return new Uint8Array(bufferCtor.from(value, 'base64'));\n  }\n  throw new Error('No base64 decoder is available for the Shado dynamic entity reducer');\n}\n","import { BABYLON } from '../babylon';\nimport { Shado } from '../core/Shado';\nimport { field, gpuStruct, type PendingField } from '../decorators';\nimport type { InitializeConfig } from '../types';\nimport {\n  defaultShadoDynamicEntityReducerWasmBytes,\n  SHADO_DYNAMIC_ENTITY_DELTA_HEADER_BYTES,\n  SHADO_DYNAMIC_ENTITY_DELTA_RECORD_BYTES,\n  SHADO_DYNAMIC_ENTITY_EXPIRATION_BY_FRAME,\n  SHADO_DYNAMIC_ENTITY_EXPIRATION_BY_SIMULATION_TIME,\n  SHADO_DYNAMIC_ENTITY_VISIBLE,\n  SHADO_ENTITY2D_REDUCER_LAYOUT,\n  ShadoDynamicEntityReducerOp,\n  wrapShadoDynamicEntityReducerExports,\n  type ShadoDynamicEntityReducer,\n  type ShadoDynamicEntityReducerDeltaRecord,\n} from './ShadoDynamicEntityReducers';\nimport {\n  hashEntityId,\n  SHADO_ENTITY2D_MESH_INDEX_MOTION_COMPONENT,\n  SHADO_ENTITY_VISIBLE,\n  ShadoEntity2D,\n  type ShadoEntity2DDestinationInput,\n  type ShadoEntity2DInput,\n} from './ShadoEntity2D';\nimport type { ShadoTextureAtlas } from './ShadoTextureAtlas';\n\nexport interface ShadoDynamicEntityInput\n  extends Omit<ShadoEntity2DInput, 'textureLayer' | 'uvRect'> {\n  id: string;\n  textureKey?: string;\n}\n\nexport interface ShadoDynamicEntityDestinationInput extends ShadoEntity2DDestinationInput {\n  id: string;\n}\n\nexport interface ShadoDynamicEntityExpirationInput {\n  id: string;\n  removeAfterFrame?: number;\n  removeAfterSimulationTime?: number;\n}\n\nexport type ShadoDynamicEntityGeometryMode = 'box' | 'plane' | 'spriteSlab' | 'mesh';\n\ntype EntityRecord = {\n  id: string;\n  textureKey?: string;\n};\n\n@gpuStruct({ name: 'ShadoDynamicEntityContainer', useWasm: true })\nexport class ShadoDynamicEntityContainer extends Shado {\n  @field('f32')\n  drawCount!: number;\n\n  @field('f32')\n  entityCount!: number;\n\n  @field('f32')\n  flags!: number;\n\n  @field('f32')\n  padding0!: number;\n\n  @field({ arrayOf: 'f32' })\n  drawIds!: Float32Array;\n\n  private readonly records: EntityRecord[] = [];\n  private readonly indexById = new Map<string, number>();\n  private readonly movingIndices = new Set<number>();\n  private atlas?: ShadoTextureAtlas;\n  private geometryMode: ShadoDynamicEntityGeometryMode = 'box';\n  private billboard = false;\n  private reducer?: ShadoDynamicEntityReducer;\n  private reducerArenaSignature = '';\n  private deltaScratchPtr = 0;\n  private deltaScratchByteCapacity = 0;\n\n  public static override async initialize(\n    engine: any,\n    config: InitializeConfig = {}\n  ): Promise<boolean> {\n    const { additionalFields: configuredAdditionalFields = [], wasm, ...rest } = config;\n    const additionalFields: PendingField[] = [\n      ...configuredAdditionalFields,\n      { name: 'entities', type: { arrayOf: { structOf: ShadoEntity2D } } },\n    ];\n    const resolvedWasm =\n      wasm === undefined\n        ? {\n            mode: 'precompiled' as const,\n            module: await defaultShadoDynamicEntityReducerWasmBytes(),\n          }\n        : wasm;\n    delete (this as any).__cachedSchema;\n    return super.initialize(engine, {\n      backend: 'datatex',\n      ...rest,\n      wasm: resolvedWasm,\n      additionalFields,\n    });\n  }\n\n  public constructor(engine: any, atlas?: ShadoTextureAtlas) {\n    super(engine);\n    this.atlas = atlas;\n    this.drawCount = 0;\n    this.entityCount = 0;\n    this.flags = 0;\n  }\n\n  public setAtlas(atlas: ShadoTextureAtlas): void {\n    this.atlas = atlas;\n  }\n\n  public configureRenderMode(options: {\n    geometry?: ShadoDynamicEntityGeometryMode;\n    billboard?: boolean;\n  }): void {\n    this.geometryMode = options.geometry ?? this.geometryMode;\n    this.billboard = options.billboard ?? this.billboard;\n  }\n\n  public getShaderNamesForRenderMode(\n    options: {\n      geometry?: ShadoDynamicEntityGeometryMode;\n      billboard?: boolean;\n    } = {},\n    rewrite: boolean = true\n  ): { vertex: string; fragment: string } {\n    const geometry = options.geometry ?? this.geometryMode;\n    const billboard = options.billboard ?? this.billboard;\n    const idBase = `${(this as any)._includeName ?? 'ShadoDynamicEntityContainer'}${\n      (this as any)._instanceId ?? 0\n    }_${geometry}_${billboard ? 'billboard' : 'flat'}`;\n    const vKey = `${idBase}VertexShader`;\n    const fKey = `${idBase}FragmentShader`;\n    const effect = BABYLON.Effect as any;\n    if (rewrite || !effect.ShadersStore[vKey] || !effect.ShadersStore[fKey]) {\n      const { vs, fs } = this.generateGLSLPairForRenderMode(geometry, billboard);\n      effect.ShadersStore[vKey] = vs;\n      effect.ShadersStore[fKey] = fs;\n    }\n    return { vertex: idBase, fragment: idBase };\n  }\n\n  public reserve(count: number): void {\n    this.reserveStructArray('entities', count);\n  }\n\n  public clearEntities(): void {\n    this.records.length = 0;\n    this.indexById.clear();\n    this.movingIndices.clear();\n    this.clearStructArray('entities');\n    this.syncDrawList();\n  }\n\n  public upsert(input: ShadoDynamicEntityInput): number {\n    const current = this.indexById.get(input.id);\n    if (current !== undefined) {\n      this.setEntity(current, input);\n      return current;\n    }\n    return this.add(input);\n  }\n\n  public upsertMany(inputs: readonly ShadoDynamicEntityInput[], syncDrawList = true): void {\n    this.reserve(this.records.length + inputs.length);\n    for (const input of inputs) this.upsert(input);\n    if (syncDrawList) this.syncDrawList();\n  }\n\n  public add(input: ShadoDynamicEntityInput): number {\n    const existing = this.indexById.get(input.id);\n    if (existing !== undefined) {\n      this.setEntity(existing, input);\n      return existing;\n    }\n\n    const index = this.records.length;\n    const entity = this.addStructToArray<ShadoEntity2D>('entities');\n    this.records.push({ id: input.id, textureKey: input.textureKey });\n    this.indexById.set(input.id, index);\n    this.movingIndices.delete(index);\n    this.writeEntity(entity, input);\n    this.entityCount = this.records.length;\n    return index;\n  }\n\n  public remove(id: string): boolean {\n    const index = this.indexById.get(id);\n    if (index === undefined) return false;\n\n    const last = this.records.length - 1;\n    const moved = last !== index ? this.records[last] : undefined;\n    const movedWasMoving = last !== index && this.movingIndices.delete(last);\n    this.movingIndices.delete(index);\n    this.removeStructFromArray('entities', index, 'swap');\n    this.records[index] = this.records[last];\n    this.records.length = last;\n    this.indexById.delete(id);\n    if (moved) {\n      this.indexById.set(moved.id, index);\n      if (movedWasMoving) this.movingIndices.add(index);\n    }\n    this.entityCount = this.records.length;\n    return true;\n  }\n\n  public setEntity(index: number, input: ShadoDynamicEntityInput): void {\n    const entity = this.getEntity(index);\n    if (!entity) throw new RangeError(`No entity at index ${index}`);\n    const previous = this.records[index];\n    const textureKey = input.textureKey ?? previous.textureKey;\n    if (previous.id !== input.id) {\n      this.indexById.delete(previous.id);\n      this.indexById.set(input.id, index);\n    }\n    this.records[index] = { id: input.id, textureKey };\n    this.movingIndices.delete(index);\n    this.writeEntity(entity, { ...input, textureKey });\n  }\n\n  public setEntityDestination(input: ShadoDynamicEntityDestinationInput): boolean {\n    const index = this.indexById.get(input.id);\n    if (index === undefined) return false;\n    const entity = this.getEntity(index);\n    if (!entity) return false;\n    const width = Math.max(0.0001, input.width ?? entity.positionSize[2]);\n    const depth = Math.max(0.0001, input.depth ?? entity.positionSize[3]);\n    const sameDestination =\n      Math.abs(entity.destinationSize[0] - input.x) <= 0.00001 &&\n      Math.abs(entity.destinationSize[1] - input.y) <= 0.00001 &&\n      Math.abs(entity.destinationSize[2] - width) <= 0.00001 &&\n      Math.abs(entity.destinationSize[3] - depth) <= 0.00001 &&\n      (input.z === undefined || Math.abs(entity.render[0] - input.z) <= 0.00001);\n    if (sameDestination && entity.motion[0] <= 0) {\n      return false;\n    }\n    const reducer = this.ensureSharedReducer();\n    if (reducer) {\n      const changed =\n        this.applySharedReducerDelta([this.destinationRecord(index, input, entity)]) > 0;\n      if (changed) this.movingIndices.add(index);\n      return changed;\n    }\n    entity.setDestination(input);\n    if (entity.motion[0] > 0) this.movingIndices.add(index);\n    else this.movingIndices.delete(index);\n    return true;\n  }\n\n  public setEntityDestinations(inputs: readonly ShadoDynamicEntityDestinationInput[]): number {\n    let updated = 0;\n    for (const input of inputs) {\n      if (this.setEntityDestination(input)) updated++;\n    }\n    return updated;\n  }\n\n  public setEntityMeshIndex(id: string, meshIndex: number): boolean {\n    const index = this.indexById.get(id);\n    if (index === undefined) return false;\n    const entity = this.getEntity(index);\n    if (!entity) return false;\n    const nextMeshIndex = Number.isFinite(meshIndex) ? meshIndex : 0;\n    if (Math.abs(entity.motion[SHADO_ENTITY2D_MESH_INDEX_MOTION_COMPONENT] - nextMeshIndex) <= 0.00001) {\n      return false;\n    }\n    entity.motion[SHADO_ENTITY2D_MESH_INDEX_MOTION_COMPONENT] = nextMeshIndex;\n    this.markArenaDirty();\n    return true;\n  }\n\n  public setEntityMeshIndices(\n    meshIndexById: ReadonlyMap<string, number>,\n    defaultMeshIndex = 0\n  ): number {\n    let updated = 0;\n    for (const record of this.records) {\n      const meshIndex = meshIndexById.get(record.id) ?? defaultMeshIndex;\n      if (this.setEntityMeshIndex(record.id, meshIndex)) {\n        updated++;\n      }\n    }\n    return updated;\n  }\n\n  public applyReducerDeltaBytes(deltaBytes: Uint8Array): number {\n    if (!(deltaBytes instanceof Uint8Array) || deltaBytes.byteLength <= 0) return 0;\n    const reducer = this.ensureSharedReducer();\n    if (!reducer) return 0;\n    if (!this.deltaScratchPtr || deltaBytes.byteLength > this.deltaScratchByteCapacity) {\n      this.deltaScratchPtr = reducer.alloc(deltaBytes.byteLength);\n      this.deltaScratchByteCapacity = deltaBytes.byteLength;\n    }\n    new Uint8Array(reducer.memory.buffer, this.deltaScratchPtr, deltaBytes.byteLength).set(deltaBytes);\n    const applied = reducer.exports.applyDelta(this.deltaScratchPtr, deltaBytes.byteLength);\n    this.getWasmArenaBasePtr();\n    if (applied > 0) this.markArenaDirty();\n    return applied;\n  }\n\n  public tickTransitions(deltaSeconds: number): number {\n    const reducer = this.ensureSharedReducer();\n    if (reducer) {\n      reducer.clearChanged();\n      const moved = reducer.exports.stepTransitions(0, Math.max(0, deltaSeconds) * 1000);\n      if (moved) this.markArenaDirty();\n      return moved;\n    }\n\n    const dt = Math.max(0, deltaSeconds);\n    if (!dt || !this.movingIndices.size) return 0;\n\n    let moved = 0;\n    for (const i of this.movingIndices) {\n      const entity = this.getEntity(i);\n      if (!entity || entity.motion[0] <= 0) {\n        this.movingIndices.delete(i);\n        continue;\n      }\n\n      const speed = Math.max(0.001, entity.motion[1] || 10);\n      const epsilon = Math.max(0.00001, entity.motion[2] || 0.002);\n      const alpha = 1 - Math.exp(-speed * dt);\n      let remaining = 0;\n\n      for (let lane = 0; lane < 4; lane++) {\n        const current = entity.positionSize[lane];\n        const target = entity.destinationSize[lane];\n        const next = current + (target - current) * alpha;\n        entity.positionSize[lane] = next;\n        remaining = Math.max(remaining, Math.abs(target - next));\n      }\n\n      if (remaining <= epsilon) {\n        entity.positionSize[0] = entity.destinationSize[0];\n        entity.positionSize[1] = entity.destinationSize[1];\n        entity.positionSize[2] = entity.destinationSize[2];\n        entity.positionSize[3] = entity.destinationSize[3];\n        entity.motion[0] = 0;\n        this.movingIndices.delete(i);\n      }\n      moved++;\n    }\n\n    if (moved) this.arena.markDirty?.();\n    return moved;\n  }\n\n  public setEntityExpiration(input: ShadoDynamicEntityExpirationInput): boolean {\n    const index = this.indexById.get(input.id);\n    if (index === undefined) return false;\n    let flags = 0;\n    if (Number.isFinite(input.removeAfterFrame)) {\n      flags |= SHADO_DYNAMIC_ENTITY_EXPIRATION_BY_FRAME;\n    }\n    if (Number.isFinite(input.removeAfterSimulationTime)) {\n      flags |= SHADO_DYNAMIC_ENTITY_EXPIRATION_BY_SIMULATION_TIME;\n    }\n    if (!flags) return false;\n    return (\n      this.applySharedReducerDelta([\n        {\n          op: ShadoDynamicEntityReducerOp.SetExpiration,\n          index,\n          flags,\n          removeAfterFrame: input.removeAfterFrame,\n          removeAfterSimulationTime: input.removeAfterSimulationTime,\n        },\n      ]) > 0\n    );\n  }\n\n  public setEntityExpirations(inputs: readonly ShadoDynamicEntityExpirationInput[]): number {\n    const records: ShadoDynamicEntityReducerDeltaRecord[] = [];\n    for (const input of inputs) {\n      const index = this.indexById.get(input.id);\n      if (index === undefined) continue;\n      let flags = 0;\n      if (Number.isFinite(input.removeAfterFrame)) {\n        flags |= SHADO_DYNAMIC_ENTITY_EXPIRATION_BY_FRAME;\n      }\n      if (Number.isFinite(input.removeAfterSimulationTime)) {\n        flags |= SHADO_DYNAMIC_ENTITY_EXPIRATION_BY_SIMULATION_TIME;\n      }\n      if (!flags) continue;\n      records.push({\n        op: ShadoDynamicEntityReducerOp.SetExpiration,\n        index,\n        flags,\n        removeAfterFrame: input.removeAfterFrame,\n        removeAfterSimulationTime: input.removeAfterSimulationTime,\n      });\n    }\n    return this.applySharedReducerDelta(records);\n  }\n\n  public sweepExpired(frameId: number, simulationTime: number): number {\n    const reducer = this.ensureSharedReducer();\n    if (!reducer) return 0;\n    reducer.clearChanged();\n    const swept = reducer.exports.sweepExpired(frameId | 0, simulationTime);\n    if (swept) {\n      this.markArenaDirty();\n      this.syncDrawList({ sort: true });\n    }\n    return swept;\n  }\n\n  public getEntity(index: number): ShadoEntity2D | undefined {\n    return (this as any)._structArraySlots?.entities?.[index] as ShadoEntity2D | undefined;\n  }\n\n  public getEntityIndex(id: string): number | undefined {\n    return this.indexById.get(id);\n  }\n\n  public get ids(): readonly string[] {\n    return this.records.map(r => r.id);\n  }\n\n  public syncDrawList(options: { sort?: boolean } = {}): void {\n    const drawIds: number[] = [];\n    for (let i = 0; i < this.records.length; i++) {\n      const entity = this.getEntity(i);\n      if (!entity) continue;\n      if (((entity.renderState[1] | 0) & SHADO_ENTITY_VISIBLE) === 0) continue;\n      drawIds.push(i);\n    }\n\n    if (options.sort) {\n      drawIds.sort((a, b) => {\n        const ea = this.getEntity(a);\n        const eb = this.getEntity(b);\n        return (ea?.renderState[3] ?? 0) - (eb?.renderState[3] ?? 0);\n      });\n    }\n\n    this.setVarArray('drawIds', drawIds);\n    this.drawCount = drawIds.length;\n    this.entityCount = this.records.length;\n  }\n\n  private writeEntity(entity: ShadoEntity2D, input: ShadoDynamicEntityInput): void {\n    const atlasEntry = this.atlas?.get(input.textureKey ?? 'default');\n    entity.setFrom({\n      ...input,\n      textureLayer: atlasEntry?.layer ?? 0,\n      uvRect: atlasEntry\n        ? [atlasEntry.rect.u0, atlasEntry.rect.v0, atlasEntry.rect.u1, atlasEntry.rect.v1]\n        : [0, 0, 1, 1],\n      entityIdHash: hashEntityId(input.id),\n    });\n  }\n\n  private ensureSharedReducer(): ShadoDynamicEntityReducer | undefined {\n    if (!this.wasmModule?.exports || !this.wasmModule.memory) return undefined;\n    this.getWasmArenaBasePtr();\n    const entityBasePtr = this.getStructArrayPtr('entities');\n    const entityCapacity = this.records.length;\n    const entityStrideBytes = this.getStructArrayStrideBytes('entities');\n    if (!entityBasePtr || !entityStrideBytes) return undefined;\n\n    this.reducer ??= wrapShadoDynamicEntityReducerExports(this.wasmModule.exports);\n    const signature = [\n      entityBasePtr,\n      entityCapacity,\n      entityStrideBytes,\n      this.getStructArrayCapacity('entities'),\n    ].join(':');\n    if (signature === this.reducerArenaSignature) {\n      return this.reducer;\n    }\n\n    this.reducer.initArena({\n      entityBasePtr,\n      entityCapacity,\n      entityStrideBytes,\n      positionSizeOffset: SHADO_ENTITY2D_REDUCER_LAYOUT.positionSizeOffset,\n      renderOffset: SHADO_ENTITY2D_REDUCER_LAYOUT.renderOffset,\n      destinationSizeOffset: SHADO_ENTITY2D_REDUCER_LAYOUT.destinationSizeOffset,\n      motionOffset: SHADO_ENTITY2D_REDUCER_LAYOUT.motionOffset,\n      renderStateOffset: SHADO_ENTITY2D_REDUCER_LAYOUT.renderStateOffset,\n      activeIndexCapacity: Math.max(1, entityCapacity),\n      changedIndexCapacity: Math.max(1, entityCapacity * 4),\n      expirationCapacity: Math.max(1, entityCapacity),\n    });\n    this.getWasmArenaBasePtr();\n    this.reducerArenaSignature = signature;\n    if (this.movingIndices.size) {\n      const records: ShadoDynamicEntityReducerDeltaRecord[] = [];\n      for (const index of this.movingIndices) {\n        if (index >= 0 && index < entityCapacity) {\n          records.push({ op: ShadoDynamicEntityReducerOp.MarkActive, index });\n        }\n      }\n      if (records.length) this.reducer.applyDelta(records);\n      this.getWasmArenaBasePtr();\n      this.reducer.clearChanged();\n    }\n    return this.reducer;\n  }\n\n  private applySharedReducerDelta(\n    records: readonly ShadoDynamicEntityReducerDeltaRecord[]\n  ): number {\n    if (!records.length) return 0;\n    const reducer = this.ensureSharedReducer();\n    if (!reducer) return 0;\n    const encoded = this.encodeSharedReducerDelta(reducer, records);\n    const applied = reducer.exports.applyDelta(encoded.ptr, encoded.byteLength);\n    this.getWasmArenaBasePtr();\n    if (applied > 0) this.markArenaDirty();\n    return applied;\n  }\n\n  private encodeSharedReducerDelta(\n    reducer: ShadoDynamicEntityReducer,\n    records: readonly ShadoDynamicEntityReducerDeltaRecord[]\n  ): { ptr: number; byteLength: number } {\n    const byteLength =\n      SHADO_DYNAMIC_ENTITY_DELTA_HEADER_BYTES +\n      records.length * SHADO_DYNAMIC_ENTITY_DELTA_RECORD_BYTES;\n    if (!this.deltaScratchPtr || byteLength > this.deltaScratchByteCapacity) {\n      this.deltaScratchPtr = reducer.alloc(byteLength);\n      this.deltaScratchByteCapacity = byteLength;\n    }\n    return reducer.writeDelta(records, this.deltaScratchPtr);\n  }\n\n  private destinationRecord(\n    index: number,\n    input: ShadoDynamicEntityDestinationInput,\n    entity: ShadoEntity2D\n  ): ShadoDynamicEntityReducerDeltaRecord {\n    const width = Math.max(0.0001, input.width ?? entity.positionSize[2]);\n    const depth = Math.max(0.0001, input.depth ?? entity.positionSize[3]);\n    return {\n      op:\n        input.transition === false\n          ? ShadoDynamicEntityReducerOp.DirectPlace\n          : ShadoDynamicEntityReducerOp.SetDestination,\n      index,\n      x: input.x,\n      y: input.y,\n      width,\n      depth,\n      z: input.z ?? entity.render[0],\n      speed: input.transitionSpeed ?? entity.motion[1] ?? 10,\n      flags: entity.renderState[1] | 0 | SHADO_DYNAMIC_ENTITY_VISIBLE,\n    };\n  }\n\n  private generateGLSLPairForRenderMode(\n    geometryMode: ShadoDynamicEntityGeometryMode,\n    billboard: boolean\n  ): { vs: string; fs: string } {\n    const schema = this.getSchema();\n    const actor = schema.structArrays.entities.schema.name;\n    const container = schema.name;\n    const storageInclude = `${container}Storage`;\n    const offsetsInclude = `${actor}Offsets`;\n    const isPlane = geometryMode === 'plane';\n    const isMesh = geometryMode === 'mesh';\n    const isSpriteSlab = geometryMode === 'spriteSlab';\n    const isBillboard = isPlane && billboard;\n    const viewUniform = isBillboard ? 'uniform mat4 view;\\n' : '';\n    const uvBlock = isMesh\n      ? `\n  vUV = uv;\n  vSpriteSlabSurface = 1.0;\n`\n      : isPlane\n      ? `\n  vUV = vec2(\n    mix(entity.uvRect.x, entity.uvRect.z, uv.x),\n    mix(entity.uvRect.y, entity.uvRect.w, 1.0 - uv.y)\n  );\n  vSpriteSlabSurface = 1.0;\n`\n      : `\n  vUV = vec2(\n    mix(entity.uvRect.x, entity.uvRect.z, 1.0 - uv.y),\n    mix(entity.uvRect.y, entity.uvRect.w, 1.0 - uv.x)\n  );\n  vSpriteSlabSurface = ${isSpriteSlab ? 'position.y > 0.49 ? 1.0 : (position.y < -0.49 ? -1.0 : 0.0)' : '1.0'};\n`;\n    const worldPositionBlock = isBillboard\n      ? `\n  vec3 center = vec3(positionSize.x, render.x + (positionSize.w * 0.5), positionSize.y);\n  vec3 cameraRight = vec3(view[0][0], view[1][0], view[2][0]);\n  vec3 cameraUp = vec3(view[0][1], view[1][1], view[2][1]);\n  vec3 worldPosition = center\n    + cameraRight * (position.x * positionSize.z)\n    + cameraUp * (position.y * positionSize.w);\n`\n      : isPlane\n        ? `\n  float c = cos(render.z);\n  float s = sin(render.z);\n  vec2 localPlane = vec2(position.x * positionSize.z, position.y * positionSize.w);\n  vec2 rotatedXZ = vec2(localPlane.x * c - localPlane.y * s, localPlane.x * s + localPlane.y * c);\n  vec3 worldPosition = vec3(\n    positionSize.x + rotatedXZ.x,\n    render.x + 0.01,\n    positionSize.y + rotatedXZ.y\n  );\n`\n        : `\n  vec3 local = position;\n  local.x *= positionSize.z;\n  local.y *= render.y;\n  local.z *= positionSize.w;\n\n  float c = cos(render.z);\n  float s = sin(render.z);\n  vec2 rotatedXZ = vec2(local.x * c - local.z * s, local.x * s + local.z * c);\n  vec3 worldPosition = vec3(\n    positionSize.x + rotatedXZ.x,\n    render.x + local.y + render.y * 0.5,\n    positionSize.y + rotatedXZ.y\n  );\n`;\n\n    const vs = `\nprecision highp float;\nprecision highp int;\nattribute vec3 position;\nattribute vec2 uv;\nuniform mat4 worldViewProjection;\nuniform float uShadoEntityMeshIndex;\n${viewUniform}#define SHADO_DYNAMIC_ENTITY_${geometryMode.toUpperCase()} 1\n${isBillboard ? '#define SHADO_DYNAMIC_ENTITY_BILLBOARD 1\\n' : ''}\n#include<${actor}>\n#include<${offsetsInclude}>\n#include<${storageInclude}>\nvarying vec2 vUV;\nvarying vec4 vColor;\nvarying float vLayer;\nvarying float vSpriteSlabSurface;\n\nvoid main(void) {\n  int drawIndex = gl_InstanceID;\n  int entityIndex = int(${container}_drawIds_get(drawIndex) + 0.5);\n  ${actor}Header entity = ${container}_entities_get(entityIndex);\n  if (abs(entity.motion.w - uShadoEntityMeshIndex) > 0.5) {\n    gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\n    vUV = vec2(0.0);\n    vColor = vec4(0.0);\n    vLayer = 0.0;\n    vSpriteSlabSurface = -1.0;\n    return;\n  }\n\n  vec4 positionSize = entity.positionSize;\n  vec4 render = entity.render;\n${worldPositionBlock}\n${uvBlock}\n  vColor = vec4(entity.color.rgb, entity.color.a * render.w);\n  vLayer = entity.renderState.x;\n  gl_Position = worldViewProjection * vec4(worldPosition, 1.0);\n}\n`;\n\n    const fs = `\nprecision highp float;\nprecision highp int;\nvarying vec2 vUV;\nvarying vec4 vColor;\nvarying float vLayer;\nvarying float vSpriteSlabSurface;\nuniform highp sampler2DArray uShadoEntityAtlas;\nuniform sampler2D uShadoEntityMeshTexture;\nuniform float uUseShadoEntityMeshTexture;\n\nvoid main(void) {\n  vec4 texel = uUseShadoEntityMeshTexture > 0.5\n    ? texture2D(uShadoEntityMeshTexture, vUV)\n    : texture(uShadoEntityAtlas, vec3(vUV, floor(vLayer + 0.5)));\n  vec4 slabSide = vec4(0.70, 0.74, 0.76, vColor.a);\n  vec4 outColor = vSpriteSlabSurface < -0.5\n    ? vec4(0.0)\n    : vSpriteSlabSurface < 0.5\n      ? slabSide\n      : texel * vColor;\n  if (outColor.a <= 0.001) discard;\n  gl_FragColor = outColor;\n}\n`;\n\n    return { vs, fs };\n  }\n\n  public override generateGLSLPair(): { vs: string; fs: string } {\n    return this.generateGLSLPairForRenderMode(this.geometryMode, this.billboard);\n  }\n}\n","import {\n  BABYLON,\n  type Camera,\n  type Mesh,\n  type Observer,\n  type PickingInfo,\n  type PointerInfo,\n  type Ray,\n  type Scene,\n  type Vector3,\n} from '../babylon';\nimport type { ShadoActor } from '../extensions/ShadoActor';\nimport type { ShadoInstanceContainer } from '../extensions/ShadoInstanceContainer/ShadoInstanceContainer';\nimport type { ShadoDynamicEntityContainer } from './ShadoDynamicEntityContainer';\nimport { SHADO_ENTITY_VISIBLE, type ShadoEntity2D } from './ShadoEntity2D';\n\nexport type ShadoPickingSchedule = 'microtask' | 'next-frame';\n\nexport interface ShadoAsyncPickingBaseOptions<TResult> {\n  enabled?: boolean;\n  button?: number;\n  camera?: Camera;\n  includeInvisible?: boolean;\n  schedule?: ShadoPickingSchedule;\n  pointerEventTypes?: number;\n  onPick?: (result: TResult, event: PointerEvent) => void | Promise<void>;\n  onMiss?: (event: PointerEvent) => void | Promise<void>;\n}\n\nexport interface ShadoInstancePickResult<T extends ShadoActor = ShadoActor> {\n  kind: 'instance';\n  engine: 'webgpu' | 'webgl';\n  source: 'cpu-ray';\n  index: number;\n  instance: T;\n  mesh: Mesh;\n  ray: Ray;\n  distance: number;\n  pickedPoint: Vector3;\n  pickingInfo: PickingInfo;\n}\n\nexport interface ShadoDynamicEntityPickResult {\n  kind: 'dynamic-entity';\n  engine: 'webgpu' | 'webgl';\n  source: 'cpu-ray';\n  id: string | undefined;\n  index: number;\n  entity: ShadoEntity2D;\n  mesh: Mesh;\n  ray: Ray;\n  distance: number;\n  pickedPoint: Vector3;\n  pickingInfo: PickingInfo;\n}\n\nexport interface ShadoInstanceAsyncPickingOptions<T extends ShadoActor = ShadoActor>\n  extends ShadoAsyncPickingBaseOptions<ShadoInstancePickResult<T>> {\n  radius?: number;\n  predicate?: (instance: T, index: number) => boolean;\n}\n\nexport interface ShadoDynamicEntityAsyncPickingOptions\n  extends ShadoAsyncPickingBaseOptions<ShadoDynamicEntityPickResult> {\n  padding?: number;\n  predicate?: (entity: ShadoEntity2D, index: number, id: string | undefined) => boolean;\n}\n\nexport type ShadoPickingHandle = {\n  dispose(): void;\n};\n\nexport function normalizePickingOptions<T extends ShadoAsyncPickingBaseOptions<any>>(\n  options: boolean | T | undefined\n): T | undefined {\n  if (!options) return undefined;\n  if (options === true) return { enabled: true } as T;\n  if (options.enabled === false) return undefined;\n  return options;\n}\n\nexport async function pickShadoInstanceAtPointer<T extends ShadoActor>(\n  scene: Scene,\n  mesh: Mesh,\n  container: ShadoInstanceContainer<T>,\n  pointerX: number,\n  pointerY: number,\n  options: ShadoInstanceAsyncPickingOptions<T> = {}\n): Promise<ShadoInstancePickResult<T> | null> {\n  await deferPick(options.schedule);\n  const ray = scene.createPickingRay(\n    pointerX,\n    pointerY,\n    BABYLON.Matrix.Identity(),\n    options.camera ?? scene.activeCamera\n  );\n  return pickShadoInstanceWithRay(mesh, container, ray, options);\n}\n\nexport function pickShadoInstanceWithRay<T extends ShadoActor>(\n  mesh: Mesh,\n  container: ShadoInstanceContainer<T>,\n  ray: Ray,\n  options: ShadoInstanceAsyncPickingOptions<T> = {}\n): ShadoInstancePickResult<T> | null {\n  const radius = Math.max(0.0001, options.radius ?? 1);\n  let best: ShadoInstancePickResult<T> | null = null;\n\n  const children = container.children as readonly T[];\n  for (let index = 0; index < children.length; index++) {\n    const instance = children[index];\n    if (!instance) continue;\n    const anyInstance = instance as any;\n    if (\n      !options.includeInvisible &&\n      anyInstance.visibleFlag !== undefined &&\n      !anyInstance.visibleFlag\n    ) {\n      continue;\n    }\n    if (options.predicate && !options.predicate(instance, index)) continue;\n\n    const translation = anyInstance.translation as Float32Array | undefined;\n    if (!translation) continue;\n    const scale = Number.isFinite(translation[3]) ? Math.max(0.0001, translation[3]) : 1;\n    const distance = intersectRaySphere(\n      ray,\n      translation[0] ?? 0,\n      translation[1] ?? 0,\n      translation[2] ?? 0,\n      radius * scale\n    );\n    if (distance === null || distance < 0 || distance > ray.length) continue;\n    if (best && distance >= best.distance) continue;\n\n    best = instancePickResult(mesh, ray, instance, index, distance);\n  }\n\n  return best;\n}\n\nexport async function pickShadoDynamicEntityAtPointer(\n  scene: Scene,\n  mesh: Mesh,\n  container: ShadoDynamicEntityContainer,\n  pointerX: number,\n  pointerY: number,\n  options: ShadoDynamicEntityAsyncPickingOptions = {}\n): Promise<ShadoDynamicEntityPickResult | null> {\n  await deferPick(options.schedule);\n  const ray = scene.createPickingRay(\n    pointerX,\n    pointerY,\n    BABYLON.Matrix.Identity(),\n    options.camera ?? scene.activeCamera\n  );\n  return pickShadoDynamicEntityWithRay(mesh, container, ray, options);\n}\n\nexport function pickShadoDynamicEntityWithRay(\n  mesh: Mesh,\n  container: ShadoDynamicEntityContainer,\n  ray: Ray,\n  options: ShadoDynamicEntityAsyncPickingOptions = {}\n): ShadoDynamicEntityPickResult | null {\n  let best: ShadoDynamicEntityPickResult | null = null;\n  const padding = Math.max(0, options.padding ?? 0);\n  const ids = container.ids;\n\n  for (let index = 0; index < ids.length; index++) {\n    const entity = container.getEntity(index);\n    if (!entity) continue;\n    if (!options.includeInvisible && ((entity.renderState[1] | 0) & SHADO_ENTITY_VISIBLE) === 0) {\n      continue;\n    }\n    const id = ids[index];\n    if (options.predicate && !options.predicate(entity, index, id)) continue;\n\n    const distance = intersectRayEntityBox(ray, entity, padding);\n    if (distance === null || distance < 0 || distance > ray.length) continue;\n    if (best && distance >= best.distance) continue;\n\n    best = dynamicEntityPickResult(mesh, ray, entity, id, index, distance);\n  }\n\n  return best;\n}\n\nexport function installShadoInstanceClickPicking<T extends ShadoActor>(\n  scene: Scene,\n  mesh: Mesh,\n  container: ShadoInstanceContainer<T>,\n  options: ShadoInstanceAsyncPickingOptions<T>\n): ShadoPickingHandle {\n  return installPointerPicking(scene, options, async event => {\n    const result = await pickShadoInstanceAtPointer(\n      scene,\n      mesh,\n      container,\n      scene.pointerX,\n      scene.pointerY,\n      options\n    );\n    if (result) await options.onPick?.(result, event);\n    else await options.onMiss?.(event);\n  });\n}\n\nexport function installShadoDynamicEntityClickPicking(\n  scene: Scene,\n  mesh: Mesh,\n  container: ShadoDynamicEntityContainer,\n  options: ShadoDynamicEntityAsyncPickingOptions\n): ShadoPickingHandle {\n  return installPointerPicking(scene, options, async event => {\n    const result = await pickShadoDynamicEntityAtPointer(\n      scene,\n      mesh,\n      container,\n      scene.pointerX,\n      scene.pointerY,\n      options\n    );\n    if (result) await options.onPick?.(result, event);\n    else await options.onMiss?.(event);\n  });\n}\n\nfunction installPointerPicking<TResult>(\n  scene: Scene,\n  options: ShadoAsyncPickingBaseOptions<TResult>,\n  pick: (event: PointerEvent) => Promise<void>\n): ShadoPickingHandle {\n  const eventTypes = options.pointerEventTypes ?? BABYLON.PointerEventTypes.POINTERUP;\n  const button = options.button ?? 0;\n  let disposed = false;\n  const observer: Observer<PointerInfo> = scene.onPointerObservable.add(pointerInfo => {\n    const event = pointerInfo.event as PointerEvent;\n    if (disposed || !event || event.button !== button) return;\n    void pick(event);\n  }, eventTypes);\n  return {\n    dispose() {\n      disposed = true;\n      scene.onPointerObservable.remove(observer);\n    },\n  };\n}\n\nfunction instancePickResult<T extends ShadoActor>(\n  mesh: Mesh,\n  ray: Ray,\n  instance: T,\n  index: number,\n  distance: number\n): ShadoInstancePickResult<T> {\n  const pickedPoint = ray.origin.add(ray.direction.scale(distance));\n  const pickingInfo = makePickingInfo(mesh, ray, pickedPoint, distance);\n  return {\n    kind: 'instance',\n    engine: engineKind(mesh),\n    source: 'cpu-ray',\n    index,\n    instance,\n    mesh,\n    ray,\n    distance,\n    pickedPoint,\n    pickingInfo,\n  };\n}\n\nfunction dynamicEntityPickResult(\n  mesh: Mesh,\n  ray: Ray,\n  entity: ShadoEntity2D,\n  id: string | undefined,\n  index: number,\n  distance: number\n): ShadoDynamicEntityPickResult {\n  const pickedPoint = ray.origin.add(ray.direction.scale(distance));\n  const pickingInfo = makePickingInfo(mesh, ray, pickedPoint, distance);\n  return {\n    kind: 'dynamic-entity',\n    engine: engineKind(mesh),\n    source: 'cpu-ray',\n    id,\n    index,\n    entity,\n    mesh,\n    ray,\n    distance,\n    pickedPoint,\n    pickingInfo,\n  };\n}\n\nfunction makePickingInfo(\n  mesh: Mesh,\n  ray: Ray,\n  pickedPoint: Vector3,\n  distance: number\n): PickingInfo {\n  const pickingInfo = new BABYLON.PickingInfo();\n  pickingInfo.hit = true;\n  pickingInfo.distance = distance;\n  pickingInfo.pickedPoint = pickedPoint;\n  pickingInfo.pickedMesh = mesh;\n  pickingInfo.ray = ray;\n  return pickingInfo;\n}\n\nfunction engineKind(mesh: Mesh): 'webgpu' | 'webgl' {\n  return mesh.getScene().getEngine().isWebGPU ? 'webgpu' : 'webgl';\n}\n\nfunction intersectRaySphere(\n  ray: Ray,\n  x: number,\n  y: number,\n  z: number,\n  radius: number\n): number | null {\n  const ox = ray.origin.x - x;\n  const oy = ray.origin.y - y;\n  const oz = ray.origin.z - z;\n  const dx = ray.direction.x;\n  const dy = ray.direction.y;\n  const dz = ray.direction.z;\n  const b = ox * dx + oy * dy + oz * dz;\n  const c = ox * ox + oy * oy + oz * oz - radius * radius;\n  const disc = b * b - c;\n  if (disc < 0) return null;\n  const root = Math.sqrt(disc);\n  const near = -b - root;\n  if (near >= 0) return near;\n  const far = -b + root;\n  return far >= 0 ? far : null;\n}\n\nfunction intersectRayEntityBox(ray: Ray, entity: ShadoEntity2D, padding: number): number | null {\n  const baseHeight = Math.max(0.0001, entity.render[1]);\n  const width = Math.max(0.0001, entity.positionSize[2]) + padding * 2;\n  const depth = Math.max(0.0001, entity.positionSize[3]) + padding * 2;\n  const height = baseHeight + padding * 2;\n  const rotation = entity.render[2] ?? 0;\n  const cos = Math.cos(-rotation);\n  const sin = Math.sin(-rotation);\n\n  const cx = entity.positionSize[0];\n  const cy = (entity.render[0] ?? 0) + baseHeight * 0.5;\n  const cz = entity.positionSize[1];\n  const rox = ray.origin.x - cx;\n  const roy = ray.origin.y - cy;\n  const roz = ray.origin.z - cz;\n  const localOrigin = {\n    x: rox * cos - roz * sin,\n    y: roy,\n    z: rox * sin + roz * cos,\n  };\n  const localDirection = {\n    x: ray.direction.x * cos - ray.direction.z * sin,\n    y: ray.direction.y,\n    z: ray.direction.x * sin + ray.direction.z * cos,\n  };\n\n  return intersectRayAabb(localOrigin, localDirection, {\n    x: width * 0.5,\n    y: height * 0.5,\n    z: depth * 0.5,\n  });\n}\n\nfunction intersectRayAabb(\n  origin: { x: number; y: number; z: number },\n  direction: { x: number; y: number; z: number },\n  halfSize: { x: number; y: number; z: number }\n): number | null {\n  let tMin = 0;\n  let tMax = Number.POSITIVE_INFINITY;\n  const axes = ['x', 'y', 'z'] as const;\n\n  for (const axis of axes) {\n    const o = origin[axis];\n    const d = direction[axis];\n    const h = halfSize[axis];\n    if (Math.abs(d) < 1e-8) {\n      if (o < -h || o > h) return null;\n      continue;\n    }\n    const inv = 1 / d;\n    let t1 = (-h - o) * inv;\n    let t2 = (h - o) * inv;\n    if (t1 > t2) [t1, t2] = [t2, t1];\n    tMin = Math.max(tMin, t1);\n    tMax = Math.min(tMax, t2);\n    if (tMin > tMax) return null;\n  }\n\n  return tMin;\n}\n\nfunction deferPick(schedule: ShadoPickingSchedule | undefined): Promise<void> {\n  if (schedule !== 'next-frame' || typeof requestAnimationFrame === 'undefined') {\n    return Promise.resolve();\n  }\n  return new Promise(resolve => requestAnimationFrame(() => resolve()));\n}\n","import {\n  BABYLON,\n  type AbstractEngine,\n  type Effect,\n  type Mesh,\n  type Ray,\n  type Scene,\n  type ShaderMaterial,\n  type Texture,\n} from '../babylon';\nimport type { ShadoConcreteCtor } from '../types';\nimport {\n  ShadoDynamicEntityContainer,\n  type ShadoDynamicEntityGeometryMode,\n} from './ShadoDynamicEntityContainer';\nimport type { ShadoTextureAtlas } from './ShadoTextureAtlas';\nimport {\n  installShadoDynamicEntityClickPicking,\n  normalizePickingOptions,\n  pickShadoDynamicEntityAtPointer,\n  pickShadoDynamicEntityWithRay,\n  type ShadoDynamicEntityAsyncPickingOptions,\n  type ShadoDynamicEntityPickResult,\n  type ShadoPickingHandle,\n} from './ShadoAsyncPicking';\n\nexport interface ShadoDynamicEntityRendererOptions {\n  mesh?: Mesh;\n  geometry?: ShadoDynamicEntityGeometryMode;\n  billboard?: boolean;\n  log?: boolean;\n  sortDrawList?: boolean;\n  picking?: boolean | ShadoDynamicEntityAsyncPickingOptions;\n  meshIndex?: number;\n  meshTypeId?: number;\n  meshTexture?: Texture | null;\n}\n\nexport interface ShadoDynamicEntityMeshVariant {\n  meshIndex: number;\n  mesh: Mesh;\n  meshTexture?: Texture | null;\n  picking?: boolean | ShadoDynamicEntityAsyncPickingOptions;\n}\n\nexport interface ShadoDynamicEntityMeshVariantRendererOptions\n  extends Omit<\n    ShadoDynamicEntityRendererOptions,\n    'geometry' | 'mesh' | 'meshIndex' | 'meshTypeId' | 'meshTexture' | 'picking'\n  > {\n  variants: readonly ShadoDynamicEntityMeshVariant[];\n}\n\nexport class ShadoDynamicEntityRenderer {\n  public readonly mesh: Mesh;\n  public readonly material: ShaderMaterial;\n  private readonly scene: Scene;\n  private readonly engine: AbstractEngine;\n  private readonly originalRender: Mesh['render'];\n  private pickingHandle?: ShadoPickingHandle;\n  private loggedFirstDraw = false;\n\n  public constructor(\n    scene: Scene,\n    public readonly container: ShadoDynamicEntityContainer,\n    public readonly atlas: ShadoTextureAtlas,\n    options: ShadoDynamicEntityRendererOptions = {}\n  ) {\n    this.scene = scene;\n    this.engine = scene.getEngine();\n    this.container.setAtlas(atlas);\n    const geometry = options.geometry ?? 'box';\n    const billboard = options.billboard ?? geometry === 'plane';\n    const meshIndexInput = options.meshIndex ?? options.meshTypeId;\n    const meshIndex = Number.isFinite(meshIndexInput) ? Number(meshIndexInput) : 0;\n    const meshTexture = options.meshTexture ?? atlas.texture;\n    this.mesh =\n      options.mesh ??\n      (geometry === 'plane'\n        ? BABYLON.MeshBuilder.CreatePlane('shado-dynamic-entity-planes', { size: 1 }, scene)\n        : BABYLON.MeshBuilder.CreateBox('shado-dynamic-entities', { size: 1 }, scene));\n    this.mesh.alwaysSelectAsActiveMesh = true;\n\n    const shaderIo = (container.constructor as ShadoConcreteCtor).shaderIO(this.engine);\n    const shaderNames = container.getShaderNamesForRenderMode({ geometry, billboard });\n    const uniforms = [\n      'worldViewProjection',\n      'uShadoEntityMeshIndex',\n      'uUseShadoEntityMeshTexture',\n      ...shaderIo.uniforms,\n    ];\n    if (billboard) uniforms.push('view');\n\n    this.material = new BABYLON.ShaderMaterial('shadoDynamicEntityMaterial', scene, shaderNames, {\n      attributes: ['position', 'uv'],\n      uniforms,\n      samplers: ['uShadoEntityAtlas', 'uShadoEntityMeshTexture', ...shaderIo.samplers],\n      uniformBuffers: ['Scene'],\n      needAlphaBlending: true,\n      shaderLanguage: BABYLON.ShaderLanguage.GLSL,\n    });\n    this.material.backFaceCulling = geometry === 'box' || geometry === 'spriteSlab';\n    this.material.forceDepthWrite = geometry === 'box' || geometry === 'spriteSlab' || geometry === 'mesh';\n    this.material.alphaMode = BABYLON.Engine.ALPHA_COMBINE;\n    this.material.setTexture('uShadoEntityAtlas', atlas.texture);\n    this.material.setTexture('uShadoEntityMeshTexture', meshTexture);\n    this.material.setFloat('uShadoEntityMeshIndex', meshIndex);\n    this.material.setFloat('uUseShadoEntityMeshTexture', options.meshTexture ? 1 : 0);\n    this.mesh.material = this.material;\n\n    if (options.log) {\n      this.material.onCompiled = (effect: Effect) => {\n        // eslint-disable-next-line no-console\n        console.debug('[shado/render] material compiled', {\n          mesh: this.mesh.name,\n          uniforms: effect.getUniformNames?.(),\n          samplers: effect.getSamplers?.(),\n        });\n      };\n      this.material.onError = (_effect: Effect, errors: string) => {\n        // eslint-disable-next-line no-console\n        console.error('[shado/render] material error', errors);\n      };\n    }\n\n    this.originalRender = this.mesh.render.bind(this.mesh);\n    this.mesh.render = (subMesh: any, enableAlphaMode: boolean): any => {\n      this.container.commit();\n      this.container.bindMaterial(this.material);\n      this.material.setTexture('uShadoEntityAtlas', this.atlas.texture);\n      this.material.setTexture('uShadoEntityMeshTexture', meshTexture);\n      this.material.setFloat('uShadoEntityMeshIndex', meshIndex);\n      this.material.setFloat('uUseShadoEntityMeshTexture', options.meshTexture ? 1 : 0);\n\n      if (!this.material.isReadyForSubMesh(this.mesh, subMesh)) {\n        if (options.log) {\n          // eslint-disable-next-line no-console\n          console.debug('[shado/render] render skipped', {\n            reason: 'material not ready',\n            drawCount: this.container.drawCount,\n            entityCount: this.container.entityCount,\n          });\n        }\n        return this.mesh;\n      }\n\n      const drawCount = this.container.drawCount | 0;\n      if (drawCount <= 0) return this.mesh;\n\n      const effect = subMesh.effect ?? this.material.getEffect();\n      if (!effect?.isReady()) return this.mesh;\n\n      const drawWrapper = (this.material as any)._storeEffectOnSubMeshes\n        ? subMesh._drawWrapper\n        : (this.material as any)._getDrawWrapper();\n      if (!drawWrapper) return this.mesh;\n\n      if (enableAlphaMode && this.material.needAlphaBlending()) {\n        this.engine.setAlphaMode(this.material.alphaMode);\n      }\n\n      (this.material as any)._preBind(\n        drawWrapper,\n        (this.mesh as any)._internalMeshDataInfo?._effectiveSideOrientation\n      );\n      if (this.material.forceDepthWrite) {\n        this.engine.setDepthWrite(true);\n      }\n\n      effect.setMatrix(\n        'worldViewProjection',\n        this.mesh.getWorldMatrix().multiply(this.scene.getTransformMatrix())\n      );\n      if (billboard) effect.setMatrix('view', this.scene.getViewMatrix());\n      effect.setFloat('uShadoEntityMeshIndex', meshIndex);\n      effect.setFloat('uUseShadoEntityMeshTexture', options.meshTexture ? 1 : 0);\n      this.mesh._bind(subMesh, effect, BABYLON.Material.TriangleFillMode);\n\n      this.container.bind(effect);\n      effect.setTexture('uShadoEntityAtlas', this.atlas.texture);\n      effect.setTexture('uShadoEntityMeshTexture', meshTexture);\n      (this.mesh as any)._draw(subMesh, BABYLON.Material.TriangleFillMode, drawCount);\n      this.material.unbind();\n\n      if (options.log && !this.loggedFirstDraw) {\n        this.loggedFirstDraw = true;\n        // eslint-disable-next-line no-console\n        console.debug('[shado/render] first draw submitted', {\n          mesh: this.mesh.name,\n          drawCount,\n          entityCount: this.container.entityCount,\n          indices: this.mesh.getTotalIndices(),\n          vertices: this.mesh.getTotalVertices(),\n        });\n      }\n\n      return this.mesh;\n    };\n\n    const picking = normalizePickingOptions(options.picking);\n    if (picking) {\n      this.setAsyncPicking(picking);\n    }\n  }\n\n  public static createMeshVariantRenderers(\n    scene: Scene,\n    container: ShadoDynamicEntityContainer,\n    atlas: ShadoTextureAtlas,\n    options: ShadoDynamicEntityMeshVariantRendererOptions\n  ): ShadoDynamicEntityRenderer[] {\n    return options.variants.map(variant => new ShadoDynamicEntityRenderer(scene, container, atlas, {\n      billboard: false,\n      geometry: 'mesh',\n      log: options.log,\n      mesh: variant.mesh,\n      meshIndex: variant.meshIndex,\n      meshTexture: variant.meshTexture,\n      picking: variant.picking,\n      sortDrawList: options.sortDrawList,\n    }));\n  }\n\n  public setAsyncPicking(options: boolean | ShadoDynamicEntityAsyncPickingOptions): void {\n    this.pickingHandle?.dispose();\n    const normalized = normalizePickingOptions(options);\n    if (!normalized) {\n      this.pickingHandle = undefined;\n      return;\n    }\n    this.pickingHandle = installShadoDynamicEntityClickPicking(\n      this.scene,\n      this.mesh,\n      this.container,\n      normalized\n    );\n  }\n\n  public pickAsync(\n    pointerX = this.scene.pointerX,\n    pointerY = this.scene.pointerY,\n    options: ShadoDynamicEntityAsyncPickingOptions = {}\n  ): Promise<ShadoDynamicEntityPickResult | null> {\n    return pickShadoDynamicEntityAtPointer(\n      this.scene,\n      this.mesh,\n      this.container,\n      pointerX,\n      pointerY,\n      options\n    );\n  }\n\n  public pickWithRay(\n    ray: Ray,\n    options: ShadoDynamicEntityAsyncPickingOptions = {}\n  ): ShadoDynamicEntityPickResult | null {\n    return pickShadoDynamicEntityWithRay(this.mesh, this.container, ray, options);\n  }\n\n  public dispose(): void {\n    this.mesh.render = this.originalRender;\n    this.pickingHandle?.dispose();\n    this.material.dispose();\n  }\n}\n","import { BABYLON, type AbstractEngine, type Mesh, type Scene } from '../babylon';\nimport { Shado } from '../core/Shado';\nimport { field, gpuStruct, type PendingField } from '../decorators';\nimport { NameplateData, createMSDFNameplateLayer, type MSDFNameplateFontAsset } from '../msdf';\nimport type { InitializeConfig } from '../types';\n\nexport type ShadoDynamicEntityNameplateInput = {\n  id: string;\n  text: string;\n  x: number;\n  y: number;\n  z?: number;\n  visible?: boolean;\n  fontSize?: number;\n  color?: string;\n  backgroundColor?: string;\n  billboard?: boolean;\n};\n\nexport type ShadoDynamicEntityNameplateLayerOptions = {\n  enabled?: boolean;\n  fontAsset?: MSDFNameplateFontAsset;\n  fontJsonUrl?: string;\n  fontTextureUrl?: string;\n  fontSize?: number;\n  color?: string;\n  backgroundColor?: string;\n  padding?: number;\n  worldScale?: number;\n  zOffset?: number;\n  nameLiftWorld?: number;\n  renderingGroupId?: number;\n  depthTest?: boolean;\n  thickness?: number;\n  debug?: boolean;\n};\n\ntype DynamicNameplateRecord = {\n  id: string;\n  text: string;\n  actor: ShadoDynamicNameplateActor;\n};\n\nconst DEFAULT_FONT_JSON_URL = 'https://assets.babylonjs.com/fonts/roboto-regular.json';\nconst DEFAULT_FONT_TEXTURE_URL = 'https://assets.babylonjs.com/fonts/roboto-regular.png';\nconst DEFAULT_FONT_SIZE = 13;\nconst DEFAULT_COLOR = '#eef6ff';\nconst DEFAULT_WORLD_SCALE = 1 / 36;\nconst DEFAULT_Z_OFFSET = 0.35;\nconst DEFAULT_NAME_LIFT_WORLD = -0.65;\n\n@gpuStruct({ name: 'ShadoDynamicNameplateActor', useWasm: false })\nclass ShadoDynamicNameplateActor extends Shado {\n  @field('vec4') translation!: Float32Array;\n  @field('u32') nameIndex!: number;\n  @field('f32') nameWorldPerEM!: number;\n  @field('f32') nameLiftWorld!: number;\n  @field('vec4') nameplateColor!: Float32Array;\n  @field('i32') visibleFlag!: number;\n  @field('f32') billboardFlag!: number;\n  @field('f32') padding1!: number;\n  @field('f32') padding2!: number;\n\n  public constructor(engine: AbstractEngine) {\n    super(engine, true);\n  }\n\n  public initialize(): void {\n    this.translation = new Float32Array([0, 0, 0, 1]);\n    this.nameIndex = 0;\n    this.nameWorldPerEM = DEFAULT_FONT_SIZE * DEFAULT_WORLD_SCALE;\n    this.nameLiftWorld = DEFAULT_NAME_LIFT_WORLD;\n    this.nameplateColor = new Float32Array([1, 1, 1, 1]);\n    this.visibleFlag = 1;\n    this.billboardFlag = 1;\n    this.padding1 = 0;\n    this.padding2 = 0;\n  }\n}\n\n@gpuStruct({ name: 'ShadoDynamicNameplateContainer', useWasm: false })\nclass ShadoDynamicNameplateContainer extends Shado {\n  @field('u32') visibleCount!: number;\n  @field('u32') instancesCount!: number;\n\n  private readonly records: DynamicNameplateRecord[] = [];\n\n  public static override async initialize(\n    engine: unknown,\n    config: InitializeConfig = {}\n  ): Promise<boolean> {\n    const additionalFields: PendingField[] = [\n      ...(config.additionalFields ?? []),\n      { name: 'instances', type: { arrayOf: { structOf: ShadoDynamicNameplateActor } } },\n    ];\n    delete (this as any).__cachedSchema;\n    return super.initialize(engine, {\n      backend: 'datatex',\n      wasm: false,\n      ...config,\n      additionalFields,\n    });\n  }\n\n  public constructor(engine: AbstractEngine) {\n    super(engine);\n    this.visibleCount = 0;\n    this.instancesCount = 0;\n  }\n\n  public get children(): ShadoDynamicNameplateActor[] {\n    return this.records.map(record => record.actor);\n  }\n\n  public get instanceCount(): number {\n    return this.records.length;\n  }\n\n  public addNameplate(\n    id: string,\n    text: string,\n    nameplates: NameplateData\n  ): ShadoDynamicNameplateActor {\n    const actor = this.addStructToArray<ShadoDynamicNameplateActor>('instances');\n    actor.initialize();\n    actor.nameIndex = nameplates.addName(text);\n    actor.emitHeaderDirty();\n    this.records.push({ id, text, actor });\n    this.instancesCount = this.records.length;\n    this.visibleCount = this.records.length;\n    return actor;\n  }\n}\n\nconst initByEngine = new WeakMap<AbstractEngine, Promise<void>>();\n\nconst ensureDynamicNameplateShado = (engine: AbstractEngine): Promise<void> => {\n  let pending = initByEngine.get(engine);\n  if (!pending) {\n    pending = (async () => {\n      await ShadoDynamicNameplateActor.initialize(engine, { wasm: false });\n      await ShadoDynamicNameplateContainer.initialize(engine, { wasm: false });\n      await NameplateData.initialize(engine, { wasm: false });\n    })();\n    initByEngine.set(engine, pending);\n  }\n  return pending;\n};\n\nconst loadDefaultFontAsset = async (\n  scene: Scene,\n  fontJsonUrl: string,\n  fontTextureUrl: string\n): Promise<MSDFNameplateFontAsset> => {\n  const response = await fetch(fontJsonUrl);\n  if (!response.ok) {\n    throw new Error(`Failed to load MSDF font json: ${response.status} ${response.statusText}`);\n  }\n  const text = await response.text();\n  const font = JSON.parse(text);\n  const texture = new BABYLON.Texture(\n    fontTextureUrl,\n    scene,\n    true,\n    false,\n    BABYLON.Texture.TRILINEAR_SAMPLINGMODE\n  );\n  const chars = new Map<number, { xadvance?: number }>();\n  for (const char of Array.isArray(font.chars) ? font.chars : []) {\n    if (typeof char?.id === 'number') {\n      chars.set(char.id, char);\n    }\n  }\n  const kerning = new Map<string, number>();\n  for (const item of Array.isArray(font.kernings) ? font.kernings : []) {\n    if (\n      typeof item?.first === 'number' &&\n      typeof item?.second === 'number' &&\n      typeof item?.amount === 'number'\n    ) {\n      kerning.set(`${item.first}:${item.second}`, item.amount);\n    }\n  }\n  return {\n    textures: [texture],\n    _font: font,\n    _getChar: (code: number) => chars.get(code),\n    _getKerning: (left: number, right: number) => kerning.get(`${left}:${right}`) ?? 0,\n  } as MSDFNameplateFontAsset;\n};\n\nconst rgbaFromColor = (value: string | undefined): [number, number, number, number] => {\n  const fallback: [number, number, number, number] = [0.933, 0.965, 1, 1];\n  if (!value) {\n    return fallback;\n  }\n  const hex = value.trim();\n  const match = /^#?([0-9a-f]{6})([0-9a-f]{2})?$/i.exec(hex);\n  if (!match) {\n    return fallback;\n  }\n  const rgb = match[1];\n  const alpha = match[2] ?? 'ff';\n  return [\n    Number.parseInt(rgb.slice(0, 2), 16) / 255,\n    Number.parseInt(rgb.slice(2, 4), 16) / 255,\n    Number.parseInt(rgb.slice(4, 6), 16) / 255,\n    Number.parseInt(alpha, 16) / 255,\n  ];\n};\n\nconst syncSignature = (inputs: readonly ShadoDynamicEntityNameplateInput[]): string =>\n  inputs\n    .filter(input => input.visible !== false && input.text.trim())\n    .map(input => `${input.id}\\u0000${input.text.trim()}`)\n    .sort()\n    .join('\\u0001');\n\nexport class ShadoDynamicEntityNameplateLayer {\n  private readonly scene: Scene;\n  private readonly engine: AbstractEngine;\n  private enabled: boolean;\n  private readyPromise: Promise<void> | null = null;\n  private fontAsset: MSDFNameplateFontAsset | null = null;\n  private ownsFontAsset = false;\n  private container: ShadoDynamicNameplateContainer | null = null;\n  private nameplates: NameplateData | null = null;\n  private mesh: Mesh | null = null;\n  private records = new Map<string, DynamicNameplateRecord>();\n  private signature = '';\n  private latestInputs: readonly ShadoDynamicEntityNameplateInput[] = [];\n  private disposed = false;\n\n  public constructor(\n    scene: Scene,\n    private options: ShadoDynamicEntityNameplateLayerOptions = {}\n  ) {\n    this.scene = scene;\n    this.engine = scene.getEngine();\n    this.enabled = options.enabled !== false;\n  }\n\n  public setOptions(options: ShadoDynamicEntityNameplateLayerOptions): void {\n    const previousFontAsset = this.options.fontAsset;\n    this.options = { ...this.options, ...options };\n    this.enabled = this.options.enabled !== false;\n    if (options.fontAsset && options.fontAsset !== previousFontAsset) {\n      this.fontAsset = options.fontAsset;\n      this.ownsFontAsset = false;\n      this.rebuild(this.latestInputs);\n    }\n    this.mesh?.setEnabled(this.enabled);\n  }\n\n  public setEnabled(enabled: boolean): void {\n    this.enabled = enabled;\n    this.mesh?.setEnabled(enabled);\n  }\n\n  public sync(inputs: readonly ShadoDynamicEntityNameplateInput[]): void {\n    this.latestInputs = inputs;\n    if (this.disposed) {\n      return;\n    }\n    void this.ensureReady()\n      .then(() => {\n        if (!this.disposed) {\n          this.applySync(this.latestInputs);\n        }\n      })\n      .catch(error => {\n        if (this.options.debug) {\n          // eslint-disable-next-line no-console\n          console.warn('[shado/render] MSDF nameplates unavailable', error);\n        }\n      });\n  }\n\n  public dispose(): void {\n    this.disposed = true;\n    this.mesh?.dispose(false, false);\n    this.container?.dispose();\n    this.nameplates?.dispose();\n    if (this.ownsFontAsset) {\n      for (const texture of this.fontAsset?.textures ?? []) {\n        texture.dispose();\n      }\n    }\n    this.mesh = null;\n    this.container = null;\n    this.nameplates = null;\n    this.fontAsset = null;\n    this.records.clear();\n  }\n\n  private async ensureReady(): Promise<void> {\n    this.readyPromise ??= (async () => {\n      await ensureDynamicNameplateShado(this.engine);\n      if (this.options.fontAsset) {\n        this.fontAsset = this.options.fontAsset;\n        this.ownsFontAsset = false;\n      } else if (!this.fontAsset) {\n        this.fontAsset = await loadDefaultFontAsset(\n          this.scene,\n          this.options.fontJsonUrl ?? DEFAULT_FONT_JSON_URL,\n          this.options.fontTextureUrl ?? DEFAULT_FONT_TEXTURE_URL\n        );\n        this.ownsFontAsset = true;\n      }\n    })();\n    await this.readyPromise;\n  }\n\n  private applySync(inputs: readonly ShadoDynamicEntityNameplateInput[]): void {\n    const nextSignature = syncSignature(inputs);\n    if (nextSignature !== this.signature) {\n      this.rebuild(inputs);\n      this.signature = nextSignature;\n    }\n    this.updateActors(inputs);\n    this.mesh?.setEnabled(this.enabled && this.records.size > 0);\n  }\n\n  private rebuild(inputs: readonly ShadoDynamicEntityNameplateInput[]): void {\n    if (!this.fontAsset || this.disposed) {\n      return;\n    }\n    this.mesh?.dispose(false, false);\n    this.container?.dispose();\n    this.nameplates?.dispose();\n\n    const filtered = inputs\n      .filter(input => input.visible !== false && input.text.trim())\n      .sort((a, b) => a.id.localeCompare(b.id));\n\n    const nameplates = new NameplateData(this.engine, this.fontAsset);\n    const container = new ShadoDynamicNameplateContainer(this.engine);\n    const records = new Map<string, DynamicNameplateRecord>();\n    for (const input of filtered) {\n      const text = input.text.trim();\n      const actor = container.addNameplate(input.id, text, nameplates);\n      records.set(input.id, { id: input.id, text, actor });\n    }\n    nameplates.rebuildStreams(container.children);\n    const mesh = createMSDFNameplateLayer(\n      this.scene,\n      container as any,\n      nameplates as any,\n      this.fontAsset,\n      {\n        renderingGroupId: this.options.renderingGroupId ?? 1,\n        depthTest: this.options.depthTest ?? true,\n        thickness: this.options.thickness,\n        debug: this.options.debug,\n      }\n    );\n    mesh.setEnabled(this.enabled && records.size > 0);\n\n    this.container = container;\n    this.nameplates = nameplates;\n    this.mesh = mesh;\n    this.records = records;\n  }\n\n  private updateActors(inputs: readonly ShadoDynamicEntityNameplateInput[]): void {\n    const byId = new Map(inputs.map(input => [input.id, input]));\n    for (const [id, record] of this.records) {\n      const input = byId.get(id);\n      const visible = Boolean(input && input.visible !== false && input.text.trim());\n      const fontSize = Math.max(\n        8,\n        Number(input?.fontSize ?? this.options.fontSize ?? DEFAULT_FONT_SIZE)\n      );\n      const worldScale = Math.max(0.001, Number(this.options.worldScale ?? DEFAULT_WORLD_SCALE));\n      const actor = record.actor;\n      actor.visibleFlag = visible ? 1 : 0;\n      if (input) {\n        actor.translation = new Float32Array([\n          input.x,\n          input.z ?? this.options.zOffset ?? DEFAULT_Z_OFFSET,\n          input.y,\n          1,\n        ]);\n        actor.nameWorldPerEM = fontSize * worldScale;\n        actor.nameLiftWorld = Number(this.options.nameLiftWorld ?? DEFAULT_NAME_LIFT_WORLD);\n        actor.nameplateColor = new Float32Array(\n          rgbaFromColor(input.color ?? this.options.color ?? DEFAULT_COLOR)\n        );\n        actor.billboardFlag = input.billboard === false ? 0 : 1;\n      }\n      actor.emitHeaderDirty();\n    }\n    this.container?.arena.markDirty?.();\n  }\n}\n"]}