{
  "version": 3,
  "sources": ["../block.ts", "../player.ts", "../player-model.ts"],
  "sourcesContent": ["import { BlockModel, PackMeta } from '@xmcl/resourcepack'\nimport { Material } from 'three/src/materials/Material'\nimport { LinearFilter, NearestFilter } from 'three/src/constants'\nimport { Object3D } from 'three/src/core/Object3D'\nimport { TextureLoader } from 'three/src/loaders/TextureLoader'\nimport { MeshBasicMaterial } from 'three/src/materials/MeshBasicMaterial'\nimport { MeshLambertMaterial } from 'three/src/materials/MeshLambertMaterial'\nimport { Mesh } from 'three/src/objects/Mesh'\nimport { Group } from 'three/src/objects/Group'\nimport { BoxGeometry } from 'three/src/geometries/BoxGeometry'\nimport { Vector3 } from 'three/src/math/Vector3'\nimport { Vector2 } from 'three/src/math/Vector2'\nimport { BufferAttribute } from 'three/src/core/BufferAttribute'\nimport type { Texture } from 'three/src/textures/Texture'\n\ninterface TextureData {\n  url: string\n  animation?: PackMeta.Animation\n}\n\nexport interface TextureManager {\n  hasTexture(path: string): boolean\n  loadTexture(path: string): Texture\n}\n\nexport class BasicTextureManager implements TextureManager {\n  constructor(private textures: Record<string, TextureData> = {}, private loader = new TextureLoader()) {}\n\n  hasTexture(path: string): boolean {\n    return !!this.textures[path]\n  }\n\n  loadTexture(path: string): Texture {\n    const texture = this.loader.load(this.textures[path].url)\n\n    // sharp pixels and smooth edges\n    texture.magFilter = NearestFilter\n    texture.minFilter = LinearFilter\n\n    return texture\n  }\n}\n\nexport const DEFAULT_TRANSFORM: BlockModel.Transform = {\n  rotation: [0, 0, 0],\n  translation: [0, 0, 0],\n  scale: [1, 1, 1],\n}\nexport const DEFAULT_DISPLAY: BlockModel.Display = {\n  ground: DEFAULT_TRANSFORM,\n  gui: DEFAULT_TRANSFORM,\n  thirdperson_lefthand: DEFAULT_TRANSFORM,\n  thirdperson_righthand: DEFAULT_TRANSFORM,\n  firstperson_lefthand: DEFAULT_TRANSFORM,\n  firstperson_righthand: DEFAULT_TRANSFORM,\n  fixed: DEFAULT_TRANSFORM,\n  head: DEFAULT_TRANSFORM,\n}\nexport const BUILTIN_GENERATED: BlockModel.Resolved = {\n  display: DEFAULT_DISPLAY,\n  ambientocclusion: false,\n  textures: {},\n  elements: [\n    {\n      from: [0, 0, 0],\n      to: [16, 16, 16],\n      faces: {\n        down: { uv: [0, 0, 16, 16], texture: '' },\n      },\n    },\n  ],\n  overrides: [],\n}\n\nfunction findRealTexturePath(model: BlockModel.Resolved, variantKey: string) {\n  let texturePath = model.textures[variantKey] as string\n  while (texturePath.startsWith('#')) {\n    const next = model.textures[texturePath.substring(1, texturePath.length)]\n    if (!next) {\n      return undefined\n    }\n    texturePath = next\n  }\n  return texturePath\n}\n\nexport class BlockModelObject extends Object3D {\n  animationLoop = false\n  displayOption: BlockModel.Display = DEFAULT_DISPLAY\n\n  applyDisplay(option: string) {\n    const group = this.children[0]\n\n    if (option === 'block') {\n      // reset transformations\n      group.rotation.set(0, 0, 0)\n      group.position.set(0, 0, 0)\n      group.scale.set(1, 1, 1)\n    } else {\n      if (!(option in this.displayOption)) {\n        throw new Error('Display option is invalid.')\n      }\n\n      const options = (this.displayOption as any)[option]\n\n      const rot = options.rotation\n      const pos = options.translation\n      const scale = options.scale\n\n      // apply transformations\n      group.rotation.set(rot[0] * Math.PI / 180, rot[1] * Math.PI / 180, rot[2] * Math.PI / 180)\n      group.position.set(pos[0], pos[1], pos[2])\n      group.scale.set(scale[0] === 0 ? 0.00001 : scale[0], scale[1] === 0 ? 0.00001 : scale[1], scale[2] === 0 ? 0.00001 : scale[2])\n    }\n  }\n\n  getCenter() {\n    const group = this.children[0]\n\n    // compute absolute bounding box\n    const box = {\n      minx: 0,\n      miny: 0,\n      minz: 0,\n      maxx: 0,\n      maxy: 0,\n      maxz: 0,\n    }\n\n    for (let i = 0; i < group.children.length; i++) {\n      const pivot = group.children[i]\n      const mesh = pivot.children[0] as Mesh\n      const geo = mesh.geometry as BoxGeometry\n\n      // for (let j = 0; j < geo.vertices.length; j++) {\n      //     // convert vertex coordinates to world coordinates\n      //     const vertex = geo.vertices[j].clone();\n      //     const abs = mesh.localToWorld(vertex);\n\n      //     // update bounding box\n\n      //     if (abs.x < box.minx) { box.minx = abs.x; }\n      //     if (abs.y < box.miny) { box.miny = abs.y; }\n      //     if (abs.z < box.minz) { box.minz = abs.z; }\n\n      //     if (abs.x > box.maxx) { box.maxx = abs.x; }\n      //     if (abs.y > box.maxy) { box.maxy = abs.y; }\n      //     if (abs.z > box.maxz) { box.maxz = abs.z; }\n      // }\n    }\n\n    // return the center of the bounding box\n\n    return new Vector3(\n      (box.minx + box.maxx) / 2,\n      (box.miny + box.maxy) / 2,\n      (box.minz + box.maxz) / 2,\n    )\n  }\n}\n\nexport class BlockModelFactory {\n  static TRANSPARENT_MATERIAL = new MeshBasicMaterial({ transparent: true, opacity: 0, alphaTest: 0.5 })\n\n  private cachedMaterial: Record<string, Material> = {}\n\n  constructor(readonly textureManager: TextureManager, readonly option: { clipUVs?: boolean; modelOnly?: boolean } = {}) { }\n\n  /**\n     * Get threejs `Object3D` for that block model.\n     */\n  getObject(model: BlockModel.Resolved, options:{ uvlock?: boolean; y?: number; x?: number } = {}, fix = 0.001) {\n    const xRotation = options.x || 0\n    const yRotation = options.y || 0\n    const uvlock = options.uvlock || false\n\n    const option = this.option\n    const textureManager = this.textureManager\n\n    const clipUVs = option.clipUVs || false\n    const modelOnly = option.modelOnly || false\n\n    const obj = new BlockModelObject()\n    const group = new Group()\n    group.name = 'wrapper'\n\n    const materials: Material[] = [BlockModelFactory.TRANSPARENT_MATERIAL]\n    const materialIndexes: { [variant: string]: number } = {}\n\n    const materialPathIndexes: { [texPath: string]: number } = {}\n    for (const variant of Object.keys(model.textures)) {\n      const texPath = findRealTexturePath(model, variant)\n      let materialIndex = 0\n\n      if (!texPath) {\n        console.error(`Cannot find texture @${texPath}`)\n      } else {\n        let materialPathIndex = materialPathIndexes[texPath]\n        if (materialPathIndex) {\n          // noop\n        } else if (texPath in this.cachedMaterial) {\n          materialPathIndex = materials.length\n          materials.push(this.cachedMaterial[texPath])\n        } else if (textureManager.hasTexture(texPath)) {\n          // build new material\n          const texture = textureManager.loadTexture(texPath)\n\n          // map texture to material, keep transparency and fix transparent z-fighting\n          const mat = new MeshLambertMaterial({ map: texture, transparent: true, alphaTest: 0.5 })\n\n          materialPathIndex = materials.length\n          this.cachedMaterial[texPath] = mat\n\n          mat.name = texPath\n\n          materials.push(mat)\n        }\n        materialPathIndexes[texPath] = materialPathIndex\n        materialIndex = materialPathIndex\n      }\n\n      materialIndexes[variant] = materialIndex\n    }\n\n    for (const element of model.elements) {\n      // get dimensions and origin\n      const width = element.to[0] - element.from[0]\n      const height = element.to[1] - element.from[1]\n      const length = element.to[2] - element.from[2]\n\n      const origin = {\n        x: (element.to[0] + element.from[0]) / 2 - 8,\n        y: (element.to[1] + element.from[1]) / 2 - 8,\n        z: (element.to[2] + element.from[2]) / 2 - 8,\n      }\n\n      const blockGeometry = new BoxGeometry(width + fix, height + fix, length + fix)\n      const blockMesh = new Mesh(blockGeometry, materials)\n      blockMesh.name = 'block-element'\n      blockGeometry.clearGroups()\n\n      blockMesh.position.x = origin.x\n      blockMesh.position.y = origin.y\n      blockMesh.position.z = origin.z\n\n      const uvAttr: number[] = []\n\n      const faces = ['east', 'west', 'up', 'down', 'south', 'north'] as const\n\n      const getDefaultUv = (i: number) => [\n        [\n          // east\n          element.from[2],\n          element.from[1],\n          element.to[2],\n          element.to[1],\n        ],\n        [\n          // west\n          element.from[2],\n          element.from[1],\n          element.to[2],\n          element.to[1],\n        ],\n        [\n          // up\n          element.from[0],\n          element.from[2],\n          element.to[0],\n          element.to[2],\n        ],\n        [\n          // down\n          element.from[0],\n          element.from[2],\n          element.to[0],\n          element.to[2],\n        ],\n        [\n          // south\n          element.from[0],\n          element.from[1],\n          element.to[0],\n          element.to[1],\n        ],\n        [\n          // north\n          element.from[0],\n          element.from[1],\n          element.to[0],\n          element.to[1],\n        ],\n      ][i]\n\n      for (let i = 0; i < 6; i++) {\n        const faceName = faces[i]\n        const face = element.faces[faceName]\n        let materialIndex = 0\n        let uv: number[]\n        if (face) {\n          // get material index\n          materialIndex = materialIndexes[face.texture.substring(1, face.texture.length)] // references.indexOf(ref[0] == '#' ? ref.substring(1) : ref)\n\n          uv = face.uv || getDefaultUv(i)\n\n          if (clipUVs) {\n            uv = uv.map((e) => {\n              if (e + 0.00001 < 0) {\n                return 0\n              } else if (e - 0.00001 > 16) {\n                return 16\n              } else {\n                return e\n              }\n            })\n          }\n\n          uv = uv.map((e) => e / 16)\n        } else {\n          uv = [0, 0, 1, 1]\n          // transparent material\n        }\n        const [x1, y1, x2, y2] = uv\n        let map = [\n          new Vector2(x1, y2),\n          new Vector2(x2, y2),\n          new Vector2(x1, y1),\n          new Vector2(x2, y1),\n        ]\n\n        if (face && face.rotation) {\n          let amount = Number(face.rotation)\n          // check property\n          if (!([0, 90, 180, 270].indexOf(amount) >= 0)) {\n            console.error('The \"rotation\" property for \"' + face + '\" face is invalid (got \"' + amount + '\").')\n          }\n\n          amount = (360 - amount) % 360\n\n          // rotate map\n          for (let j = 0; j < amount / 90; j++) {\n            map = [map[1], map[3], map[0], map[2]]\n          }\n        }\n\n        if (uvlock) {\n          let rotation = 0\n          if (xRotation >= 180) {\n            if (faceName === 'up') {\n              rotation = yRotation\n            } else if (faceName === 'down') {\n              rotation = (360 - yRotation) % 360\n            } else {\n              rotation = xRotation\n            }\n          } else {\n            if (faceName === 'down') {\n              rotation = yRotation\n            } else if (faceName === 'up') {\n              rotation = (360 - yRotation) % 360\n            } else {\n              rotation = xRotation\n            }\n          }\n\n          for (let j = 0; j < rotation / 90; j++) {\n            for (let m = 0; m < map.length; m++) {\n              const vector = map[m]\n              const x = vector.x\n              const y = vector.y\n\n              vector.x = 1 - y\n              vector.y = x\n            }\n          }\n        }\n\n        uvAttr.push(\n          map[0].x, map[0].y,\n          map[1].x, map[1].y,\n          map[2].x, map[2].y,\n          map[3].x, map[3].y,\n        )\n        blockGeometry.addGroup(i * 6, 6, materialIndex)\n        // blockGeometry.uvsNeedUpdate = true;\n      }\n      blockGeometry.setAttribute('uv', new BufferAttribute(\n        new Float32Array(uvAttr), 2))\n\n      /**\n             * bake rotation start\n             */\n      if (element.rotation) {\n        // get origin, axis and angle\n        const rotationOrigin = {\n          x: element.rotation.origin[0] - 8,\n          y: element.rotation.origin[1] - 8,\n          z: element.rotation.origin[2] - 8,\n        }\n\n        const axis = element.rotation.axis\n        const angle = element.rotation.angle\n\n        // create pivot\n        const pivot = new Group()\n        pivot.name = 'pivot'\n        pivot.position.x = rotationOrigin.x\n        pivot.position.y = rotationOrigin.y\n        pivot.position.z = rotationOrigin.z\n\n        pivot.add(blockMesh)\n\n        // adjust mesh coordinates\n        blockMesh.position.x -= rotationOrigin.x\n        blockMesh.position.y -= rotationOrigin.y\n        blockMesh.position.z -= rotationOrigin.z\n\n        // rotate pivot\n        if (axis === 'x') {\n          pivot.rotateX(angle * Math.PI / 180)\n        } else if (axis === 'y') {\n          pivot.rotateY(angle * Math.PI / 180)\n        } else if (axis === 'z') {\n          pivot.rotateZ(angle * Math.PI / 180)\n        }\n\n        const rescale = element.rotation.rescale || false\n        if (rescale) {\n          if (angle % 90 === 45) {\n            if (axis === 'x') {\n              pivot.scale.y *= Math.sqrt(2)\n              pivot.scale.z *= Math.sqrt(2)\n            }\n            if (axis === 'y') {\n              pivot.scale.x *= Math.sqrt(2)\n              pivot.scale.z *= Math.sqrt(2)\n            }\n            if (axis === 'z') {\n              pivot.scale.x *= Math.sqrt(2)\n              pivot.scale.y *= Math.sqrt(2)\n            }\n          }\n        }\n\n        group.add(pivot)\n      } else {\n        const pivot = new Group()\n        pivot.name = 'pivot'\n        pivot.add(blockMesh)\n        group.add(pivot)\n      }\n    }\n\n    obj.rotateY(-yRotation * Math.PI / 180)\n    obj.rotateX(-xRotation * Math.PI / 180)\n\n    obj.add(group)\n\n    return obj\n  }\n}\n", "import { BufferAttribute, Texture, Vector2 } from 'three'\nimport { DoubleSide, NearestFilter } from 'three/src/constants'\nimport { Object3D } from 'three/src/core/Object3D'\nimport { BoxGeometry } from 'three/src/geometries/BoxGeometry'\nimport { BoxHelper } from 'three/src/helpers/BoxHelper'\nimport { MeshBasicMaterial } from 'three/src/materials/MeshBasicMaterial'\nimport { Color } from 'three/src/math/Color'\nimport { Mesh } from 'three/src/objects/Mesh'\nimport { CanvasTexture } from 'three/src/textures/CanvasTexture'\nimport format, { CubeUVMapping, ModelTemplate } from './player-model'\n\nfunction convertLegacySkin(context: CanvasRenderingContext2D, width: number) {\n  const scale = width / 64.0\n\n  function copySkin(ctx: CanvasRenderingContext2D, sX: number, sY: number, w: number, h: number, dX: number, dY: number, flipHorizontal: boolean) {\n    sX *= scale\n    sY *= scale\n    w *= scale\n    h *= scale\n    dX *= scale\n    dY *= scale\n\n    const imgData = ctx.getImageData(sX, sY, w, h)\n    if (flipHorizontal) {\n      for (let y = 0; y < h; y++) {\n        for (let x = 0; x < (w / 2); x++) {\n          const index = (x + y * w) * 4\n          const index2 = ((w - x - 1) + y * w) * 4\n          const pA1 = imgData.data[index]\n          const pA2 = imgData.data[index + 1]\n          const pA3 = imgData.data[index + 2]\n          const pA4 = imgData.data[index + 3]\n\n          const pB1 = imgData.data[index2]\n          const pB2 = imgData.data[index2 + 1]\n          const pB3 = imgData.data[index2 + 2]\n          const pB4 = imgData.data[index2 + 3]\n\n          imgData.data[index] = pB1\n          imgData.data[index + 1] = pB2\n          imgData.data[index + 2] = pB3\n          imgData.data[index + 3] = pB4\n\n          imgData.data[index2] = pA1\n          imgData.data[index2 + 1] = pA2\n          imgData.data[index2 + 2] = pA3\n          imgData.data[index2 + 3] = pA4\n        }\n      }\n    }\n    ctx.putImageData(imgData, dX, dY)\n  }\n\n  copySkin(context, 4, 16, 4, 4, 20, 48, true) // Top Leg\n  copySkin(context, 8, 16, 4, 4, 24, 48, true) // Bottom Leg\n  copySkin(context, 0, 20, 4, 12, 24, 52, true) // Outer Leg\n  copySkin(context, 4, 20, 4, 12, 20, 52, true) // Front Leg\n  copySkin(context, 8, 20, 4, 12, 16, 52, true) // Inner Leg\n  copySkin(context, 12, 20, 4, 12, 28, 52, true) // Back Leg\n  copySkin(context, 44, 16, 4, 4, 36, 48, true) // Top Arm\n  copySkin(context, 48, 16, 4, 4, 40, 48, true) // Bottom Arm\n  copySkin(context, 40, 20, 4, 12, 40, 52, true) // Outer Arm\n  copySkin(context, 44, 20, 4, 12, 36, 52, true) // Front Arm\n  copySkin(context, 48, 20, 4, 12, 32, 52, true) // Inner Arm\n  copySkin(context, 52, 20, 4, 12, 44, 52, true) // Back Arm\n}\n\ntype TextureSource = string | HTMLImageElement | URL\n\nfunction mapCubeUV(mesh: Mesh, src: CubeUVMapping) {\n  const material = mesh.material as MeshBasicMaterial\n  const texture = material.map!\n  const tileUvW = 1 / texture.image.width\n  const tileUvH = 1 / texture.image.height\n  const uvs: Vector2[] = []\n  /**\n     * Set the box mesh UV to the Minecraft skin texture\n     */\n  function mapUV(x1: number, y1: number, x2: number, y2: number) {\n    x1 *= tileUvW\n    x2 *= tileUvW\n    y1 = 1 - (y1 * tileUvH)\n    y2 = 1 - (y2 * tileUvH)\n\n    uvs.push(\n      new Vector2(x1, y1),\n      new Vector2(x2, y1),\n      new Vector2(x1, y2),\n      new Vector2(x2, y2),\n    )\n  }\n\n  const faces = ['left', 'right', 'top', 'bottom', 'front', 'back'] as const\n  for (let i = 0; i < faces.length; i++) {\n    const uvs = src[faces[i]]\n    mapUV(uvs[0], uvs[1], uvs[2], uvs[3])\n  }\n\n  const fArr = new Float32Array(uvs.length * 2)\n  for (let i = 0; i < uvs.length; i++) {\n    fArr[i * 2] = uvs[i].x\n    fArr[i * 2 + 1] = uvs[i].y\n  }\n  const attr = new BufferAttribute(fArr, 2)\n  mesh.geometry.setAttribute('uv', attr)\n}\n\nexport class PlayerObject3D extends Object3D {\n  private _slim = false\n\n  constructor(skin: MeshBasicMaterial, cape: MeshBasicMaterial, transparent: MeshBasicMaterial, slim: boolean) {\n    super()\n    this._slim = slim\n    buildPlayerModel(this, skin, cape, transparent, slim)\n  }\n\n  get slim() {\n    return this._slim\n  }\n\n  set slim(slim: boolean) {\n    if (slim !== this._slim) {\n      const template = slim ? format.alex : format.steve\n      const leftArm = this.getObjectByName('leftArm')! as Mesh\n      const rightArm = this.getObjectByName('rightArm')! as Mesh\n\n      leftArm.geometry = new BoxGeometry(template.leftArm.w, template.leftArm.h, template.leftArm.d)\n      mapCubeUV(leftArm, template.leftArm)\n      rightArm.geometry = new BoxGeometry(template.rightArm.w, template.rightArm.h, template.rightArm.d)\n      mapCubeUV(rightArm, template.rightArm)\n\n      const leftArmLayer = this.getObjectByName('leftArmLayer')! as Mesh\n      const rightArmLayer = this.getObjectByName('rightArmLayer')! as Mesh\n      if (leftArmLayer) {\n        leftArmLayer.geometry = new BoxGeometry(template.leftArm.layer.w, template.leftArm.layer.h, template.leftArm.layer.d)\n        mapCubeUV(leftArmLayer, template.leftArm.layer)\n      }\n      if (rightArmLayer) {\n        rightArmLayer.geometry = new BoxGeometry(template.rightArm.layer.w, template.rightArm.layer.h, template.rightArm.layer.d)\n        mapCubeUV(rightArmLayer, template.rightArm.layer)\n      }\n    }\n    this._slim = slim\n  }\n}\n\nfunction buildPlayerModel(root: Object3D, skin: MeshBasicMaterial, cape: MeshBasicMaterial, transparent: MeshBasicMaterial, slim: boolean): Object3D {\n  const template = slim ? format.alex : format.steve\n  const partsNames: Array<keyof ModelTemplate> = Object.keys(template) as any\n\n  for (const partName of partsNames) {\n    const model = template[partName]\n\n    const mesh = new Mesh(new BoxGeometry(model.w, model.h, model.d),\n      partName === 'cape' ? cape : skin)\n\n    mesh.name = partName\n    if (model.y) { mesh.position.y = model.y }\n    if (model.x) { mesh.position.x = model.x }\n    if (model.z) { mesh.position.z = model.z }\n    if (partName === 'cape') {\n      mesh.rotation.x = 25 * (Math.PI / 180)\n    }\n    mapCubeUV(mesh, model)\n\n    const box = new BoxHelper(mesh, new Color(0xffffff))\n    box.name = `${partName}Box`\n    box.visible = false\n    mesh.add(box)\n\n    if ('layer' in model) {\n      const layer = model.layer\n      const layerMesh = new Mesh(new BoxGeometry(layer.w, layer.h, layer.d), transparent)\n      layerMesh.name = `${partName}Layer`\n      if (layer.y) { layerMesh.position.y = layer.y }\n      if (layer.x) { layerMesh.position.x = layer.x }\n      if (layer.z) { layerMesh.position.z = layer.z }\n\n      mapCubeUV(layerMesh, layer)\n\n      mesh.add(layerMesh)\n    }\n\n    root.add(mesh)\n  }\n\n  return root\n}\n\nfunction ensureImage(textureSource: TextureSource) {\n  if (textureSource instanceof Image) {\n    return textureSource\n  }\n  return new Promise<HTMLImageElement>((resolve, reject) => {\n    const img = new Image()\n    img.crossOrigin = 'anonymous'\n    img.onload = () => { resolve(img) }\n    img.onerror = (e, source, lineno, colno, error) => { reject(error) }\n    if (textureSource instanceof URL) {\n      img.src = textureSource.toString()\n    } else {\n      img.src = textureSource\n    }\n  })\n}\n\nexport class PlayerModel {\n  static create() { return new PlayerModel() }\n\n  readonly playerObject3d: PlayerObject3D\n  readonly materialPlayer: MeshBasicMaterial\n  readonly materialTransparent: MeshBasicMaterial\n  readonly materialCape: MeshBasicMaterial\n  readonly textureCape: CanvasTexture\n  readonly texturePlayer: CanvasTexture\n\n  constructor() {\n    const canvas = document.createElement('canvas')\n    canvas.width = 64\n    canvas.height = 64\n    const texture = new CanvasTexture(canvas)\n    texture.magFilter = NearestFilter\n    texture.minFilter = NearestFilter\n    this.texturePlayer = texture\n    texture.name = 'skinTexture'\n\n    this.materialPlayer = new MeshBasicMaterial({ map: texture })\n\n    this.materialTransparent = new MeshBasicMaterial({\n      map: texture,\n      transparent: true,\n      depthWrite: false,\n      side: DoubleSide,\n    })\n\n    const textureCape = new CanvasTexture(document.createElement('canvas'))\n    textureCape.magFilter = NearestFilter\n    textureCape.minFilter = NearestFilter\n    textureCape.name = 'capeTexture'\n    this.textureCape = textureCape\n\n    const materialCape = new MeshBasicMaterial({\n      map: this.textureCape,\n    })\n    materialCape.name = 'capeMaterial'\n    materialCape.visible = false\n    this.materialCape = materialCape\n\n    this.playerObject3d = new PlayerObject3D(this.materialPlayer, this.materialCape, this.materialTransparent, false)\n  }\n\n  /**\n     * @param skin The skin texture source. Should be url string, URL object, or a Image HTML element\n     * @param isSlim Is this skin slim\n     */\n  async setSkin(skin: TextureSource, isSlim = false) {\n    this.playerObject3d.slim = isSlim\n    const texture = this.texturePlayer\n    const i = await ensureImage(skin)\n    const legacy = i.width !== i.height\n    const canvas = texture.image\n    const context = canvas.getContext('2d')\n    canvas.width = i.width\n    canvas.height = i.width\n    context.clearRect(0, 0, i.width, i.width)\n    if (legacy) {\n      context.drawImage(i, 0, 0, i.width, i.width / 2.0)\n      convertLegacySkin(context, i.width)\n    } else {\n      context.drawImage(i, 0, 0, i.width, i.width)\n    }\n    texture.needsUpdate = true\n  }\n\n  async setCape(cape: TextureSource | undefined) {\n    if (cape === undefined) {\n      this.materialCape.visible = false\n      return\n    }\n    this.materialCape.visible = true\n    const img = await ensureImage(cape)\n    const texture = this.textureCape\n    texture.image = img\n    texture.needsUpdate = true\n  }\n\n  // name(name) {\n  //     if (name === undefined || name === \"\" || name === null) {\n  //         if (this.nameTagObject === null) { return this; }\n  //         this.root.remove(this.nameTagObject);\n  //         this.nameTagObject = null;\n  //     }\n  //     if (this.nameTagObject) { this.clear(); }\n  //     // build the texture\n  //     const canvas = buildNameTag(name);\n  //     const texture = new Texture(canvas);\n  //     texture.needsUpdate = true;\n  //     // build the sprite itself\n  //     const material = new SpriteMaterial({\n  //         map: texture,\n  //         // useScreenCoordinates: false\n  //     });\n  //     const sprite = new Sprite(material);\n  //     this.nameTagObject = sprite;\n  //     sprite.position.y = 1.15;\n  //     // add sprite to the character\n  //     this.root.add(this.nameTagObject);\n  //     return this;\n  // }\n\n  // load(option) {\n  //     if (!option) { return this; }\n  //     if (option.skin) { this.loadSkin(option.skin); }\n  //     if (option.cape) { this.loadCape(option.skin); }\n  //     return this;\n  // }\n\n  // say(text, expire = 4) {\n  //     expire *= 1000;\n  //     if (this.speakExpire) {\n  //         clearTimeout(this.speakExpire);\n  //         this.root.remove(this.speakBox);\n  //         this.speakBox = null;\n  //         this.speakExpire = null;\n  //     }\n  //     this.speakExpire = setTimeout(() => {\n  //         this.root.remove(this.speakBox);\n  //         this.speakBox = null;\n  //         this.speakExpire = null;\n  //     }, expire);\n\n  //     // build the texture\n  //     const canvas = buildChatBox(text);\n  //     const texture = new Texture(canvas);\n  //     texture.needsUpdate = true;\n  //     // build the sprite itself\n  //     const material = new SpriteMaterial({\n  //         map: texture,\n  //         // useScreenCoordinates: false\n  //     });\n  //     const sprite = new Sprite(material);\n  //     this.speakBox = sprite;\n  //     sprite.scale.multiplyScalar(4);\n  //     sprite.position.y = 1.5;\n  //     // add sprite to the character\n  //     this.root.add(this.speakBox);\n  //     return this;\n  // }\n}\n\nexport default PlayerModel\n", "export interface ModelTemplate {\n  head: Part\n  rightLeg: Part\n  leftLeg: Part\n  torso: Part\n  leftArm: Part\n  rightArm: Part\n  cape: Transform & CubeUVMapping\n}\nexport interface Dimension {\n  h: number\n  w: number\n  d: number\n}\nexport interface CubeUVMapping {\n  top: number[]\n  bottom: number[]\n  right: number[]\n  front: number[]\n  left: number[]\n  back: number[]\n}\nexport interface Translation {\n  x: number\n  y: number\n  z: number\n}\nexport interface Transform extends Translation, Dimension {\n}\nexport interface Part extends Transform, CubeUVMapping {\n  layer: Dimension & CubeUVMapping & Partial<Translation>\n}\nfunction createGroup(slim: boolean): ModelTemplate {\n  return {\n    head: {\n      h: 0,\n      w: 0,\n      d: 0,\n      x: 0,\n      y: 0,\n      z: 0,\n      layer: {\n        w: 9,\n        h: 9,\n        d: 9,\n        top: [40, 0, 48, 8],\n        bottom: [48, 0, 56, 8],\n        right: [32, 8, 40, 16],\n        front: [40, 8, 48, 16],\n        left: [48, 8, 56, 16],\n        back: [56, 8, 64, 16],\n      },\n      top: [8, 0, 16, 8],\n      bottom: [24, 8, 16, 0],\n      right: [0, 8, 8, 16],\n      front: [8, 8, 16, 16],\n      left: [16, 8, 24, 16],\n      back: [24, 8, 32, 16],\n    },\n    rightLeg: {\n      h: 0,\n      w: 0,\n      d: 0,\n      x: 0,\n      y: 0,\n      z: 0,\n      layer: {\n        w: 4.5,\n        d: 4.5,\n        h: 13.5,\n        top: [4, 48, 8, 36],\n        bottom: [8, 48, 12, 36],\n        right: [0, 36, 4, 48],\n        front: [4, 36, 8, 48],\n        left: [8, 36, 12, 48],\n        back: [12, 36, 16, 48],\n      },\n      top: [4, 16, 8, 20],\n      bottom: [8, 16, 12, 20],\n      right: [0, 20, 4, 32],\n      front: [4, 20, 8, 32],\n      left: [8, 20, 12, 32],\n      back: [12, 20, 16, 32],\n    },\n    torso: {\n      h: 0,\n      w: 0,\n      d: 0,\n      x: 0,\n      y: 0,\n      z: 0,\n      layer: {\n        w: 9,\n        h: 13.5,\n        d: 4.5,\n        top: [20, 48, 28, 36],\n        bottom: [28, 48, 36, 36],\n        right: [16, 36, 20, 48],\n        front: [20, 36, 28, 48],\n        left: [28, 36, 32, 48],\n        back: [32, 36, 40, 48],\n      },\n      top: [20, 16, 28, 20],\n      bottom: [28, 16, 36, 20],\n      right: [16, 20, 20, 32],\n      front: [20, 20, 28, 32],\n      left: [28, 20, 32, 32],\n      back: [32, 20, 40, 32],\n    },\n    leftArm: {\n      h: 0,\n      w: 0,\n      d: 0,\n      x: 0,\n      y: 0,\n      z: 0,\n      layer: {\n        w: 4.5,\n        h: 13.5,\n        d: 4.5,\n        top: [52, 48, 56, 52],\n        bottom: [56, 48, 60, 52],\n        right: [48, 52, 52, 64],\n        front: [52, 52, 56, 64],\n        left: [56, 52, 60, 64],\n        back: [60, 52, 64, 64],\n      },\n\n      top: [36, 48, slim ? 39 : 40, 52],\n      bottom: [slim ? 39 : 40, 48, slim ? 42 : 44, 52],\n      left: [32, 52, 36, 64],\n      front: [36, 52, slim ? 39 : 40, 64],\n      right: [slim ? 39 : 40, 52, slim ? 43 : 44, 64],\n      back: [slim ? 43 : 44, 52, slim ? 46 : 48, 64],\n    },\n    rightArm: {\n      h: 0,\n      w: 0,\n      d: 0,\n      x: 0,\n      y: 0,\n      z: 0,\n      layer: {\n        w: 4.5,\n        h: 13.5,\n        d: 4.5,\n        top: [44, 48, 48, 36],\n        bottom: [48, 48, 52, 36],\n        left: [48, 36, 52, 48],\n        front: [44, 36, 48, 48],\n        right: [40, 36, 44, 48],\n        back: [52, 36, 64, 48],\n      },\n      top: [44, 16, slim ? 47 : 48, 20],\n      bottom: [slim ? 47 : 48, 16, slim ? 50 : 52, 20],\n      left: [40, 20, 44, 32],\n      front: [44, 20, slim ? 47 : 48, 32],\n      right: [slim ? 47 : 48, 20, slim ? 51 : 52, 32],\n      back: [slim ? 51 : 52, 20, slim ? 54 : 56, 32],\n    },\n    leftLeg: {\n      h: 0,\n      w: 0,\n      d: 0,\n      x: 0,\n      y: 0,\n      z: 0,\n      layer: {\n        w: 4.5,\n        d: 4.5,\n        h: 13.5,\n        top: [4, 48, 8, 52],\n        bottom: [8, 48, 12, 52],\n        right: [0, 52, 4, 64],\n        front: [4, 52, 8, 64],\n        left: [8, 52, 12, 64],\n        back: [12, 52, 16, 64],\n      },\n      top: [20, 48, 24, 52],\n      bottom: [24, 48, 28, 52],\n      right: [16, 52, 20, 64],\n      front: [20, 52, 24, 64],\n      left: [24, 52, 28, 64],\n      back: [28, 52, 32, 64],\n    },\n\n    cape: {\n      x: 0,\n      y: 0,\n      z: 0,\n      h: 0,\n      w: 0,\n      d: 0,\n      top: [1, 0, 11, 1],\n      bottom: [11, 0, 21, 1],\n      left: [11, 1, 12, 17],\n      front: [12, 1, 22, 17],\n      right: [0, 1, 1, 17],\n      back: [1, 1, 11, 17],\n    },\n  }\n}\n\nconst PIXRATIO = 1 / 32\n\nfunction create(slim: boolean) {\n  function decorateDimension(group: ModelTemplate) {\n    function calculate(model: Part) {\n      return {\n        h: Math.abs(model.front[1] - model.front[3]) * PIXRATIO,\n        w: Math.abs(model.front[0] - model.front[2]) * PIXRATIO,\n        d: Math.abs(model.right[0] - model.right[2]) * PIXRATIO,\n      }\n    }\n    for (const part of Object.values(group)) {\n      Object.assign(part, calculate(part))\n      if ('layer' in part) {\n        part.layer.w *= PIXRATIO\n        part.layer.h *= PIXRATIO\n        part.layer.d *= PIXRATIO\n      }\n    }\n    return group\n  }\n  function decoratePos(group: ModelTemplate) {\n    const charH = 1\n    group.head.y = charH - group.head.h / 2\n    group.torso.y = group.rightLeg.h + group.torso.h / 2\n\n    group.rightLeg.x = -group.rightLeg.w / 2\n    group.rightLeg.y = group.rightLeg.h / 2\n    group.leftLeg.x = group.leftLeg.w / 2\n    group.leftLeg.y = group.leftLeg.h / 2\n\n    group.rightArm.x = -group.torso.w / 2 - group.rightArm.w / 2\n    group.rightArm.y = group.rightLeg.h + group.torso.h - group.rightArm.h / 2\n\n    group.leftArm.x = group.torso.w / 2 + group.leftArm.w / 2\n    group.leftArm.y = group.leftLeg.h + group.torso.h - group.leftArm.h / 2\n\n    group.cape.y = group.rightLeg.h + group.torso.h / 5 * 2\n    group.cape.z = -group.torso.d * 3 / 2\n    return group\n  }\n  return decoratePos(decorateDimension(createGroup(slim)))\n}\n\nexport default {\n  steve: create(false),\n  alex: create(true),\n}\n"],
  "mappings": "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",
  "names": ["BufferAttribute", "Vector2", "NearestFilter", "Object3D", "BoxGeometry", "MeshBasicMaterial", "Mesh", "Vector2", "uvs", "BufferAttribute", "Object3D", "BoxGeometry", "Mesh", "NearestFilter", "MeshBasicMaterial"]
}
