diff --git a/js/build/revision b/js/build/revision index 51a4e23..51da4d9 100644 --- a/js/build/revision +++ b/js/build/revision @@ -1 +1 @@ -1ead26e313137a397c32470b2aedc62b8cc2495f +482f7e8d96080b8ce6374fdc40d7a0b2eb3d549c diff --git a/js/build/skinview3d.js b/js/build/skinview3d.js index de16988..40f2e74 100644 --- a/js/build/skinview3d.js +++ b/js/build/skinview3d.js @@ -55,14 +55,6 @@ }; }(); - - - - - - - - var inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); @@ -79,16 +71,6 @@ if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }; - - - - - - - - - - var possibleConstructorReturn = function (self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); @@ -533,17 +515,17 @@ this.skinCanvas = document.createElement("canvas"); this.skinTexture = new THREE.Texture(this.skinCanvas); this.skinTexture.magFilter = THREE.NearestFilter; - this.skinTexture.minFilter = THREE.NearestMipMapNearestFilter; + this.skinTexture.minFilter = THREE.NearestFilter; this.capeImg = new Image(); this.capeCanvas = document.createElement("canvas"); this.capeTexture = new THREE.Texture(this.capeCanvas); this.capeTexture.magFilter = THREE.NearestFilter; - this.capeTexture.minFilter = THREE.NearestMipMapNearestFilter; + this.capeTexture.minFilter = THREE.NearestFilter; this.layer1Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, side: THREE.FrontSide }); - this.layer2Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: THREE.DoubleSide }); - this.capeMaterial = new THREE.MeshBasicMaterial({ map: this.capeTexture }); + this.layer2Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: THREE.DoubleSide, alphaTest: 0.5 }); + this.capeMaterial = new THREE.MeshBasicMaterial({ map: this.capeTexture, transparent: true, opacity: 1, side: THREE.DoubleSide, alphaTest: 0.5 }); // scene this.scene = new THREE.Scene(); @@ -564,7 +546,7 @@ this.scene.add(this.playerObject); // texture loading - this.skinImg.crossOrigin = ""; + this.skinImg.crossOrigin = "anonymous"; this.skinImg.onerror = function () { return console.error("Failed loading " + _this.skinImg.src); }; @@ -601,7 +583,7 @@ _this.playerObject.skin.visible = true; }; - this.capeImg.crossOrigin = ""; + this.capeImg.crossOrigin = "anonymous"; this.capeImg.onerror = function () { return console.error("Failed loading " + _this.capeImg.src); }; @@ -1125,6 +1107,9 @@ panStart.copy(panEnd); scope.update(); } + // + // event handlers - FSM: listen for events and reset state + // function onMouseDown(event) { if (scope.enabled === false) return; switch (event.button) { diff --git a/js/build/skinview3d.js.map b/js/build/skinview3d.js.map index 5eaa3e7..fd8e0a6 100644 --- a/js/build/skinview3d.js.map +++ b/js/build/skinview3d.js.map @@ -1 +1 @@ -{"version":3,"file":"skinview3d.js","sources":["../src/model.js","../src/animation.js","../src/viewer.js","../src/orbit_controls.js"],"sourcesContent":["import * as THREE from \"three\";\n\nfunction toFaceVertices(x1, y1, x2, y2, w, h) {\n\treturn [\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y1 / h),\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y1 / h)\n\t];\n}\n\nfunction toSkinVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 64.0);\n}\n\nfunction toCapeVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 32.0);\n}\n\nfunction addVertices(box, top, bottom, left, front, right, back) {\n\tbox.faceVertexUvs[0] = [];\n\tbox.faceVertexUvs[0][0] = [right[3], right[0], right[2]];\n\tbox.faceVertexUvs[0][1] = [right[0], right[1], right[2]];\n\tbox.faceVertexUvs[0][2] = [left[3], left[0], left[2]];\n\tbox.faceVertexUvs[0][3] = [left[0], left[1], left[2]];\n\tbox.faceVertexUvs[0][4] = [top[3], top[0], top[2]];\n\tbox.faceVertexUvs[0][5] = [top[0], top[1], top[2]];\n\tbox.faceVertexUvs[0][6] = [bottom[0], bottom[3], bottom[1]];\n\tbox.faceVertexUvs[0][7] = [bottom[3], bottom[2], bottom[1]];\n\tbox.faceVertexUvs[0][8] = [front[3], front[0], front[2]];\n\tbox.faceVertexUvs[0][9] = [front[0], front[1], front[2]];\n\tbox.faceVertexUvs[0][10] = [back[3], back[0], back[2]];\n\tbox.faceVertexUvs[0][11] = [back[0], back[1], back[2]];\n}\n\nconst esp = 0.002;\n\nclass SkinObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material) {\n\t\tsuper();\n\n\t\tthis.slim = slim;\n\n\t\t// Head\n\t\tthis.head = new THREE.Group();\n\n\t\tlet headBox = new THREE.BoxGeometry(8, 8, 8, 0, 0, 0);\n\t\taddVertices(headBox,\n\t\t\ttoSkinVertices(8, 0, 16, 8),\n\t\t\ttoSkinVertices(16, 0, 24, 8),\n\t\t\ttoSkinVertices(0, 8, 8, 16),\n\t\t\ttoSkinVertices(8, 8, 16, 16),\n\t\t\ttoSkinVertices(16, 8, 24, 16),\n\t\t\ttoSkinVertices(24, 8, 32, 16)\n\t\t);\n\t\tlet headMesh = new THREE.Mesh(headBox, layer1Material);\n\t\tthis.head.add(headMesh);\n\n\t\tlet head2Box = new THREE.BoxGeometry(9, 9, 9, 0, 0, 0);\n\t\taddVertices(head2Box,\n\t\t\ttoSkinVertices(40, 0, 48, 8),\n\t\t\ttoSkinVertices(48, 0, 56, 8),\n\t\t\ttoSkinVertices(32, 8, 40, 16),\n\t\t\ttoSkinVertices(40, 8, 48, 16),\n\t\t\ttoSkinVertices(48, 8, 56, 16),\n\t\t\ttoSkinVertices(56, 8, 64, 16)\n\t\t);\n\t\tlet head2Mesh = new THREE.Mesh(head2Box, layer2Material);\n\t\thead2Mesh.renderOrder = -1;\n\t\tthis.head.add(head2Mesh);\n\n\t\tthis.add(this.head);\n\n\n\t\t// Body\n\t\tthis.body = new THREE.Group();\n\n\t\tlet bodyBox = new THREE.BoxGeometry(8, 12, 4, 0, 0, 0);\n\t\taddVertices(bodyBox,\n\t\t\ttoSkinVertices(20, 16, 28, 20),\n\t\t\ttoSkinVertices(28, 16, 36, 20),\n\t\t\ttoSkinVertices(16, 20, 20, 32),\n\t\t\ttoSkinVertices(20, 20, 28, 32),\n\t\t\ttoSkinVertices(28, 20, 32, 32),\n\t\t\ttoSkinVertices(32, 20, 40, 32)\n\t\t);\n\t\tlet bodyMesh = new THREE.Mesh(bodyBox, layer1Material);\n\t\tthis.body.add(bodyMesh);\n\n\t\tlet body2Box = new THREE.BoxGeometry(9, 13.5, 4.5, 0, 0, 0);\n\t\taddVertices(body2Box,\n\t\t\ttoSkinVertices(20, 32, 28, 36),\n\t\t\ttoSkinVertices(28, 32, 36, 36),\n\t\t\ttoSkinVertices(16, 36, 20, 48),\n\t\t\ttoSkinVertices(20, 36, 28, 48),\n\t\t\ttoSkinVertices(28, 36, 32, 48),\n\t\t\ttoSkinVertices(32, 36, 40, 48)\n\t\t);\n\t\tlet body2Mesh = new THREE.Mesh(body2Box, layer2Material);\n\t\tthis.body.add(body2Mesh);\n\n\t\tthis.body.position.y = -10;\n\t\tthis.add(this.body);\n\n\n\t\t// Right Arm\n\t\tthis.rightArm = new THREE.Group();\n\t\tlet rightArmPivot = new THREE.Group();\n\n\t\tlet rightArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 47, 20),\n\t\t\t\ttoSkinVertices(47, 16, 50, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 47, 32),\n\t\t\t\ttoSkinVertices(47, 20, 51, 32),\n\t\t\t\ttoSkinVertices(51, 20, 54, 32)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 48, 20),\n\t\t\t\ttoSkinVertices(48, 16, 52, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 48, 32),\n\t\t\t\ttoSkinVertices(48, 20, 52, 32),\n\t\t\t\ttoSkinVertices(52, 20, 56, 32)\n\t\t\t);\n\t\t}\n\t\tlet rightArmMesh = new THREE.Mesh(rightArmBox, layer1Material);\n\t\trightArmPivot.add(rightArmMesh);\n\n\t\tlet rightArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 47, 36),\n\t\t\t\ttoSkinVertices(47, 32, 50, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 47, 48),\n\t\t\t\ttoSkinVertices(47, 36, 51, 48),\n\t\t\t\ttoSkinVertices(51, 36, 54, 48)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 48, 36),\n\t\t\t\ttoSkinVertices(48, 32, 52, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 48, 48),\n\t\t\t\ttoSkinVertices(48, 36, 52, 48),\n\t\t\t\ttoSkinVertices(52, 36, 56, 48)\n\t\t\t);\n\t\t}\n\t\tlet rightArm2Mesh = new THREE.Mesh(rightArm2Box, layer2Material);\n\t\trightArm2Mesh.renderOrder = 1;\n\t\trightArmPivot.add(rightArm2Mesh);\n\n\t\trightArmPivot.position.y = -6;\n\t\tthis.rightArm.add(rightArmPivot);\n\t\tthis.rightArm.position.y = -4;\n\t\tthis.rightArm.position.x = slim ? -5.5 : -6;\n\t\tthis.add(this.rightArm);\n\n\n\t\t// Left Arm\n\t\tthis.leftArm = new THREE.Group();\n\t\tlet leftArmPivot = new THREE.Group();\n\n\t\tlet leftArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 39, 52),\n\t\t\t\ttoSkinVertices(39, 48, 42, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 39, 64),\n\t\t\t\ttoSkinVertices(39, 52, 43, 64),\n\t\t\t\ttoSkinVertices(43, 52, 46, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 40, 52),\n\t\t\t\ttoSkinVertices(40, 48, 44, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 40, 64),\n\t\t\t\ttoSkinVertices(40, 52, 44, 64),\n\t\t\t\ttoSkinVertices(44, 52, 48, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArmMesh = new THREE.Mesh(leftArmBox, layer1Material);\n\t\tleftArmPivot.add(leftArmMesh);\n\n\t\tlet leftArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 55, 52),\n\t\t\t\ttoSkinVertices(55, 48, 58, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 55, 64),\n\t\t\t\ttoSkinVertices(55, 52, 59, 64),\n\t\t\t\ttoSkinVertices(59, 52, 62, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 56, 52),\n\t\t\t\ttoSkinVertices(56, 48, 60, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 56, 64),\n\t\t\t\ttoSkinVertices(56, 52, 60, 64),\n\t\t\t\ttoSkinVertices(60, 52, 64, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArm2Mesh = new THREE.Mesh(leftArm2Box, layer2Material);\n\t\tleftArm2Mesh.renderOrder = 1;\n\t\tleftArmPivot.add(leftArm2Mesh);\n\n\t\tleftArmPivot.position.y = -6;\n\t\tthis.leftArm.add(leftArmPivot);\n\t\tthis.leftArm.position.y = -4;\n\t\tthis.leftArm.position.x = slim ? 5.5 : 6;\n\t\tthis.add(this.leftArm);\n\n\n\t\t// Right Leg\n\t\tthis.rightLeg = new THREE.Group();\n\t\tlet rightLegPivot = new THREE.Group();\n\n\t\tlet rightLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(rightLegBox,\n\t\t\ttoSkinVertices(4, 16, 8, 20),\n\t\t\ttoSkinVertices(8, 16, 12, 20),\n\t\t\ttoSkinVertices(0, 20, 4, 32),\n\t\t\ttoSkinVertices(4, 20, 8, 32),\n\t\t\ttoSkinVertices(8, 20, 12, 32),\n\t\t\ttoSkinVertices(12, 20, 16, 32)\n\t\t);\n\t\tlet rightLegMesh = new THREE.Mesh(rightLegBox, layer1Material);\n\t\trightLegPivot.add(rightLegMesh);\n\n\t\tlet rightLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(rightLeg2Box,\n\t\t\ttoSkinVertices(4, 32, 8, 36),\n\t\t\ttoSkinVertices(8, 32, 12, 36),\n\t\t\ttoSkinVertices(0, 36, 4, 48),\n\t\t\ttoSkinVertices(4, 36, 8, 48),\n\t\t\ttoSkinVertices(8, 36, 12, 48),\n\t\t\ttoSkinVertices(12, 36, 16, 48)\n\t\t);\n\t\tlet rightLeg2Mesh = new THREE.Mesh(rightLeg2Box, layer2Material);\n\t\trightLeg2Mesh.renderOrder = 1;\n\t\trightLegPivot.add(rightLeg2Mesh);\n\n\t\trightLegPivot.position.y = -6;\n\t\tthis.rightLeg.add(rightLegPivot);\n\t\tthis.rightLeg.position.y = -16;\n\t\tthis.rightLeg.position.x = -2;\n\t\tthis.add(this.rightLeg);\n\n\t\t// Left Leg\n\t\tthis.leftLeg = new THREE.Group();\n\t\tlet leftLegPivot = new THREE.Group();\n\n\t\tlet leftLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(leftLegBox,\n\t\t\ttoSkinVertices(20, 48, 24, 52),\n\t\t\ttoSkinVertices(24, 48, 28, 52),\n\t\t\ttoSkinVertices(16, 52, 20, 64),\n\t\t\ttoSkinVertices(20, 52, 24, 64),\n\t\t\ttoSkinVertices(24, 52, 28, 64),\n\t\t\ttoSkinVertices(28, 52, 32, 64)\n\t\t);\n\t\tlet leftLegMesh = new THREE.Mesh(leftLegBox, layer1Material);\n\t\tleftLegPivot.add(leftLegMesh);\n\n\t\tlet leftLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(leftLeg2Box,\n\t\t\ttoSkinVertices(4, 48, 8, 52),\n\t\t\ttoSkinVertices(8, 48, 12, 52),\n\t\t\ttoSkinVertices(0, 52, 4, 64),\n\t\t\ttoSkinVertices(4, 52, 8, 64),\n\t\t\ttoSkinVertices(8, 52, 12, 64),\n\t\t\ttoSkinVertices(12, 52, 16, 64)\n\t\t);\n\t\tlet leftLeg2Mesh = new THREE.Mesh(leftLeg2Box, layer2Material);\n\t\tleftLeg2Mesh.renderOrder = 1;\n\t\tleftLegPivot.add(leftLeg2Mesh);\n\n\t\tleftLegPivot.position.y = -6;\n\t\tthis.leftLeg.add(leftLegPivot);\n\t\tthis.leftLeg.position.y = -16;\n\t\tthis.leftLeg.position.x = 2;\n\t\tthis.add(this.leftLeg);\n\t}\n}\n\nclass CapeObject extends THREE.Group {\n\tconstructor(capeMaterial) {\n\t\tsuper();\n\n\t\t// back = outside\n\t\t// front = inside\n\t\tlet capeBox = new THREE.BoxGeometry(10, 16, 1, 0, 0, 0);\n\t\taddVertices(capeBox,\n\t\t\ttoCapeVertices(1, 0, 11, 1),\n\t\t\ttoCapeVertices(11, 0, 21, 1),\n\t\t\ttoCapeVertices(11, 1, 12, 17),\n\t\t\ttoCapeVertices(12, 1, 22, 17),\n\t\t\ttoCapeVertices(0, 1, 1, 17),\n\t\t\ttoCapeVertices(1, 1, 11, 17)\n\t\t);\n\t\tthis.cape = new THREE.Mesh(capeBox, capeMaterial);\n\t\tthis.cape.position.y = -8;\n\t\tthis.cape.position.z = -0.5;\n\t\tthis.add(this.cape);\n\t}\n}\n\nclass PlayerObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material, capeMaterial) {\n\t\tsuper();\n\n\t\tthis.skin = new SkinObject(slim, layer1Material, layer2Material);\n\t\tthis.skin.visible = false;\n\t\tthis.add(this.skin);\n\n\t\tthis.cape = new CapeObject(capeMaterial);\n\t\tthis.cape.position.z = -2;\n\t\tthis.cape.position.y = -4;\n\t\tthis.cape.rotation.x = 25 * Math.PI / 180;\n\t\tthis.cape.visible = false;\n\t\tthis.add(this.cape);\n\t}\n}\n\nexport { SkinObject, CapeObject, PlayerObject };\n","function invokeAnimation(animation, player, time) {\n\tif (animation instanceof CompositeAnimation) {\n\t\tanimation.play(player, time);\n\t} else if (animation instanceof Function) {\n\t\tanimation(player, time);\n\t} else {\n\t\tthrow `Not an animation: ${animation}`;\n\t}\n}\n\nclass AnimationHandle {\n\tconstructor(animation) {\n\t\tthis.animation = animation;\n\t\tthis.paused = this._paused = false;\n\t\tthis.speed = this._speed = 1.0;\n\t\tthis._lastChange = null;\n\t\tthis._lastChangeX = null;\n\t}\n\tplay(player, time) {\n\t\tif (this._lastChange === null) {\n\t\t\tthis._lastChange = time;\n\t\t\tthis._lastChangeX = 0;\n\t\t} else if (this.paused !== this._paused || this.speed !== this._speed) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tif (this._paused === false) {\n\t\t\t\tthis._lastChangeX += dt * this._speed;\n\t\t\t}\n\t\t\tthis._paused = this.paused;\n\t\t\tthis._speed = this.speed;\n\t\t\tthis._lastChange = time;\n\t\t}\n\t\tif (this.paused === false) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tlet x = this._lastChangeX + this.speed * dt;\n\t\t\tinvokeAnimation(this.animation, player, x);\n\t\t}\n\t}\n\treset(){\n\t\tthis._lastChange = null;\n\t}\n}\n\nclass CompositeAnimation {\n\tconstructor() {\n\t\tthis.handles = new Set();\n\t}\n\tadd(animation) {\n\t\tlet handle = new AnimationHandle(animation);\n\t\thandle.remove = () => this.handles.delete(handle);\n\t\tthis.handles.add(handle);\n\t\treturn handle;\n\t}\n\tplay(player, time) {\n\t\tthis.handles.forEach(handle => handle.play(player, time));\n\t}\n}\n\nlet WalkingAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\t// Multiply by animation's natural speed\n\ttime *= 8;\n\n\t// Leg swing\n\tskin.leftLeg.rotation.x = Math.sin(time) * 0.5;\n\tskin.rightLeg.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\tskin.rightArm.rotation.x = Math.sin(time) * 0.5;\n\tlet basicArmRotationZ = Math.PI * 0.02;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.03 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.03 - basicArmRotationZ;\n\n\t// Head shaking with different frequency & amplitude\n\tskin.head.rotation.y = Math.sin(time / 4) * 0.2;\n\tskin.head.rotation.x = Math.sin(time / 5) * 0.1;\n\n\t// Always add an angle for cape around the x axis\n\tlet basicCapeRotationX = Math.PI * 0.06;\n\tplayer.cape.rotation.x = Math.sin(time / 1.5) * 0.06 + basicCapeRotationX;\n};\n\nlet RunningAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\ttime *= 15;\n\n\t// Leg swing with larger amplitude\n\tskin.leftLeg.rotation.x = Math.cos(time + Math.PI) * 1.3;\n\tskin.rightLeg.rotation.x = Math.cos(time) * 1.3;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.cos(time) * 1.5;\n\tskin.rightArm.rotation.x = Math.cos(time + Math.PI) * 1.5;\n\tlet basicArmRotationZ = Math.PI * 0.1;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.1 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.1 - basicArmRotationZ;\n\n\t// Jumping\n\tplayer.position.y = Math.cos(time * 2);\n\t// Dodging when running\n\tplayer.position.x = Math.cos(time) * 0.15;\n\t// Slightly tilting when running\n\tplayer.rotation.z = Math.cos(time + Math.PI) * 0.01;\n\n\t// Apply higher swing frequency, lower amplitude,\n\t// and greater basic rotation around x axis,\n\t// to cape when running.\n\tlet basicCapeRotationX = Math.PI * 0.3;\n\tplayer.cape.rotation.x = Math.sin(time * 2) * 0.1 + basicCapeRotationX;\n\n\t// What about head shaking?\n\t// You shouldn't glance right and left when running dude :P\n};\n\nlet RotatingAnimation = (player, time) => {\n\tplayer.rotation.y = time;\n};\n\nexport {\n\tCompositeAnimation,\n\tinvokeAnimation,\n\tWalkingAnimation,\n\tRunningAnimation,\n\tRotatingAnimation\n};\n","import * as THREE from \"three\";\nimport { PlayerObject } from \"./model\";\nimport { invokeAnimation } from \"./animation\";\n\nfunction copyImage(context, sX, sY, w, h, dX, dY, flipHorizontal) {\n\tlet imgData = context.getImageData(sX, sY, w, h);\n\tif (flipHorizontal) {\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < (w / 2); x++) {\n\t\t\t\tlet index = (x + y * w) * 4;\n\t\t\t\tlet index2 = ((w - x - 1) + y * w) * 4;\n\t\t\t\tlet pA1 = imgData.data[index];\n\t\t\t\tlet pA2 = imgData.data[index + 1];\n\t\t\t\tlet pA3 = imgData.data[index + 2];\n\t\t\t\tlet pA4 = imgData.data[index + 3];\n\n\t\t\t\tlet pB1 = imgData.data[index2];\n\t\t\t\tlet pB2 = imgData.data[index2 + 1];\n\t\t\t\tlet pB3 = imgData.data[index2 + 2];\n\t\t\t\tlet pB4 = imgData.data[index2 + 3];\n\n\t\t\t\timgData.data[index] = pB1;\n\t\t\t\timgData.data[index + 1] = pB2;\n\t\t\t\timgData.data[index + 2] = pB3;\n\t\t\t\timgData.data[index + 3] = pB4;\n\n\t\t\t\timgData.data[index2] = pA1;\n\t\t\t\timgData.data[index2 + 1] = pA2;\n\t\t\t\timgData.data[index2 + 2] = pA3;\n\t\t\t\timgData.data[index2 + 3] = pA4;\n\t\t\t}\n\t\t}\n\t}\n\tcontext.putImageData(imgData, dX, dY);\n}\n\nfunction convertSkinTo1_8(context, width) {\n\tlet scale = width / 64.0;\n\tlet copySkin = (context, sX, sY, w, h, dX, dY, flipHorizontal) => copyImage(context, sX * scale, sY * scale, w * scale, h * scale, dX * scale, dY * scale, flipHorizontal);\n\n\tcopySkin(context, 4, 16, 4, 4, 20, 48, true); // Top Leg\n\tcopySkin(context, 8, 16, 4, 4, 24, 48, true); // Bottom Leg\n\tcopySkin(context, 0, 20, 4, 12, 24, 52, true); // Outer Leg\n\tcopySkin(context, 4, 20, 4, 12, 20, 52, true); // Front Leg\n\tcopySkin(context, 8, 20, 4, 12, 16, 52, true); // Inner Leg\n\tcopySkin(context, 12, 20, 4, 12, 28, 52, true); // Back Leg\n\tcopySkin(context, 44, 16, 4, 4, 36, 48, true); // Top Arm\n\tcopySkin(context, 48, 16, 4, 4, 40, 48, true); // Bottom Arm\n\tcopySkin(context, 40, 20, 4, 12, 40, 52, true); // Outer Arm\n\tcopySkin(context, 44, 20, 4, 12, 36, 52, true); // Front Arm\n\tcopySkin(context, 48, 20, 4, 12, 32, 52, true); // Inner Arm\n\tcopySkin(context, 52, 20, 4, 12, 44, 52, true); // Back Arm\n}\n\nclass SkinViewer {\n\tconstructor(options) {\n\t\tthis.domElement = options.domElement;\n\t\tthis.animation = options.animation || null;\n\t\tthis.animationPaused = false;\n\t\tthis.animationTime = 0;\n\t\tthis.disposed = false;\n\n\t\t// texture\n\t\tthis.skinImg = new Image();\n\t\tthis.skinCanvas = document.createElement(\"canvas\");\n\t\tthis.skinTexture = new THREE.Texture(this.skinCanvas);\n\t\tthis.skinTexture.magFilter = THREE.NearestFilter;\n\t\tthis.skinTexture.minFilter = THREE.NearestMipMapNearestFilter;\n\n\t\tthis.capeImg = new Image();\n\t\tthis.capeCanvas = document.createElement(\"canvas\");\n\t\tthis.capeTexture = new THREE.Texture(this.capeCanvas);\n\t\tthis.capeTexture.magFilter = THREE.NearestFilter;\n\t\tthis.capeTexture.minFilter = THREE.NearestMipMapNearestFilter;\n\n\t\tthis.layer1Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, side: THREE.FrontSide });\n\t\tthis.layer2Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: THREE.DoubleSide });\n\t\tthis.capeMaterial = new THREE.MeshBasicMaterial({ map: this.capeTexture });\n\n\t\t// scene\n\t\tthis.scene = new THREE.Scene();\n\n\t\t// Use smaller fov to avoid distortion\n\t\tthis.camera = new THREE.PerspectiveCamera(40);\n\t\tthis.camera.position.y = -12;\n\t\tthis.camera.position.z = 60;\n\n\t\tthis.renderer = new THREE.WebGLRenderer({ angleRot: true, alpha: true, antialias: false });\n\t\tthis.renderer.setSize(300, 300); // default size\n\t\tthis.renderer.context.getShaderInfoLog = () => \"\"; // shut firefox up\n\t\tthis.domElement.appendChild(this.renderer.domElement);\n\n\t\tthis.playerObject = new PlayerObject(options.slim === true, this.layer1Material, this.layer2Material, this.capeMaterial);\n\t\tthis.scene.add(this.playerObject);\n\n\t\t// texture loading\n\t\tthis.skinImg.crossOrigin = \"\";\n\t\tthis.skinImg.onerror = () => console.error(\"Failed loading \" + this.skinImg.src);\n\t\tthis.skinImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.skinImg.width !== this.skinImg.height) {\n\t\t\t\tif (this.skinImg.width === 2 * this.skinImg.height) {\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad skin size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet skinContext = this.skinCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.width = width;\n\t\t\t\tthis.skinCanvas.height = width;\n\t\t\t\tskinContext.clearRect(0, 0, width, width);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, width, width / 2.0);\n\t\t\t\tconvertSkinTo1_8(skinContext, width);\n\t\t\t} else {\n\t\t\t\tthis.skinCanvas.width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.height = this.skinImg.height;\n\t\t\t\tskinContext.clearRect(0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t}\n\n\t\t\tthis.skinTexture.needsUpdate = true;\n\t\t\tthis.layer1Material.needsUpdate = true;\n\t\t\tthis.layer2Material.needsUpdate = true;\n\n\t\t\tthis.playerObject.skin.visible = true;\n\t\t};\n\n\t\tthis.capeImg.crossOrigin = \"\";\n\t\tthis.capeImg.onerror = () => console.error(\"Failed loading \" + this.capeImg.src);\n\t\tthis.capeImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.capeImg.width !== 2 * this.capeImg.height) {\n\t\t\t\tif (this.capeImg.width * 17 == this.capeImg.height * 22) {\n\t\t\t\t\t// width/height = 22/17\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad cape size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet capeContext = this.capeCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.capeImg.width * 64 / 22;\n\t\t\t\tthis.capeCanvas.width = width;\n\t\t\t\tthis.capeCanvas.height = width / 2;\n\t\t\t} else {\n\t\t\t\tthis.capeCanvas.width = this.capeImg.width;\n\t\t\t\tthis.capeCanvas.height = this.capeImg.height;\n\t\t\t}\n\t\t\tcapeContext.clearRect(0, 0, this.capeCanvas.width, this.capeCanvas.height);\n\t\t\tcapeContext.drawImage(this.capeImg, 0, 0, this.capeImg.width, this.capeImg.height);\n\n\t\t\tthis.capeTexture.needsUpdate = true;\n\t\t\tthis.capeMaterial.needsUpdate = true;\n\n\t\t\tthis.playerObject.cape.visible = true;\n\t\t};\n\n\t\tif (options.skinUrl) this.skinUrl = options.skinUrl;\n\t\tif (options.capeUrl) this.capeUrl = options.capeUrl;\n\t\tif (options.width) this.width = options.width;\n\t\tif (options.height) this.height = options.height;\n\n\t\tlet draw = () => {\n\t\t\tif (this.disposed) return;\n\t\t\twindow.requestAnimationFrame(draw);\n\t\t\tif (!this.animationPaused) {\n\t\t\t\tthis.animationTime++;\n\t\t\t\tif (this.animation) {\n\t\t\t\t\tinvokeAnimation(this.animation, this.playerObject, this.animationTime / 100.0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.renderer.render(this.scene, this.camera);\n\t\t};\n\t\tdraw();\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.camera.aspect = width / height;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.renderer.setSize(width, height);\n\t}\n\n\tdispose() {\n\t\tthis.disposed = true;\n\t\tthis.domElement.removeChild(this.renderer.domElement);\n\t\tthis.renderer.dispose();\n\t\tthis.skinTexture.dispose();\n\t\tthis.capeTexture.dispose();\n\t}\n\n\tget skinUrl() {\n\t\treturn this.skinImg.src;\n\t}\n\n\tset skinUrl(url) {\n\t\tthis.skinImg.src = url;\n\t}\n\n\tget capeUrl() {\n\t\treturn this.capeImg.src;\n\t}\n\n\tset capeUrl(url) {\n\t\tthis.capeImg.src = url;\n\t}\n\n\tget width() {\n\t\treturn this.renderer.getSize().width;\n\t}\n\n\tset width(newWidth) {\n\t\tthis.setSize(newWidth, this.height);\n\t}\n\n\tget height() {\n\t\treturn this.renderer.getSize().height;\n\t}\n\n\tset height(newHeight) {\n\t\tthis.setSize(this.width, newHeight);\n\t}\n}\n\nexport { SkinViewer };\n","import * as THREE from \"three\";\n\nclass OrbitControls extends THREE.EventDispatcher {\n\t/**\n\t * @preserve\n\t * The code was originally from https://github.com/mrdoob/three.js/blob/d45a042cf962e9b1aa9441810ba118647b48aacb/examples/js/controls/OrbitControls.js\n\t */\n\t/**\n\t * @license\n\t * Copyright (C) 2010-2017 three.js authors\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t *\n\t *\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t */\n\n\t// This set of controls performs orbiting, dollying (zooming), and panning.\n\t// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n\t//\n\t// Orbit - left mouse / touch: one finger move\n\t// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n\t// Pan - right mouse, or arrow keys / touch: three finger swipe\n\n\tconstructor(object, domElement) {\n\t\tsuper();\n\t\tthis.object = object;\n\t\tthis.domElement = (domElement !== undefined) ? domElement : document;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new THREE.Vector3();\n\n\t\t// How far you can dolly in and out (PerspectiveCamera only)\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out (OrthographicCamera only)\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\t\tthis.minAzimuthAngle = -Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.25;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t\t// Set to false to disable use of the keys\n\t\tthis.enableKeys = true;\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\t\tthis.getPolarAngle = function () {\n\t\t\treturn spherical.phi;\n\t\t};\n\t\tthis.getAzimuthalAngle = function () {\n\t\t\treturn spherical.theta;\n\t\t};\n\t\tthis.saveState = function () {\n\t\t\tscope.target0.copy(scope.target);\n\t\t\tscope.position0.copy(scope.object.position);\n\t\t\tscope.zoom0 = scope.object.zoom;\n\t\t};\n\t\tthis.reset = function () {\n\t\t\tscope.target.copy(scope.target0);\n\t\t\tscope.object.position.copy(scope.position0);\n\t\t\tscope.object.zoom = scope.zoom0;\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\tscope.update();\n\t\t\tstate = STATE.NONE;\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\t// so camera.up is the orbit axis\n\t\t\tlet quat = new THREE.Quaternion().setFromUnitVectors(object.up, new THREE.Vector3(0, 1, 0));\n\t\t\tlet quatInverse = quat.clone().inverse();\n\t\t\tlet lastPosition = new THREE.Vector3();\n\t\t\tlet lastQuaternion = new THREE.Quaternion();\n\t\t\treturn function update() {\n\t\t\t\tlet position = scope.object.position;\n\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion(quat);\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3(offset);\n\t\t\t\tif (scope.autoRotate && state === STATE.NONE) {\n\t\t\t\t\trotateLeft(getAutoRotationAngle());\n\t\t\t\t}\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\t\t\t\t// restrict theta to be between desired limits\n\t\t\t\tspherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n\t\t\t\tspherical.makeSafe();\n\t\t\t\tspherical.radius *= scale;\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n\t\t\t\t// move target to panned location\n\t\t\t\tscope.target.add(panOffset);\n\t\t\t\toffset.setFromSpherical(spherical);\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion(quatInverse);\n\t\t\t\tposition.copy(scope.target).add(offset);\n\t\t\t\tscope.object.lookAt(scope.target);\n\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\tsphericalDelta.theta *= (1 - scope.dampingFactor);\n\t\t\t\t\tsphericalDelta.phi *= (1 - scope.dampingFactor);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsphericalDelta.set(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tscale = 1;\n\t\t\t\tpanOffset.set(0, 0, 0);\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\t\t\t\tif (zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared(scope.object.position) > EPS ||\n\t\t\t\t\t8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\t\t\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\t\t\tlastPosition.copy(scope.object.position);\n\t\t\t\t\tlastQuaternion.copy(scope.object.quaternion);\n\t\t\t\t\tzoomChanged = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}();\n\t\tthis.dispose = function () {\n\t\t\tscope.domElement.removeEventListener(\"contextmenu\", onContextMenu, false);\n\t\t\tscope.domElement.removeEventListener(\"mousedown\", onMouseDown, false);\n\t\t\tscope.domElement.removeEventListener(\"wheel\", onMouseWheel, false);\n\t\t\tscope.domElement.removeEventListener(\"touchstart\", onTouchStart, false);\n\t\t\tscope.domElement.removeEventListener(\"touchend\", onTouchEnd, false);\n\t\t\tscope.domElement.removeEventListener(\"touchmove\", onTouchMove, false);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\twindow.removeEventListener(\"keydown\", onKeyDown, false);\n\t\t\t//scope.dispatchEvent({ type: \"dispose\" }); // should this be added here?\n\t\t};\n\t\t//\n\t\t// internals\n\t\t//\n\t\tlet scope = this;\n\t\tlet changeEvent = { type: \"change\" };\n\t\tlet startEvent = { type: \"start\" };\n\t\tlet endEvent = { type: \"end\" };\n\t\tlet STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 };\n\t\tlet state = STATE.NONE;\n\t\tlet EPS = 0.000001;\n\t\t// current position in spherical coordinates\n\t\tlet spherical = new THREE.Spherical();\n\t\tlet sphericalDelta = new THREE.Spherical();\n\t\tlet scale = 1;\n\t\tlet panOffset = new THREE.Vector3();\n\t\tlet zoomChanged = false;\n\t\tlet rotateStart = new THREE.Vector2();\n\t\tlet rotateEnd = new THREE.Vector2();\n\t\tlet rotateDelta = new THREE.Vector2();\n\t\tlet panStart = new THREE.Vector2();\n\t\tlet panEnd = new THREE.Vector2();\n\t\tlet panDelta = new THREE.Vector2();\n\t\tlet dollyStart = new THREE.Vector2();\n\t\tlet dollyEnd = new THREE.Vector2();\n\t\tlet dollyDelta = new THREE.Vector2();\n\t\tfunction getAutoRotationAngle() {\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\t\t}\n\t\tfunction getZoomScale() {\n\t\t\treturn Math.pow(0.95, scope.zoomSpeed);\n\t\t}\n\t\tfunction rotateLeft(angle) {\n\t\t\tsphericalDelta.theta -= angle;\n\t\t}\n\t\tfunction rotateUp(angle) {\n\t\t\tsphericalDelta.phi -= angle;\n\t\t}\n\t\tlet panLeft = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panLeft(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar(-distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\tlet panUp = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panUp(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n\t\t\t\tv.multiplyScalar(distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tlet pan = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\treturn function pan(deltaX, deltaY) {\n\t\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\t\t// perspective\n\t\t\t\t\tlet position = scope.object.position;\n\t\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t\tlet targetDistance = offset.length();\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0);\n\t\t\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\n\t\t\t\t\tpanLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t\tpanUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n\t\t\t\t\tpanUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n\t\t\t\t\tscope.enablePan = false;\n\t\t\t\t}\n\t\t\t};\n\t\t}();\n\t\tfunction dollyIn(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale /= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\tfunction dollyOut(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale *= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\t\tfunction handleMouseDownRotate(event) {\n\t\t\trotateStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownDolly(event) {\n\t\t\tdollyStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownPan(event) {\n\t\t\tpanStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseMoveRotate(event) {\n\t\t\trotateEnd.set(event.clientX, event.clientY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMoveDolly(event) {\n\t\t\tdollyEnd.set(event.clientX, event.clientY);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMovePan(event) {\n\t\t\tpanEnd.set(event.clientX, event.clientY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseUp(event) {\n\t\t}\n\t\tfunction handleMouseWheel(event) {\n\t\t\tif (event.deltaY < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (event.deltaY > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleKeyDown(event) {\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan(0, scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan(0, -scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan(scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan(-scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfunction handleTouchStartRotate(event) {\n\t\t\trotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchStartDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyStart.set(0, distance);\n\t\t}\n\t\tfunction handleTouchStartPan(event) {\n\t\t\tpanStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchMoveRotate(event) {\n\t\t\trotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMoveDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyEnd.set(0, distance);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMovePan(event) {\n\t\t\tpanEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchEnd(event) {\n\t\t}\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\t\tfunction onMouseDown(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.button) {\n\t\t\t\tcase scope.mouseButtons.ORBIT:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownRotate(event);\n\t\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.ZOOM:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownDolly(event);\n\t\t\t\t\tstate = STATE.DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownPan(event);\n\t\t\t\t\tstate = STATE.PAN;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tdocument.addEventListener(\"mousemove\", onMouseMove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", onMouseUp, false);\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onMouseMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (state) {\n\t\t\t\tcase STATE.ROTATE:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.DOLLY:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tfunction onMouseUp(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleMouseUp(event);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onMouseWheel(event) {\n\t\t\tif (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE))\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\thandleMouseWheel(event);\n\t\t\tscope.dispatchEvent(startEvent); // not sure why these are here...\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t}\n\t\tfunction onKeyDown(event) {\n\t\t\tif (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\thandleKeyDown(event);\n\t\t}\n\t\tfunction onTouchStart(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartRotate(event);\n\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartDolly(event);\n\t\t\t\t\tstate = STATE.TOUCH_DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartPan(event);\n\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onTouchMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_ROTATE)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_DOLLY)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_PAN)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tfunction onTouchEnd(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleTouchEnd(event);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onContextMenu(event) {\n\t\t\tif (scope.enabled === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t}\n\t\t//\n\t\tscope.domElement.addEventListener(\"contextmenu\", onContextMenu, false);\n\t\tscope.domElement.addEventListener(\"mousedown\", onMouseDown, false);\n\t\tscope.domElement.addEventListener(\"wheel\", onMouseWheel, false);\n\t\tscope.domElement.addEventListener(\"touchstart\", onTouchStart, false);\n\t\tscope.domElement.addEventListener(\"touchend\", onTouchEnd, false);\n\t\tscope.domElement.addEventListener(\"touchmove\", onTouchMove, false);\n\t\twindow.addEventListener(\"keydown\", onKeyDown, false);\n\t\t// force an update at start\n\t\tthis.update();\n\t}\n}\n\nfunction createOrbitControls(skinViewer) {\n\tlet control = new OrbitControls(skinViewer.camera, skinViewer.renderer.domElement);\n\n\t// default configuration\n\tcontrol.enablePan = false;\n\tcontrol.target = new THREE.Vector3(0, -12, 0);\n\tcontrol.minDistance = 10;\n\tcontrol.maxDistance = 256;\n\tcontrol.update();\n\n\treturn control;\n}\n\nexport { OrbitControls, createOrbitControls };\n"],"names":["toFaceVertices","x1","y1","x2","y2","w","h","THREE","toSkinVertices","toCapeVertices","addVertices","box","top","bottom","left","front","right","back","faceVertexUvs","esp","SkinObject","slim","layer1Material","layer2Material","head","headBox","headMesh","add","head2Box","head2Mesh","renderOrder","body","bodyBox","bodyMesh","body2Box","body2Mesh","position","y","rightArm","rightArmPivot","rightArmBox","rightArmMesh","rightArm2Box","rightArm2Mesh","x","leftArm","leftArmPivot","leftArmBox","leftArmMesh","leftArm2Box","leftArm2Mesh","rightLeg","rightLegPivot","rightLegBox","rightLegMesh","rightLeg2Box","rightLeg2Mesh","leftLeg","leftLegPivot","leftLegBox","leftLegMesh","leftLeg2Box","leftLeg2Mesh","CapeObject","capeMaterial","capeBox","cape","z","PlayerObject","skin","visible","rotation","Math","PI","invokeAnimation","animation","player","time","CompositeAnimation","play","Function","AnimationHandle","paused","_paused","speed","_speed","_lastChange","_lastChangeX","dt","handles","Set","handle","remove","delete","forEach","WalkingAnimation","sin","basicArmRotationZ","cos","basicCapeRotationX","RunningAnimation","RotatingAnimation","copyImage","context","sX","sY","dX","dY","flipHorizontal","imgData","getImageData","index","index2","pA1","data","pA2","pA3","pA4","pB1","pB2","pB3","pB4","putImageData","convertSkinTo1_8","width","scale","copySkin","SkinViewer","options","domElement","animationPaused","animationTime","disposed","skinImg","Image","skinCanvas","document","createElement","skinTexture","magFilter","minFilter","capeImg","capeCanvas","capeTexture","map","side","transparent","opacity","scene","camera","renderer","angleRot","alpha","antialias","setSize","getShaderInfoLog","appendChild","playerObject","crossOrigin","onerror","console","error","src","onload","isOldFormat","height","skinContext","getContext","clearRect","drawImage","needsUpdate","capeContext","skinUrl","capeUrl","draw","window","requestAnimationFrame","render","aspect","updateProjectionMatrix","removeChild","dispose","url","getSize","newWidth","newHeight","OrbitControls","object","undefined","enabled","target","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","ZOOM","MIDDLE","PAN","target0","clone","position0","zoom0","zoom","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","scope","copy","reset","dispatchEvent","changeEvent","update","state","STATE","NONE","offset","quat","setFromUnitVectors","up","quatInverse","inverse","lastPosition","lastQuaternion","sub","applyQuaternion","setFromVector3","rotateLeft","getAutoRotationAngle","sphericalDelta","max","min","makeSafe","radius","panOffset","setFromSpherical","lookAt","set","zoomChanged","distanceToSquared","EPS","dot","quaternion","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","type","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY","TOUCH_PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","angle","rotateUp","panLeft","v","distance","objectMatrix","setFromMatrixColumn","multiplyScalar","panUp","pan","deltaX","deltaY","element","targetDistance","length","tan","fov","clientHeight","matrix","clientWidth","warn","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","event","clientX","clientY","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","subVectors","handleMouseMoveDolly","handleMouseMovePan","handleMouseWheel","handleKeyDown","keyCode","handleTouchStartRotate","touches","pageX","pageY","handleTouchStartDolly","dx","dy","sqrt","handleTouchStartPan","handleTouchMoveRotate","handleTouchMoveDolly","handleTouchMovePan","button","preventDefault","addEventListener","handleMouseUp","stopPropagation","handleTouchEnd","createOrbitControls","skinViewer","control"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"skinview3d.js","sources":["../src/model.js","../src/animation.js","../src/viewer.js","../src/orbit_controls.js"],"sourcesContent":["import * as THREE from \"three\";\n\nfunction toFaceVertices(x1, y1, x2, y2, w, h) {\n\treturn [\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y1 / h),\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y1 / h)\n\t];\n}\n\nfunction toSkinVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 64.0);\n}\n\nfunction toCapeVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 32.0);\n}\n\nfunction addVertices(box, top, bottom, left, front, right, back) {\n\tbox.faceVertexUvs[0] = [];\n\tbox.faceVertexUvs[0][0] = [right[3], right[0], right[2]];\n\tbox.faceVertexUvs[0][1] = [right[0], right[1], right[2]];\n\tbox.faceVertexUvs[0][2] = [left[3], left[0], left[2]];\n\tbox.faceVertexUvs[0][3] = [left[0], left[1], left[2]];\n\tbox.faceVertexUvs[0][4] = [top[3], top[0], top[2]];\n\tbox.faceVertexUvs[0][5] = [top[0], top[1], top[2]];\n\tbox.faceVertexUvs[0][6] = [bottom[0], bottom[3], bottom[1]];\n\tbox.faceVertexUvs[0][7] = [bottom[3], bottom[2], bottom[1]];\n\tbox.faceVertexUvs[0][8] = [front[3], front[0], front[2]];\n\tbox.faceVertexUvs[0][9] = [front[0], front[1], front[2]];\n\tbox.faceVertexUvs[0][10] = [back[3], back[0], back[2]];\n\tbox.faceVertexUvs[0][11] = [back[0], back[1], back[2]];\n}\n\nconst esp = 0.002;\n\nclass SkinObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material) {\n\t\tsuper();\n\n\t\tthis.slim = slim;\n\n\t\t// Head\n\t\tthis.head = new THREE.Group();\n\n\t\tlet headBox = new THREE.BoxGeometry(8, 8, 8, 0, 0, 0);\n\t\taddVertices(headBox,\n\t\t\ttoSkinVertices(8, 0, 16, 8),\n\t\t\ttoSkinVertices(16, 0, 24, 8),\n\t\t\ttoSkinVertices(0, 8, 8, 16),\n\t\t\ttoSkinVertices(8, 8, 16, 16),\n\t\t\ttoSkinVertices(16, 8, 24, 16),\n\t\t\ttoSkinVertices(24, 8, 32, 16)\n\t\t);\n\t\tlet headMesh = new THREE.Mesh(headBox, layer1Material);\n\t\tthis.head.add(headMesh);\n\n\t\tlet head2Box = new THREE.BoxGeometry(9, 9, 9, 0, 0, 0);\n\t\taddVertices(head2Box,\n\t\t\ttoSkinVertices(40, 0, 48, 8),\n\t\t\ttoSkinVertices(48, 0, 56, 8),\n\t\t\ttoSkinVertices(32, 8, 40, 16),\n\t\t\ttoSkinVertices(40, 8, 48, 16),\n\t\t\ttoSkinVertices(48, 8, 56, 16),\n\t\t\ttoSkinVertices(56, 8, 64, 16)\n\t\t);\n\t\tlet head2Mesh = new THREE.Mesh(head2Box, layer2Material);\n\t\thead2Mesh.renderOrder = -1;\n\t\tthis.head.add(head2Mesh);\n\n\t\tthis.add(this.head);\n\n\n\t\t// Body\n\t\tthis.body = new THREE.Group();\n\n\t\tlet bodyBox = new THREE.BoxGeometry(8, 12, 4, 0, 0, 0);\n\t\taddVertices(bodyBox,\n\t\t\ttoSkinVertices(20, 16, 28, 20),\n\t\t\ttoSkinVertices(28, 16, 36, 20),\n\t\t\ttoSkinVertices(16, 20, 20, 32),\n\t\t\ttoSkinVertices(20, 20, 28, 32),\n\t\t\ttoSkinVertices(28, 20, 32, 32),\n\t\t\ttoSkinVertices(32, 20, 40, 32)\n\t\t);\n\t\tlet bodyMesh = new THREE.Mesh(bodyBox, layer1Material);\n\t\tthis.body.add(bodyMesh);\n\n\t\tlet body2Box = new THREE.BoxGeometry(9, 13.5, 4.5, 0, 0, 0);\n\t\taddVertices(body2Box,\n\t\t\ttoSkinVertices(20, 32, 28, 36),\n\t\t\ttoSkinVertices(28, 32, 36, 36),\n\t\t\ttoSkinVertices(16, 36, 20, 48),\n\t\t\ttoSkinVertices(20, 36, 28, 48),\n\t\t\ttoSkinVertices(28, 36, 32, 48),\n\t\t\ttoSkinVertices(32, 36, 40, 48)\n\t\t);\n\t\tlet body2Mesh = new THREE.Mesh(body2Box, layer2Material);\n\t\tthis.body.add(body2Mesh);\n\n\t\tthis.body.position.y = -10;\n\t\tthis.add(this.body);\n\n\n\t\t// Right Arm\n\t\tthis.rightArm = new THREE.Group();\n\t\tlet rightArmPivot = new THREE.Group();\n\n\t\tlet rightArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 47, 20),\n\t\t\t\ttoSkinVertices(47, 16, 50, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 47, 32),\n\t\t\t\ttoSkinVertices(47, 20, 51, 32),\n\t\t\t\ttoSkinVertices(51, 20, 54, 32)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 48, 20),\n\t\t\t\ttoSkinVertices(48, 16, 52, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 48, 32),\n\t\t\t\ttoSkinVertices(48, 20, 52, 32),\n\t\t\t\ttoSkinVertices(52, 20, 56, 32)\n\t\t\t);\n\t\t}\n\t\tlet rightArmMesh = new THREE.Mesh(rightArmBox, layer1Material);\n\t\trightArmPivot.add(rightArmMesh);\n\n\t\tlet rightArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 47, 36),\n\t\t\t\ttoSkinVertices(47, 32, 50, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 47, 48),\n\t\t\t\ttoSkinVertices(47, 36, 51, 48),\n\t\t\t\ttoSkinVertices(51, 36, 54, 48)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 48, 36),\n\t\t\t\ttoSkinVertices(48, 32, 52, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 48, 48),\n\t\t\t\ttoSkinVertices(48, 36, 52, 48),\n\t\t\t\ttoSkinVertices(52, 36, 56, 48)\n\t\t\t);\n\t\t}\n\t\tlet rightArm2Mesh = new THREE.Mesh(rightArm2Box, layer2Material);\n\t\trightArm2Mesh.renderOrder = 1;\n\t\trightArmPivot.add(rightArm2Mesh);\n\n\t\trightArmPivot.position.y = -6;\n\t\tthis.rightArm.add(rightArmPivot);\n\t\tthis.rightArm.position.y = -4;\n\t\tthis.rightArm.position.x = slim ? -5.5 : -6;\n\t\tthis.add(this.rightArm);\n\n\n\t\t// Left Arm\n\t\tthis.leftArm = new THREE.Group();\n\t\tlet leftArmPivot = new THREE.Group();\n\n\t\tlet leftArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 39, 52),\n\t\t\t\ttoSkinVertices(39, 48, 42, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 39, 64),\n\t\t\t\ttoSkinVertices(39, 52, 43, 64),\n\t\t\t\ttoSkinVertices(43, 52, 46, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 40, 52),\n\t\t\t\ttoSkinVertices(40, 48, 44, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 40, 64),\n\t\t\t\ttoSkinVertices(40, 52, 44, 64),\n\t\t\t\ttoSkinVertices(44, 52, 48, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArmMesh = new THREE.Mesh(leftArmBox, layer1Material);\n\t\tleftArmPivot.add(leftArmMesh);\n\n\t\tlet leftArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 55, 52),\n\t\t\t\ttoSkinVertices(55, 48, 58, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 55, 64),\n\t\t\t\ttoSkinVertices(55, 52, 59, 64),\n\t\t\t\ttoSkinVertices(59, 52, 62, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 56, 52),\n\t\t\t\ttoSkinVertices(56, 48, 60, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 56, 64),\n\t\t\t\ttoSkinVertices(56, 52, 60, 64),\n\t\t\t\ttoSkinVertices(60, 52, 64, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArm2Mesh = new THREE.Mesh(leftArm2Box, layer2Material);\n\t\tleftArm2Mesh.renderOrder = 1;\n\t\tleftArmPivot.add(leftArm2Mesh);\n\n\t\tleftArmPivot.position.y = -6;\n\t\tthis.leftArm.add(leftArmPivot);\n\t\tthis.leftArm.position.y = -4;\n\t\tthis.leftArm.position.x = slim ? 5.5 : 6;\n\t\tthis.add(this.leftArm);\n\n\n\t\t// Right Leg\n\t\tthis.rightLeg = new THREE.Group();\n\t\tlet rightLegPivot = new THREE.Group();\n\n\t\tlet rightLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(rightLegBox,\n\t\t\ttoSkinVertices(4, 16, 8, 20),\n\t\t\ttoSkinVertices(8, 16, 12, 20),\n\t\t\ttoSkinVertices(0, 20, 4, 32),\n\t\t\ttoSkinVertices(4, 20, 8, 32),\n\t\t\ttoSkinVertices(8, 20, 12, 32),\n\t\t\ttoSkinVertices(12, 20, 16, 32)\n\t\t);\n\t\tlet rightLegMesh = new THREE.Mesh(rightLegBox, layer1Material);\n\t\trightLegPivot.add(rightLegMesh);\n\n\t\tlet rightLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(rightLeg2Box,\n\t\t\ttoSkinVertices(4, 32, 8, 36),\n\t\t\ttoSkinVertices(8, 32, 12, 36),\n\t\t\ttoSkinVertices(0, 36, 4, 48),\n\t\t\ttoSkinVertices(4, 36, 8, 48),\n\t\t\ttoSkinVertices(8, 36, 12, 48),\n\t\t\ttoSkinVertices(12, 36, 16, 48)\n\t\t);\n\t\tlet rightLeg2Mesh = new THREE.Mesh(rightLeg2Box, layer2Material);\n\t\trightLeg2Mesh.renderOrder = 1;\n\t\trightLegPivot.add(rightLeg2Mesh);\n\n\t\trightLegPivot.position.y = -6;\n\t\tthis.rightLeg.add(rightLegPivot);\n\t\tthis.rightLeg.position.y = -16;\n\t\tthis.rightLeg.position.x = -2;\n\t\tthis.add(this.rightLeg);\n\n\t\t// Left Leg\n\t\tthis.leftLeg = new THREE.Group();\n\t\tlet leftLegPivot = new THREE.Group();\n\n\t\tlet leftLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(leftLegBox,\n\t\t\ttoSkinVertices(20, 48, 24, 52),\n\t\t\ttoSkinVertices(24, 48, 28, 52),\n\t\t\ttoSkinVertices(16, 52, 20, 64),\n\t\t\ttoSkinVertices(20, 52, 24, 64),\n\t\t\ttoSkinVertices(24, 52, 28, 64),\n\t\t\ttoSkinVertices(28, 52, 32, 64)\n\t\t);\n\t\tlet leftLegMesh = new THREE.Mesh(leftLegBox, layer1Material);\n\t\tleftLegPivot.add(leftLegMesh);\n\n\t\tlet leftLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(leftLeg2Box,\n\t\t\ttoSkinVertices(4, 48, 8, 52),\n\t\t\ttoSkinVertices(8, 48, 12, 52),\n\t\t\ttoSkinVertices(0, 52, 4, 64),\n\t\t\ttoSkinVertices(4, 52, 8, 64),\n\t\t\ttoSkinVertices(8, 52, 12, 64),\n\t\t\ttoSkinVertices(12, 52, 16, 64)\n\t\t);\n\t\tlet leftLeg2Mesh = new THREE.Mesh(leftLeg2Box, layer2Material);\n\t\tleftLeg2Mesh.renderOrder = 1;\n\t\tleftLegPivot.add(leftLeg2Mesh);\n\n\t\tleftLegPivot.position.y = -6;\n\t\tthis.leftLeg.add(leftLegPivot);\n\t\tthis.leftLeg.position.y = -16;\n\t\tthis.leftLeg.position.x = 2;\n\t\tthis.add(this.leftLeg);\n\t}\n}\n\nclass CapeObject extends THREE.Group {\n\tconstructor(capeMaterial) {\n\t\tsuper();\n\n\t\t// back = outside\n\t\t// front = inside\n\t\tlet capeBox = new THREE.BoxGeometry(10, 16, 1, 0, 0, 0);\n\t\taddVertices(capeBox,\n\t\t\ttoCapeVertices(1, 0, 11, 1),\n\t\t\ttoCapeVertices(11, 0, 21, 1),\n\t\t\ttoCapeVertices(11, 1, 12, 17),\n\t\t\ttoCapeVertices(12, 1, 22, 17),\n\t\t\ttoCapeVertices(0, 1, 1, 17),\n\t\t\ttoCapeVertices(1, 1, 11, 17)\n\t\t);\n\t\tthis.cape = new THREE.Mesh(capeBox, capeMaterial);\n\t\tthis.cape.position.y = -8;\n\t\tthis.cape.position.z = -0.5;\n\t\tthis.add(this.cape);\n\t}\n}\n\nclass PlayerObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material, capeMaterial) {\n\t\tsuper();\n\n\t\tthis.skin = new SkinObject(slim, layer1Material, layer2Material);\n\t\tthis.skin.visible = false;\n\t\tthis.add(this.skin);\n\n\t\tthis.cape = new CapeObject(capeMaterial);\n\t\tthis.cape.position.z = -2;\n\t\tthis.cape.position.y = -4;\n\t\tthis.cape.rotation.x = 25 * Math.PI / 180;\n\t\tthis.cape.visible = false;\n\t\tthis.add(this.cape);\n\t}\n}\n\nexport { SkinObject, CapeObject, PlayerObject };\n","function invokeAnimation(animation, player, time) {\n\tif (animation instanceof CompositeAnimation) {\n\t\tanimation.play(player, time);\n\t} else if (animation instanceof Function) {\n\t\tanimation(player, time);\n\t} else {\n\t\tthrow `Not an animation: ${animation}`;\n\t}\n}\n\nclass AnimationHandle {\n\tconstructor(animation) {\n\t\tthis.animation = animation;\n\t\tthis.paused = this._paused = false;\n\t\tthis.speed = this._speed = 1.0;\n\t\tthis._lastChange = null;\n\t\tthis._lastChangeX = null;\n\t}\n\tplay(player, time) {\n\t\tif (this._lastChange === null) {\n\t\t\tthis._lastChange = time;\n\t\t\tthis._lastChangeX = 0;\n\t\t} else if (this.paused !== this._paused || this.speed !== this._speed) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tif (this._paused === false) {\n\t\t\t\tthis._lastChangeX += dt * this._speed;\n\t\t\t}\n\t\t\tthis._paused = this.paused;\n\t\t\tthis._speed = this.speed;\n\t\t\tthis._lastChange = time;\n\t\t}\n\t\tif (this.paused === false) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tlet x = this._lastChangeX + this.speed * dt;\n\t\t\tinvokeAnimation(this.animation, player, x);\n\t\t}\n\t}\n\treset(){\n\t\tthis._lastChange = null;\n\t}\n}\n\nclass CompositeAnimation {\n\tconstructor() {\n\t\tthis.handles = new Set();\n\t}\n\tadd(animation) {\n\t\tlet handle = new AnimationHandle(animation);\n\t\thandle.remove = () => this.handles.delete(handle);\n\t\tthis.handles.add(handle);\n\t\treturn handle;\n\t}\n\tplay(player, time) {\n\t\tthis.handles.forEach(handle => handle.play(player, time));\n\t}\n}\n\nlet WalkingAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\t// Multiply by animation's natural speed\n\ttime *= 8;\n\n\t// Leg swing\n\tskin.leftLeg.rotation.x = Math.sin(time) * 0.5;\n\tskin.rightLeg.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\tskin.rightArm.rotation.x = Math.sin(time) * 0.5;\n\tlet basicArmRotationZ = Math.PI * 0.02;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.03 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.03 - basicArmRotationZ;\n\n\t// Head shaking with different frequency & amplitude\n\tskin.head.rotation.y = Math.sin(time / 4) * 0.2;\n\tskin.head.rotation.x = Math.sin(time / 5) * 0.1;\n\n\t// Always add an angle for cape around the x axis\n\tlet basicCapeRotationX = Math.PI * 0.06;\n\tplayer.cape.rotation.x = Math.sin(time / 1.5) * 0.06 + basicCapeRotationX;\n};\n\nlet RunningAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\ttime *= 15;\n\n\t// Leg swing with larger amplitude\n\tskin.leftLeg.rotation.x = Math.cos(time + Math.PI) * 1.3;\n\tskin.rightLeg.rotation.x = Math.cos(time) * 1.3;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.cos(time) * 1.5;\n\tskin.rightArm.rotation.x = Math.cos(time + Math.PI) * 1.5;\n\tlet basicArmRotationZ = Math.PI * 0.1;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.1 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.1 - basicArmRotationZ;\n\n\t// Jumping\n\tplayer.position.y = Math.cos(time * 2);\n\t// Dodging when running\n\tplayer.position.x = Math.cos(time) * 0.15;\n\t// Slightly tilting when running\n\tplayer.rotation.z = Math.cos(time + Math.PI) * 0.01;\n\n\t// Apply higher swing frequency, lower amplitude,\n\t// and greater basic rotation around x axis,\n\t// to cape when running.\n\tlet basicCapeRotationX = Math.PI * 0.3;\n\tplayer.cape.rotation.x = Math.sin(time * 2) * 0.1 + basicCapeRotationX;\n\n\t// What about head shaking?\n\t// You shouldn't glance right and left when running dude :P\n};\n\nlet RotatingAnimation = (player, time) => {\n\tplayer.rotation.y = time;\n};\n\nexport {\n\tCompositeAnimation,\n\tinvokeAnimation,\n\tWalkingAnimation,\n\tRunningAnimation,\n\tRotatingAnimation\n};\n","import * as THREE from \"three\";\nimport { PlayerObject } from \"./model\";\nimport { invokeAnimation } from \"./animation\";\n\nfunction copyImage(context, sX, sY, w, h, dX, dY, flipHorizontal) {\n\tlet imgData = context.getImageData(sX, sY, w, h);\n\tif (flipHorizontal) {\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < (w / 2); x++) {\n\t\t\t\tlet index = (x + y * w) * 4;\n\t\t\t\tlet index2 = ((w - x - 1) + y * w) * 4;\n\t\t\t\tlet pA1 = imgData.data[index];\n\t\t\t\tlet pA2 = imgData.data[index + 1];\n\t\t\t\tlet pA3 = imgData.data[index + 2];\n\t\t\t\tlet pA4 = imgData.data[index + 3];\n\n\t\t\t\tlet pB1 = imgData.data[index2];\n\t\t\t\tlet pB2 = imgData.data[index2 + 1];\n\t\t\t\tlet pB3 = imgData.data[index2 + 2];\n\t\t\t\tlet pB4 = imgData.data[index2 + 3];\n\n\t\t\t\timgData.data[index] = pB1;\n\t\t\t\timgData.data[index + 1] = pB2;\n\t\t\t\timgData.data[index + 2] = pB3;\n\t\t\t\timgData.data[index + 3] = pB4;\n\n\t\t\t\timgData.data[index2] = pA1;\n\t\t\t\timgData.data[index2 + 1] = pA2;\n\t\t\t\timgData.data[index2 + 2] = pA3;\n\t\t\t\timgData.data[index2 + 3] = pA4;\n\t\t\t}\n\t\t}\n\t}\n\tcontext.putImageData(imgData, dX, dY);\n}\n\nfunction convertSkinTo1_8(context, width) {\n\tlet scale = width / 64.0;\n\tlet copySkin = (context, sX, sY, w, h, dX, dY, flipHorizontal) => copyImage(context, sX * scale, sY * scale, w * scale, h * scale, dX * scale, dY * scale, flipHorizontal);\n\n\tcopySkin(context, 4, 16, 4, 4, 20, 48, true); // Top Leg\n\tcopySkin(context, 8, 16, 4, 4, 24, 48, true); // Bottom Leg\n\tcopySkin(context, 0, 20, 4, 12, 24, 52, true); // Outer Leg\n\tcopySkin(context, 4, 20, 4, 12, 20, 52, true); // Front Leg\n\tcopySkin(context, 8, 20, 4, 12, 16, 52, true); // Inner Leg\n\tcopySkin(context, 12, 20, 4, 12, 28, 52, true); // Back Leg\n\tcopySkin(context, 44, 16, 4, 4, 36, 48, true); // Top Arm\n\tcopySkin(context, 48, 16, 4, 4, 40, 48, true); // Bottom Arm\n\tcopySkin(context, 40, 20, 4, 12, 40, 52, true); // Outer Arm\n\tcopySkin(context, 44, 20, 4, 12, 36, 52, true); // Front Arm\n\tcopySkin(context, 48, 20, 4, 12, 32, 52, true); // Inner Arm\n\tcopySkin(context, 52, 20, 4, 12, 44, 52, true); // Back Arm\n}\n\nclass SkinViewer {\n\tconstructor(options) {\n\t\tthis.domElement = options.domElement;\n\t\tthis.animation = options.animation || null;\n\t\tthis.animationPaused = false;\n\t\tthis.animationTime = 0;\n\t\tthis.disposed = false;\n\n\t\t// texture\n\t\tthis.skinImg = new Image();\n\t\tthis.skinCanvas = document.createElement(\"canvas\");\n\t\tthis.skinTexture = new THREE.Texture(this.skinCanvas);\n\t\tthis.skinTexture.magFilter = THREE.NearestFilter;\n\t\tthis.skinTexture.minFilter = THREE.NearestFilter;\n\n\t\tthis.capeImg = new Image();\n\t\tthis.capeCanvas = document.createElement(\"canvas\");\n\t\tthis.capeTexture = new THREE.Texture(this.capeCanvas);\n\t\tthis.capeTexture.magFilter = THREE.NearestFilter;\n\t\tthis.capeTexture.minFilter = THREE.NearestFilter;\n\n\t\tthis.layer1Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, side: THREE.FrontSide });\n\t\tthis.layer2Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: THREE.DoubleSide, alphaTest: 0.5 });\n\t\tthis.capeMaterial = new THREE.MeshBasicMaterial({ map: this.capeTexture, transparent: true, opacity: 1, side: THREE.DoubleSide, alphaTest: 0.5 });\n\n\t\t// scene\n\t\tthis.scene = new THREE.Scene();\n\n\t\t// Use smaller fov to avoid distortion\n\t\tthis.camera = new THREE.PerspectiveCamera(40);\n\t\tthis.camera.position.y = -12;\n\t\tthis.camera.position.z = 60;\n\n\t\tthis.renderer = new THREE.WebGLRenderer({ angleRot: true, alpha: true, antialias: false });\n\t\tthis.renderer.setSize(300, 300); // default size\n\t\tthis.renderer.context.getShaderInfoLog = () => \"\"; // shut firefox up\n\t\tthis.domElement.appendChild(this.renderer.domElement);\n\n\t\tthis.playerObject = new PlayerObject(options.slim === true, this.layer1Material, this.layer2Material, this.capeMaterial);\n\t\tthis.scene.add(this.playerObject);\n\n\t\t// texture loading\n\t\tthis.skinImg.crossOrigin = \"anonymous\";\n\t\tthis.skinImg.onerror = () => console.error(\"Failed loading \" + this.skinImg.src);\n\t\tthis.skinImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.skinImg.width !== this.skinImg.height) {\n\t\t\t\tif (this.skinImg.width === 2 * this.skinImg.height) {\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad skin size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet skinContext = this.skinCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.width = width;\n\t\t\t\tthis.skinCanvas.height = width;\n\t\t\t\tskinContext.clearRect(0, 0, width, width);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, width, width / 2.0);\n\t\t\t\tconvertSkinTo1_8(skinContext, width);\n\t\t\t} else {\n\t\t\t\tthis.skinCanvas.width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.height = this.skinImg.height;\n\t\t\t\tskinContext.clearRect(0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t}\n\n\t\t\tthis.skinTexture.needsUpdate = true;\n\t\t\tthis.layer1Material.needsUpdate = true;\n\t\t\tthis.layer2Material.needsUpdate = true;\n\n\t\t\tthis.playerObject.skin.visible = true;\n\t\t};\n\n\t\tthis.capeImg.crossOrigin = \"anonymous\";\n\t\tthis.capeImg.onerror = () => console.error(\"Failed loading \" + this.capeImg.src);\n\t\tthis.capeImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.capeImg.width !== 2 * this.capeImg.height) {\n\t\t\t\tif (this.capeImg.width * 17 == this.capeImg.height * 22) {\n\t\t\t\t\t// width/height = 22/17\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad cape size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet capeContext = this.capeCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.capeImg.width * 64 / 22;\n\t\t\t\tthis.capeCanvas.width = width;\n\t\t\t\tthis.capeCanvas.height = width / 2;\n\t\t\t} else {\n\t\t\t\tthis.capeCanvas.width = this.capeImg.width;\n\t\t\t\tthis.capeCanvas.height = this.capeImg.height;\n\t\t\t}\n\t\t\tcapeContext.clearRect(0, 0, this.capeCanvas.width, this.capeCanvas.height);\n\t\t\tcapeContext.drawImage(this.capeImg, 0, 0, this.capeImg.width, this.capeImg.height);\n\n\t\t\tthis.capeTexture.needsUpdate = true;\n\t\t\tthis.capeMaterial.needsUpdate = true;\n\n\t\t\tthis.playerObject.cape.visible = true;\n\t\t};\n\n\t\tif (options.skinUrl) this.skinUrl = options.skinUrl;\n\t\tif (options.capeUrl) this.capeUrl = options.capeUrl;\n\t\tif (options.width) this.width = options.width;\n\t\tif (options.height) this.height = options.height;\n\n\t\tlet draw = () => {\n\t\t\tif (this.disposed) return;\n\t\t\twindow.requestAnimationFrame(draw);\n\t\t\tif (!this.animationPaused) {\n\t\t\t\tthis.animationTime++;\n\t\t\t\tif (this.animation) {\n\t\t\t\t\tinvokeAnimation(this.animation, this.playerObject, this.animationTime / 100.0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.renderer.render(this.scene, this.camera);\n\t\t};\n\t\tdraw();\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.camera.aspect = width / height;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.renderer.setSize(width, height);\n\t}\n\n\tdispose() {\n\t\tthis.disposed = true;\n\t\tthis.domElement.removeChild(this.renderer.domElement);\n\t\tthis.renderer.dispose();\n\t\tthis.skinTexture.dispose();\n\t\tthis.capeTexture.dispose();\n\t}\n\n\tget skinUrl() {\n\t\treturn this.skinImg.src;\n\t}\n\n\tset skinUrl(url) {\n\t\tthis.skinImg.src = url;\n\t}\n\n\tget capeUrl() {\n\t\treturn this.capeImg.src;\n\t}\n\n\tset capeUrl(url) {\n\t\tthis.capeImg.src = url;\n\t}\n\n\tget width() {\n\t\treturn this.renderer.getSize().width;\n\t}\n\n\tset width(newWidth) {\n\t\tthis.setSize(newWidth, this.height);\n\t}\n\n\tget height() {\n\t\treturn this.renderer.getSize().height;\n\t}\n\n\tset height(newHeight) {\n\t\tthis.setSize(this.width, newHeight);\n\t}\n}\n\nexport { SkinViewer };\n","import * as THREE from \"three\";\n\nclass OrbitControls extends THREE.EventDispatcher {\n\t/**\n\t * @preserve\n\t * The code was originally from https://github.com/mrdoob/three.js/blob/d45a042cf962e9b1aa9441810ba118647b48aacb/examples/js/controls/OrbitControls.js\n\t */\n\t/**\n\t * @license\n\t * Copyright (C) 2010-2017 three.js authors\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t *\n\t *\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t */\n\n\t// This set of controls performs orbiting, dollying (zooming), and panning.\n\t// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n\t//\n\t// Orbit - left mouse / touch: one finger move\n\t// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n\t// Pan - right mouse, or arrow keys / touch: three finger swipe\n\n\tconstructor(object, domElement) {\n\t\tsuper();\n\t\tthis.object = object;\n\t\tthis.domElement = (domElement !== undefined) ? domElement : document;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new THREE.Vector3();\n\n\t\t// How far you can dolly in and out (PerspectiveCamera only)\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out (OrthographicCamera only)\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\t\tthis.minAzimuthAngle = -Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.25;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t\t// Set to false to disable use of the keys\n\t\tthis.enableKeys = true;\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\t\tthis.getPolarAngle = function () {\n\t\t\treturn spherical.phi;\n\t\t};\n\t\tthis.getAzimuthalAngle = function () {\n\t\t\treturn spherical.theta;\n\t\t};\n\t\tthis.saveState = function () {\n\t\t\tscope.target0.copy(scope.target);\n\t\t\tscope.position0.copy(scope.object.position);\n\t\t\tscope.zoom0 = scope.object.zoom;\n\t\t};\n\t\tthis.reset = function () {\n\t\t\tscope.target.copy(scope.target0);\n\t\t\tscope.object.position.copy(scope.position0);\n\t\t\tscope.object.zoom = scope.zoom0;\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\tscope.update();\n\t\t\tstate = STATE.NONE;\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\t// so camera.up is the orbit axis\n\t\t\tlet quat = new THREE.Quaternion().setFromUnitVectors(object.up, new THREE.Vector3(0, 1, 0));\n\t\t\tlet quatInverse = quat.clone().inverse();\n\t\t\tlet lastPosition = new THREE.Vector3();\n\t\t\tlet lastQuaternion = new THREE.Quaternion();\n\t\t\treturn function update() {\n\t\t\t\tlet position = scope.object.position;\n\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion(quat);\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3(offset);\n\t\t\t\tif (scope.autoRotate && state === STATE.NONE) {\n\t\t\t\t\trotateLeft(getAutoRotationAngle());\n\t\t\t\t}\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\t\t\t\t// restrict theta to be between desired limits\n\t\t\t\tspherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n\t\t\t\tspherical.makeSafe();\n\t\t\t\tspherical.radius *= scale;\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n\t\t\t\t// move target to panned location\n\t\t\t\tscope.target.add(panOffset);\n\t\t\t\toffset.setFromSpherical(spherical);\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion(quatInverse);\n\t\t\t\tposition.copy(scope.target).add(offset);\n\t\t\t\tscope.object.lookAt(scope.target);\n\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\tsphericalDelta.theta *= (1 - scope.dampingFactor);\n\t\t\t\t\tsphericalDelta.phi *= (1 - scope.dampingFactor);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsphericalDelta.set(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tscale = 1;\n\t\t\t\tpanOffset.set(0, 0, 0);\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\t\t\t\tif (zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared(scope.object.position) > EPS ||\n\t\t\t\t\t8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\t\t\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\t\t\tlastPosition.copy(scope.object.position);\n\t\t\t\t\tlastQuaternion.copy(scope.object.quaternion);\n\t\t\t\t\tzoomChanged = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}();\n\t\tthis.dispose = function () {\n\t\t\tscope.domElement.removeEventListener(\"contextmenu\", onContextMenu, false);\n\t\t\tscope.domElement.removeEventListener(\"mousedown\", onMouseDown, false);\n\t\t\tscope.domElement.removeEventListener(\"wheel\", onMouseWheel, false);\n\t\t\tscope.domElement.removeEventListener(\"touchstart\", onTouchStart, false);\n\t\t\tscope.domElement.removeEventListener(\"touchend\", onTouchEnd, false);\n\t\t\tscope.domElement.removeEventListener(\"touchmove\", onTouchMove, false);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\twindow.removeEventListener(\"keydown\", onKeyDown, false);\n\t\t\t//scope.dispatchEvent({ type: \"dispose\" }); // should this be added here?\n\t\t};\n\t\t//\n\t\t// internals\n\t\t//\n\t\tlet scope = this;\n\t\tlet changeEvent = { type: \"change\" };\n\t\tlet startEvent = { type: \"start\" };\n\t\tlet endEvent = { type: \"end\" };\n\t\tlet STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 };\n\t\tlet state = STATE.NONE;\n\t\tlet EPS = 0.000001;\n\t\t// current position in spherical coordinates\n\t\tlet spherical = new THREE.Spherical();\n\t\tlet sphericalDelta = new THREE.Spherical();\n\t\tlet scale = 1;\n\t\tlet panOffset = new THREE.Vector3();\n\t\tlet zoomChanged = false;\n\t\tlet rotateStart = new THREE.Vector2();\n\t\tlet rotateEnd = new THREE.Vector2();\n\t\tlet rotateDelta = new THREE.Vector2();\n\t\tlet panStart = new THREE.Vector2();\n\t\tlet panEnd = new THREE.Vector2();\n\t\tlet panDelta = new THREE.Vector2();\n\t\tlet dollyStart = new THREE.Vector2();\n\t\tlet dollyEnd = new THREE.Vector2();\n\t\tlet dollyDelta = new THREE.Vector2();\n\t\tfunction getAutoRotationAngle() {\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\t\t}\n\t\tfunction getZoomScale() {\n\t\t\treturn Math.pow(0.95, scope.zoomSpeed);\n\t\t}\n\t\tfunction rotateLeft(angle) {\n\t\t\tsphericalDelta.theta -= angle;\n\t\t}\n\t\tfunction rotateUp(angle) {\n\t\t\tsphericalDelta.phi -= angle;\n\t\t}\n\t\tlet panLeft = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panLeft(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar(-distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\tlet panUp = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panUp(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n\t\t\t\tv.multiplyScalar(distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tlet pan = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\treturn function pan(deltaX, deltaY) {\n\t\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\t\t// perspective\n\t\t\t\t\tlet position = scope.object.position;\n\t\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t\tlet targetDistance = offset.length();\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0);\n\t\t\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\n\t\t\t\t\tpanLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t\tpanUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n\t\t\t\t\tpanUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n\t\t\t\t\tscope.enablePan = false;\n\t\t\t\t}\n\t\t\t};\n\t\t}();\n\t\tfunction dollyIn(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale /= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\tfunction dollyOut(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale *= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\t\tfunction handleMouseDownRotate(event) {\n\t\t\trotateStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownDolly(event) {\n\t\t\tdollyStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownPan(event) {\n\t\t\tpanStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseMoveRotate(event) {\n\t\t\trotateEnd.set(event.clientX, event.clientY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMoveDolly(event) {\n\t\t\tdollyEnd.set(event.clientX, event.clientY);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMovePan(event) {\n\t\t\tpanEnd.set(event.clientX, event.clientY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseUp(event) {\n\t\t}\n\t\tfunction handleMouseWheel(event) {\n\t\t\tif (event.deltaY < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (event.deltaY > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleKeyDown(event) {\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan(0, scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan(0, -scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan(scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan(-scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfunction handleTouchStartRotate(event) {\n\t\t\trotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchStartDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyStart.set(0, distance);\n\t\t}\n\t\tfunction handleTouchStartPan(event) {\n\t\t\tpanStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchMoveRotate(event) {\n\t\t\trotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMoveDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyEnd.set(0, distance);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMovePan(event) {\n\t\t\tpanEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchEnd(event) {\n\t\t}\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\t\tfunction onMouseDown(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.button) {\n\t\t\t\tcase scope.mouseButtons.ORBIT:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownRotate(event);\n\t\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.ZOOM:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownDolly(event);\n\t\t\t\t\tstate = STATE.DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownPan(event);\n\t\t\t\t\tstate = STATE.PAN;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tdocument.addEventListener(\"mousemove\", onMouseMove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", onMouseUp, false);\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onMouseMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (state) {\n\t\t\t\tcase STATE.ROTATE:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.DOLLY:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tfunction onMouseUp(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleMouseUp(event);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onMouseWheel(event) {\n\t\t\tif (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE))\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\thandleMouseWheel(event);\n\t\t\tscope.dispatchEvent(startEvent); // not sure why these are here...\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t}\n\t\tfunction onKeyDown(event) {\n\t\t\tif (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\thandleKeyDown(event);\n\t\t}\n\t\tfunction onTouchStart(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartRotate(event);\n\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartDolly(event);\n\t\t\t\t\tstate = STATE.TOUCH_DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartPan(event);\n\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onTouchMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_ROTATE)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_DOLLY)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_PAN)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tfunction onTouchEnd(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleTouchEnd(event);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onContextMenu(event) {\n\t\t\tif (scope.enabled === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t}\n\t\t//\n\t\tscope.domElement.addEventListener(\"contextmenu\", onContextMenu, false);\n\t\tscope.domElement.addEventListener(\"mousedown\", onMouseDown, false);\n\t\tscope.domElement.addEventListener(\"wheel\", onMouseWheel, false);\n\t\tscope.domElement.addEventListener(\"touchstart\", onTouchStart, false);\n\t\tscope.domElement.addEventListener(\"touchend\", onTouchEnd, false);\n\t\tscope.domElement.addEventListener(\"touchmove\", onTouchMove, false);\n\t\twindow.addEventListener(\"keydown\", onKeyDown, false);\n\t\t// force an update at start\n\t\tthis.update();\n\t}\n}\n\nfunction createOrbitControls(skinViewer) {\n\tlet control = new OrbitControls(skinViewer.camera, skinViewer.renderer.domElement);\n\n\t// default configuration\n\tcontrol.enablePan = false;\n\tcontrol.target = new THREE.Vector3(0, -12, 0);\n\tcontrol.minDistance = 10;\n\tcontrol.maxDistance = 256;\n\tcontrol.update();\n\n\treturn control;\n}\n\nexport { OrbitControls, createOrbitControls };\n"],"names":["toFaceVertices","x1","y1","x2","y2","w","h","THREE","toSkinVertices","toCapeVertices","addVertices","box","top","bottom","left","front","right","back","faceVertexUvs","esp","SkinObject","slim","layer1Material","layer2Material","head","headBox","headMesh","add","head2Box","head2Mesh","renderOrder","body","bodyBox","bodyMesh","body2Box","body2Mesh","position","y","rightArm","rightArmPivot","rightArmBox","rightArmMesh","rightArm2Box","rightArm2Mesh","x","leftArm","leftArmPivot","leftArmBox","leftArmMesh","leftArm2Box","leftArm2Mesh","rightLeg","rightLegPivot","rightLegBox","rightLegMesh","rightLeg2Box","rightLeg2Mesh","leftLeg","leftLegPivot","leftLegBox","leftLegMesh","leftLeg2Box","leftLeg2Mesh","CapeObject","capeMaterial","capeBox","cape","z","PlayerObject","skin","visible","rotation","Math","PI","invokeAnimation","animation","player","time","CompositeAnimation","play","Function","AnimationHandle","paused","_paused","speed","_speed","_lastChange","_lastChangeX","dt","handles","Set","handle","remove","delete","forEach","WalkingAnimation","sin","basicArmRotationZ","cos","basicCapeRotationX","RunningAnimation","RotatingAnimation","copyImage","context","sX","sY","dX","dY","flipHorizontal","imgData","getImageData","index","index2","pA1","data","pA2","pA3","pA4","pB1","pB2","pB3","pB4","putImageData","convertSkinTo1_8","width","scale","copySkin","SkinViewer","options","domElement","animationPaused","animationTime","disposed","skinImg","Image","skinCanvas","document","createElement","skinTexture","magFilter","minFilter","capeImg","capeCanvas","capeTexture","map","side","transparent","opacity","alphaTest","scene","camera","renderer","angleRot","alpha","antialias","setSize","getShaderInfoLog","appendChild","playerObject","crossOrigin","onerror","console","error","src","onload","isOldFormat","height","skinContext","getContext","clearRect","drawImage","needsUpdate","capeContext","skinUrl","capeUrl","draw","window","requestAnimationFrame","render","aspect","updateProjectionMatrix","removeChild","dispose","url","getSize","newWidth","newHeight","OrbitControls","object","undefined","enabled","target","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","ZOOM","MIDDLE","PAN","target0","clone","position0","zoom0","zoom","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","scope","copy","reset","dispatchEvent","changeEvent","update","state","STATE","NONE","offset","quat","setFromUnitVectors","up","quatInverse","inverse","lastPosition","lastQuaternion","sub","applyQuaternion","setFromVector3","rotateLeft","getAutoRotationAngle","sphericalDelta","max","min","makeSafe","radius","panOffset","setFromSpherical","lookAt","set","zoomChanged","distanceToSquared","EPS","dot","quaternion","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","type","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY","TOUCH_PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","angle","rotateUp","panLeft","v","distance","objectMatrix","setFromMatrixColumn","multiplyScalar","panUp","pan","deltaX","deltaY","element","targetDistance","length","tan","fov","clientHeight","matrix","clientWidth","warn","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","event","clientX","clientY","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","subVectors","handleMouseMoveDolly","handleMouseMovePan","handleMouseWheel","handleKeyDown","keyCode","handleTouchStartRotate","touches","pageX","pageY","handleTouchStartDolly","dx","dy","sqrt","handleTouchStartPan","handleTouchMoveRotate","handleTouchMoveDolly","handleTouchMovePan","button","preventDefault","addEventListener","handleMouseUp","stopPropagation","handleTouchEnd","createOrbitControls","skinViewer","control"],"mappings":"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"} \ No newline at end of file diff --git a/js/build/skinview3d.min.js b/js/build/skinview3d.min.js index 6dd8edc..17f7c65 100644 --- a/js/build/skinview3d.min.js +++ b/js/build/skinview3d.min.js @@ -25,7 +25,7 @@ * SOFTWARE. */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("three")):"function"==typeof define&&define.amd?define(["exports","three"],t):t(e.skinview3d={},e.THREE)}(this,function(e,t){"use strict";var n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},a=function(){function e(e,t){for(var n=0;nb||8*(1-d.dot(m.object.quaternion))>b)&&(m.dispatchEvent(p),h.copy(m.object.position),d.copy(m.object.quaternion),k=!1,!0)}),u.dispose=function(){m.domElement.removeEventListener("contextmenu",Q,!1),m.domElement.removeEventListener("mousedown",D,!1),m.domElement.removeEventListener("wheel",H,!1),m.domElement.removeEventListener("touchstart",Z,!1),m.domElement.removeEventListener("touchend",q,!1),m.domElement.removeEventListener("touchmove",W,!1),document.removeEventListener("mousemove",F,!1),document.removeEventListener("mouseup",Y,!1),window.removeEventListener("keydown",X,!1)};var m=u,p={type:"change"},l={type:"start"},f={type:"end"},g={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5},v=g.NONE,b=1e-6,w=new t.Spherical,y=new t.Spherical,M=1,x=new t.Vector3,k=!1,E=new t.Vector2,O=new t.Vector2,I=new t.Vector2,P=new t.Vector2,j=new t.Vector2,C=new t.Vector2,A=new t.Vector2,T=new t.Vector2,L=new t.Vector2;function _(){return Math.pow(.95,m.zoomSpeed)}function V(e){y.theta-=e}function N(e){y.phi-=e}var U,S=(U=new t.Vector3,function(e,t){U.setFromMatrixColumn(t,0),U.multiplyScalar(-e),x.add(U)}),z=function(){var e=new t.Vector3;return function(t,n){e.setFromMatrixColumn(n,1),e.multiplyScalar(t),x.add(e)}}(),G=function(){var e=new t.Vector3;return function(n,a){var i=m.domElement===document?m.domElement.body:m.domElement;if(m.object instanceof t.PerspectiveCamera){var o=m.object.position;e.copy(o).sub(m.target);var r=e.length();r*=Math.tan(m.object.fov/2*Math.PI/180),S(2*n*r/i.clientHeight,m.object.matrix),z(2*a*r/i.clientHeight,m.object.matrix)}else m.object instanceof t.OrthographicCamera?(S(n*(m.object.right-m.object.left)/m.object.zoom/i.clientWidth,m.object.matrix),z(a*(m.object.top-m.object.bottom)/m.object.zoom/i.clientHeight,m.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),m.enablePan=!1)}}();function R(e){m.object instanceof t.PerspectiveCamera?M/=e:m.object instanceof t.OrthographicCamera?(m.object.zoom=Math.max(m.minZoom,Math.min(m.maxZoom,m.object.zoom*e)),m.object.updateProjectionMatrix(),k=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),m.enableZoom=!1)}function B(e){m.object instanceof t.PerspectiveCamera?M*=e:m.object instanceof t.OrthographicCamera?(m.object.zoom=Math.max(m.minZoom,Math.min(m.maxZoom,m.object.zoom/e)),m.object.updateProjectionMatrix(),k=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),m.enableZoom=!1)}function D(e){if(!1!==m.enabled){switch(e.button){case m.mouseButtons.ORBIT:if(!1===m.enableRotate)return;!function(e){E.set(e.clientX,e.clientY)}(e),v=g.ROTATE;break;case m.mouseButtons.ZOOM:if(!1===m.enableZoom)return;!function(e){A.set(e.clientX,e.clientY)}(e),v=g.DOLLY;break;case m.mouseButtons.PAN:if(!1===m.enablePan)return;!function(e){P.set(e.clientX,e.clientY)}(e),v=g.PAN}e.preventDefault(),v!==g.NONE&&(document.addEventListener("mousemove",F,!1),document.addEventListener("mouseup",Y,!1),m.dispatchEvent(l))}}function F(e){if(!1!==m.enabled){switch(v){case g.ROTATE:if(!1===m.enableRotate)return;!function(e){O.set(e.clientX,e.clientY),I.subVectors(O,E);var t=m.domElement===document?m.domElement.body:m.domElement;V(2*Math.PI*I.x/t.clientWidth*m.rotateSpeed),N(2*Math.PI*I.y/t.clientHeight*m.rotateSpeed),E.copy(O),m.update()}(e);break;case g.DOLLY:if(!1===m.enableZoom)return;!function(e){T.set(e.clientX,e.clientY),L.subVectors(T,A),L.y>0?R(_()):L.y<0&&B(_()),A.copy(T),m.update()}(e);break;case g.PAN:if(!1===m.enablePan)return;!function(e){j.set(e.clientX,e.clientY),C.subVectors(j,P),G(C.x,C.y),P.copy(j),m.update()}(e)}e.preventDefault()}}function Y(e){!1!==m.enabled&&(document.removeEventListener("mousemove",F,!1),document.removeEventListener("mouseup",Y,!1),m.dispatchEvent(f),v=g.NONE)}function H(e){!1===m.enabled||!1===m.enableZoom||v!==g.NONE&&v!==g.ROTATE||(e.preventDefault(),e.stopPropagation(),function(e){e.deltaY<0?B(_()):e.deltaY>0&&R(_()),m.update()}(e),m.dispatchEvent(l),m.dispatchEvent(f))}function X(e){!1!==m.enabled&&!1!==m.enableKeys&&!1!==m.enablePan&&function(e){switch(e.keyCode){case m.keys.UP:G(0,m.keyPanSpeed),m.update();break;case m.keys.BOTTOM:G(0,-m.keyPanSpeed),m.update();break;case m.keys.LEFT:G(m.keyPanSpeed,0),m.update();break;case m.keys.RIGHT:G(-m.keyPanSpeed,0),m.update()}}(e)}function Z(e){if(!1!==m.enabled){switch(e.touches.length){case 1:if(!1===m.enableRotate)return;!function(e){E.set(e.touches[0].pageX,e.touches[0].pageY)}(e),v=g.TOUCH_ROTATE;break;case 2:if(!1===m.enableZoom)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,n=e.touches[0].pageY-e.touches[1].pageY,a=Math.sqrt(t*t+n*n);A.set(0,a)}(e),v=g.TOUCH_DOLLY;break;case 3:if(!1===m.enablePan)return;!function(e){P.set(e.touches[0].pageX,e.touches[0].pageY)}(e),v=g.TOUCH_PAN;break;default:v=g.NONE}v!==g.NONE&&m.dispatchEvent(l)}}function W(e){if(!1!==m.enabled){switch(e.touches.length){case 1:if(!1===m.enableRotate)return;if(v!==g.TOUCH_ROTATE)return;!function(e){O.set(e.touches[0].pageX,e.touches[0].pageY),I.subVectors(O,E);var t=m.domElement===document?m.domElement.body:m.domElement;V(2*Math.PI*I.x/t.clientWidth*m.rotateSpeed),N(2*Math.PI*I.y/t.clientHeight*m.rotateSpeed),E.copy(O),m.update()}(e);break;case 2:if(!1===m.enableZoom)return;if(v!==g.TOUCH_DOLLY)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,n=e.touches[0].pageY-e.touches[1].pageY,a=Math.sqrt(t*t+n*n);T.set(0,a),L.subVectors(T,A),L.y>0?B(_()):L.y<0&&R(_()),A.copy(T),m.update()}(e);break;case 3:if(!1===m.enablePan)return;if(v!==g.TOUCH_PAN)return;!function(e){j.set(e.touches[0].pageX,e.touches[0].pageY),C.subVectors(j,P),G(C.x,C.y),P.copy(j),m.update()}(e);break;default:v=g.NONE}e.preventDefault(),e.stopPropagation()}}function q(e){!1!==m.enabled&&(m.dispatchEvent(f),v=g.NONE)}function Q(e){!1!==m.enabled&&!1!==m.enablePan&&e.preventDefault()}return m.domElement.addEventListener("contextmenu",Q,!1),m.domElement.addEventListener("mousedown",D,!1),m.domElement.addEventListener("wheel",H,!1),m.domElement.addEventListener("touchstart",Z,!1),m.domElement.addEventListener("touchend",q,!1),m.domElement.addEventListener("touchmove",W,!1),window.addEventListener("keydown",X,!1),u.update(),u}return i(a,e),a}(t.EventDispatcher);e.SkinObject=u,e.CapeObject=m,e.PlayerObject=p,e.SkinViewer=v,e.OrbitControls=b,e.createOrbitControls=function(e){var n=new b(e.camera,e.renderer.domElement);return n.enablePan=!1,n.target=new t.Vector3(0,-12,0),n.minDistance=10,n.maxDistance=256,n.update(),n},e.invokeAnimation=l,e.CompositeAnimation=g,e.WalkingAnimation=function(e,t){var n=e.skin;t*=8,n.leftLeg.rotation.x=.5*Math.sin(t),n.rightLeg.rotation.x=.5*Math.sin(t+Math.PI),n.leftArm.rotation.x=.5*Math.sin(t+Math.PI),n.rightArm.rotation.x=.5*Math.sin(t);var a=.02*Math.PI;n.leftArm.rotation.z=.03*Math.cos(t)+a,n.rightArm.rotation.z=.03*Math.cos(t+Math.PI)-a,n.head.rotation.y=.2*Math.sin(t/4),n.head.rotation.x=.1*Math.sin(t/5);var i=.06*Math.PI;e.cape.rotation.x=.06*Math.sin(t/1.5)+i},e.RunningAnimation=function(e,t){var n=e.skin;t*=15,n.leftLeg.rotation.x=1.3*Math.cos(t+Math.PI),n.rightLeg.rotation.x=1.3*Math.cos(t),n.leftArm.rotation.x=1.5*Math.cos(t),n.rightArm.rotation.x=1.5*Math.cos(t+Math.PI);var a=.1*Math.PI;n.leftArm.rotation.z=.1*Math.cos(t)+a,n.rightArm.rotation.z=.1*Math.cos(t+Math.PI)-a,e.position.y=Math.cos(2*t),e.position.x=.15*Math.cos(t),e.rotation.z=.01*Math.cos(t+Math.PI);var i=.3*Math.PI;e.cape.rotation.x=.1*Math.sin(2*t)+i},e.RotatingAnimation=function(e,t){e.rotation.y=t},Object.defineProperty(e,"__esModule",{value:!0})}); +function a(e,i){n(this,a);var r,s,c,h,d,u=o(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));u.object=e,u.domElement=void 0!==i?i:document,u.enabled=!0,u.target=new t.Vector3,u.minDistance=0,u.maxDistance=1/0,u.minZoom=0,u.maxZoom=1/0,u.minPolarAngle=0,u.maxPolarAngle=Math.PI,u.minAzimuthAngle=-1/0,u.maxAzimuthAngle=1/0,u.enableDamping=!1,u.dampingFactor=.25,u.enableZoom=!0,u.zoomSpeed=1,u.enableRotate=!0,u.rotateSpeed=1,u.enablePan=!0,u.keyPanSpeed=7,u.autoRotate=!1,u.autoRotateSpeed=2,u.enableKeys=!0,u.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},u.mouseButtons={ORBIT:t.MOUSE.LEFT,ZOOM:t.MOUSE.MIDDLE,PAN:t.MOUSE.RIGHT},u.target0=u.target.clone(),u.position0=u.object.position.clone(),u.zoom0=u.object.zoom,u.getPolarAngle=function(){return w.phi},u.getAzimuthalAngle=function(){return w.theta},u.saveState=function(){m.target0.copy(m.target),m.position0.copy(m.object.position),m.zoom0=m.object.zoom},u.reset=function(){m.target.copy(m.target0),m.object.position.copy(m.position0),m.object.zoom=m.zoom0,m.object.updateProjectionMatrix(),m.dispatchEvent(p),m.update(),v=g.NONE},u.update=(r=new t.Vector3,s=(new t.Quaternion).setFromUnitVectors(e.up,new t.Vector3(0,1,0)),c=s.clone().inverse(),h=new t.Vector3,d=new t.Quaternion,function(){var e=m.object.position;return r.copy(e).sub(m.target),r.applyQuaternion(s),w.setFromVector3(r),m.autoRotate&&v===g.NONE&&V(2*Math.PI/60/60*m.autoRotateSpeed),w.theta+=y.theta,w.phi+=y.phi,w.theta=Math.max(m.minAzimuthAngle,Math.min(m.maxAzimuthAngle,w.theta)),w.phi=Math.max(m.minPolarAngle,Math.min(m.maxPolarAngle,w.phi)),w.makeSafe(),w.radius*=x,w.radius=Math.max(m.minDistance,Math.min(m.maxDistance,w.radius)),m.target.add(M),r.setFromSpherical(w),r.applyQuaternion(c),e.copy(m.target).add(r),m.object.lookAt(m.target),!0===m.enableDamping?(y.theta*=1-m.dampingFactor,y.phi*=1-m.dampingFactor):y.set(0,0,0),x=1,M.set(0,0,0),!!(k||h.distanceToSquared(m.object.position)>b||8*(1-d.dot(m.object.quaternion))>b)&&(m.dispatchEvent(p),h.copy(m.object.position),d.copy(m.object.quaternion),k=!1,!0)}),u.dispose=function(){m.domElement.removeEventListener("contextmenu",Q,!1),m.domElement.removeEventListener("mousedown",D,!1),m.domElement.removeEventListener("wheel",H,!1),m.domElement.removeEventListener("touchstart",Z,!1),m.domElement.removeEventListener("touchend",q,!1),m.domElement.removeEventListener("touchmove",W,!1),document.removeEventListener("mousemove",F,!1),document.removeEventListener("mouseup",Y,!1),window.removeEventListener("keydown",X,!1)};var m=u,p={type:"change"},l={type:"start"},f={type:"end"},g={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5},v=g.NONE,b=1e-6,w=new t.Spherical,y=new t.Spherical,x=1,M=new t.Vector3,k=!1,E=new t.Vector2,O=new t.Vector2,I=new t.Vector2,P=new t.Vector2,j=new t.Vector2,C=new t.Vector2,T=new t.Vector2,A=new t.Vector2,L=new t.Vector2;function _(){return Math.pow(.95,m.zoomSpeed)}function V(e){y.theta-=e}function N(e){y.phi-=e}var S,U=(S=new t.Vector3,function(e,t){S.setFromMatrixColumn(t,0),S.multiplyScalar(-e),M.add(S)}),z=function(){var e=new t.Vector3;return function(t,n){e.setFromMatrixColumn(n,1),e.multiplyScalar(t),M.add(e)}}(),G=function(){var e=new t.Vector3;return function(n,a){var i=m.domElement===document?m.domElement.body:m.domElement;if(m.object instanceof t.PerspectiveCamera){var o=m.object.position;e.copy(o).sub(m.target);var r=e.length();r*=Math.tan(m.object.fov/2*Math.PI/180),U(2*n*r/i.clientHeight,m.object.matrix),z(2*a*r/i.clientHeight,m.object.matrix)}else m.object instanceof t.OrthographicCamera?(U(n*(m.object.right-m.object.left)/m.object.zoom/i.clientWidth,m.object.matrix),z(a*(m.object.top-m.object.bottom)/m.object.zoom/i.clientHeight,m.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),m.enablePan=!1)}}();function R(e){m.object instanceof t.PerspectiveCamera?x/=e:m.object instanceof t.OrthographicCamera?(m.object.zoom=Math.max(m.minZoom,Math.min(m.maxZoom,m.object.zoom*e)),m.object.updateProjectionMatrix(),k=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),m.enableZoom=!1)}function B(e){m.object instanceof t.PerspectiveCamera?x*=e:m.object instanceof t.OrthographicCamera?(m.object.zoom=Math.max(m.minZoom,Math.min(m.maxZoom,m.object.zoom/e)),m.object.updateProjectionMatrix(),k=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),m.enableZoom=!1)}function D(e){if(!1!==m.enabled){switch(e.button){case m.mouseButtons.ORBIT:if(!1===m.enableRotate)return;!function(e){E.set(e.clientX,e.clientY)}(e),v=g.ROTATE;break;case m.mouseButtons.ZOOM:if(!1===m.enableZoom)return;!function(e){T.set(e.clientX,e.clientY)}(e),v=g.DOLLY;break;case m.mouseButtons.PAN:if(!1===m.enablePan)return;!function(e){P.set(e.clientX,e.clientY)}(e),v=g.PAN}e.preventDefault(),v!==g.NONE&&(document.addEventListener("mousemove",F,!1),document.addEventListener("mouseup",Y,!1),m.dispatchEvent(l))}}function F(e){if(!1!==m.enabled){switch(v){case g.ROTATE:if(!1===m.enableRotate)return;!function(e){O.set(e.clientX,e.clientY),I.subVectors(O,E);var t=m.domElement===document?m.domElement.body:m.domElement;V(2*Math.PI*I.x/t.clientWidth*m.rotateSpeed),N(2*Math.PI*I.y/t.clientHeight*m.rotateSpeed),E.copy(O),m.update()}(e);break;case g.DOLLY:if(!1===m.enableZoom)return;!function(e){A.set(e.clientX,e.clientY),L.subVectors(A,T),L.y>0?R(_()):L.y<0&&B(_()),T.copy(A),m.update()}(e);break;case g.PAN:if(!1===m.enablePan)return;!function(e){j.set(e.clientX,e.clientY),C.subVectors(j,P),G(C.x,C.y),P.copy(j),m.update()}(e)}e.preventDefault()}}function Y(e){!1!==m.enabled&&(document.removeEventListener("mousemove",F,!1),document.removeEventListener("mouseup",Y,!1),m.dispatchEvent(f),v=g.NONE)}function H(e){!1===m.enabled||!1===m.enableZoom||v!==g.NONE&&v!==g.ROTATE||(e.preventDefault(),e.stopPropagation(),function(e){e.deltaY<0?B(_()):e.deltaY>0&&R(_()),m.update()}(e),m.dispatchEvent(l),m.dispatchEvent(f))}function X(e){!1!==m.enabled&&!1!==m.enableKeys&&!1!==m.enablePan&&function(e){switch(e.keyCode){case m.keys.UP:G(0,m.keyPanSpeed),m.update();break;case m.keys.BOTTOM:G(0,-m.keyPanSpeed),m.update();break;case m.keys.LEFT:G(m.keyPanSpeed,0),m.update();break;case m.keys.RIGHT:G(-m.keyPanSpeed,0),m.update()}}(e)}function Z(e){if(!1!==m.enabled){switch(e.touches.length){case 1:if(!1===m.enableRotate)return;!function(e){E.set(e.touches[0].pageX,e.touches[0].pageY)}(e),v=g.TOUCH_ROTATE;break;case 2:if(!1===m.enableZoom)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,n=e.touches[0].pageY-e.touches[1].pageY,a=Math.sqrt(t*t+n*n);T.set(0,a)}(e),v=g.TOUCH_DOLLY;break;case 3:if(!1===m.enablePan)return;!function(e){P.set(e.touches[0].pageX,e.touches[0].pageY)}(e),v=g.TOUCH_PAN;break;default:v=g.NONE}v!==g.NONE&&m.dispatchEvent(l)}}function W(e){if(!1!==m.enabled){switch(e.touches.length){case 1:if(!1===m.enableRotate)return;if(v!==g.TOUCH_ROTATE)return;!function(e){O.set(e.touches[0].pageX,e.touches[0].pageY),I.subVectors(O,E);var t=m.domElement===document?m.domElement.body:m.domElement;V(2*Math.PI*I.x/t.clientWidth*m.rotateSpeed),N(2*Math.PI*I.y/t.clientHeight*m.rotateSpeed),E.copy(O),m.update()}(e);break;case 2:if(!1===m.enableZoom)return;if(v!==g.TOUCH_DOLLY)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,n=e.touches[0].pageY-e.touches[1].pageY,a=Math.sqrt(t*t+n*n);A.set(0,a),L.subVectors(A,T),L.y>0?B(_()):L.y<0&&R(_()),T.copy(A),m.update()}(e);break;case 3:if(!1===m.enablePan)return;if(v!==g.TOUCH_PAN)return;!function(e){j.set(e.touches[0].pageX,e.touches[0].pageY),C.subVectors(j,P),G(C.x,C.y),P.copy(j),m.update()}(e);break;default:v=g.NONE}e.preventDefault(),e.stopPropagation()}}function q(e){!1!==m.enabled&&(m.dispatchEvent(f),v=g.NONE)}function Q(e){!1!==m.enabled&&!1!==m.enablePan&&e.preventDefault()}return m.domElement.addEventListener("contextmenu",Q,!1),m.domElement.addEventListener("mousedown",D,!1),m.domElement.addEventListener("wheel",H,!1),m.domElement.addEventListener("touchstart",Z,!1),m.domElement.addEventListener("touchend",q,!1),m.domElement.addEventListener("touchmove",W,!1),window.addEventListener("keydown",X,!1),u.update(),u}return i(a,e),a}(t.EventDispatcher);e.SkinObject=u,e.CapeObject=m,e.PlayerObject=p,e.SkinViewer=v,e.OrbitControls=b,e.createOrbitControls=function(e){var n=new b(e.camera,e.renderer.domElement);return n.enablePan=!1,n.target=new t.Vector3(0,-12,0),n.minDistance=10,n.maxDistance=256,n.update(),n},e.invokeAnimation=l,e.CompositeAnimation=g,e.WalkingAnimation=function(e,t){var n=e.skin;t*=8,n.leftLeg.rotation.x=.5*Math.sin(t),n.rightLeg.rotation.x=.5*Math.sin(t+Math.PI),n.leftArm.rotation.x=.5*Math.sin(t+Math.PI),n.rightArm.rotation.x=.5*Math.sin(t);var a=.02*Math.PI;n.leftArm.rotation.z=.03*Math.cos(t)+a,n.rightArm.rotation.z=.03*Math.cos(t+Math.PI)-a,n.head.rotation.y=.2*Math.sin(t/4),n.head.rotation.x=.1*Math.sin(t/5);var i=.06*Math.PI;e.cape.rotation.x=.06*Math.sin(t/1.5)+i},e.RunningAnimation=function(e,t){var n=e.skin;t*=15,n.leftLeg.rotation.x=1.3*Math.cos(t+Math.PI),n.rightLeg.rotation.x=1.3*Math.cos(t),n.leftArm.rotation.x=1.5*Math.cos(t),n.rightArm.rotation.x=1.5*Math.cos(t+Math.PI);var a=.1*Math.PI;n.leftArm.rotation.z=.1*Math.cos(t)+a,n.rightArm.rotation.z=.1*Math.cos(t+Math.PI)-a,e.position.y=Math.cos(2*t),e.position.x=.15*Math.cos(t),e.rotation.z=.01*Math.cos(t+Math.PI);var i=.3*Math.PI;e.cape.rotation.x=.1*Math.sin(2*t)+i},e.RotatingAnimation=function(e,t){e.rotation.y=t},Object.defineProperty(e,"__esModule",{value:!0})}); //# sourceMappingURL=skinview3d.min.js.map diff --git a/js/build/skinview3d.min.js.map b/js/build/skinview3d.min.js.map index 85e9b74..8f5ccb8 100644 --- a/js/build/skinview3d.min.js.map +++ b/js/build/skinview3d.min.js.map @@ -1 +1 @@ -{"version":3,"file":"skinview3d.min.js","sources":["../src/model.js","../src/animation.js","../src/viewer.js","../src/orbit_controls.js"],"sourcesContent":["import * as THREE from \"three\";\n\nfunction toFaceVertices(x1, y1, x2, y2, w, h) {\n\treturn [\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y1 / h),\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y1 / h)\n\t];\n}\n\nfunction toSkinVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 64.0);\n}\n\nfunction toCapeVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 32.0);\n}\n\nfunction addVertices(box, top, bottom, left, front, right, back) {\n\tbox.faceVertexUvs[0] = [];\n\tbox.faceVertexUvs[0][0] = [right[3], right[0], right[2]];\n\tbox.faceVertexUvs[0][1] = [right[0], right[1], right[2]];\n\tbox.faceVertexUvs[0][2] = [left[3], left[0], left[2]];\n\tbox.faceVertexUvs[0][3] = [left[0], left[1], left[2]];\n\tbox.faceVertexUvs[0][4] = [top[3], top[0], top[2]];\n\tbox.faceVertexUvs[0][5] = [top[0], top[1], top[2]];\n\tbox.faceVertexUvs[0][6] = [bottom[0], bottom[3], bottom[1]];\n\tbox.faceVertexUvs[0][7] = [bottom[3], bottom[2], bottom[1]];\n\tbox.faceVertexUvs[0][8] = [front[3], front[0], front[2]];\n\tbox.faceVertexUvs[0][9] = [front[0], front[1], front[2]];\n\tbox.faceVertexUvs[0][10] = [back[3], back[0], back[2]];\n\tbox.faceVertexUvs[0][11] = [back[0], back[1], back[2]];\n}\n\nconst esp = 0.002;\n\nclass SkinObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material) {\n\t\tsuper();\n\n\t\tthis.slim = slim;\n\n\t\t// Head\n\t\tthis.head = new THREE.Group();\n\n\t\tlet headBox = new THREE.BoxGeometry(8, 8, 8, 0, 0, 0);\n\t\taddVertices(headBox,\n\t\t\ttoSkinVertices(8, 0, 16, 8),\n\t\t\ttoSkinVertices(16, 0, 24, 8),\n\t\t\ttoSkinVertices(0, 8, 8, 16),\n\t\t\ttoSkinVertices(8, 8, 16, 16),\n\t\t\ttoSkinVertices(16, 8, 24, 16),\n\t\t\ttoSkinVertices(24, 8, 32, 16)\n\t\t);\n\t\tlet headMesh = new THREE.Mesh(headBox, layer1Material);\n\t\tthis.head.add(headMesh);\n\n\t\tlet head2Box = new THREE.BoxGeometry(9, 9, 9, 0, 0, 0);\n\t\taddVertices(head2Box,\n\t\t\ttoSkinVertices(40, 0, 48, 8),\n\t\t\ttoSkinVertices(48, 0, 56, 8),\n\t\t\ttoSkinVertices(32, 8, 40, 16),\n\t\t\ttoSkinVertices(40, 8, 48, 16),\n\t\t\ttoSkinVertices(48, 8, 56, 16),\n\t\t\ttoSkinVertices(56, 8, 64, 16)\n\t\t);\n\t\tlet head2Mesh = new THREE.Mesh(head2Box, layer2Material);\n\t\thead2Mesh.renderOrder = -1;\n\t\tthis.head.add(head2Mesh);\n\n\t\tthis.add(this.head);\n\n\n\t\t// Body\n\t\tthis.body = new THREE.Group();\n\n\t\tlet bodyBox = new THREE.BoxGeometry(8, 12, 4, 0, 0, 0);\n\t\taddVertices(bodyBox,\n\t\t\ttoSkinVertices(20, 16, 28, 20),\n\t\t\ttoSkinVertices(28, 16, 36, 20),\n\t\t\ttoSkinVertices(16, 20, 20, 32),\n\t\t\ttoSkinVertices(20, 20, 28, 32),\n\t\t\ttoSkinVertices(28, 20, 32, 32),\n\t\t\ttoSkinVertices(32, 20, 40, 32)\n\t\t);\n\t\tlet bodyMesh = new THREE.Mesh(bodyBox, layer1Material);\n\t\tthis.body.add(bodyMesh);\n\n\t\tlet body2Box = new THREE.BoxGeometry(9, 13.5, 4.5, 0, 0, 0);\n\t\taddVertices(body2Box,\n\t\t\ttoSkinVertices(20, 32, 28, 36),\n\t\t\ttoSkinVertices(28, 32, 36, 36),\n\t\t\ttoSkinVertices(16, 36, 20, 48),\n\t\t\ttoSkinVertices(20, 36, 28, 48),\n\t\t\ttoSkinVertices(28, 36, 32, 48),\n\t\t\ttoSkinVertices(32, 36, 40, 48)\n\t\t);\n\t\tlet body2Mesh = new THREE.Mesh(body2Box, layer2Material);\n\t\tthis.body.add(body2Mesh);\n\n\t\tthis.body.position.y = -10;\n\t\tthis.add(this.body);\n\n\n\t\t// Right Arm\n\t\tthis.rightArm = new THREE.Group();\n\t\tlet rightArmPivot = new THREE.Group();\n\n\t\tlet rightArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 47, 20),\n\t\t\t\ttoSkinVertices(47, 16, 50, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 47, 32),\n\t\t\t\ttoSkinVertices(47, 20, 51, 32),\n\t\t\t\ttoSkinVertices(51, 20, 54, 32)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 48, 20),\n\t\t\t\ttoSkinVertices(48, 16, 52, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 48, 32),\n\t\t\t\ttoSkinVertices(48, 20, 52, 32),\n\t\t\t\ttoSkinVertices(52, 20, 56, 32)\n\t\t\t);\n\t\t}\n\t\tlet rightArmMesh = new THREE.Mesh(rightArmBox, layer1Material);\n\t\trightArmPivot.add(rightArmMesh);\n\n\t\tlet rightArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 47, 36),\n\t\t\t\ttoSkinVertices(47, 32, 50, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 47, 48),\n\t\t\t\ttoSkinVertices(47, 36, 51, 48),\n\t\t\t\ttoSkinVertices(51, 36, 54, 48)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 48, 36),\n\t\t\t\ttoSkinVertices(48, 32, 52, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 48, 48),\n\t\t\t\ttoSkinVertices(48, 36, 52, 48),\n\t\t\t\ttoSkinVertices(52, 36, 56, 48)\n\t\t\t);\n\t\t}\n\t\tlet rightArm2Mesh = new THREE.Mesh(rightArm2Box, layer2Material);\n\t\trightArm2Mesh.renderOrder = 1;\n\t\trightArmPivot.add(rightArm2Mesh);\n\n\t\trightArmPivot.position.y = -6;\n\t\tthis.rightArm.add(rightArmPivot);\n\t\tthis.rightArm.position.y = -4;\n\t\tthis.rightArm.position.x = slim ? -5.5 : -6;\n\t\tthis.add(this.rightArm);\n\n\n\t\t// Left Arm\n\t\tthis.leftArm = new THREE.Group();\n\t\tlet leftArmPivot = new THREE.Group();\n\n\t\tlet leftArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 39, 52),\n\t\t\t\ttoSkinVertices(39, 48, 42, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 39, 64),\n\t\t\t\ttoSkinVertices(39, 52, 43, 64),\n\t\t\t\ttoSkinVertices(43, 52, 46, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 40, 52),\n\t\t\t\ttoSkinVertices(40, 48, 44, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 40, 64),\n\t\t\t\ttoSkinVertices(40, 52, 44, 64),\n\t\t\t\ttoSkinVertices(44, 52, 48, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArmMesh = new THREE.Mesh(leftArmBox, layer1Material);\n\t\tleftArmPivot.add(leftArmMesh);\n\n\t\tlet leftArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 55, 52),\n\t\t\t\ttoSkinVertices(55, 48, 58, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 55, 64),\n\t\t\t\ttoSkinVertices(55, 52, 59, 64),\n\t\t\t\ttoSkinVertices(59, 52, 62, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 56, 52),\n\t\t\t\ttoSkinVertices(56, 48, 60, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 56, 64),\n\t\t\t\ttoSkinVertices(56, 52, 60, 64),\n\t\t\t\ttoSkinVertices(60, 52, 64, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArm2Mesh = new THREE.Mesh(leftArm2Box, layer2Material);\n\t\tleftArm2Mesh.renderOrder = 1;\n\t\tleftArmPivot.add(leftArm2Mesh);\n\n\t\tleftArmPivot.position.y = -6;\n\t\tthis.leftArm.add(leftArmPivot);\n\t\tthis.leftArm.position.y = -4;\n\t\tthis.leftArm.position.x = slim ? 5.5 : 6;\n\t\tthis.add(this.leftArm);\n\n\n\t\t// Right Leg\n\t\tthis.rightLeg = new THREE.Group();\n\t\tlet rightLegPivot = new THREE.Group();\n\n\t\tlet rightLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(rightLegBox,\n\t\t\ttoSkinVertices(4, 16, 8, 20),\n\t\t\ttoSkinVertices(8, 16, 12, 20),\n\t\t\ttoSkinVertices(0, 20, 4, 32),\n\t\t\ttoSkinVertices(4, 20, 8, 32),\n\t\t\ttoSkinVertices(8, 20, 12, 32),\n\t\t\ttoSkinVertices(12, 20, 16, 32)\n\t\t);\n\t\tlet rightLegMesh = new THREE.Mesh(rightLegBox, layer1Material);\n\t\trightLegPivot.add(rightLegMesh);\n\n\t\tlet rightLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(rightLeg2Box,\n\t\t\ttoSkinVertices(4, 32, 8, 36),\n\t\t\ttoSkinVertices(8, 32, 12, 36),\n\t\t\ttoSkinVertices(0, 36, 4, 48),\n\t\t\ttoSkinVertices(4, 36, 8, 48),\n\t\t\ttoSkinVertices(8, 36, 12, 48),\n\t\t\ttoSkinVertices(12, 36, 16, 48)\n\t\t);\n\t\tlet rightLeg2Mesh = new THREE.Mesh(rightLeg2Box, layer2Material);\n\t\trightLeg2Mesh.renderOrder = 1;\n\t\trightLegPivot.add(rightLeg2Mesh);\n\n\t\trightLegPivot.position.y = -6;\n\t\tthis.rightLeg.add(rightLegPivot);\n\t\tthis.rightLeg.position.y = -16;\n\t\tthis.rightLeg.position.x = -2;\n\t\tthis.add(this.rightLeg);\n\n\t\t// Left Leg\n\t\tthis.leftLeg = new THREE.Group();\n\t\tlet leftLegPivot = new THREE.Group();\n\n\t\tlet leftLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(leftLegBox,\n\t\t\ttoSkinVertices(20, 48, 24, 52),\n\t\t\ttoSkinVertices(24, 48, 28, 52),\n\t\t\ttoSkinVertices(16, 52, 20, 64),\n\t\t\ttoSkinVertices(20, 52, 24, 64),\n\t\t\ttoSkinVertices(24, 52, 28, 64),\n\t\t\ttoSkinVertices(28, 52, 32, 64)\n\t\t);\n\t\tlet leftLegMesh = new THREE.Mesh(leftLegBox, layer1Material);\n\t\tleftLegPivot.add(leftLegMesh);\n\n\t\tlet leftLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(leftLeg2Box,\n\t\t\ttoSkinVertices(4, 48, 8, 52),\n\t\t\ttoSkinVertices(8, 48, 12, 52),\n\t\t\ttoSkinVertices(0, 52, 4, 64),\n\t\t\ttoSkinVertices(4, 52, 8, 64),\n\t\t\ttoSkinVertices(8, 52, 12, 64),\n\t\t\ttoSkinVertices(12, 52, 16, 64)\n\t\t);\n\t\tlet leftLeg2Mesh = new THREE.Mesh(leftLeg2Box, layer2Material);\n\t\tleftLeg2Mesh.renderOrder = 1;\n\t\tleftLegPivot.add(leftLeg2Mesh);\n\n\t\tleftLegPivot.position.y = -6;\n\t\tthis.leftLeg.add(leftLegPivot);\n\t\tthis.leftLeg.position.y = -16;\n\t\tthis.leftLeg.position.x = 2;\n\t\tthis.add(this.leftLeg);\n\t}\n}\n\nclass CapeObject extends THREE.Group {\n\tconstructor(capeMaterial) {\n\t\tsuper();\n\n\t\t// back = outside\n\t\t// front = inside\n\t\tlet capeBox = new THREE.BoxGeometry(10, 16, 1, 0, 0, 0);\n\t\taddVertices(capeBox,\n\t\t\ttoCapeVertices(1, 0, 11, 1),\n\t\t\ttoCapeVertices(11, 0, 21, 1),\n\t\t\ttoCapeVertices(11, 1, 12, 17),\n\t\t\ttoCapeVertices(12, 1, 22, 17),\n\t\t\ttoCapeVertices(0, 1, 1, 17),\n\t\t\ttoCapeVertices(1, 1, 11, 17)\n\t\t);\n\t\tthis.cape = new THREE.Mesh(capeBox, capeMaterial);\n\t\tthis.cape.position.y = -8;\n\t\tthis.cape.position.z = -0.5;\n\t\tthis.add(this.cape);\n\t}\n}\n\nclass PlayerObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material, capeMaterial) {\n\t\tsuper();\n\n\t\tthis.skin = new SkinObject(slim, layer1Material, layer2Material);\n\t\tthis.skin.visible = false;\n\t\tthis.add(this.skin);\n\n\t\tthis.cape = new CapeObject(capeMaterial);\n\t\tthis.cape.position.z = -2;\n\t\tthis.cape.position.y = -4;\n\t\tthis.cape.rotation.x = 25 * Math.PI / 180;\n\t\tthis.cape.visible = false;\n\t\tthis.add(this.cape);\n\t}\n}\n\nexport { SkinObject, CapeObject, PlayerObject };\n","function invokeAnimation(animation, player, time) {\n\tif (animation instanceof CompositeAnimation) {\n\t\tanimation.play(player, time);\n\t} else if (animation instanceof Function) {\n\t\tanimation(player, time);\n\t} else {\n\t\tthrow `Not an animation: ${animation}`;\n\t}\n}\n\nclass AnimationHandle {\n\tconstructor(animation) {\n\t\tthis.animation = animation;\n\t\tthis.paused = this._paused = false;\n\t\tthis.speed = this._speed = 1.0;\n\t\tthis._lastChange = null;\n\t\tthis._lastChangeX = null;\n\t}\n\tplay(player, time) {\n\t\tif (this._lastChange === null) {\n\t\t\tthis._lastChange = time;\n\t\t\tthis._lastChangeX = 0;\n\t\t} else if (this.paused !== this._paused || this.speed !== this._speed) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tif (this._paused === false) {\n\t\t\t\tthis._lastChangeX += dt * this._speed;\n\t\t\t}\n\t\t\tthis._paused = this.paused;\n\t\t\tthis._speed = this.speed;\n\t\t\tthis._lastChange = time;\n\t\t}\n\t\tif (this.paused === false) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tlet x = this._lastChangeX + this.speed * dt;\n\t\t\tinvokeAnimation(this.animation, player, x);\n\t\t}\n\t}\n\treset(){\n\t\tthis._lastChange = null;\n\t}\n}\n\nclass CompositeAnimation {\n\tconstructor() {\n\t\tthis.handles = new Set();\n\t}\n\tadd(animation) {\n\t\tlet handle = new AnimationHandle(animation);\n\t\thandle.remove = () => this.handles.delete(handle);\n\t\tthis.handles.add(handle);\n\t\treturn handle;\n\t}\n\tplay(player, time) {\n\t\tthis.handles.forEach(handle => handle.play(player, time));\n\t}\n}\n\nlet WalkingAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\t// Multiply by animation's natural speed\n\ttime *= 8;\n\n\t// Leg swing\n\tskin.leftLeg.rotation.x = Math.sin(time) * 0.5;\n\tskin.rightLeg.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\tskin.rightArm.rotation.x = Math.sin(time) * 0.5;\n\tlet basicArmRotationZ = Math.PI * 0.02;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.03 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.03 - basicArmRotationZ;\n\n\t// Head shaking with different frequency & amplitude\n\tskin.head.rotation.y = Math.sin(time / 4) * 0.2;\n\tskin.head.rotation.x = Math.sin(time / 5) * 0.1;\n\n\t// Always add an angle for cape around the x axis\n\tlet basicCapeRotationX = Math.PI * 0.06;\n\tplayer.cape.rotation.x = Math.sin(time / 1.5) * 0.06 + basicCapeRotationX;\n};\n\nlet RunningAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\ttime *= 15;\n\n\t// Leg swing with larger amplitude\n\tskin.leftLeg.rotation.x = Math.cos(time + Math.PI) * 1.3;\n\tskin.rightLeg.rotation.x = Math.cos(time) * 1.3;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.cos(time) * 1.5;\n\tskin.rightArm.rotation.x = Math.cos(time + Math.PI) * 1.5;\n\tlet basicArmRotationZ = Math.PI * 0.1;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.1 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.1 - basicArmRotationZ;\n\n\t// Jumping\n\tplayer.position.y = Math.cos(time * 2);\n\t// Dodging when running\n\tplayer.position.x = Math.cos(time) * 0.15;\n\t// Slightly tilting when running\n\tplayer.rotation.z = Math.cos(time + Math.PI) * 0.01;\n\n\t// Apply higher swing frequency, lower amplitude,\n\t// and greater basic rotation around x axis,\n\t// to cape when running.\n\tlet basicCapeRotationX = Math.PI * 0.3;\n\tplayer.cape.rotation.x = Math.sin(time * 2) * 0.1 + basicCapeRotationX;\n\n\t// What about head shaking?\n\t// You shouldn't glance right and left when running dude :P\n};\n\nlet RotatingAnimation = (player, time) => {\n\tplayer.rotation.y = time;\n};\n\nexport {\n\tCompositeAnimation,\n\tinvokeAnimation,\n\tWalkingAnimation,\n\tRunningAnimation,\n\tRotatingAnimation\n};\n","import * as THREE from \"three\";\nimport { PlayerObject } from \"./model\";\nimport { invokeAnimation } from \"./animation\";\n\nfunction copyImage(context, sX, sY, w, h, dX, dY, flipHorizontal) {\n\tlet imgData = context.getImageData(sX, sY, w, h);\n\tif (flipHorizontal) {\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < (w / 2); x++) {\n\t\t\t\tlet index = (x + y * w) * 4;\n\t\t\t\tlet index2 = ((w - x - 1) + y * w) * 4;\n\t\t\t\tlet pA1 = imgData.data[index];\n\t\t\t\tlet pA2 = imgData.data[index + 1];\n\t\t\t\tlet pA3 = imgData.data[index + 2];\n\t\t\t\tlet pA4 = imgData.data[index + 3];\n\n\t\t\t\tlet pB1 = imgData.data[index2];\n\t\t\t\tlet pB2 = imgData.data[index2 + 1];\n\t\t\t\tlet pB3 = imgData.data[index2 + 2];\n\t\t\t\tlet pB4 = imgData.data[index2 + 3];\n\n\t\t\t\timgData.data[index] = pB1;\n\t\t\t\timgData.data[index + 1] = pB2;\n\t\t\t\timgData.data[index + 2] = pB3;\n\t\t\t\timgData.data[index + 3] = pB4;\n\n\t\t\t\timgData.data[index2] = pA1;\n\t\t\t\timgData.data[index2 + 1] = pA2;\n\t\t\t\timgData.data[index2 + 2] = pA3;\n\t\t\t\timgData.data[index2 + 3] = pA4;\n\t\t\t}\n\t\t}\n\t}\n\tcontext.putImageData(imgData, dX, dY);\n}\n\nfunction convertSkinTo1_8(context, width) {\n\tlet scale = width / 64.0;\n\tlet copySkin = (context, sX, sY, w, h, dX, dY, flipHorizontal) => copyImage(context, sX * scale, sY * scale, w * scale, h * scale, dX * scale, dY * scale, flipHorizontal);\n\n\tcopySkin(context, 4, 16, 4, 4, 20, 48, true); // Top Leg\n\tcopySkin(context, 8, 16, 4, 4, 24, 48, true); // Bottom Leg\n\tcopySkin(context, 0, 20, 4, 12, 24, 52, true); // Outer Leg\n\tcopySkin(context, 4, 20, 4, 12, 20, 52, true); // Front Leg\n\tcopySkin(context, 8, 20, 4, 12, 16, 52, true); // Inner Leg\n\tcopySkin(context, 12, 20, 4, 12, 28, 52, true); // Back Leg\n\tcopySkin(context, 44, 16, 4, 4, 36, 48, true); // Top Arm\n\tcopySkin(context, 48, 16, 4, 4, 40, 48, true); // Bottom Arm\n\tcopySkin(context, 40, 20, 4, 12, 40, 52, true); // Outer Arm\n\tcopySkin(context, 44, 20, 4, 12, 36, 52, true); // Front Arm\n\tcopySkin(context, 48, 20, 4, 12, 32, 52, true); // Inner Arm\n\tcopySkin(context, 52, 20, 4, 12, 44, 52, true); // Back Arm\n}\n\nclass SkinViewer {\n\tconstructor(options) {\n\t\tthis.domElement = options.domElement;\n\t\tthis.animation = options.animation || null;\n\t\tthis.animationPaused = false;\n\t\tthis.animationTime = 0;\n\t\tthis.disposed = false;\n\n\t\t// texture\n\t\tthis.skinImg = new Image();\n\t\tthis.skinCanvas = document.createElement(\"canvas\");\n\t\tthis.skinTexture = new THREE.Texture(this.skinCanvas);\n\t\tthis.skinTexture.magFilter = THREE.NearestFilter;\n\t\tthis.skinTexture.minFilter = THREE.NearestMipMapNearestFilter;\n\n\t\tthis.capeImg = new Image();\n\t\tthis.capeCanvas = document.createElement(\"canvas\");\n\t\tthis.capeTexture = new THREE.Texture(this.capeCanvas);\n\t\tthis.capeTexture.magFilter = THREE.NearestFilter;\n\t\tthis.capeTexture.minFilter = THREE.NearestMipMapNearestFilter;\n\n\t\tthis.layer1Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, side: THREE.FrontSide });\n\t\tthis.layer2Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: THREE.DoubleSide });\n\t\tthis.capeMaterial = new THREE.MeshBasicMaterial({ map: this.capeTexture });\n\n\t\t// scene\n\t\tthis.scene = new THREE.Scene();\n\n\t\t// Use smaller fov to avoid distortion\n\t\tthis.camera = new THREE.PerspectiveCamera(40);\n\t\tthis.camera.position.y = -12;\n\t\tthis.camera.position.z = 60;\n\n\t\tthis.renderer = new THREE.WebGLRenderer({ angleRot: true, alpha: true, antialias: false });\n\t\tthis.renderer.setSize(300, 300); // default size\n\t\tthis.renderer.context.getShaderInfoLog = () => \"\"; // shut firefox up\n\t\tthis.domElement.appendChild(this.renderer.domElement);\n\n\t\tthis.playerObject = new PlayerObject(options.slim === true, this.layer1Material, this.layer2Material, this.capeMaterial);\n\t\tthis.scene.add(this.playerObject);\n\n\t\t// texture loading\n\t\tthis.skinImg.crossOrigin = \"\";\n\t\tthis.skinImg.onerror = () => console.error(\"Failed loading \" + this.skinImg.src);\n\t\tthis.skinImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.skinImg.width !== this.skinImg.height) {\n\t\t\t\tif (this.skinImg.width === 2 * this.skinImg.height) {\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad skin size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet skinContext = this.skinCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.width = width;\n\t\t\t\tthis.skinCanvas.height = width;\n\t\t\t\tskinContext.clearRect(0, 0, width, width);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, width, width / 2.0);\n\t\t\t\tconvertSkinTo1_8(skinContext, width);\n\t\t\t} else {\n\t\t\t\tthis.skinCanvas.width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.height = this.skinImg.height;\n\t\t\t\tskinContext.clearRect(0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t}\n\n\t\t\tthis.skinTexture.needsUpdate = true;\n\t\t\tthis.layer1Material.needsUpdate = true;\n\t\t\tthis.layer2Material.needsUpdate = true;\n\n\t\t\tthis.playerObject.skin.visible = true;\n\t\t};\n\n\t\tthis.capeImg.crossOrigin = \"\";\n\t\tthis.capeImg.onerror = () => console.error(\"Failed loading \" + this.capeImg.src);\n\t\tthis.capeImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.capeImg.width !== 2 * this.capeImg.height) {\n\t\t\t\tif (this.capeImg.width * 17 == this.capeImg.height * 22) {\n\t\t\t\t\t// width/height = 22/17\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad cape size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet capeContext = this.capeCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.capeImg.width * 64 / 22;\n\t\t\t\tthis.capeCanvas.width = width;\n\t\t\t\tthis.capeCanvas.height = width / 2;\n\t\t\t} else {\n\t\t\t\tthis.capeCanvas.width = this.capeImg.width;\n\t\t\t\tthis.capeCanvas.height = this.capeImg.height;\n\t\t\t}\n\t\t\tcapeContext.clearRect(0, 0, this.capeCanvas.width, this.capeCanvas.height);\n\t\t\tcapeContext.drawImage(this.capeImg, 0, 0, this.capeImg.width, this.capeImg.height);\n\n\t\t\tthis.capeTexture.needsUpdate = true;\n\t\t\tthis.capeMaterial.needsUpdate = true;\n\n\t\t\tthis.playerObject.cape.visible = true;\n\t\t};\n\n\t\tif (options.skinUrl) this.skinUrl = options.skinUrl;\n\t\tif (options.capeUrl) this.capeUrl = options.capeUrl;\n\t\tif (options.width) this.width = options.width;\n\t\tif (options.height) this.height = options.height;\n\n\t\tlet draw = () => {\n\t\t\tif (this.disposed) return;\n\t\t\twindow.requestAnimationFrame(draw);\n\t\t\tif (!this.animationPaused) {\n\t\t\t\tthis.animationTime++;\n\t\t\t\tif (this.animation) {\n\t\t\t\t\tinvokeAnimation(this.animation, this.playerObject, this.animationTime / 100.0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.renderer.render(this.scene, this.camera);\n\t\t};\n\t\tdraw();\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.camera.aspect = width / height;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.renderer.setSize(width, height);\n\t}\n\n\tdispose() {\n\t\tthis.disposed = true;\n\t\tthis.domElement.removeChild(this.renderer.domElement);\n\t\tthis.renderer.dispose();\n\t\tthis.skinTexture.dispose();\n\t\tthis.capeTexture.dispose();\n\t}\n\n\tget skinUrl() {\n\t\treturn this.skinImg.src;\n\t}\n\n\tset skinUrl(url) {\n\t\tthis.skinImg.src = url;\n\t}\n\n\tget capeUrl() {\n\t\treturn this.capeImg.src;\n\t}\n\n\tset capeUrl(url) {\n\t\tthis.capeImg.src = url;\n\t}\n\n\tget width() {\n\t\treturn this.renderer.getSize().width;\n\t}\n\n\tset width(newWidth) {\n\t\tthis.setSize(newWidth, this.height);\n\t}\n\n\tget height() {\n\t\treturn this.renderer.getSize().height;\n\t}\n\n\tset height(newHeight) {\n\t\tthis.setSize(this.width, newHeight);\n\t}\n}\n\nexport { SkinViewer };\n","import * as THREE from \"three\";\n\nclass OrbitControls extends THREE.EventDispatcher {\n\t/**\n\t * @preserve\n\t * The code was originally from https://github.com/mrdoob/three.js/blob/d45a042cf962e9b1aa9441810ba118647b48aacb/examples/js/controls/OrbitControls.js\n\t */\n\t/**\n\t * @license\n\t * Copyright (C) 2010-2017 three.js authors\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t *\n\t *\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t */\n\n\t// This set of controls performs orbiting, dollying (zooming), and panning.\n\t// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n\t//\n\t// Orbit - left mouse / touch: one finger move\n\t// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n\t// Pan - right mouse, or arrow keys / touch: three finger swipe\n\n\tconstructor(object, domElement) {\n\t\tsuper();\n\t\tthis.object = object;\n\t\tthis.domElement = (domElement !== undefined) ? domElement : document;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new THREE.Vector3();\n\n\t\t// How far you can dolly in and out (PerspectiveCamera only)\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out (OrthographicCamera only)\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\t\tthis.minAzimuthAngle = -Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.25;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t\t// Set to false to disable use of the keys\n\t\tthis.enableKeys = true;\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\t\tthis.getPolarAngle = function () {\n\t\t\treturn spherical.phi;\n\t\t};\n\t\tthis.getAzimuthalAngle = function () {\n\t\t\treturn spherical.theta;\n\t\t};\n\t\tthis.saveState = function () {\n\t\t\tscope.target0.copy(scope.target);\n\t\t\tscope.position0.copy(scope.object.position);\n\t\t\tscope.zoom0 = scope.object.zoom;\n\t\t};\n\t\tthis.reset = function () {\n\t\t\tscope.target.copy(scope.target0);\n\t\t\tscope.object.position.copy(scope.position0);\n\t\t\tscope.object.zoom = scope.zoom0;\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\tscope.update();\n\t\t\tstate = STATE.NONE;\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\t// so camera.up is the orbit axis\n\t\t\tlet quat = new THREE.Quaternion().setFromUnitVectors(object.up, new THREE.Vector3(0, 1, 0));\n\t\t\tlet quatInverse = quat.clone().inverse();\n\t\t\tlet lastPosition = new THREE.Vector3();\n\t\t\tlet lastQuaternion = new THREE.Quaternion();\n\t\t\treturn function update() {\n\t\t\t\tlet position = scope.object.position;\n\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion(quat);\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3(offset);\n\t\t\t\tif (scope.autoRotate && state === STATE.NONE) {\n\t\t\t\t\trotateLeft(getAutoRotationAngle());\n\t\t\t\t}\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\t\t\t\t// restrict theta to be between desired limits\n\t\t\t\tspherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n\t\t\t\tspherical.makeSafe();\n\t\t\t\tspherical.radius *= scale;\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n\t\t\t\t// move target to panned location\n\t\t\t\tscope.target.add(panOffset);\n\t\t\t\toffset.setFromSpherical(spherical);\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion(quatInverse);\n\t\t\t\tposition.copy(scope.target).add(offset);\n\t\t\t\tscope.object.lookAt(scope.target);\n\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\tsphericalDelta.theta *= (1 - scope.dampingFactor);\n\t\t\t\t\tsphericalDelta.phi *= (1 - scope.dampingFactor);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsphericalDelta.set(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tscale = 1;\n\t\t\t\tpanOffset.set(0, 0, 0);\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\t\t\t\tif (zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared(scope.object.position) > EPS ||\n\t\t\t\t\t8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\t\t\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\t\t\tlastPosition.copy(scope.object.position);\n\t\t\t\t\tlastQuaternion.copy(scope.object.quaternion);\n\t\t\t\t\tzoomChanged = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}();\n\t\tthis.dispose = function () {\n\t\t\tscope.domElement.removeEventListener(\"contextmenu\", onContextMenu, false);\n\t\t\tscope.domElement.removeEventListener(\"mousedown\", onMouseDown, false);\n\t\t\tscope.domElement.removeEventListener(\"wheel\", onMouseWheel, false);\n\t\t\tscope.domElement.removeEventListener(\"touchstart\", onTouchStart, false);\n\t\t\tscope.domElement.removeEventListener(\"touchend\", onTouchEnd, false);\n\t\t\tscope.domElement.removeEventListener(\"touchmove\", onTouchMove, false);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\twindow.removeEventListener(\"keydown\", onKeyDown, false);\n\t\t\t//scope.dispatchEvent({ type: \"dispose\" }); // should this be added here?\n\t\t};\n\t\t//\n\t\t// internals\n\t\t//\n\t\tlet scope = this;\n\t\tlet changeEvent = { type: \"change\" };\n\t\tlet startEvent = { type: \"start\" };\n\t\tlet endEvent = { type: \"end\" };\n\t\tlet STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 };\n\t\tlet state = STATE.NONE;\n\t\tlet EPS = 0.000001;\n\t\t// current position in spherical coordinates\n\t\tlet spherical = new THREE.Spherical();\n\t\tlet sphericalDelta = new THREE.Spherical();\n\t\tlet scale = 1;\n\t\tlet panOffset = new THREE.Vector3();\n\t\tlet zoomChanged = false;\n\t\tlet rotateStart = new THREE.Vector2();\n\t\tlet rotateEnd = new THREE.Vector2();\n\t\tlet rotateDelta = new THREE.Vector2();\n\t\tlet panStart = new THREE.Vector2();\n\t\tlet panEnd = new THREE.Vector2();\n\t\tlet panDelta = new THREE.Vector2();\n\t\tlet dollyStart = new THREE.Vector2();\n\t\tlet dollyEnd = new THREE.Vector2();\n\t\tlet dollyDelta = new THREE.Vector2();\n\t\tfunction getAutoRotationAngle() {\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\t\t}\n\t\tfunction getZoomScale() {\n\t\t\treturn Math.pow(0.95, scope.zoomSpeed);\n\t\t}\n\t\tfunction rotateLeft(angle) {\n\t\t\tsphericalDelta.theta -= angle;\n\t\t}\n\t\tfunction rotateUp(angle) {\n\t\t\tsphericalDelta.phi -= angle;\n\t\t}\n\t\tlet panLeft = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panLeft(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar(-distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\tlet panUp = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panUp(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n\t\t\t\tv.multiplyScalar(distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tlet pan = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\treturn function pan(deltaX, deltaY) {\n\t\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\t\t// perspective\n\t\t\t\t\tlet position = scope.object.position;\n\t\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t\tlet targetDistance = offset.length();\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0);\n\t\t\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\n\t\t\t\t\tpanLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t\tpanUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n\t\t\t\t\tpanUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n\t\t\t\t\tscope.enablePan = false;\n\t\t\t\t}\n\t\t\t};\n\t\t}();\n\t\tfunction dollyIn(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale /= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\tfunction dollyOut(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale *= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\t\tfunction handleMouseDownRotate(event) {\n\t\t\trotateStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownDolly(event) {\n\t\t\tdollyStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownPan(event) {\n\t\t\tpanStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseMoveRotate(event) {\n\t\t\trotateEnd.set(event.clientX, event.clientY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMoveDolly(event) {\n\t\t\tdollyEnd.set(event.clientX, event.clientY);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMovePan(event) {\n\t\t\tpanEnd.set(event.clientX, event.clientY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseUp(event) {\n\t\t}\n\t\tfunction handleMouseWheel(event) {\n\t\t\tif (event.deltaY < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (event.deltaY > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleKeyDown(event) {\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan(0, scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan(0, -scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan(scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan(-scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfunction handleTouchStartRotate(event) {\n\t\t\trotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchStartDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyStart.set(0, distance);\n\t\t}\n\t\tfunction handleTouchStartPan(event) {\n\t\t\tpanStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchMoveRotate(event) {\n\t\t\trotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMoveDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyEnd.set(0, distance);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMovePan(event) {\n\t\t\tpanEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchEnd(event) {\n\t\t}\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\t\tfunction onMouseDown(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.button) {\n\t\t\t\tcase scope.mouseButtons.ORBIT:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownRotate(event);\n\t\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.ZOOM:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownDolly(event);\n\t\t\t\t\tstate = STATE.DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownPan(event);\n\t\t\t\t\tstate = STATE.PAN;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tdocument.addEventListener(\"mousemove\", onMouseMove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", onMouseUp, false);\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onMouseMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (state) {\n\t\t\t\tcase STATE.ROTATE:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.DOLLY:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tfunction onMouseUp(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleMouseUp(event);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onMouseWheel(event) {\n\t\t\tif (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE))\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\thandleMouseWheel(event);\n\t\t\tscope.dispatchEvent(startEvent); // not sure why these are here...\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t}\n\t\tfunction onKeyDown(event) {\n\t\t\tif (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\thandleKeyDown(event);\n\t\t}\n\t\tfunction onTouchStart(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartRotate(event);\n\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartDolly(event);\n\t\t\t\t\tstate = STATE.TOUCH_DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartPan(event);\n\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onTouchMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_ROTATE)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_DOLLY)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_PAN)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tfunction onTouchEnd(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleTouchEnd(event);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onContextMenu(event) {\n\t\t\tif (scope.enabled === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t}\n\t\t//\n\t\tscope.domElement.addEventListener(\"contextmenu\", onContextMenu, false);\n\t\tscope.domElement.addEventListener(\"mousedown\", onMouseDown, false);\n\t\tscope.domElement.addEventListener(\"wheel\", onMouseWheel, false);\n\t\tscope.domElement.addEventListener(\"touchstart\", onTouchStart, false);\n\t\tscope.domElement.addEventListener(\"touchend\", onTouchEnd, false);\n\t\tscope.domElement.addEventListener(\"touchmove\", onTouchMove, false);\n\t\twindow.addEventListener(\"keydown\", onKeyDown, false);\n\t\t// force an update at start\n\t\tthis.update();\n\t}\n}\n\nfunction createOrbitControls(skinViewer) {\n\tlet control = new OrbitControls(skinViewer.camera, skinViewer.renderer.domElement);\n\n\t// default configuration\n\tcontrol.enablePan = false;\n\tcontrol.target = new THREE.Vector3(0, -12, 0);\n\tcontrol.minDistance = 10;\n\tcontrol.maxDistance = 256;\n\tcontrol.update();\n\n\treturn control;\n}\n\nexport { OrbitControls, createOrbitControls };\n"],"names":["toFaceVertices","x1","y1","x2","y2","w","h","THREE","toSkinVertices","toCapeVertices","addVertices","box","top","bottom","left","front","right","back","faceVertexUvs","esp","SkinObject","slim","layer1Material","layer2Material","head","headBox","headMesh","add","head2Box","head2Mesh","renderOrder","_this","body","bodyBox","bodyMesh","body2Box","body2Mesh","position","y","rightArm","rightArmPivot","rightArmBox","rightArmMesh","rightArm2Box","rightArm2Mesh","x","leftArm","leftArmPivot","leftArmBox","leftArmMesh","leftArm2Box","leftArm2Mesh","rightLeg","rightLegPivot","rightLegBox","rightLegMesh","rightLeg2Box","rightLeg2Mesh","leftLeg","leftLegPivot","leftLegBox","leftLegMesh","leftLeg2Box","leftLeg2Mesh","CapeObject","capeMaterial","capeBox","cape","z","_this2","PlayerObject","skin","visible","_this3","rotation","Math","PI","invokeAnimation","animation","player","time","CompositeAnimation","play","Function","AnimationHandle","paused","this","_paused","speed","_speed","_lastChange","_lastChangeX","dt","handles","Set","handle","remove","delete","forEach","SkinViewer","options","domElement","animationPaused","animationTime","disposed","skinImg","Image","skinCanvas","document","createElement","skinTexture","magFilter","minFilter","capeImg","capeCanvas","capeTexture","map","side","transparent","opacity","scene","camera","renderer","angleRot","alpha","antialias","setSize","context","getShaderInfoLog","appendChild","playerObject","crossOrigin","onerror","console","error","src","onload","isOldFormat","width","height","skinContext","getContext","clearRect","drawImage","scale","copySkin","sX","sY","dX","dY","flipHorizontal","imgData","getImageData","index","index2","pA1","data","pA2","pA3","pA4","pB1","pB2","pB3","pB4","putImageData","copyImage","needsUpdate","capeContext","skinUrl","capeUrl","draw","requestAnimationFrame","render","aspect","updateProjectionMatrix","removeChild","dispose","url","getSize","newWidth","newHeight","OrbitControls","object","offset","quat","quatInverse","lastPosition","lastQuaternion","undefined","enabled","target","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","ZOOM","MIDDLE","PAN","target0","clone","position0","zoom0","zoom","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","copy","scope","reset","dispatchEvent","changeEvent","update","STATE","NONE","setFromUnitVectors","up","inverse","sub","applyQuaternion","setFromVector3","state","sphericalDelta","max","min","makeSafe","radius","panOffset","setFromSpherical","lookAt","set","zoomChanged","distanceToSquared","EPS","dot","quaternion","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","type","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY","TOUCH_PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","rotateLeft","angle","rotateUp","v","panLeft","distance","objectMatrix","setFromMatrixColumn","multiplyScalar","panUp","pan","deltaX","deltaY","element","targetDistance","length","tan","fov","clientHeight","matrix","clientWidth","warn","dollyIn","dollyScale","dollyOut","event","button","clientX","clientY","preventDefault","addEventListener","subVectors","stopPropagation","keyCode","touches","pageX","pageY","dx","dy","sqrt","skinViewer","control","sin","basicArmRotationZ","cos","basicCapeRotationX"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"skinview3d.min.js","sources":["../src/model.js","../src/animation.js","../src/viewer.js","../src/orbit_controls.js"],"sourcesContent":["import * as THREE from \"three\";\n\nfunction toFaceVertices(x1, y1, x2, y2, w, h) {\n\treturn [\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y1 / h),\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y1 / h)\n\t];\n}\n\nfunction toSkinVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 64.0);\n}\n\nfunction toCapeVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 32.0);\n}\n\nfunction addVertices(box, top, bottom, left, front, right, back) {\n\tbox.faceVertexUvs[0] = [];\n\tbox.faceVertexUvs[0][0] = [right[3], right[0], right[2]];\n\tbox.faceVertexUvs[0][1] = [right[0], right[1], right[2]];\n\tbox.faceVertexUvs[0][2] = [left[3], left[0], left[2]];\n\tbox.faceVertexUvs[0][3] = [left[0], left[1], left[2]];\n\tbox.faceVertexUvs[0][4] = [top[3], top[0], top[2]];\n\tbox.faceVertexUvs[0][5] = [top[0], top[1], top[2]];\n\tbox.faceVertexUvs[0][6] = [bottom[0], bottom[3], bottom[1]];\n\tbox.faceVertexUvs[0][7] = [bottom[3], bottom[2], bottom[1]];\n\tbox.faceVertexUvs[0][8] = [front[3], front[0], front[2]];\n\tbox.faceVertexUvs[0][9] = [front[0], front[1], front[2]];\n\tbox.faceVertexUvs[0][10] = [back[3], back[0], back[2]];\n\tbox.faceVertexUvs[0][11] = [back[0], back[1], back[2]];\n}\n\nconst esp = 0.002;\n\nclass SkinObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material) {\n\t\tsuper();\n\n\t\tthis.slim = slim;\n\n\t\t// Head\n\t\tthis.head = new THREE.Group();\n\n\t\tlet headBox = new THREE.BoxGeometry(8, 8, 8, 0, 0, 0);\n\t\taddVertices(headBox,\n\t\t\ttoSkinVertices(8, 0, 16, 8),\n\t\t\ttoSkinVertices(16, 0, 24, 8),\n\t\t\ttoSkinVertices(0, 8, 8, 16),\n\t\t\ttoSkinVertices(8, 8, 16, 16),\n\t\t\ttoSkinVertices(16, 8, 24, 16),\n\t\t\ttoSkinVertices(24, 8, 32, 16)\n\t\t);\n\t\tlet headMesh = new THREE.Mesh(headBox, layer1Material);\n\t\tthis.head.add(headMesh);\n\n\t\tlet head2Box = new THREE.BoxGeometry(9, 9, 9, 0, 0, 0);\n\t\taddVertices(head2Box,\n\t\t\ttoSkinVertices(40, 0, 48, 8),\n\t\t\ttoSkinVertices(48, 0, 56, 8),\n\t\t\ttoSkinVertices(32, 8, 40, 16),\n\t\t\ttoSkinVertices(40, 8, 48, 16),\n\t\t\ttoSkinVertices(48, 8, 56, 16),\n\t\t\ttoSkinVertices(56, 8, 64, 16)\n\t\t);\n\t\tlet head2Mesh = new THREE.Mesh(head2Box, layer2Material);\n\t\thead2Mesh.renderOrder = -1;\n\t\tthis.head.add(head2Mesh);\n\n\t\tthis.add(this.head);\n\n\n\t\t// Body\n\t\tthis.body = new THREE.Group();\n\n\t\tlet bodyBox = new THREE.BoxGeometry(8, 12, 4, 0, 0, 0);\n\t\taddVertices(bodyBox,\n\t\t\ttoSkinVertices(20, 16, 28, 20),\n\t\t\ttoSkinVertices(28, 16, 36, 20),\n\t\t\ttoSkinVertices(16, 20, 20, 32),\n\t\t\ttoSkinVertices(20, 20, 28, 32),\n\t\t\ttoSkinVertices(28, 20, 32, 32),\n\t\t\ttoSkinVertices(32, 20, 40, 32)\n\t\t);\n\t\tlet bodyMesh = new THREE.Mesh(bodyBox, layer1Material);\n\t\tthis.body.add(bodyMesh);\n\n\t\tlet body2Box = new THREE.BoxGeometry(9, 13.5, 4.5, 0, 0, 0);\n\t\taddVertices(body2Box,\n\t\t\ttoSkinVertices(20, 32, 28, 36),\n\t\t\ttoSkinVertices(28, 32, 36, 36),\n\t\t\ttoSkinVertices(16, 36, 20, 48),\n\t\t\ttoSkinVertices(20, 36, 28, 48),\n\t\t\ttoSkinVertices(28, 36, 32, 48),\n\t\t\ttoSkinVertices(32, 36, 40, 48)\n\t\t);\n\t\tlet body2Mesh = new THREE.Mesh(body2Box, layer2Material);\n\t\tthis.body.add(body2Mesh);\n\n\t\tthis.body.position.y = -10;\n\t\tthis.add(this.body);\n\n\n\t\t// Right Arm\n\t\tthis.rightArm = new THREE.Group();\n\t\tlet rightArmPivot = new THREE.Group();\n\n\t\tlet rightArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 47, 20),\n\t\t\t\ttoSkinVertices(47, 16, 50, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 47, 32),\n\t\t\t\ttoSkinVertices(47, 20, 51, 32),\n\t\t\t\ttoSkinVertices(51, 20, 54, 32)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 48, 20),\n\t\t\t\ttoSkinVertices(48, 16, 52, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 48, 32),\n\t\t\t\ttoSkinVertices(48, 20, 52, 32),\n\t\t\t\ttoSkinVertices(52, 20, 56, 32)\n\t\t\t);\n\t\t}\n\t\tlet rightArmMesh = new THREE.Mesh(rightArmBox, layer1Material);\n\t\trightArmPivot.add(rightArmMesh);\n\n\t\tlet rightArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 47, 36),\n\t\t\t\ttoSkinVertices(47, 32, 50, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 47, 48),\n\t\t\t\ttoSkinVertices(47, 36, 51, 48),\n\t\t\t\ttoSkinVertices(51, 36, 54, 48)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 48, 36),\n\t\t\t\ttoSkinVertices(48, 32, 52, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 48, 48),\n\t\t\t\ttoSkinVertices(48, 36, 52, 48),\n\t\t\t\ttoSkinVertices(52, 36, 56, 48)\n\t\t\t);\n\t\t}\n\t\tlet rightArm2Mesh = new THREE.Mesh(rightArm2Box, layer2Material);\n\t\trightArm2Mesh.renderOrder = 1;\n\t\trightArmPivot.add(rightArm2Mesh);\n\n\t\trightArmPivot.position.y = -6;\n\t\tthis.rightArm.add(rightArmPivot);\n\t\tthis.rightArm.position.y = -4;\n\t\tthis.rightArm.position.x = slim ? -5.5 : -6;\n\t\tthis.add(this.rightArm);\n\n\n\t\t// Left Arm\n\t\tthis.leftArm = new THREE.Group();\n\t\tlet leftArmPivot = new THREE.Group();\n\n\t\tlet leftArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 39, 52),\n\t\t\t\ttoSkinVertices(39, 48, 42, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 39, 64),\n\t\t\t\ttoSkinVertices(39, 52, 43, 64),\n\t\t\t\ttoSkinVertices(43, 52, 46, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 40, 52),\n\t\t\t\ttoSkinVertices(40, 48, 44, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 40, 64),\n\t\t\t\ttoSkinVertices(40, 52, 44, 64),\n\t\t\t\ttoSkinVertices(44, 52, 48, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArmMesh = new THREE.Mesh(leftArmBox, layer1Material);\n\t\tleftArmPivot.add(leftArmMesh);\n\n\t\tlet leftArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 55, 52),\n\t\t\t\ttoSkinVertices(55, 48, 58, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 55, 64),\n\t\t\t\ttoSkinVertices(55, 52, 59, 64),\n\t\t\t\ttoSkinVertices(59, 52, 62, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 56, 52),\n\t\t\t\ttoSkinVertices(56, 48, 60, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 56, 64),\n\t\t\t\ttoSkinVertices(56, 52, 60, 64),\n\t\t\t\ttoSkinVertices(60, 52, 64, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArm2Mesh = new THREE.Mesh(leftArm2Box, layer2Material);\n\t\tleftArm2Mesh.renderOrder = 1;\n\t\tleftArmPivot.add(leftArm2Mesh);\n\n\t\tleftArmPivot.position.y = -6;\n\t\tthis.leftArm.add(leftArmPivot);\n\t\tthis.leftArm.position.y = -4;\n\t\tthis.leftArm.position.x = slim ? 5.5 : 6;\n\t\tthis.add(this.leftArm);\n\n\n\t\t// Right Leg\n\t\tthis.rightLeg = new THREE.Group();\n\t\tlet rightLegPivot = new THREE.Group();\n\n\t\tlet rightLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(rightLegBox,\n\t\t\ttoSkinVertices(4, 16, 8, 20),\n\t\t\ttoSkinVertices(8, 16, 12, 20),\n\t\t\ttoSkinVertices(0, 20, 4, 32),\n\t\t\ttoSkinVertices(4, 20, 8, 32),\n\t\t\ttoSkinVertices(8, 20, 12, 32),\n\t\t\ttoSkinVertices(12, 20, 16, 32)\n\t\t);\n\t\tlet rightLegMesh = new THREE.Mesh(rightLegBox, layer1Material);\n\t\trightLegPivot.add(rightLegMesh);\n\n\t\tlet rightLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(rightLeg2Box,\n\t\t\ttoSkinVertices(4, 32, 8, 36),\n\t\t\ttoSkinVertices(8, 32, 12, 36),\n\t\t\ttoSkinVertices(0, 36, 4, 48),\n\t\t\ttoSkinVertices(4, 36, 8, 48),\n\t\t\ttoSkinVertices(8, 36, 12, 48),\n\t\t\ttoSkinVertices(12, 36, 16, 48)\n\t\t);\n\t\tlet rightLeg2Mesh = new THREE.Mesh(rightLeg2Box, layer2Material);\n\t\trightLeg2Mesh.renderOrder = 1;\n\t\trightLegPivot.add(rightLeg2Mesh);\n\n\t\trightLegPivot.position.y = -6;\n\t\tthis.rightLeg.add(rightLegPivot);\n\t\tthis.rightLeg.position.y = -16;\n\t\tthis.rightLeg.position.x = -2;\n\t\tthis.add(this.rightLeg);\n\n\t\t// Left Leg\n\t\tthis.leftLeg = new THREE.Group();\n\t\tlet leftLegPivot = new THREE.Group();\n\n\t\tlet leftLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(leftLegBox,\n\t\t\ttoSkinVertices(20, 48, 24, 52),\n\t\t\ttoSkinVertices(24, 48, 28, 52),\n\t\t\ttoSkinVertices(16, 52, 20, 64),\n\t\t\ttoSkinVertices(20, 52, 24, 64),\n\t\t\ttoSkinVertices(24, 52, 28, 64),\n\t\t\ttoSkinVertices(28, 52, 32, 64)\n\t\t);\n\t\tlet leftLegMesh = new THREE.Mesh(leftLegBox, layer1Material);\n\t\tleftLegPivot.add(leftLegMesh);\n\n\t\tlet leftLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(leftLeg2Box,\n\t\t\ttoSkinVertices(4, 48, 8, 52),\n\t\t\ttoSkinVertices(8, 48, 12, 52),\n\t\t\ttoSkinVertices(0, 52, 4, 64),\n\t\t\ttoSkinVertices(4, 52, 8, 64),\n\t\t\ttoSkinVertices(8, 52, 12, 64),\n\t\t\ttoSkinVertices(12, 52, 16, 64)\n\t\t);\n\t\tlet leftLeg2Mesh = new THREE.Mesh(leftLeg2Box, layer2Material);\n\t\tleftLeg2Mesh.renderOrder = 1;\n\t\tleftLegPivot.add(leftLeg2Mesh);\n\n\t\tleftLegPivot.position.y = -6;\n\t\tthis.leftLeg.add(leftLegPivot);\n\t\tthis.leftLeg.position.y = -16;\n\t\tthis.leftLeg.position.x = 2;\n\t\tthis.add(this.leftLeg);\n\t}\n}\n\nclass CapeObject extends THREE.Group {\n\tconstructor(capeMaterial) {\n\t\tsuper();\n\n\t\t// back = outside\n\t\t// front = inside\n\t\tlet capeBox = new THREE.BoxGeometry(10, 16, 1, 0, 0, 0);\n\t\taddVertices(capeBox,\n\t\t\ttoCapeVertices(1, 0, 11, 1),\n\t\t\ttoCapeVertices(11, 0, 21, 1),\n\t\t\ttoCapeVertices(11, 1, 12, 17),\n\t\t\ttoCapeVertices(12, 1, 22, 17),\n\t\t\ttoCapeVertices(0, 1, 1, 17),\n\t\t\ttoCapeVertices(1, 1, 11, 17)\n\t\t);\n\t\tthis.cape = new THREE.Mesh(capeBox, capeMaterial);\n\t\tthis.cape.position.y = -8;\n\t\tthis.cape.position.z = -0.5;\n\t\tthis.add(this.cape);\n\t}\n}\n\nclass PlayerObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material, capeMaterial) {\n\t\tsuper();\n\n\t\tthis.skin = new SkinObject(slim, layer1Material, layer2Material);\n\t\tthis.skin.visible = false;\n\t\tthis.add(this.skin);\n\n\t\tthis.cape = new CapeObject(capeMaterial);\n\t\tthis.cape.position.z = -2;\n\t\tthis.cape.position.y = -4;\n\t\tthis.cape.rotation.x = 25 * Math.PI / 180;\n\t\tthis.cape.visible = false;\n\t\tthis.add(this.cape);\n\t}\n}\n\nexport { SkinObject, CapeObject, PlayerObject };\n","function invokeAnimation(animation, player, time) {\n\tif (animation instanceof CompositeAnimation) {\n\t\tanimation.play(player, time);\n\t} else if (animation instanceof Function) {\n\t\tanimation(player, time);\n\t} else {\n\t\tthrow `Not an animation: ${animation}`;\n\t}\n}\n\nclass AnimationHandle {\n\tconstructor(animation) {\n\t\tthis.animation = animation;\n\t\tthis.paused = this._paused = false;\n\t\tthis.speed = this._speed = 1.0;\n\t\tthis._lastChange = null;\n\t\tthis._lastChangeX = null;\n\t}\n\tplay(player, time) {\n\t\tif (this._lastChange === null) {\n\t\t\tthis._lastChange = time;\n\t\t\tthis._lastChangeX = 0;\n\t\t} else if (this.paused !== this._paused || this.speed !== this._speed) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tif (this._paused === false) {\n\t\t\t\tthis._lastChangeX += dt * this._speed;\n\t\t\t}\n\t\t\tthis._paused = this.paused;\n\t\t\tthis._speed = this.speed;\n\t\t\tthis._lastChange = time;\n\t\t}\n\t\tif (this.paused === false) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tlet x = this._lastChangeX + this.speed * dt;\n\t\t\tinvokeAnimation(this.animation, player, x);\n\t\t}\n\t}\n\treset(){\n\t\tthis._lastChange = null;\n\t}\n}\n\nclass CompositeAnimation {\n\tconstructor() {\n\t\tthis.handles = new Set();\n\t}\n\tadd(animation) {\n\t\tlet handle = new AnimationHandle(animation);\n\t\thandle.remove = () => this.handles.delete(handle);\n\t\tthis.handles.add(handle);\n\t\treturn handle;\n\t}\n\tplay(player, time) {\n\t\tthis.handles.forEach(handle => handle.play(player, time));\n\t}\n}\n\nlet WalkingAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\t// Multiply by animation's natural speed\n\ttime *= 8;\n\n\t// Leg swing\n\tskin.leftLeg.rotation.x = Math.sin(time) * 0.5;\n\tskin.rightLeg.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\tskin.rightArm.rotation.x = Math.sin(time) * 0.5;\n\tlet basicArmRotationZ = Math.PI * 0.02;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.03 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.03 - basicArmRotationZ;\n\n\t// Head shaking with different frequency & amplitude\n\tskin.head.rotation.y = Math.sin(time / 4) * 0.2;\n\tskin.head.rotation.x = Math.sin(time / 5) * 0.1;\n\n\t// Always add an angle for cape around the x axis\n\tlet basicCapeRotationX = Math.PI * 0.06;\n\tplayer.cape.rotation.x = Math.sin(time / 1.5) * 0.06 + basicCapeRotationX;\n};\n\nlet RunningAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\ttime *= 15;\n\n\t// Leg swing with larger amplitude\n\tskin.leftLeg.rotation.x = Math.cos(time + Math.PI) * 1.3;\n\tskin.rightLeg.rotation.x = Math.cos(time) * 1.3;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.cos(time) * 1.5;\n\tskin.rightArm.rotation.x = Math.cos(time + Math.PI) * 1.5;\n\tlet basicArmRotationZ = Math.PI * 0.1;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.1 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.1 - basicArmRotationZ;\n\n\t// Jumping\n\tplayer.position.y = Math.cos(time * 2);\n\t// Dodging when running\n\tplayer.position.x = Math.cos(time) * 0.15;\n\t// Slightly tilting when running\n\tplayer.rotation.z = Math.cos(time + Math.PI) * 0.01;\n\n\t// Apply higher swing frequency, lower amplitude,\n\t// and greater basic rotation around x axis,\n\t// to cape when running.\n\tlet basicCapeRotationX = Math.PI * 0.3;\n\tplayer.cape.rotation.x = Math.sin(time * 2) * 0.1 + basicCapeRotationX;\n\n\t// What about head shaking?\n\t// You shouldn't glance right and left when running dude :P\n};\n\nlet RotatingAnimation = (player, time) => {\n\tplayer.rotation.y = time;\n};\n\nexport {\n\tCompositeAnimation,\n\tinvokeAnimation,\n\tWalkingAnimation,\n\tRunningAnimation,\n\tRotatingAnimation\n};\n","import * as THREE from \"three\";\nimport { PlayerObject } from \"./model\";\nimport { invokeAnimation } from \"./animation\";\n\nfunction copyImage(context, sX, sY, w, h, dX, dY, flipHorizontal) {\n\tlet imgData = context.getImageData(sX, sY, w, h);\n\tif (flipHorizontal) {\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < (w / 2); x++) {\n\t\t\t\tlet index = (x + y * w) * 4;\n\t\t\t\tlet index2 = ((w - x - 1) + y * w) * 4;\n\t\t\t\tlet pA1 = imgData.data[index];\n\t\t\t\tlet pA2 = imgData.data[index + 1];\n\t\t\t\tlet pA3 = imgData.data[index + 2];\n\t\t\t\tlet pA4 = imgData.data[index + 3];\n\n\t\t\t\tlet pB1 = imgData.data[index2];\n\t\t\t\tlet pB2 = imgData.data[index2 + 1];\n\t\t\t\tlet pB3 = imgData.data[index2 + 2];\n\t\t\t\tlet pB4 = imgData.data[index2 + 3];\n\n\t\t\t\timgData.data[index] = pB1;\n\t\t\t\timgData.data[index + 1] = pB2;\n\t\t\t\timgData.data[index + 2] = pB3;\n\t\t\t\timgData.data[index + 3] = pB4;\n\n\t\t\t\timgData.data[index2] = pA1;\n\t\t\t\timgData.data[index2 + 1] = pA2;\n\t\t\t\timgData.data[index2 + 2] = pA3;\n\t\t\t\timgData.data[index2 + 3] = pA4;\n\t\t\t}\n\t\t}\n\t}\n\tcontext.putImageData(imgData, dX, dY);\n}\n\nfunction convertSkinTo1_8(context, width) {\n\tlet scale = width / 64.0;\n\tlet copySkin = (context, sX, sY, w, h, dX, dY, flipHorizontal) => copyImage(context, sX * scale, sY * scale, w * scale, h * scale, dX * scale, dY * scale, flipHorizontal);\n\n\tcopySkin(context, 4, 16, 4, 4, 20, 48, true); // Top Leg\n\tcopySkin(context, 8, 16, 4, 4, 24, 48, true); // Bottom Leg\n\tcopySkin(context, 0, 20, 4, 12, 24, 52, true); // Outer Leg\n\tcopySkin(context, 4, 20, 4, 12, 20, 52, true); // Front Leg\n\tcopySkin(context, 8, 20, 4, 12, 16, 52, true); // Inner Leg\n\tcopySkin(context, 12, 20, 4, 12, 28, 52, true); // Back Leg\n\tcopySkin(context, 44, 16, 4, 4, 36, 48, true); // Top Arm\n\tcopySkin(context, 48, 16, 4, 4, 40, 48, true); // Bottom Arm\n\tcopySkin(context, 40, 20, 4, 12, 40, 52, true); // Outer Arm\n\tcopySkin(context, 44, 20, 4, 12, 36, 52, true); // Front Arm\n\tcopySkin(context, 48, 20, 4, 12, 32, 52, true); // Inner Arm\n\tcopySkin(context, 52, 20, 4, 12, 44, 52, true); // Back Arm\n}\n\nclass SkinViewer {\n\tconstructor(options) {\n\t\tthis.domElement = options.domElement;\n\t\tthis.animation = options.animation || null;\n\t\tthis.animationPaused = false;\n\t\tthis.animationTime = 0;\n\t\tthis.disposed = false;\n\n\t\t// texture\n\t\tthis.skinImg = new Image();\n\t\tthis.skinCanvas = document.createElement(\"canvas\");\n\t\tthis.skinTexture = new THREE.Texture(this.skinCanvas);\n\t\tthis.skinTexture.magFilter = THREE.NearestFilter;\n\t\tthis.skinTexture.minFilter = THREE.NearestFilter;\n\n\t\tthis.capeImg = new Image();\n\t\tthis.capeCanvas = document.createElement(\"canvas\");\n\t\tthis.capeTexture = new THREE.Texture(this.capeCanvas);\n\t\tthis.capeTexture.magFilter = THREE.NearestFilter;\n\t\tthis.capeTexture.minFilter = THREE.NearestFilter;\n\n\t\tthis.layer1Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, side: THREE.FrontSide });\n\t\tthis.layer2Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: THREE.DoubleSide, alphaTest: 0.5 });\n\t\tthis.capeMaterial = new THREE.MeshBasicMaterial({ map: this.capeTexture, transparent: true, opacity: 1, side: THREE.DoubleSide, alphaTest: 0.5 });\n\n\t\t// scene\n\t\tthis.scene = new THREE.Scene();\n\n\t\t// Use smaller fov to avoid distortion\n\t\tthis.camera = new THREE.PerspectiveCamera(40);\n\t\tthis.camera.position.y = -12;\n\t\tthis.camera.position.z = 60;\n\n\t\tthis.renderer = new THREE.WebGLRenderer({ angleRot: true, alpha: true, antialias: false });\n\t\tthis.renderer.setSize(300, 300); // default size\n\t\tthis.renderer.context.getShaderInfoLog = () => \"\"; // shut firefox up\n\t\tthis.domElement.appendChild(this.renderer.domElement);\n\n\t\tthis.playerObject = new PlayerObject(options.slim === true, this.layer1Material, this.layer2Material, this.capeMaterial);\n\t\tthis.scene.add(this.playerObject);\n\n\t\t// texture loading\n\t\tthis.skinImg.crossOrigin = \"anonymous\";\n\t\tthis.skinImg.onerror = () => console.error(\"Failed loading \" + this.skinImg.src);\n\t\tthis.skinImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.skinImg.width !== this.skinImg.height) {\n\t\t\t\tif (this.skinImg.width === 2 * this.skinImg.height) {\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad skin size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet skinContext = this.skinCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.width = width;\n\t\t\t\tthis.skinCanvas.height = width;\n\t\t\t\tskinContext.clearRect(0, 0, width, width);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, width, width / 2.0);\n\t\t\t\tconvertSkinTo1_8(skinContext, width);\n\t\t\t} else {\n\t\t\t\tthis.skinCanvas.width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.height = this.skinImg.height;\n\t\t\t\tskinContext.clearRect(0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t}\n\n\t\t\tthis.skinTexture.needsUpdate = true;\n\t\t\tthis.layer1Material.needsUpdate = true;\n\t\t\tthis.layer2Material.needsUpdate = true;\n\n\t\t\tthis.playerObject.skin.visible = true;\n\t\t};\n\n\t\tthis.capeImg.crossOrigin = \"anonymous\";\n\t\tthis.capeImg.onerror = () => console.error(\"Failed loading \" + this.capeImg.src);\n\t\tthis.capeImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.capeImg.width !== 2 * this.capeImg.height) {\n\t\t\t\tif (this.capeImg.width * 17 == this.capeImg.height * 22) {\n\t\t\t\t\t// width/height = 22/17\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad cape size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet capeContext = this.capeCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.capeImg.width * 64 / 22;\n\t\t\t\tthis.capeCanvas.width = width;\n\t\t\t\tthis.capeCanvas.height = width / 2;\n\t\t\t} else {\n\t\t\t\tthis.capeCanvas.width = this.capeImg.width;\n\t\t\t\tthis.capeCanvas.height = this.capeImg.height;\n\t\t\t}\n\t\t\tcapeContext.clearRect(0, 0, this.capeCanvas.width, this.capeCanvas.height);\n\t\t\tcapeContext.drawImage(this.capeImg, 0, 0, this.capeImg.width, this.capeImg.height);\n\n\t\t\tthis.capeTexture.needsUpdate = true;\n\t\t\tthis.capeMaterial.needsUpdate = true;\n\n\t\t\tthis.playerObject.cape.visible = true;\n\t\t};\n\n\t\tif (options.skinUrl) this.skinUrl = options.skinUrl;\n\t\tif (options.capeUrl) this.capeUrl = options.capeUrl;\n\t\tif (options.width) this.width = options.width;\n\t\tif (options.height) this.height = options.height;\n\n\t\tlet draw = () => {\n\t\t\tif (this.disposed) return;\n\t\t\twindow.requestAnimationFrame(draw);\n\t\t\tif (!this.animationPaused) {\n\t\t\t\tthis.animationTime++;\n\t\t\t\tif (this.animation) {\n\t\t\t\t\tinvokeAnimation(this.animation, this.playerObject, this.animationTime / 100.0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.renderer.render(this.scene, this.camera);\n\t\t};\n\t\tdraw();\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.camera.aspect = width / height;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.renderer.setSize(width, height);\n\t}\n\n\tdispose() {\n\t\tthis.disposed = true;\n\t\tthis.domElement.removeChild(this.renderer.domElement);\n\t\tthis.renderer.dispose();\n\t\tthis.skinTexture.dispose();\n\t\tthis.capeTexture.dispose();\n\t}\n\n\tget skinUrl() {\n\t\treturn this.skinImg.src;\n\t}\n\n\tset skinUrl(url) {\n\t\tthis.skinImg.src = url;\n\t}\n\n\tget capeUrl() {\n\t\treturn this.capeImg.src;\n\t}\n\n\tset capeUrl(url) {\n\t\tthis.capeImg.src = url;\n\t}\n\n\tget width() {\n\t\treturn this.renderer.getSize().width;\n\t}\n\n\tset width(newWidth) {\n\t\tthis.setSize(newWidth, this.height);\n\t}\n\n\tget height() {\n\t\treturn this.renderer.getSize().height;\n\t}\n\n\tset height(newHeight) {\n\t\tthis.setSize(this.width, newHeight);\n\t}\n}\n\nexport { SkinViewer };\n","import * as THREE from \"three\";\n\nclass OrbitControls extends THREE.EventDispatcher {\n\t/**\n\t * @preserve\n\t * The code was originally from https://github.com/mrdoob/three.js/blob/d45a042cf962e9b1aa9441810ba118647b48aacb/examples/js/controls/OrbitControls.js\n\t */\n\t/**\n\t * @license\n\t * Copyright (C) 2010-2017 three.js authors\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t *\n\t *\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t */\n\n\t// This set of controls performs orbiting, dollying (zooming), and panning.\n\t// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n\t//\n\t// Orbit - left mouse / touch: one finger move\n\t// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n\t// Pan - right mouse, or arrow keys / touch: three finger swipe\n\n\tconstructor(object, domElement) {\n\t\tsuper();\n\t\tthis.object = object;\n\t\tthis.domElement = (domElement !== undefined) ? domElement : document;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new THREE.Vector3();\n\n\t\t// How far you can dolly in and out (PerspectiveCamera only)\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out (OrthographicCamera only)\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\t\tthis.minAzimuthAngle = -Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.25;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t\t// Set to false to disable use of the keys\n\t\tthis.enableKeys = true;\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\t\tthis.getPolarAngle = function () {\n\t\t\treturn spherical.phi;\n\t\t};\n\t\tthis.getAzimuthalAngle = function () {\n\t\t\treturn spherical.theta;\n\t\t};\n\t\tthis.saveState = function () {\n\t\t\tscope.target0.copy(scope.target);\n\t\t\tscope.position0.copy(scope.object.position);\n\t\t\tscope.zoom0 = scope.object.zoom;\n\t\t};\n\t\tthis.reset = function () {\n\t\t\tscope.target.copy(scope.target0);\n\t\t\tscope.object.position.copy(scope.position0);\n\t\t\tscope.object.zoom = scope.zoom0;\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\tscope.update();\n\t\t\tstate = STATE.NONE;\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\t// so camera.up is the orbit axis\n\t\t\tlet quat = new THREE.Quaternion().setFromUnitVectors(object.up, new THREE.Vector3(0, 1, 0));\n\t\t\tlet quatInverse = quat.clone().inverse();\n\t\t\tlet lastPosition = new THREE.Vector3();\n\t\t\tlet lastQuaternion = new THREE.Quaternion();\n\t\t\treturn function update() {\n\t\t\t\tlet position = scope.object.position;\n\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion(quat);\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3(offset);\n\t\t\t\tif (scope.autoRotate && state === STATE.NONE) {\n\t\t\t\t\trotateLeft(getAutoRotationAngle());\n\t\t\t\t}\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\t\t\t\t// restrict theta to be between desired limits\n\t\t\t\tspherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n\t\t\t\tspherical.makeSafe();\n\t\t\t\tspherical.radius *= scale;\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n\t\t\t\t// move target to panned location\n\t\t\t\tscope.target.add(panOffset);\n\t\t\t\toffset.setFromSpherical(spherical);\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion(quatInverse);\n\t\t\t\tposition.copy(scope.target).add(offset);\n\t\t\t\tscope.object.lookAt(scope.target);\n\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\tsphericalDelta.theta *= (1 - scope.dampingFactor);\n\t\t\t\t\tsphericalDelta.phi *= (1 - scope.dampingFactor);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsphericalDelta.set(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tscale = 1;\n\t\t\t\tpanOffset.set(0, 0, 0);\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\t\t\t\tif (zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared(scope.object.position) > EPS ||\n\t\t\t\t\t8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\t\t\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\t\t\tlastPosition.copy(scope.object.position);\n\t\t\t\t\tlastQuaternion.copy(scope.object.quaternion);\n\t\t\t\t\tzoomChanged = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}();\n\t\tthis.dispose = function () {\n\t\t\tscope.domElement.removeEventListener(\"contextmenu\", onContextMenu, false);\n\t\t\tscope.domElement.removeEventListener(\"mousedown\", onMouseDown, false);\n\t\t\tscope.domElement.removeEventListener(\"wheel\", onMouseWheel, false);\n\t\t\tscope.domElement.removeEventListener(\"touchstart\", onTouchStart, false);\n\t\t\tscope.domElement.removeEventListener(\"touchend\", onTouchEnd, false);\n\t\t\tscope.domElement.removeEventListener(\"touchmove\", onTouchMove, false);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\twindow.removeEventListener(\"keydown\", onKeyDown, false);\n\t\t\t//scope.dispatchEvent({ type: \"dispose\" }); // should this be added here?\n\t\t};\n\t\t//\n\t\t// internals\n\t\t//\n\t\tlet scope = this;\n\t\tlet changeEvent = { type: \"change\" };\n\t\tlet startEvent = { type: \"start\" };\n\t\tlet endEvent = { type: \"end\" };\n\t\tlet STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 };\n\t\tlet state = STATE.NONE;\n\t\tlet EPS = 0.000001;\n\t\t// current position in spherical coordinates\n\t\tlet spherical = new THREE.Spherical();\n\t\tlet sphericalDelta = new THREE.Spherical();\n\t\tlet scale = 1;\n\t\tlet panOffset = new THREE.Vector3();\n\t\tlet zoomChanged = false;\n\t\tlet rotateStart = new THREE.Vector2();\n\t\tlet rotateEnd = new THREE.Vector2();\n\t\tlet rotateDelta = new THREE.Vector2();\n\t\tlet panStart = new THREE.Vector2();\n\t\tlet panEnd = new THREE.Vector2();\n\t\tlet panDelta = new THREE.Vector2();\n\t\tlet dollyStart = new THREE.Vector2();\n\t\tlet dollyEnd = new THREE.Vector2();\n\t\tlet dollyDelta = new THREE.Vector2();\n\t\tfunction getAutoRotationAngle() {\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\t\t}\n\t\tfunction getZoomScale() {\n\t\t\treturn Math.pow(0.95, scope.zoomSpeed);\n\t\t}\n\t\tfunction rotateLeft(angle) {\n\t\t\tsphericalDelta.theta -= angle;\n\t\t}\n\t\tfunction rotateUp(angle) {\n\t\t\tsphericalDelta.phi -= angle;\n\t\t}\n\t\tlet panLeft = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panLeft(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar(-distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\tlet panUp = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panUp(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n\t\t\t\tv.multiplyScalar(distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tlet pan = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\treturn function pan(deltaX, deltaY) {\n\t\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\t\t// perspective\n\t\t\t\t\tlet position = scope.object.position;\n\t\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t\tlet targetDistance = offset.length();\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0);\n\t\t\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\n\t\t\t\t\tpanLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t\tpanUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n\t\t\t\t\tpanUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n\t\t\t\t\tscope.enablePan = false;\n\t\t\t\t}\n\t\t\t};\n\t\t}();\n\t\tfunction dollyIn(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale /= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\tfunction dollyOut(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale *= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\t\tfunction handleMouseDownRotate(event) {\n\t\t\trotateStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownDolly(event) {\n\t\t\tdollyStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownPan(event) {\n\t\t\tpanStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseMoveRotate(event) {\n\t\t\trotateEnd.set(event.clientX, event.clientY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMoveDolly(event) {\n\t\t\tdollyEnd.set(event.clientX, event.clientY);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMovePan(event) {\n\t\t\tpanEnd.set(event.clientX, event.clientY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseUp(event) {\n\t\t}\n\t\tfunction handleMouseWheel(event) {\n\t\t\tif (event.deltaY < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (event.deltaY > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleKeyDown(event) {\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan(0, scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan(0, -scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan(scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan(-scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfunction handleTouchStartRotate(event) {\n\t\t\trotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchStartDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyStart.set(0, distance);\n\t\t}\n\t\tfunction handleTouchStartPan(event) {\n\t\t\tpanStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchMoveRotate(event) {\n\t\t\trotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMoveDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyEnd.set(0, distance);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMovePan(event) {\n\t\t\tpanEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchEnd(event) {\n\t\t}\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\t\tfunction onMouseDown(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.button) {\n\t\t\t\tcase scope.mouseButtons.ORBIT:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownRotate(event);\n\t\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.ZOOM:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownDolly(event);\n\t\t\t\t\tstate = STATE.DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownPan(event);\n\t\t\t\t\tstate = STATE.PAN;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tdocument.addEventListener(\"mousemove\", onMouseMove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", onMouseUp, false);\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onMouseMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (state) {\n\t\t\t\tcase STATE.ROTATE:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.DOLLY:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tfunction onMouseUp(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleMouseUp(event);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onMouseWheel(event) {\n\t\t\tif (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE))\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\thandleMouseWheel(event);\n\t\t\tscope.dispatchEvent(startEvent); // not sure why these are here...\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t}\n\t\tfunction onKeyDown(event) {\n\t\t\tif (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\thandleKeyDown(event);\n\t\t}\n\t\tfunction onTouchStart(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartRotate(event);\n\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartDolly(event);\n\t\t\t\t\tstate = STATE.TOUCH_DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartPan(event);\n\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onTouchMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_ROTATE)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_DOLLY)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_PAN)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tfunction onTouchEnd(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleTouchEnd(event);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onContextMenu(event) {\n\t\t\tif (scope.enabled === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t}\n\t\t//\n\t\tscope.domElement.addEventListener(\"contextmenu\", onContextMenu, false);\n\t\tscope.domElement.addEventListener(\"mousedown\", onMouseDown, false);\n\t\tscope.domElement.addEventListener(\"wheel\", onMouseWheel, false);\n\t\tscope.domElement.addEventListener(\"touchstart\", onTouchStart, false);\n\t\tscope.domElement.addEventListener(\"touchend\", onTouchEnd, false);\n\t\tscope.domElement.addEventListener(\"touchmove\", onTouchMove, false);\n\t\twindow.addEventListener(\"keydown\", onKeyDown, false);\n\t\t// force an update at start\n\t\tthis.update();\n\t}\n}\n\nfunction createOrbitControls(skinViewer) {\n\tlet control = new OrbitControls(skinViewer.camera, skinViewer.renderer.domElement);\n\n\t// default configuration\n\tcontrol.enablePan = false;\n\tcontrol.target = new THREE.Vector3(0, -12, 0);\n\tcontrol.minDistance = 10;\n\tcontrol.maxDistance = 256;\n\tcontrol.update();\n\n\treturn control;\n}\n\nexport { OrbitControls, createOrbitControls };\n"],"names":["toFaceVertices","x1","y1","x2","y2","w","h","THREE","toSkinVertices","toCapeVertices","addVertices","box","top","bottom","left","front","right","back","faceVertexUvs","esp","SkinObject","slim","layer1Material","layer2Material","head","headBox","headMesh","add","head2Box","head2Mesh","renderOrder","_this","body","bodyBox","bodyMesh","body2Box","body2Mesh","position","y","rightArm","rightArmPivot","rightArmBox","rightArmMesh","rightArm2Box","rightArm2Mesh","x","leftArm","leftArmPivot","leftArmBox","leftArmMesh","leftArm2Box","leftArm2Mesh","rightLeg","rightLegPivot","rightLegBox","rightLegMesh","rightLeg2Box","rightLeg2Mesh","leftLeg","leftLegPivot","leftLegBox","leftLegMesh","leftLeg2Box","leftLeg2Mesh","CapeObject","capeMaterial","capeBox","cape","z","_this2","PlayerObject","skin","visible","_this3","rotation","Math","PI","invokeAnimation","animation","player","time","CompositeAnimation","play","Function","AnimationHandle","paused","this","_paused","speed","_speed","_lastChange","_lastChangeX","dt","handles","Set","handle","remove","delete","forEach","SkinViewer","options","domElement","animationPaused","animationTime","disposed","skinImg","Image","skinCanvas","document","createElement","skinTexture","magFilter","minFilter","capeImg","capeCanvas","capeTexture","map","side","transparent","opacity","alphaTest","scene","camera","renderer","angleRot","alpha","antialias","setSize","context","getShaderInfoLog","appendChild","playerObject","crossOrigin","onerror","console","error","src","onload","isOldFormat","width","height","skinContext","getContext","clearRect","drawImage","scale","copySkin","sX","sY","dX","dY","flipHorizontal","imgData","getImageData","index","index2","pA1","data","pA2","pA3","pA4","pB1","pB2","pB3","pB4","putImageData","copyImage","needsUpdate","capeContext","skinUrl","capeUrl","draw","requestAnimationFrame","render","aspect","updateProjectionMatrix","removeChild","dispose","url","getSize","newWidth","newHeight","OrbitControls","object","offset","quat","quatInverse","lastPosition","lastQuaternion","undefined","enabled","target","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","ZOOM","MIDDLE","PAN","target0","clone","position0","zoom0","zoom","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","copy","scope","reset","dispatchEvent","changeEvent","update","STATE","NONE","setFromUnitVectors","up","inverse","sub","applyQuaternion","setFromVector3","state","sphericalDelta","max","min","makeSafe","radius","panOffset","setFromSpherical","lookAt","set","zoomChanged","distanceToSquared","EPS","dot","quaternion","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","type","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY","TOUCH_PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","rotateLeft","angle","rotateUp","v","panLeft","distance","objectMatrix","setFromMatrixColumn","multiplyScalar","panUp","pan","deltaX","deltaY","element","targetDistance","length","tan","fov","clientHeight","matrix","clientWidth","warn","dollyIn","dollyScale","dollyOut","event","button","clientX","clientY","preventDefault","addEventListener","subVectors","stopPropagation","keyCode","touches","pageX","pageY","dx","dy","sqrt","skinViewer","control","sin","basicArmRotationZ","cos","basicCapeRotationX"],"mappings":"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"} \ No newline at end of file diff --git a/js/build/skinview3d.module.js b/js/build/skinview3d.module.js index 4eb5cbc..58661a0 100644 --- a/js/build/skinview3d.module.js +++ b/js/build/skinview3d.module.js @@ -25,7 +25,7 @@ * SOFTWARE. */ -import { Vector2, Group, BoxGeometry, Mesh, Texture, NearestFilter, NearestMipMapNearestFilter, MeshBasicMaterial, FrontSide, DoubleSide, Scene, PerspectiveCamera, WebGLRenderer, Vector3, MOUSE, Quaternion, Spherical, OrthographicCamera, EventDispatcher } from 'three'; +import { Vector2, Group, BoxGeometry, Mesh, Texture, NearestFilter, MeshBasicMaterial, FrontSide, DoubleSide, Scene, PerspectiveCamera, WebGLRenderer, Vector3, MOUSE, Quaternion, Spherical, OrthographicCamera, EventDispatcher } from 'three'; var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { @@ -51,14 +51,6 @@ var createClass = function () { }; }(); - - - - - - - - var inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); @@ -75,16 +67,6 @@ var inherits = function (subClass, superClass) { if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }; - - - - - - - - - - var possibleConstructorReturn = function (self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); @@ -529,17 +511,17 @@ var SkinViewer = function () { this.skinCanvas = document.createElement("canvas"); this.skinTexture = new Texture(this.skinCanvas); this.skinTexture.magFilter = NearestFilter; - this.skinTexture.minFilter = NearestMipMapNearestFilter; + this.skinTexture.minFilter = NearestFilter; this.capeImg = new Image(); this.capeCanvas = document.createElement("canvas"); this.capeTexture = new Texture(this.capeCanvas); this.capeTexture.magFilter = NearestFilter; - this.capeTexture.minFilter = NearestMipMapNearestFilter; + this.capeTexture.minFilter = NearestFilter; this.layer1Material = new MeshBasicMaterial({ map: this.skinTexture, side: FrontSide }); - this.layer2Material = new MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: DoubleSide }); - this.capeMaterial = new MeshBasicMaterial({ map: this.capeTexture }); + this.layer2Material = new MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: DoubleSide, alphaTest: 0.5 }); + this.capeMaterial = new MeshBasicMaterial({ map: this.capeTexture, transparent: true, opacity: 1, side: DoubleSide, alphaTest: 0.5 }); // scene this.scene = new Scene(); @@ -560,7 +542,7 @@ var SkinViewer = function () { this.scene.add(this.playerObject); // texture loading - this.skinImg.crossOrigin = ""; + this.skinImg.crossOrigin = "anonymous"; this.skinImg.onerror = function () { return console.error("Failed loading " + _this.skinImg.src); }; @@ -597,7 +579,7 @@ var SkinViewer = function () { _this.playerObject.skin.visible = true; }; - this.capeImg.crossOrigin = ""; + this.capeImg.crossOrigin = "anonymous"; this.capeImg.onerror = function () { return console.error("Failed loading " + _this.capeImg.src); }; @@ -1121,6 +1103,9 @@ var OrbitControls = function (_THREE$EventDispatche) { panStart.copy(panEnd); scope.update(); } + // + // event handlers - FSM: listen for events and reset state + // function onMouseDown(event) { if (scope.enabled === false) return; switch (event.button) { diff --git a/js/build/skinview3d.module.js.map b/js/build/skinview3d.module.js.map index 353b31f..c0a0893 100644 --- a/js/build/skinview3d.module.js.map +++ b/js/build/skinview3d.module.js.map @@ -1 +1 @@ -{"version":3,"file":"skinview3d.module.js","sources":["../src/model.js","../src/animation.js","../src/viewer.js","../src/orbit_controls.js"],"sourcesContent":["import * as THREE from \"three\";\n\nfunction toFaceVertices(x1, y1, x2, y2, w, h) {\n\treturn [\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y1 / h),\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y1 / h)\n\t];\n}\n\nfunction toSkinVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 64.0);\n}\n\nfunction toCapeVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 32.0);\n}\n\nfunction addVertices(box, top, bottom, left, front, right, back) {\n\tbox.faceVertexUvs[0] = [];\n\tbox.faceVertexUvs[0][0] = [right[3], right[0], right[2]];\n\tbox.faceVertexUvs[0][1] = [right[0], right[1], right[2]];\n\tbox.faceVertexUvs[0][2] = [left[3], left[0], left[2]];\n\tbox.faceVertexUvs[0][3] = [left[0], left[1], left[2]];\n\tbox.faceVertexUvs[0][4] = [top[3], top[0], top[2]];\n\tbox.faceVertexUvs[0][5] = [top[0], top[1], top[2]];\n\tbox.faceVertexUvs[0][6] = [bottom[0], bottom[3], bottom[1]];\n\tbox.faceVertexUvs[0][7] = [bottom[3], bottom[2], bottom[1]];\n\tbox.faceVertexUvs[0][8] = [front[3], front[0], front[2]];\n\tbox.faceVertexUvs[0][9] = [front[0], front[1], front[2]];\n\tbox.faceVertexUvs[0][10] = [back[3], back[0], back[2]];\n\tbox.faceVertexUvs[0][11] = [back[0], back[1], back[2]];\n}\n\nconst esp = 0.002;\n\nclass SkinObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material) {\n\t\tsuper();\n\n\t\tthis.slim = slim;\n\n\t\t// Head\n\t\tthis.head = new THREE.Group();\n\n\t\tlet headBox = new THREE.BoxGeometry(8, 8, 8, 0, 0, 0);\n\t\taddVertices(headBox,\n\t\t\ttoSkinVertices(8, 0, 16, 8),\n\t\t\ttoSkinVertices(16, 0, 24, 8),\n\t\t\ttoSkinVertices(0, 8, 8, 16),\n\t\t\ttoSkinVertices(8, 8, 16, 16),\n\t\t\ttoSkinVertices(16, 8, 24, 16),\n\t\t\ttoSkinVertices(24, 8, 32, 16)\n\t\t);\n\t\tlet headMesh = new THREE.Mesh(headBox, layer1Material);\n\t\tthis.head.add(headMesh);\n\n\t\tlet head2Box = new THREE.BoxGeometry(9, 9, 9, 0, 0, 0);\n\t\taddVertices(head2Box,\n\t\t\ttoSkinVertices(40, 0, 48, 8),\n\t\t\ttoSkinVertices(48, 0, 56, 8),\n\t\t\ttoSkinVertices(32, 8, 40, 16),\n\t\t\ttoSkinVertices(40, 8, 48, 16),\n\t\t\ttoSkinVertices(48, 8, 56, 16),\n\t\t\ttoSkinVertices(56, 8, 64, 16)\n\t\t);\n\t\tlet head2Mesh = new THREE.Mesh(head2Box, layer2Material);\n\t\thead2Mesh.renderOrder = -1;\n\t\tthis.head.add(head2Mesh);\n\n\t\tthis.add(this.head);\n\n\n\t\t// Body\n\t\tthis.body = new THREE.Group();\n\n\t\tlet bodyBox = new THREE.BoxGeometry(8, 12, 4, 0, 0, 0);\n\t\taddVertices(bodyBox,\n\t\t\ttoSkinVertices(20, 16, 28, 20),\n\t\t\ttoSkinVertices(28, 16, 36, 20),\n\t\t\ttoSkinVertices(16, 20, 20, 32),\n\t\t\ttoSkinVertices(20, 20, 28, 32),\n\t\t\ttoSkinVertices(28, 20, 32, 32),\n\t\t\ttoSkinVertices(32, 20, 40, 32)\n\t\t);\n\t\tlet bodyMesh = new THREE.Mesh(bodyBox, layer1Material);\n\t\tthis.body.add(bodyMesh);\n\n\t\tlet body2Box = new THREE.BoxGeometry(9, 13.5, 4.5, 0, 0, 0);\n\t\taddVertices(body2Box,\n\t\t\ttoSkinVertices(20, 32, 28, 36),\n\t\t\ttoSkinVertices(28, 32, 36, 36),\n\t\t\ttoSkinVertices(16, 36, 20, 48),\n\t\t\ttoSkinVertices(20, 36, 28, 48),\n\t\t\ttoSkinVertices(28, 36, 32, 48),\n\t\t\ttoSkinVertices(32, 36, 40, 48)\n\t\t);\n\t\tlet body2Mesh = new THREE.Mesh(body2Box, layer2Material);\n\t\tthis.body.add(body2Mesh);\n\n\t\tthis.body.position.y = -10;\n\t\tthis.add(this.body);\n\n\n\t\t// Right Arm\n\t\tthis.rightArm = new THREE.Group();\n\t\tlet rightArmPivot = new THREE.Group();\n\n\t\tlet rightArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 47, 20),\n\t\t\t\ttoSkinVertices(47, 16, 50, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 47, 32),\n\t\t\t\ttoSkinVertices(47, 20, 51, 32),\n\t\t\t\ttoSkinVertices(51, 20, 54, 32)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 48, 20),\n\t\t\t\ttoSkinVertices(48, 16, 52, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 48, 32),\n\t\t\t\ttoSkinVertices(48, 20, 52, 32),\n\t\t\t\ttoSkinVertices(52, 20, 56, 32)\n\t\t\t);\n\t\t}\n\t\tlet rightArmMesh = new THREE.Mesh(rightArmBox, layer1Material);\n\t\trightArmPivot.add(rightArmMesh);\n\n\t\tlet rightArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 47, 36),\n\t\t\t\ttoSkinVertices(47, 32, 50, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 47, 48),\n\t\t\t\ttoSkinVertices(47, 36, 51, 48),\n\t\t\t\ttoSkinVertices(51, 36, 54, 48)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 48, 36),\n\t\t\t\ttoSkinVertices(48, 32, 52, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 48, 48),\n\t\t\t\ttoSkinVertices(48, 36, 52, 48),\n\t\t\t\ttoSkinVertices(52, 36, 56, 48)\n\t\t\t);\n\t\t}\n\t\tlet rightArm2Mesh = new THREE.Mesh(rightArm2Box, layer2Material);\n\t\trightArm2Mesh.renderOrder = 1;\n\t\trightArmPivot.add(rightArm2Mesh);\n\n\t\trightArmPivot.position.y = -6;\n\t\tthis.rightArm.add(rightArmPivot);\n\t\tthis.rightArm.position.y = -4;\n\t\tthis.rightArm.position.x = slim ? -5.5 : -6;\n\t\tthis.add(this.rightArm);\n\n\n\t\t// Left Arm\n\t\tthis.leftArm = new THREE.Group();\n\t\tlet leftArmPivot = new THREE.Group();\n\n\t\tlet leftArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 39, 52),\n\t\t\t\ttoSkinVertices(39, 48, 42, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 39, 64),\n\t\t\t\ttoSkinVertices(39, 52, 43, 64),\n\t\t\t\ttoSkinVertices(43, 52, 46, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 40, 52),\n\t\t\t\ttoSkinVertices(40, 48, 44, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 40, 64),\n\t\t\t\ttoSkinVertices(40, 52, 44, 64),\n\t\t\t\ttoSkinVertices(44, 52, 48, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArmMesh = new THREE.Mesh(leftArmBox, layer1Material);\n\t\tleftArmPivot.add(leftArmMesh);\n\n\t\tlet leftArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 55, 52),\n\t\t\t\ttoSkinVertices(55, 48, 58, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 55, 64),\n\t\t\t\ttoSkinVertices(55, 52, 59, 64),\n\t\t\t\ttoSkinVertices(59, 52, 62, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 56, 52),\n\t\t\t\ttoSkinVertices(56, 48, 60, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 56, 64),\n\t\t\t\ttoSkinVertices(56, 52, 60, 64),\n\t\t\t\ttoSkinVertices(60, 52, 64, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArm2Mesh = new THREE.Mesh(leftArm2Box, layer2Material);\n\t\tleftArm2Mesh.renderOrder = 1;\n\t\tleftArmPivot.add(leftArm2Mesh);\n\n\t\tleftArmPivot.position.y = -6;\n\t\tthis.leftArm.add(leftArmPivot);\n\t\tthis.leftArm.position.y = -4;\n\t\tthis.leftArm.position.x = slim ? 5.5 : 6;\n\t\tthis.add(this.leftArm);\n\n\n\t\t// Right Leg\n\t\tthis.rightLeg = new THREE.Group();\n\t\tlet rightLegPivot = new THREE.Group();\n\n\t\tlet rightLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(rightLegBox,\n\t\t\ttoSkinVertices(4, 16, 8, 20),\n\t\t\ttoSkinVertices(8, 16, 12, 20),\n\t\t\ttoSkinVertices(0, 20, 4, 32),\n\t\t\ttoSkinVertices(4, 20, 8, 32),\n\t\t\ttoSkinVertices(8, 20, 12, 32),\n\t\t\ttoSkinVertices(12, 20, 16, 32)\n\t\t);\n\t\tlet rightLegMesh = new THREE.Mesh(rightLegBox, layer1Material);\n\t\trightLegPivot.add(rightLegMesh);\n\n\t\tlet rightLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(rightLeg2Box,\n\t\t\ttoSkinVertices(4, 32, 8, 36),\n\t\t\ttoSkinVertices(8, 32, 12, 36),\n\t\t\ttoSkinVertices(0, 36, 4, 48),\n\t\t\ttoSkinVertices(4, 36, 8, 48),\n\t\t\ttoSkinVertices(8, 36, 12, 48),\n\t\t\ttoSkinVertices(12, 36, 16, 48)\n\t\t);\n\t\tlet rightLeg2Mesh = new THREE.Mesh(rightLeg2Box, layer2Material);\n\t\trightLeg2Mesh.renderOrder = 1;\n\t\trightLegPivot.add(rightLeg2Mesh);\n\n\t\trightLegPivot.position.y = -6;\n\t\tthis.rightLeg.add(rightLegPivot);\n\t\tthis.rightLeg.position.y = -16;\n\t\tthis.rightLeg.position.x = -2;\n\t\tthis.add(this.rightLeg);\n\n\t\t// Left Leg\n\t\tthis.leftLeg = new THREE.Group();\n\t\tlet leftLegPivot = new THREE.Group();\n\n\t\tlet leftLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(leftLegBox,\n\t\t\ttoSkinVertices(20, 48, 24, 52),\n\t\t\ttoSkinVertices(24, 48, 28, 52),\n\t\t\ttoSkinVertices(16, 52, 20, 64),\n\t\t\ttoSkinVertices(20, 52, 24, 64),\n\t\t\ttoSkinVertices(24, 52, 28, 64),\n\t\t\ttoSkinVertices(28, 52, 32, 64)\n\t\t);\n\t\tlet leftLegMesh = new THREE.Mesh(leftLegBox, layer1Material);\n\t\tleftLegPivot.add(leftLegMesh);\n\n\t\tlet leftLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(leftLeg2Box,\n\t\t\ttoSkinVertices(4, 48, 8, 52),\n\t\t\ttoSkinVertices(8, 48, 12, 52),\n\t\t\ttoSkinVertices(0, 52, 4, 64),\n\t\t\ttoSkinVertices(4, 52, 8, 64),\n\t\t\ttoSkinVertices(8, 52, 12, 64),\n\t\t\ttoSkinVertices(12, 52, 16, 64)\n\t\t);\n\t\tlet leftLeg2Mesh = new THREE.Mesh(leftLeg2Box, layer2Material);\n\t\tleftLeg2Mesh.renderOrder = 1;\n\t\tleftLegPivot.add(leftLeg2Mesh);\n\n\t\tleftLegPivot.position.y = -6;\n\t\tthis.leftLeg.add(leftLegPivot);\n\t\tthis.leftLeg.position.y = -16;\n\t\tthis.leftLeg.position.x = 2;\n\t\tthis.add(this.leftLeg);\n\t}\n}\n\nclass CapeObject extends THREE.Group {\n\tconstructor(capeMaterial) {\n\t\tsuper();\n\n\t\t// back = outside\n\t\t// front = inside\n\t\tlet capeBox = new THREE.BoxGeometry(10, 16, 1, 0, 0, 0);\n\t\taddVertices(capeBox,\n\t\t\ttoCapeVertices(1, 0, 11, 1),\n\t\t\ttoCapeVertices(11, 0, 21, 1),\n\t\t\ttoCapeVertices(11, 1, 12, 17),\n\t\t\ttoCapeVertices(12, 1, 22, 17),\n\t\t\ttoCapeVertices(0, 1, 1, 17),\n\t\t\ttoCapeVertices(1, 1, 11, 17)\n\t\t);\n\t\tthis.cape = new THREE.Mesh(capeBox, capeMaterial);\n\t\tthis.cape.position.y = -8;\n\t\tthis.cape.position.z = -0.5;\n\t\tthis.add(this.cape);\n\t}\n}\n\nclass PlayerObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material, capeMaterial) {\n\t\tsuper();\n\n\t\tthis.skin = new SkinObject(slim, layer1Material, layer2Material);\n\t\tthis.skin.visible = false;\n\t\tthis.add(this.skin);\n\n\t\tthis.cape = new CapeObject(capeMaterial);\n\t\tthis.cape.position.z = -2;\n\t\tthis.cape.position.y = -4;\n\t\tthis.cape.rotation.x = 25 * Math.PI / 180;\n\t\tthis.cape.visible = false;\n\t\tthis.add(this.cape);\n\t}\n}\n\nexport { SkinObject, CapeObject, PlayerObject };\n","function invokeAnimation(animation, player, time) {\n\tif (animation instanceof CompositeAnimation) {\n\t\tanimation.play(player, time);\n\t} else if (animation instanceof Function) {\n\t\tanimation(player, time);\n\t} else {\n\t\tthrow `Not an animation: ${animation}`;\n\t}\n}\n\nclass AnimationHandle {\n\tconstructor(animation) {\n\t\tthis.animation = animation;\n\t\tthis.paused = this._paused = false;\n\t\tthis.speed = this._speed = 1.0;\n\t\tthis._lastChange = null;\n\t\tthis._lastChangeX = null;\n\t}\n\tplay(player, time) {\n\t\tif (this._lastChange === null) {\n\t\t\tthis._lastChange = time;\n\t\t\tthis._lastChangeX = 0;\n\t\t} else if (this.paused !== this._paused || this.speed !== this._speed) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tif (this._paused === false) {\n\t\t\t\tthis._lastChangeX += dt * this._speed;\n\t\t\t}\n\t\t\tthis._paused = this.paused;\n\t\t\tthis._speed = this.speed;\n\t\t\tthis._lastChange = time;\n\t\t}\n\t\tif (this.paused === false) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tlet x = this._lastChangeX + this.speed * dt;\n\t\t\tinvokeAnimation(this.animation, player, x);\n\t\t}\n\t}\n\treset(){\n\t\tthis._lastChange = null;\n\t}\n}\n\nclass CompositeAnimation {\n\tconstructor() {\n\t\tthis.handles = new Set();\n\t}\n\tadd(animation) {\n\t\tlet handle = new AnimationHandle(animation);\n\t\thandle.remove = () => this.handles.delete(handle);\n\t\tthis.handles.add(handle);\n\t\treturn handle;\n\t}\n\tplay(player, time) {\n\t\tthis.handles.forEach(handle => handle.play(player, time));\n\t}\n}\n\nlet WalkingAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\t// Multiply by animation's natural speed\n\ttime *= 8;\n\n\t// Leg swing\n\tskin.leftLeg.rotation.x = Math.sin(time) * 0.5;\n\tskin.rightLeg.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\tskin.rightArm.rotation.x = Math.sin(time) * 0.5;\n\tlet basicArmRotationZ = Math.PI * 0.02;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.03 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.03 - basicArmRotationZ;\n\n\t// Head shaking with different frequency & amplitude\n\tskin.head.rotation.y = Math.sin(time / 4) * 0.2;\n\tskin.head.rotation.x = Math.sin(time / 5) * 0.1;\n\n\t// Always add an angle for cape around the x axis\n\tlet basicCapeRotationX = Math.PI * 0.06;\n\tplayer.cape.rotation.x = Math.sin(time / 1.5) * 0.06 + basicCapeRotationX;\n};\n\nlet RunningAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\ttime *= 15;\n\n\t// Leg swing with larger amplitude\n\tskin.leftLeg.rotation.x = Math.cos(time + Math.PI) * 1.3;\n\tskin.rightLeg.rotation.x = Math.cos(time) * 1.3;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.cos(time) * 1.5;\n\tskin.rightArm.rotation.x = Math.cos(time + Math.PI) * 1.5;\n\tlet basicArmRotationZ = Math.PI * 0.1;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.1 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.1 - basicArmRotationZ;\n\n\t// Jumping\n\tplayer.position.y = Math.cos(time * 2);\n\t// Dodging when running\n\tplayer.position.x = Math.cos(time) * 0.15;\n\t// Slightly tilting when running\n\tplayer.rotation.z = Math.cos(time + Math.PI) * 0.01;\n\n\t// Apply higher swing frequency, lower amplitude,\n\t// and greater basic rotation around x axis,\n\t// to cape when running.\n\tlet basicCapeRotationX = Math.PI * 0.3;\n\tplayer.cape.rotation.x = Math.sin(time * 2) * 0.1 + basicCapeRotationX;\n\n\t// What about head shaking?\n\t// You shouldn't glance right and left when running dude :P\n};\n\nlet RotatingAnimation = (player, time) => {\n\tplayer.rotation.y = time;\n};\n\nexport {\n\tCompositeAnimation,\n\tinvokeAnimation,\n\tWalkingAnimation,\n\tRunningAnimation,\n\tRotatingAnimation\n};\n","import * as THREE from \"three\";\nimport { PlayerObject } from \"./model\";\nimport { invokeAnimation } from \"./animation\";\n\nfunction copyImage(context, sX, sY, w, h, dX, dY, flipHorizontal) {\n\tlet imgData = context.getImageData(sX, sY, w, h);\n\tif (flipHorizontal) {\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < (w / 2); x++) {\n\t\t\t\tlet index = (x + y * w) * 4;\n\t\t\t\tlet index2 = ((w - x - 1) + y * w) * 4;\n\t\t\t\tlet pA1 = imgData.data[index];\n\t\t\t\tlet pA2 = imgData.data[index + 1];\n\t\t\t\tlet pA3 = imgData.data[index + 2];\n\t\t\t\tlet pA4 = imgData.data[index + 3];\n\n\t\t\t\tlet pB1 = imgData.data[index2];\n\t\t\t\tlet pB2 = imgData.data[index2 + 1];\n\t\t\t\tlet pB3 = imgData.data[index2 + 2];\n\t\t\t\tlet pB4 = imgData.data[index2 + 3];\n\n\t\t\t\timgData.data[index] = pB1;\n\t\t\t\timgData.data[index + 1] = pB2;\n\t\t\t\timgData.data[index + 2] = pB3;\n\t\t\t\timgData.data[index + 3] = pB4;\n\n\t\t\t\timgData.data[index2] = pA1;\n\t\t\t\timgData.data[index2 + 1] = pA2;\n\t\t\t\timgData.data[index2 + 2] = pA3;\n\t\t\t\timgData.data[index2 + 3] = pA4;\n\t\t\t}\n\t\t}\n\t}\n\tcontext.putImageData(imgData, dX, dY);\n}\n\nfunction convertSkinTo1_8(context, width) {\n\tlet scale = width / 64.0;\n\tlet copySkin = (context, sX, sY, w, h, dX, dY, flipHorizontal) => copyImage(context, sX * scale, sY * scale, w * scale, h * scale, dX * scale, dY * scale, flipHorizontal);\n\n\tcopySkin(context, 4, 16, 4, 4, 20, 48, true); // Top Leg\n\tcopySkin(context, 8, 16, 4, 4, 24, 48, true); // Bottom Leg\n\tcopySkin(context, 0, 20, 4, 12, 24, 52, true); // Outer Leg\n\tcopySkin(context, 4, 20, 4, 12, 20, 52, true); // Front Leg\n\tcopySkin(context, 8, 20, 4, 12, 16, 52, true); // Inner Leg\n\tcopySkin(context, 12, 20, 4, 12, 28, 52, true); // Back Leg\n\tcopySkin(context, 44, 16, 4, 4, 36, 48, true); // Top Arm\n\tcopySkin(context, 48, 16, 4, 4, 40, 48, true); // Bottom Arm\n\tcopySkin(context, 40, 20, 4, 12, 40, 52, true); // Outer Arm\n\tcopySkin(context, 44, 20, 4, 12, 36, 52, true); // Front Arm\n\tcopySkin(context, 48, 20, 4, 12, 32, 52, true); // Inner Arm\n\tcopySkin(context, 52, 20, 4, 12, 44, 52, true); // Back Arm\n}\n\nclass SkinViewer {\n\tconstructor(options) {\n\t\tthis.domElement = options.domElement;\n\t\tthis.animation = options.animation || null;\n\t\tthis.animationPaused = false;\n\t\tthis.animationTime = 0;\n\t\tthis.disposed = false;\n\n\t\t// texture\n\t\tthis.skinImg = new Image();\n\t\tthis.skinCanvas = document.createElement(\"canvas\");\n\t\tthis.skinTexture = new THREE.Texture(this.skinCanvas);\n\t\tthis.skinTexture.magFilter = THREE.NearestFilter;\n\t\tthis.skinTexture.minFilter = THREE.NearestMipMapNearestFilter;\n\n\t\tthis.capeImg = new Image();\n\t\tthis.capeCanvas = document.createElement(\"canvas\");\n\t\tthis.capeTexture = new THREE.Texture(this.capeCanvas);\n\t\tthis.capeTexture.magFilter = THREE.NearestFilter;\n\t\tthis.capeTexture.minFilter = THREE.NearestMipMapNearestFilter;\n\n\t\tthis.layer1Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, side: THREE.FrontSide });\n\t\tthis.layer2Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: THREE.DoubleSide });\n\t\tthis.capeMaterial = new THREE.MeshBasicMaterial({ map: this.capeTexture });\n\n\t\t// scene\n\t\tthis.scene = new THREE.Scene();\n\n\t\t// Use smaller fov to avoid distortion\n\t\tthis.camera = new THREE.PerspectiveCamera(40);\n\t\tthis.camera.position.y = -12;\n\t\tthis.camera.position.z = 60;\n\n\t\tthis.renderer = new THREE.WebGLRenderer({ angleRot: true, alpha: true, antialias: false });\n\t\tthis.renderer.setSize(300, 300); // default size\n\t\tthis.renderer.context.getShaderInfoLog = () => \"\"; // shut firefox up\n\t\tthis.domElement.appendChild(this.renderer.domElement);\n\n\t\tthis.playerObject = new PlayerObject(options.slim === true, this.layer1Material, this.layer2Material, this.capeMaterial);\n\t\tthis.scene.add(this.playerObject);\n\n\t\t// texture loading\n\t\tthis.skinImg.crossOrigin = \"\";\n\t\tthis.skinImg.onerror = () => console.error(\"Failed loading \" + this.skinImg.src);\n\t\tthis.skinImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.skinImg.width !== this.skinImg.height) {\n\t\t\t\tif (this.skinImg.width === 2 * this.skinImg.height) {\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad skin size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet skinContext = this.skinCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.width = width;\n\t\t\t\tthis.skinCanvas.height = width;\n\t\t\t\tskinContext.clearRect(0, 0, width, width);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, width, width / 2.0);\n\t\t\t\tconvertSkinTo1_8(skinContext, width);\n\t\t\t} else {\n\t\t\t\tthis.skinCanvas.width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.height = this.skinImg.height;\n\t\t\t\tskinContext.clearRect(0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t}\n\n\t\t\tthis.skinTexture.needsUpdate = true;\n\t\t\tthis.layer1Material.needsUpdate = true;\n\t\t\tthis.layer2Material.needsUpdate = true;\n\n\t\t\tthis.playerObject.skin.visible = true;\n\t\t};\n\n\t\tthis.capeImg.crossOrigin = \"\";\n\t\tthis.capeImg.onerror = () => console.error(\"Failed loading \" + this.capeImg.src);\n\t\tthis.capeImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.capeImg.width !== 2 * this.capeImg.height) {\n\t\t\t\tif (this.capeImg.width * 17 == this.capeImg.height * 22) {\n\t\t\t\t\t// width/height = 22/17\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad cape size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet capeContext = this.capeCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.capeImg.width * 64 / 22;\n\t\t\t\tthis.capeCanvas.width = width;\n\t\t\t\tthis.capeCanvas.height = width / 2;\n\t\t\t} else {\n\t\t\t\tthis.capeCanvas.width = this.capeImg.width;\n\t\t\t\tthis.capeCanvas.height = this.capeImg.height;\n\t\t\t}\n\t\t\tcapeContext.clearRect(0, 0, this.capeCanvas.width, this.capeCanvas.height);\n\t\t\tcapeContext.drawImage(this.capeImg, 0, 0, this.capeImg.width, this.capeImg.height);\n\n\t\t\tthis.capeTexture.needsUpdate = true;\n\t\t\tthis.capeMaterial.needsUpdate = true;\n\n\t\t\tthis.playerObject.cape.visible = true;\n\t\t};\n\n\t\tif (options.skinUrl) this.skinUrl = options.skinUrl;\n\t\tif (options.capeUrl) this.capeUrl = options.capeUrl;\n\t\tif (options.width) this.width = options.width;\n\t\tif (options.height) this.height = options.height;\n\n\t\tlet draw = () => {\n\t\t\tif (this.disposed) return;\n\t\t\twindow.requestAnimationFrame(draw);\n\t\t\tif (!this.animationPaused) {\n\t\t\t\tthis.animationTime++;\n\t\t\t\tif (this.animation) {\n\t\t\t\t\tinvokeAnimation(this.animation, this.playerObject, this.animationTime / 100.0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.renderer.render(this.scene, this.camera);\n\t\t};\n\t\tdraw();\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.camera.aspect = width / height;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.renderer.setSize(width, height);\n\t}\n\n\tdispose() {\n\t\tthis.disposed = true;\n\t\tthis.domElement.removeChild(this.renderer.domElement);\n\t\tthis.renderer.dispose();\n\t\tthis.skinTexture.dispose();\n\t\tthis.capeTexture.dispose();\n\t}\n\n\tget skinUrl() {\n\t\treturn this.skinImg.src;\n\t}\n\n\tset skinUrl(url) {\n\t\tthis.skinImg.src = url;\n\t}\n\n\tget capeUrl() {\n\t\treturn this.capeImg.src;\n\t}\n\n\tset capeUrl(url) {\n\t\tthis.capeImg.src = url;\n\t}\n\n\tget width() {\n\t\treturn this.renderer.getSize().width;\n\t}\n\n\tset width(newWidth) {\n\t\tthis.setSize(newWidth, this.height);\n\t}\n\n\tget height() {\n\t\treturn this.renderer.getSize().height;\n\t}\n\n\tset height(newHeight) {\n\t\tthis.setSize(this.width, newHeight);\n\t}\n}\n\nexport { SkinViewer };\n","import * as THREE from \"three\";\n\nclass OrbitControls extends THREE.EventDispatcher {\n\t/**\n\t * @preserve\n\t * The code was originally from https://github.com/mrdoob/three.js/blob/d45a042cf962e9b1aa9441810ba118647b48aacb/examples/js/controls/OrbitControls.js\n\t */\n\t/**\n\t * @license\n\t * Copyright (C) 2010-2017 three.js authors\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t *\n\t *\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t */\n\n\t// This set of controls performs orbiting, dollying (zooming), and panning.\n\t// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n\t//\n\t// Orbit - left mouse / touch: one finger move\n\t// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n\t// Pan - right mouse, or arrow keys / touch: three finger swipe\n\n\tconstructor(object, domElement) {\n\t\tsuper();\n\t\tthis.object = object;\n\t\tthis.domElement = (domElement !== undefined) ? domElement : document;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new THREE.Vector3();\n\n\t\t// How far you can dolly in and out (PerspectiveCamera only)\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out (OrthographicCamera only)\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\t\tthis.minAzimuthAngle = -Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.25;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t\t// Set to false to disable use of the keys\n\t\tthis.enableKeys = true;\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\t\tthis.getPolarAngle = function () {\n\t\t\treturn spherical.phi;\n\t\t};\n\t\tthis.getAzimuthalAngle = function () {\n\t\t\treturn spherical.theta;\n\t\t};\n\t\tthis.saveState = function () {\n\t\t\tscope.target0.copy(scope.target);\n\t\t\tscope.position0.copy(scope.object.position);\n\t\t\tscope.zoom0 = scope.object.zoom;\n\t\t};\n\t\tthis.reset = function () {\n\t\t\tscope.target.copy(scope.target0);\n\t\t\tscope.object.position.copy(scope.position0);\n\t\t\tscope.object.zoom = scope.zoom0;\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\tscope.update();\n\t\t\tstate = STATE.NONE;\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\t// so camera.up is the orbit axis\n\t\t\tlet quat = new THREE.Quaternion().setFromUnitVectors(object.up, new THREE.Vector3(0, 1, 0));\n\t\t\tlet quatInverse = quat.clone().inverse();\n\t\t\tlet lastPosition = new THREE.Vector3();\n\t\t\tlet lastQuaternion = new THREE.Quaternion();\n\t\t\treturn function update() {\n\t\t\t\tlet position = scope.object.position;\n\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion(quat);\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3(offset);\n\t\t\t\tif (scope.autoRotate && state === STATE.NONE) {\n\t\t\t\t\trotateLeft(getAutoRotationAngle());\n\t\t\t\t}\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\t\t\t\t// restrict theta to be between desired limits\n\t\t\t\tspherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n\t\t\t\tspherical.makeSafe();\n\t\t\t\tspherical.radius *= scale;\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n\t\t\t\t// move target to panned location\n\t\t\t\tscope.target.add(panOffset);\n\t\t\t\toffset.setFromSpherical(spherical);\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion(quatInverse);\n\t\t\t\tposition.copy(scope.target).add(offset);\n\t\t\t\tscope.object.lookAt(scope.target);\n\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\tsphericalDelta.theta *= (1 - scope.dampingFactor);\n\t\t\t\t\tsphericalDelta.phi *= (1 - scope.dampingFactor);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsphericalDelta.set(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tscale = 1;\n\t\t\t\tpanOffset.set(0, 0, 0);\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\t\t\t\tif (zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared(scope.object.position) > EPS ||\n\t\t\t\t\t8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\t\t\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\t\t\tlastPosition.copy(scope.object.position);\n\t\t\t\t\tlastQuaternion.copy(scope.object.quaternion);\n\t\t\t\t\tzoomChanged = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}();\n\t\tthis.dispose = function () {\n\t\t\tscope.domElement.removeEventListener(\"contextmenu\", onContextMenu, false);\n\t\t\tscope.domElement.removeEventListener(\"mousedown\", onMouseDown, false);\n\t\t\tscope.domElement.removeEventListener(\"wheel\", onMouseWheel, false);\n\t\t\tscope.domElement.removeEventListener(\"touchstart\", onTouchStart, false);\n\t\t\tscope.domElement.removeEventListener(\"touchend\", onTouchEnd, false);\n\t\t\tscope.domElement.removeEventListener(\"touchmove\", onTouchMove, false);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\twindow.removeEventListener(\"keydown\", onKeyDown, false);\n\t\t\t//scope.dispatchEvent({ type: \"dispose\" }); // should this be added here?\n\t\t};\n\t\t//\n\t\t// internals\n\t\t//\n\t\tlet scope = this;\n\t\tlet changeEvent = { type: \"change\" };\n\t\tlet startEvent = { type: \"start\" };\n\t\tlet endEvent = { type: \"end\" };\n\t\tlet STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 };\n\t\tlet state = STATE.NONE;\n\t\tlet EPS = 0.000001;\n\t\t// current position in spherical coordinates\n\t\tlet spherical = new THREE.Spherical();\n\t\tlet sphericalDelta = new THREE.Spherical();\n\t\tlet scale = 1;\n\t\tlet panOffset = new THREE.Vector3();\n\t\tlet zoomChanged = false;\n\t\tlet rotateStart = new THREE.Vector2();\n\t\tlet rotateEnd = new THREE.Vector2();\n\t\tlet rotateDelta = new THREE.Vector2();\n\t\tlet panStart = new THREE.Vector2();\n\t\tlet panEnd = new THREE.Vector2();\n\t\tlet panDelta = new THREE.Vector2();\n\t\tlet dollyStart = new THREE.Vector2();\n\t\tlet dollyEnd = new THREE.Vector2();\n\t\tlet dollyDelta = new THREE.Vector2();\n\t\tfunction getAutoRotationAngle() {\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\t\t}\n\t\tfunction getZoomScale() {\n\t\t\treturn Math.pow(0.95, scope.zoomSpeed);\n\t\t}\n\t\tfunction rotateLeft(angle) {\n\t\t\tsphericalDelta.theta -= angle;\n\t\t}\n\t\tfunction rotateUp(angle) {\n\t\t\tsphericalDelta.phi -= angle;\n\t\t}\n\t\tlet panLeft = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panLeft(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar(-distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\tlet panUp = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panUp(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n\t\t\t\tv.multiplyScalar(distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tlet pan = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\treturn function pan(deltaX, deltaY) {\n\t\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\t\t// perspective\n\t\t\t\t\tlet position = scope.object.position;\n\t\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t\tlet targetDistance = offset.length();\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0);\n\t\t\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\n\t\t\t\t\tpanLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t\tpanUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n\t\t\t\t\tpanUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n\t\t\t\t\tscope.enablePan = false;\n\t\t\t\t}\n\t\t\t};\n\t\t}();\n\t\tfunction dollyIn(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale /= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\tfunction dollyOut(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale *= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\t\tfunction handleMouseDownRotate(event) {\n\t\t\trotateStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownDolly(event) {\n\t\t\tdollyStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownPan(event) {\n\t\t\tpanStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseMoveRotate(event) {\n\t\t\trotateEnd.set(event.clientX, event.clientY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMoveDolly(event) {\n\t\t\tdollyEnd.set(event.clientX, event.clientY);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMovePan(event) {\n\t\t\tpanEnd.set(event.clientX, event.clientY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseUp(event) {\n\t\t}\n\t\tfunction handleMouseWheel(event) {\n\t\t\tif (event.deltaY < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (event.deltaY > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleKeyDown(event) {\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan(0, scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan(0, -scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan(scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan(-scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfunction handleTouchStartRotate(event) {\n\t\t\trotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchStartDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyStart.set(0, distance);\n\t\t}\n\t\tfunction handleTouchStartPan(event) {\n\t\t\tpanStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchMoveRotate(event) {\n\t\t\trotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMoveDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyEnd.set(0, distance);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMovePan(event) {\n\t\t\tpanEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchEnd(event) {\n\t\t}\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\t\tfunction onMouseDown(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.button) {\n\t\t\t\tcase scope.mouseButtons.ORBIT:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownRotate(event);\n\t\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.ZOOM:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownDolly(event);\n\t\t\t\t\tstate = STATE.DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownPan(event);\n\t\t\t\t\tstate = STATE.PAN;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tdocument.addEventListener(\"mousemove\", onMouseMove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", onMouseUp, false);\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onMouseMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (state) {\n\t\t\t\tcase STATE.ROTATE:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.DOLLY:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tfunction onMouseUp(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleMouseUp(event);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onMouseWheel(event) {\n\t\t\tif (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE))\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\thandleMouseWheel(event);\n\t\t\tscope.dispatchEvent(startEvent); // not sure why these are here...\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t}\n\t\tfunction onKeyDown(event) {\n\t\t\tif (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\thandleKeyDown(event);\n\t\t}\n\t\tfunction onTouchStart(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartRotate(event);\n\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartDolly(event);\n\t\t\t\t\tstate = STATE.TOUCH_DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartPan(event);\n\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onTouchMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_ROTATE)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_DOLLY)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_PAN)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tfunction onTouchEnd(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleTouchEnd(event);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onContextMenu(event) {\n\t\t\tif (scope.enabled === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t}\n\t\t//\n\t\tscope.domElement.addEventListener(\"contextmenu\", onContextMenu, false);\n\t\tscope.domElement.addEventListener(\"mousedown\", onMouseDown, false);\n\t\tscope.domElement.addEventListener(\"wheel\", onMouseWheel, false);\n\t\tscope.domElement.addEventListener(\"touchstart\", onTouchStart, false);\n\t\tscope.domElement.addEventListener(\"touchend\", onTouchEnd, false);\n\t\tscope.domElement.addEventListener(\"touchmove\", onTouchMove, false);\n\t\twindow.addEventListener(\"keydown\", onKeyDown, false);\n\t\t// force an update at start\n\t\tthis.update();\n\t}\n}\n\nfunction createOrbitControls(skinViewer) {\n\tlet control = new OrbitControls(skinViewer.camera, skinViewer.renderer.domElement);\n\n\t// default configuration\n\tcontrol.enablePan = false;\n\tcontrol.target = new THREE.Vector3(0, -12, 0);\n\tcontrol.minDistance = 10;\n\tcontrol.maxDistance = 256;\n\tcontrol.update();\n\n\treturn control;\n}\n\nexport { OrbitControls, createOrbitControls };\n"],"names":["toFaceVertices","x1","y1","x2","y2","w","h","THREE","toSkinVertices","toCapeVertices","addVertices","box","top","bottom","left","front","right","back","faceVertexUvs","esp","SkinObject","slim","layer1Material","layer2Material","head","headBox","headMesh","add","head2Box","head2Mesh","renderOrder","body","bodyBox","bodyMesh","body2Box","body2Mesh","position","y","rightArm","rightArmPivot","rightArmBox","rightArmMesh","rightArm2Box","rightArm2Mesh","x","leftArm","leftArmPivot","leftArmBox","leftArmMesh","leftArm2Box","leftArm2Mesh","rightLeg","rightLegPivot","rightLegBox","rightLegMesh","rightLeg2Box","rightLeg2Mesh","leftLeg","leftLegPivot","leftLegBox","leftLegMesh","leftLeg2Box","leftLeg2Mesh","CapeObject","capeMaterial","capeBox","cape","z","PlayerObject","skin","visible","rotation","Math","PI","invokeAnimation","animation","player","time","CompositeAnimation","play","Function","AnimationHandle","paused","_paused","speed","_speed","_lastChange","_lastChangeX","dt","handles","Set","handle","remove","delete","forEach","WalkingAnimation","sin","basicArmRotationZ","cos","basicCapeRotationX","RunningAnimation","RotatingAnimation","copyImage","context","sX","sY","dX","dY","flipHorizontal","imgData","getImageData","index","index2","pA1","data","pA2","pA3","pA4","pB1","pB2","pB3","pB4","putImageData","convertSkinTo1_8","width","scale","copySkin","SkinViewer","options","domElement","animationPaused","animationTime","disposed","skinImg","Image","skinCanvas","document","createElement","skinTexture","magFilter","minFilter","capeImg","capeCanvas","capeTexture","map","side","transparent","opacity","scene","camera","renderer","angleRot","alpha","antialias","setSize","getShaderInfoLog","appendChild","playerObject","crossOrigin","onerror","console","error","src","onload","isOldFormat","height","skinContext","getContext","clearRect","drawImage","needsUpdate","capeContext","skinUrl","capeUrl","draw","requestAnimationFrame","render","aspect","updateProjectionMatrix","removeChild","dispose","url","getSize","newWidth","newHeight","OrbitControls","object","undefined","enabled","target","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","ZOOM","MIDDLE","PAN","target0","clone","position0","zoom0","zoom","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","copy","scope","reset","dispatchEvent","changeEvent","update","STATE","NONE","offset","quat","setFromUnitVectors","up","quatInverse","inverse","lastPosition","lastQuaternion","sub","applyQuaternion","setFromVector3","state","getAutoRotationAngle","sphericalDelta","max","min","makeSafe","radius","panOffset","setFromSpherical","lookAt","set","zoomChanged","distanceToSquared","EPS","dot","quaternion","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","type","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY","TOUCH_PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","rotateLeft","angle","rotateUp","panLeft","v","distance","objectMatrix","setFromMatrixColumn","multiplyScalar","panUp","pan","deltaX","deltaY","element","targetDistance","length","tan","fov","clientHeight","matrix","clientWidth","warn","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","event","clientX","clientY","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","subVectors","handleMouseMoveDolly","handleMouseMovePan","handleMouseWheel","handleKeyDown","keyCode","handleTouchStartRotate","touches","pageX","pageY","handleTouchStartDolly","dx","dy","sqrt","handleTouchStartPan","handleTouchMoveRotate","handleTouchMoveDolly","handleTouchMovePan","button","preventDefault","addEventListener","stopPropagation","createOrbitControls","skinViewer","control"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"skinview3d.module.js","sources":["../src/model.js","../src/animation.js","../src/viewer.js","../src/orbit_controls.js"],"sourcesContent":["import * as THREE from \"three\";\n\nfunction toFaceVertices(x1, y1, x2, y2, w, h) {\n\treturn [\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y2 / h),\n\t\tnew THREE.Vector2(x2 / w, 1.0 - y1 / h),\n\t\tnew THREE.Vector2(x1 / w, 1.0 - y1 / h)\n\t];\n}\n\nfunction toSkinVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 64.0);\n}\n\nfunction toCapeVertices(x1, y1, x2, y2) {\n\treturn toFaceVertices(x1, y1, x2, y2, 64.0, 32.0);\n}\n\nfunction addVertices(box, top, bottom, left, front, right, back) {\n\tbox.faceVertexUvs[0] = [];\n\tbox.faceVertexUvs[0][0] = [right[3], right[0], right[2]];\n\tbox.faceVertexUvs[0][1] = [right[0], right[1], right[2]];\n\tbox.faceVertexUvs[0][2] = [left[3], left[0], left[2]];\n\tbox.faceVertexUvs[0][3] = [left[0], left[1], left[2]];\n\tbox.faceVertexUvs[0][4] = [top[3], top[0], top[2]];\n\tbox.faceVertexUvs[0][5] = [top[0], top[1], top[2]];\n\tbox.faceVertexUvs[0][6] = [bottom[0], bottom[3], bottom[1]];\n\tbox.faceVertexUvs[0][7] = [bottom[3], bottom[2], bottom[1]];\n\tbox.faceVertexUvs[0][8] = [front[3], front[0], front[2]];\n\tbox.faceVertexUvs[0][9] = [front[0], front[1], front[2]];\n\tbox.faceVertexUvs[0][10] = [back[3], back[0], back[2]];\n\tbox.faceVertexUvs[0][11] = [back[0], back[1], back[2]];\n}\n\nconst esp = 0.002;\n\nclass SkinObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material) {\n\t\tsuper();\n\n\t\tthis.slim = slim;\n\n\t\t// Head\n\t\tthis.head = new THREE.Group();\n\n\t\tlet headBox = new THREE.BoxGeometry(8, 8, 8, 0, 0, 0);\n\t\taddVertices(headBox,\n\t\t\ttoSkinVertices(8, 0, 16, 8),\n\t\t\ttoSkinVertices(16, 0, 24, 8),\n\t\t\ttoSkinVertices(0, 8, 8, 16),\n\t\t\ttoSkinVertices(8, 8, 16, 16),\n\t\t\ttoSkinVertices(16, 8, 24, 16),\n\t\t\ttoSkinVertices(24, 8, 32, 16)\n\t\t);\n\t\tlet headMesh = new THREE.Mesh(headBox, layer1Material);\n\t\tthis.head.add(headMesh);\n\n\t\tlet head2Box = new THREE.BoxGeometry(9, 9, 9, 0, 0, 0);\n\t\taddVertices(head2Box,\n\t\t\ttoSkinVertices(40, 0, 48, 8),\n\t\t\ttoSkinVertices(48, 0, 56, 8),\n\t\t\ttoSkinVertices(32, 8, 40, 16),\n\t\t\ttoSkinVertices(40, 8, 48, 16),\n\t\t\ttoSkinVertices(48, 8, 56, 16),\n\t\t\ttoSkinVertices(56, 8, 64, 16)\n\t\t);\n\t\tlet head2Mesh = new THREE.Mesh(head2Box, layer2Material);\n\t\thead2Mesh.renderOrder = -1;\n\t\tthis.head.add(head2Mesh);\n\n\t\tthis.add(this.head);\n\n\n\t\t// Body\n\t\tthis.body = new THREE.Group();\n\n\t\tlet bodyBox = new THREE.BoxGeometry(8, 12, 4, 0, 0, 0);\n\t\taddVertices(bodyBox,\n\t\t\ttoSkinVertices(20, 16, 28, 20),\n\t\t\ttoSkinVertices(28, 16, 36, 20),\n\t\t\ttoSkinVertices(16, 20, 20, 32),\n\t\t\ttoSkinVertices(20, 20, 28, 32),\n\t\t\ttoSkinVertices(28, 20, 32, 32),\n\t\t\ttoSkinVertices(32, 20, 40, 32)\n\t\t);\n\t\tlet bodyMesh = new THREE.Mesh(bodyBox, layer1Material);\n\t\tthis.body.add(bodyMesh);\n\n\t\tlet body2Box = new THREE.BoxGeometry(9, 13.5, 4.5, 0, 0, 0);\n\t\taddVertices(body2Box,\n\t\t\ttoSkinVertices(20, 32, 28, 36),\n\t\t\ttoSkinVertices(28, 32, 36, 36),\n\t\t\ttoSkinVertices(16, 36, 20, 48),\n\t\t\ttoSkinVertices(20, 36, 28, 48),\n\t\t\ttoSkinVertices(28, 36, 32, 48),\n\t\t\ttoSkinVertices(32, 36, 40, 48)\n\t\t);\n\t\tlet body2Mesh = new THREE.Mesh(body2Box, layer2Material);\n\t\tthis.body.add(body2Mesh);\n\n\t\tthis.body.position.y = -10;\n\t\tthis.add(this.body);\n\n\n\t\t// Right Arm\n\t\tthis.rightArm = new THREE.Group();\n\t\tlet rightArmPivot = new THREE.Group();\n\n\t\tlet rightArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 47, 20),\n\t\t\t\ttoSkinVertices(47, 16, 50, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 47, 32),\n\t\t\t\ttoSkinVertices(47, 20, 51, 32),\n\t\t\t\ttoSkinVertices(51, 20, 54, 32)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArmBox,\n\t\t\t\ttoSkinVertices(44, 16, 48, 20),\n\t\t\t\ttoSkinVertices(48, 16, 52, 20),\n\t\t\t\ttoSkinVertices(40, 20, 44, 32),\n\t\t\t\ttoSkinVertices(44, 20, 48, 32),\n\t\t\t\ttoSkinVertices(48, 20, 52, 32),\n\t\t\t\ttoSkinVertices(52, 20, 56, 32)\n\t\t\t);\n\t\t}\n\t\tlet rightArmMesh = new THREE.Mesh(rightArmBox, layer1Material);\n\t\trightArmPivot.add(rightArmMesh);\n\n\t\tlet rightArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 47, 36),\n\t\t\t\ttoSkinVertices(47, 32, 50, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 47, 48),\n\t\t\t\ttoSkinVertices(47, 36, 51, 48),\n\t\t\t\ttoSkinVertices(51, 36, 54, 48)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(rightArm2Box,\n\t\t\t\ttoSkinVertices(44, 32, 48, 36),\n\t\t\t\ttoSkinVertices(48, 32, 52, 36),\n\t\t\t\ttoSkinVertices(40, 36, 44, 48),\n\t\t\t\ttoSkinVertices(44, 36, 48, 48),\n\t\t\t\ttoSkinVertices(48, 36, 52, 48),\n\t\t\t\ttoSkinVertices(52, 36, 56, 48)\n\t\t\t);\n\t\t}\n\t\tlet rightArm2Mesh = new THREE.Mesh(rightArm2Box, layer2Material);\n\t\trightArm2Mesh.renderOrder = 1;\n\t\trightArmPivot.add(rightArm2Mesh);\n\n\t\trightArmPivot.position.y = -6;\n\t\tthis.rightArm.add(rightArmPivot);\n\t\tthis.rightArm.position.y = -4;\n\t\tthis.rightArm.position.x = slim ? -5.5 : -6;\n\t\tthis.add(this.rightArm);\n\n\n\t\t// Left Arm\n\t\tthis.leftArm = new THREE.Group();\n\t\tlet leftArmPivot = new THREE.Group();\n\n\t\tlet leftArmBox = new THREE.BoxGeometry((slim ? 3 : 4) - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 39, 52),\n\t\t\t\ttoSkinVertices(39, 48, 42, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 39, 64),\n\t\t\t\ttoSkinVertices(39, 52, 43, 64),\n\t\t\t\ttoSkinVertices(43, 52, 46, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArmBox,\n\t\t\t\ttoSkinVertices(36, 48, 40, 52),\n\t\t\t\ttoSkinVertices(40, 48, 44, 52),\n\t\t\t\ttoSkinVertices(32, 52, 36, 64),\n\t\t\t\ttoSkinVertices(36, 52, 40, 64),\n\t\t\t\ttoSkinVertices(40, 52, 44, 64),\n\t\t\t\ttoSkinVertices(44, 52, 48, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArmMesh = new THREE.Mesh(leftArmBox, layer1Material);\n\t\tleftArmPivot.add(leftArmMesh);\n\n\t\tlet leftArm2Box = new THREE.BoxGeometry((slim ? 3.375 : 4.5) - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\tif (slim) {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 55, 52),\n\t\t\t\ttoSkinVertices(55, 48, 58, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 55, 64),\n\t\t\t\ttoSkinVertices(55, 52, 59, 64),\n\t\t\t\ttoSkinVertices(59, 52, 62, 64)\n\t\t\t);\n\t\t} else {\n\t\t\taddVertices(leftArm2Box,\n\t\t\t\ttoSkinVertices(52, 48, 56, 52),\n\t\t\t\ttoSkinVertices(56, 48, 60, 52),\n\t\t\t\ttoSkinVertices(48, 52, 52, 64),\n\t\t\t\ttoSkinVertices(52, 52, 56, 64),\n\t\t\t\ttoSkinVertices(56, 52, 60, 64),\n\t\t\t\ttoSkinVertices(60, 52, 64, 64)\n\t\t\t);\n\t\t}\n\t\tlet leftArm2Mesh = new THREE.Mesh(leftArm2Box, layer2Material);\n\t\tleftArm2Mesh.renderOrder = 1;\n\t\tleftArmPivot.add(leftArm2Mesh);\n\n\t\tleftArmPivot.position.y = -6;\n\t\tthis.leftArm.add(leftArmPivot);\n\t\tthis.leftArm.position.y = -4;\n\t\tthis.leftArm.position.x = slim ? 5.5 : 6;\n\t\tthis.add(this.leftArm);\n\n\n\t\t// Right Leg\n\t\tthis.rightLeg = new THREE.Group();\n\t\tlet rightLegPivot = new THREE.Group();\n\n\t\tlet rightLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(rightLegBox,\n\t\t\ttoSkinVertices(4, 16, 8, 20),\n\t\t\ttoSkinVertices(8, 16, 12, 20),\n\t\t\ttoSkinVertices(0, 20, 4, 32),\n\t\t\ttoSkinVertices(4, 20, 8, 32),\n\t\t\ttoSkinVertices(8, 20, 12, 32),\n\t\t\ttoSkinVertices(12, 20, 16, 32)\n\t\t);\n\t\tlet rightLegMesh = new THREE.Mesh(rightLegBox, layer1Material);\n\t\trightLegPivot.add(rightLegMesh);\n\n\t\tlet rightLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(rightLeg2Box,\n\t\t\ttoSkinVertices(4, 32, 8, 36),\n\t\t\ttoSkinVertices(8, 32, 12, 36),\n\t\t\ttoSkinVertices(0, 36, 4, 48),\n\t\t\ttoSkinVertices(4, 36, 8, 48),\n\t\t\ttoSkinVertices(8, 36, 12, 48),\n\t\t\ttoSkinVertices(12, 36, 16, 48)\n\t\t);\n\t\tlet rightLeg2Mesh = new THREE.Mesh(rightLeg2Box, layer2Material);\n\t\trightLeg2Mesh.renderOrder = 1;\n\t\trightLegPivot.add(rightLeg2Mesh);\n\n\t\trightLegPivot.position.y = -6;\n\t\tthis.rightLeg.add(rightLegPivot);\n\t\tthis.rightLeg.position.y = -16;\n\t\tthis.rightLeg.position.x = -2;\n\t\tthis.add(this.rightLeg);\n\n\t\t// Left Leg\n\t\tthis.leftLeg = new THREE.Group();\n\t\tlet leftLegPivot = new THREE.Group();\n\n\t\tlet leftLegBox = new THREE.BoxGeometry(4 - esp, 12 - esp, 4 - esp, 0, 0, 0);\n\t\taddVertices(leftLegBox,\n\t\t\ttoSkinVertices(20, 48, 24, 52),\n\t\t\ttoSkinVertices(24, 48, 28, 52),\n\t\t\ttoSkinVertices(16, 52, 20, 64),\n\t\t\ttoSkinVertices(20, 52, 24, 64),\n\t\t\ttoSkinVertices(24, 52, 28, 64),\n\t\t\ttoSkinVertices(28, 52, 32, 64)\n\t\t);\n\t\tlet leftLegMesh = new THREE.Mesh(leftLegBox, layer1Material);\n\t\tleftLegPivot.add(leftLegMesh);\n\n\t\tlet leftLeg2Box = new THREE.BoxGeometry(4.5 - esp, 13.5 - esp, 4.5 - esp, 0, 0, 0);\n\t\taddVertices(leftLeg2Box,\n\t\t\ttoSkinVertices(4, 48, 8, 52),\n\t\t\ttoSkinVertices(8, 48, 12, 52),\n\t\t\ttoSkinVertices(0, 52, 4, 64),\n\t\t\ttoSkinVertices(4, 52, 8, 64),\n\t\t\ttoSkinVertices(8, 52, 12, 64),\n\t\t\ttoSkinVertices(12, 52, 16, 64)\n\t\t);\n\t\tlet leftLeg2Mesh = new THREE.Mesh(leftLeg2Box, layer2Material);\n\t\tleftLeg2Mesh.renderOrder = 1;\n\t\tleftLegPivot.add(leftLeg2Mesh);\n\n\t\tleftLegPivot.position.y = -6;\n\t\tthis.leftLeg.add(leftLegPivot);\n\t\tthis.leftLeg.position.y = -16;\n\t\tthis.leftLeg.position.x = 2;\n\t\tthis.add(this.leftLeg);\n\t}\n}\n\nclass CapeObject extends THREE.Group {\n\tconstructor(capeMaterial) {\n\t\tsuper();\n\n\t\t// back = outside\n\t\t// front = inside\n\t\tlet capeBox = new THREE.BoxGeometry(10, 16, 1, 0, 0, 0);\n\t\taddVertices(capeBox,\n\t\t\ttoCapeVertices(1, 0, 11, 1),\n\t\t\ttoCapeVertices(11, 0, 21, 1),\n\t\t\ttoCapeVertices(11, 1, 12, 17),\n\t\t\ttoCapeVertices(12, 1, 22, 17),\n\t\t\ttoCapeVertices(0, 1, 1, 17),\n\t\t\ttoCapeVertices(1, 1, 11, 17)\n\t\t);\n\t\tthis.cape = new THREE.Mesh(capeBox, capeMaterial);\n\t\tthis.cape.position.y = -8;\n\t\tthis.cape.position.z = -0.5;\n\t\tthis.add(this.cape);\n\t}\n}\n\nclass PlayerObject extends THREE.Group {\n\tconstructor(slim, layer1Material, layer2Material, capeMaterial) {\n\t\tsuper();\n\n\t\tthis.skin = new SkinObject(slim, layer1Material, layer2Material);\n\t\tthis.skin.visible = false;\n\t\tthis.add(this.skin);\n\n\t\tthis.cape = new CapeObject(capeMaterial);\n\t\tthis.cape.position.z = -2;\n\t\tthis.cape.position.y = -4;\n\t\tthis.cape.rotation.x = 25 * Math.PI / 180;\n\t\tthis.cape.visible = false;\n\t\tthis.add(this.cape);\n\t}\n}\n\nexport { SkinObject, CapeObject, PlayerObject };\n","function invokeAnimation(animation, player, time) {\n\tif (animation instanceof CompositeAnimation) {\n\t\tanimation.play(player, time);\n\t} else if (animation instanceof Function) {\n\t\tanimation(player, time);\n\t} else {\n\t\tthrow `Not an animation: ${animation}`;\n\t}\n}\n\nclass AnimationHandle {\n\tconstructor(animation) {\n\t\tthis.animation = animation;\n\t\tthis.paused = this._paused = false;\n\t\tthis.speed = this._speed = 1.0;\n\t\tthis._lastChange = null;\n\t\tthis._lastChangeX = null;\n\t}\n\tplay(player, time) {\n\t\tif (this._lastChange === null) {\n\t\t\tthis._lastChange = time;\n\t\t\tthis._lastChangeX = 0;\n\t\t} else if (this.paused !== this._paused || this.speed !== this._speed) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tif (this._paused === false) {\n\t\t\t\tthis._lastChangeX += dt * this._speed;\n\t\t\t}\n\t\t\tthis._paused = this.paused;\n\t\t\tthis._speed = this.speed;\n\t\t\tthis._lastChange = time;\n\t\t}\n\t\tif (this.paused === false) {\n\t\t\tlet dt = time - this._lastChange;\n\t\t\tlet x = this._lastChangeX + this.speed * dt;\n\t\t\tinvokeAnimation(this.animation, player, x);\n\t\t}\n\t}\n\treset(){\n\t\tthis._lastChange = null;\n\t}\n}\n\nclass CompositeAnimation {\n\tconstructor() {\n\t\tthis.handles = new Set();\n\t}\n\tadd(animation) {\n\t\tlet handle = new AnimationHandle(animation);\n\t\thandle.remove = () => this.handles.delete(handle);\n\t\tthis.handles.add(handle);\n\t\treturn handle;\n\t}\n\tplay(player, time) {\n\t\tthis.handles.forEach(handle => handle.play(player, time));\n\t}\n}\n\nlet WalkingAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\t// Multiply by animation's natural speed\n\ttime *= 8;\n\n\t// Leg swing\n\tskin.leftLeg.rotation.x = Math.sin(time) * 0.5;\n\tskin.rightLeg.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.sin(time + Math.PI) * 0.5;\n\tskin.rightArm.rotation.x = Math.sin(time) * 0.5;\n\tlet basicArmRotationZ = Math.PI * 0.02;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.03 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.03 - basicArmRotationZ;\n\n\t// Head shaking with different frequency & amplitude\n\tskin.head.rotation.y = Math.sin(time / 4) * 0.2;\n\tskin.head.rotation.x = Math.sin(time / 5) * 0.1;\n\n\t// Always add an angle for cape around the x axis\n\tlet basicCapeRotationX = Math.PI * 0.06;\n\tplayer.cape.rotation.x = Math.sin(time / 1.5) * 0.06 + basicCapeRotationX;\n};\n\nlet RunningAnimation = (player, time) => {\n\tlet skin = player.skin;\n\n\ttime *= 15;\n\n\t// Leg swing with larger amplitude\n\tskin.leftLeg.rotation.x = Math.cos(time + Math.PI) * 1.3;\n\tskin.rightLeg.rotation.x = Math.cos(time) * 1.3;\n\n\t// Arm swing\n\tskin.leftArm.rotation.x = Math.cos(time) * 1.5;\n\tskin.rightArm.rotation.x = Math.cos(time + Math.PI) * 1.5;\n\tlet basicArmRotationZ = Math.PI * 0.1;\n\tskin.leftArm.rotation.z = Math.cos(time) * 0.1 + basicArmRotationZ;\n\tskin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.1 - basicArmRotationZ;\n\n\t// Jumping\n\tplayer.position.y = Math.cos(time * 2);\n\t// Dodging when running\n\tplayer.position.x = Math.cos(time) * 0.15;\n\t// Slightly tilting when running\n\tplayer.rotation.z = Math.cos(time + Math.PI) * 0.01;\n\n\t// Apply higher swing frequency, lower amplitude,\n\t// and greater basic rotation around x axis,\n\t// to cape when running.\n\tlet basicCapeRotationX = Math.PI * 0.3;\n\tplayer.cape.rotation.x = Math.sin(time * 2) * 0.1 + basicCapeRotationX;\n\n\t// What about head shaking?\n\t// You shouldn't glance right and left when running dude :P\n};\n\nlet RotatingAnimation = (player, time) => {\n\tplayer.rotation.y = time;\n};\n\nexport {\n\tCompositeAnimation,\n\tinvokeAnimation,\n\tWalkingAnimation,\n\tRunningAnimation,\n\tRotatingAnimation\n};\n","import * as THREE from \"three\";\nimport { PlayerObject } from \"./model\";\nimport { invokeAnimation } from \"./animation\";\n\nfunction copyImage(context, sX, sY, w, h, dX, dY, flipHorizontal) {\n\tlet imgData = context.getImageData(sX, sY, w, h);\n\tif (flipHorizontal) {\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < (w / 2); x++) {\n\t\t\t\tlet index = (x + y * w) * 4;\n\t\t\t\tlet index2 = ((w - x - 1) + y * w) * 4;\n\t\t\t\tlet pA1 = imgData.data[index];\n\t\t\t\tlet pA2 = imgData.data[index + 1];\n\t\t\t\tlet pA3 = imgData.data[index + 2];\n\t\t\t\tlet pA4 = imgData.data[index + 3];\n\n\t\t\t\tlet pB1 = imgData.data[index2];\n\t\t\t\tlet pB2 = imgData.data[index2 + 1];\n\t\t\t\tlet pB3 = imgData.data[index2 + 2];\n\t\t\t\tlet pB4 = imgData.data[index2 + 3];\n\n\t\t\t\timgData.data[index] = pB1;\n\t\t\t\timgData.data[index + 1] = pB2;\n\t\t\t\timgData.data[index + 2] = pB3;\n\t\t\t\timgData.data[index + 3] = pB4;\n\n\t\t\t\timgData.data[index2] = pA1;\n\t\t\t\timgData.data[index2 + 1] = pA2;\n\t\t\t\timgData.data[index2 + 2] = pA3;\n\t\t\t\timgData.data[index2 + 3] = pA4;\n\t\t\t}\n\t\t}\n\t}\n\tcontext.putImageData(imgData, dX, dY);\n}\n\nfunction convertSkinTo1_8(context, width) {\n\tlet scale = width / 64.0;\n\tlet copySkin = (context, sX, sY, w, h, dX, dY, flipHorizontal) => copyImage(context, sX * scale, sY * scale, w * scale, h * scale, dX * scale, dY * scale, flipHorizontal);\n\n\tcopySkin(context, 4, 16, 4, 4, 20, 48, true); // Top Leg\n\tcopySkin(context, 8, 16, 4, 4, 24, 48, true); // Bottom Leg\n\tcopySkin(context, 0, 20, 4, 12, 24, 52, true); // Outer Leg\n\tcopySkin(context, 4, 20, 4, 12, 20, 52, true); // Front Leg\n\tcopySkin(context, 8, 20, 4, 12, 16, 52, true); // Inner Leg\n\tcopySkin(context, 12, 20, 4, 12, 28, 52, true); // Back Leg\n\tcopySkin(context, 44, 16, 4, 4, 36, 48, true); // Top Arm\n\tcopySkin(context, 48, 16, 4, 4, 40, 48, true); // Bottom Arm\n\tcopySkin(context, 40, 20, 4, 12, 40, 52, true); // Outer Arm\n\tcopySkin(context, 44, 20, 4, 12, 36, 52, true); // Front Arm\n\tcopySkin(context, 48, 20, 4, 12, 32, 52, true); // Inner Arm\n\tcopySkin(context, 52, 20, 4, 12, 44, 52, true); // Back Arm\n}\n\nclass SkinViewer {\n\tconstructor(options) {\n\t\tthis.domElement = options.domElement;\n\t\tthis.animation = options.animation || null;\n\t\tthis.animationPaused = false;\n\t\tthis.animationTime = 0;\n\t\tthis.disposed = false;\n\n\t\t// texture\n\t\tthis.skinImg = new Image();\n\t\tthis.skinCanvas = document.createElement(\"canvas\");\n\t\tthis.skinTexture = new THREE.Texture(this.skinCanvas);\n\t\tthis.skinTexture.magFilter = THREE.NearestFilter;\n\t\tthis.skinTexture.minFilter = THREE.NearestFilter;\n\n\t\tthis.capeImg = new Image();\n\t\tthis.capeCanvas = document.createElement(\"canvas\");\n\t\tthis.capeTexture = new THREE.Texture(this.capeCanvas);\n\t\tthis.capeTexture.magFilter = THREE.NearestFilter;\n\t\tthis.capeTexture.minFilter = THREE.NearestFilter;\n\n\t\tthis.layer1Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, side: THREE.FrontSide });\n\t\tthis.layer2Material = new THREE.MeshBasicMaterial({ map: this.skinTexture, transparent: true, opacity: 1, side: THREE.DoubleSide, alphaTest: 0.5 });\n\t\tthis.capeMaterial = new THREE.MeshBasicMaterial({ map: this.capeTexture, transparent: true, opacity: 1, side: THREE.DoubleSide, alphaTest: 0.5 });\n\n\t\t// scene\n\t\tthis.scene = new THREE.Scene();\n\n\t\t// Use smaller fov to avoid distortion\n\t\tthis.camera = new THREE.PerspectiveCamera(40);\n\t\tthis.camera.position.y = -12;\n\t\tthis.camera.position.z = 60;\n\n\t\tthis.renderer = new THREE.WebGLRenderer({ angleRot: true, alpha: true, antialias: false });\n\t\tthis.renderer.setSize(300, 300); // default size\n\t\tthis.renderer.context.getShaderInfoLog = () => \"\"; // shut firefox up\n\t\tthis.domElement.appendChild(this.renderer.domElement);\n\n\t\tthis.playerObject = new PlayerObject(options.slim === true, this.layer1Material, this.layer2Material, this.capeMaterial);\n\t\tthis.scene.add(this.playerObject);\n\n\t\t// texture loading\n\t\tthis.skinImg.crossOrigin = \"anonymous\";\n\t\tthis.skinImg.onerror = () => console.error(\"Failed loading \" + this.skinImg.src);\n\t\tthis.skinImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.skinImg.width !== this.skinImg.height) {\n\t\t\t\tif (this.skinImg.width === 2 * this.skinImg.height) {\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad skin size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet skinContext = this.skinCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.width = width;\n\t\t\t\tthis.skinCanvas.height = width;\n\t\t\t\tskinContext.clearRect(0, 0, width, width);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, width, width / 2.0);\n\t\t\t\tconvertSkinTo1_8(skinContext, width);\n\t\t\t} else {\n\t\t\t\tthis.skinCanvas.width = this.skinImg.width;\n\t\t\t\tthis.skinCanvas.height = this.skinImg.height;\n\t\t\t\tskinContext.clearRect(0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t\tskinContext.drawImage(this.skinImg, 0, 0, this.skinCanvas.width, this.skinCanvas.height);\n\t\t\t}\n\n\t\t\tthis.skinTexture.needsUpdate = true;\n\t\t\tthis.layer1Material.needsUpdate = true;\n\t\t\tthis.layer2Material.needsUpdate = true;\n\n\t\t\tthis.playerObject.skin.visible = true;\n\t\t};\n\n\t\tthis.capeImg.crossOrigin = \"anonymous\";\n\t\tthis.capeImg.onerror = () => console.error(\"Failed loading \" + this.capeImg.src);\n\t\tthis.capeImg.onload = () => {\n\t\t\tlet isOldFormat = false;\n\t\t\tif (this.capeImg.width !== 2 * this.capeImg.height) {\n\t\t\t\tif (this.capeImg.width * 17 == this.capeImg.height * 22) {\n\t\t\t\t\t// width/height = 22/17\n\t\t\t\t\tisOldFormat = true;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Bad cape size\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet capeContext = this.capeCanvas.getContext(\"2d\");\n\t\t\tif (isOldFormat) {\n\t\t\t\tlet width = this.capeImg.width * 64 / 22;\n\t\t\t\tthis.capeCanvas.width = width;\n\t\t\t\tthis.capeCanvas.height = width / 2;\n\t\t\t} else {\n\t\t\t\tthis.capeCanvas.width = this.capeImg.width;\n\t\t\t\tthis.capeCanvas.height = this.capeImg.height;\n\t\t\t}\n\t\t\tcapeContext.clearRect(0, 0, this.capeCanvas.width, this.capeCanvas.height);\n\t\t\tcapeContext.drawImage(this.capeImg, 0, 0, this.capeImg.width, this.capeImg.height);\n\n\t\t\tthis.capeTexture.needsUpdate = true;\n\t\t\tthis.capeMaterial.needsUpdate = true;\n\n\t\t\tthis.playerObject.cape.visible = true;\n\t\t};\n\n\t\tif (options.skinUrl) this.skinUrl = options.skinUrl;\n\t\tif (options.capeUrl) this.capeUrl = options.capeUrl;\n\t\tif (options.width) this.width = options.width;\n\t\tif (options.height) this.height = options.height;\n\n\t\tlet draw = () => {\n\t\t\tif (this.disposed) return;\n\t\t\twindow.requestAnimationFrame(draw);\n\t\t\tif (!this.animationPaused) {\n\t\t\t\tthis.animationTime++;\n\t\t\t\tif (this.animation) {\n\t\t\t\t\tinvokeAnimation(this.animation, this.playerObject, this.animationTime / 100.0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.renderer.render(this.scene, this.camera);\n\t\t};\n\t\tdraw();\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.camera.aspect = width / height;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.renderer.setSize(width, height);\n\t}\n\n\tdispose() {\n\t\tthis.disposed = true;\n\t\tthis.domElement.removeChild(this.renderer.domElement);\n\t\tthis.renderer.dispose();\n\t\tthis.skinTexture.dispose();\n\t\tthis.capeTexture.dispose();\n\t}\n\n\tget skinUrl() {\n\t\treturn this.skinImg.src;\n\t}\n\n\tset skinUrl(url) {\n\t\tthis.skinImg.src = url;\n\t}\n\n\tget capeUrl() {\n\t\treturn this.capeImg.src;\n\t}\n\n\tset capeUrl(url) {\n\t\tthis.capeImg.src = url;\n\t}\n\n\tget width() {\n\t\treturn this.renderer.getSize().width;\n\t}\n\n\tset width(newWidth) {\n\t\tthis.setSize(newWidth, this.height);\n\t}\n\n\tget height() {\n\t\treturn this.renderer.getSize().height;\n\t}\n\n\tset height(newHeight) {\n\t\tthis.setSize(this.width, newHeight);\n\t}\n}\n\nexport { SkinViewer };\n","import * as THREE from \"three\";\n\nclass OrbitControls extends THREE.EventDispatcher {\n\t/**\n\t * @preserve\n\t * The code was originally from https://github.com/mrdoob/three.js/blob/d45a042cf962e9b1aa9441810ba118647b48aacb/examples/js/controls/OrbitControls.js\n\t */\n\t/**\n\t * @license\n\t * Copyright (C) 2010-2017 three.js authors\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t *\n\t *\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t */\n\n\t// This set of controls performs orbiting, dollying (zooming), and panning.\n\t// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n\t//\n\t// Orbit - left mouse / touch: one finger move\n\t// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n\t// Pan - right mouse, or arrow keys / touch: three finger swipe\n\n\tconstructor(object, domElement) {\n\t\tsuper();\n\t\tthis.object = object;\n\t\tthis.domElement = (domElement !== undefined) ? domElement : document;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new THREE.Vector3();\n\n\t\t// How far you can dolly in and out (PerspectiveCamera only)\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out (OrthographicCamera only)\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\t\tthis.minAzimuthAngle = -Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.25;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t\t// Set to false to disable use of the keys\n\t\tthis.enableKeys = true;\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\t\tthis.getPolarAngle = function () {\n\t\t\treturn spherical.phi;\n\t\t};\n\t\tthis.getAzimuthalAngle = function () {\n\t\t\treturn spherical.theta;\n\t\t};\n\t\tthis.saveState = function () {\n\t\t\tscope.target0.copy(scope.target);\n\t\t\tscope.position0.copy(scope.object.position);\n\t\t\tscope.zoom0 = scope.object.zoom;\n\t\t};\n\t\tthis.reset = function () {\n\t\t\tscope.target.copy(scope.target0);\n\t\t\tscope.object.position.copy(scope.position0);\n\t\t\tscope.object.zoom = scope.zoom0;\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\tscope.update();\n\t\t\tstate = STATE.NONE;\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\t// so camera.up is the orbit axis\n\t\t\tlet quat = new THREE.Quaternion().setFromUnitVectors(object.up, new THREE.Vector3(0, 1, 0));\n\t\t\tlet quatInverse = quat.clone().inverse();\n\t\t\tlet lastPosition = new THREE.Vector3();\n\t\t\tlet lastQuaternion = new THREE.Quaternion();\n\t\t\treturn function update() {\n\t\t\t\tlet position = scope.object.position;\n\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion(quat);\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3(offset);\n\t\t\t\tif (scope.autoRotate && state === STATE.NONE) {\n\t\t\t\t\trotateLeft(getAutoRotationAngle());\n\t\t\t\t}\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\t\t\t\t// restrict theta to be between desired limits\n\t\t\t\tspherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n\t\t\t\tspherical.makeSafe();\n\t\t\t\tspherical.radius *= scale;\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n\t\t\t\t// move target to panned location\n\t\t\t\tscope.target.add(panOffset);\n\t\t\t\toffset.setFromSpherical(spherical);\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion(quatInverse);\n\t\t\t\tposition.copy(scope.target).add(offset);\n\t\t\t\tscope.object.lookAt(scope.target);\n\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\tsphericalDelta.theta *= (1 - scope.dampingFactor);\n\t\t\t\t\tsphericalDelta.phi *= (1 - scope.dampingFactor);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsphericalDelta.set(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tscale = 1;\n\t\t\t\tpanOffset.set(0, 0, 0);\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\t\t\t\tif (zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared(scope.object.position) > EPS ||\n\t\t\t\t\t8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\t\t\t\t\tscope.dispatchEvent(changeEvent);\n\t\t\t\t\tlastPosition.copy(scope.object.position);\n\t\t\t\t\tlastQuaternion.copy(scope.object.quaternion);\n\t\t\t\t\tzoomChanged = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}();\n\t\tthis.dispose = function () {\n\t\t\tscope.domElement.removeEventListener(\"contextmenu\", onContextMenu, false);\n\t\t\tscope.domElement.removeEventListener(\"mousedown\", onMouseDown, false);\n\t\t\tscope.domElement.removeEventListener(\"wheel\", onMouseWheel, false);\n\t\t\tscope.domElement.removeEventListener(\"touchstart\", onTouchStart, false);\n\t\t\tscope.domElement.removeEventListener(\"touchend\", onTouchEnd, false);\n\t\t\tscope.domElement.removeEventListener(\"touchmove\", onTouchMove, false);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\twindow.removeEventListener(\"keydown\", onKeyDown, false);\n\t\t\t//scope.dispatchEvent({ type: \"dispose\" }); // should this be added here?\n\t\t};\n\t\t//\n\t\t// internals\n\t\t//\n\t\tlet scope = this;\n\t\tlet changeEvent = { type: \"change\" };\n\t\tlet startEvent = { type: \"start\" };\n\t\tlet endEvent = { type: \"end\" };\n\t\tlet STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 };\n\t\tlet state = STATE.NONE;\n\t\tlet EPS = 0.000001;\n\t\t// current position in spherical coordinates\n\t\tlet spherical = new THREE.Spherical();\n\t\tlet sphericalDelta = new THREE.Spherical();\n\t\tlet scale = 1;\n\t\tlet panOffset = new THREE.Vector3();\n\t\tlet zoomChanged = false;\n\t\tlet rotateStart = new THREE.Vector2();\n\t\tlet rotateEnd = new THREE.Vector2();\n\t\tlet rotateDelta = new THREE.Vector2();\n\t\tlet panStart = new THREE.Vector2();\n\t\tlet panEnd = new THREE.Vector2();\n\t\tlet panDelta = new THREE.Vector2();\n\t\tlet dollyStart = new THREE.Vector2();\n\t\tlet dollyEnd = new THREE.Vector2();\n\t\tlet dollyDelta = new THREE.Vector2();\n\t\tfunction getAutoRotationAngle() {\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\t\t}\n\t\tfunction getZoomScale() {\n\t\t\treturn Math.pow(0.95, scope.zoomSpeed);\n\t\t}\n\t\tfunction rotateLeft(angle) {\n\t\t\tsphericalDelta.theta -= angle;\n\t\t}\n\t\tfunction rotateUp(angle) {\n\t\t\tsphericalDelta.phi -= angle;\n\t\t}\n\t\tlet panLeft = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panLeft(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar(-distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\tlet panUp = function () {\n\t\t\tlet v = new THREE.Vector3();\n\t\t\treturn function panUp(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n\t\t\t\tv.multiplyScalar(distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t}();\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tlet pan = function () {\n\t\t\tlet offset = new THREE.Vector3();\n\t\t\treturn function pan(deltaX, deltaY) {\n\t\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\t\t// perspective\n\t\t\t\t\tlet position = scope.object.position;\n\t\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t\tlet targetDistance = offset.length();\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0);\n\t\t\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\n\t\t\t\t\tpanLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t\tpanUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n\t\t\t\t\tpanUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n\t\t\t\t\tscope.enablePan = false;\n\t\t\t\t}\n\t\t\t};\n\t\t}();\n\t\tfunction dollyIn(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale /= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\tfunction dollyOut(dollyScale) {\n\t\t\tif (scope.object instanceof THREE.PerspectiveCamera) {\n\t\t\t\tscale *= dollyScale;\n\t\t\t}\n\t\t\telse if (scope.object instanceof THREE.OrthographicCamera) {\n\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\t\tfunction handleMouseDownRotate(event) {\n\t\t\trotateStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownDolly(event) {\n\t\t\tdollyStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseDownPan(event) {\n\t\t\tpanStart.set(event.clientX, event.clientY);\n\t\t}\n\t\tfunction handleMouseMoveRotate(event) {\n\t\t\trotateEnd.set(event.clientX, event.clientY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMoveDolly(event) {\n\t\t\tdollyEnd.set(event.clientX, event.clientY);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseMovePan(event) {\n\t\t\tpanEnd.set(event.clientX, event.clientY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleMouseUp(event) {\n\t\t}\n\t\tfunction handleMouseWheel(event) {\n\t\t\tif (event.deltaY < 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (event.deltaY > 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleKeyDown(event) {\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan(0, scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan(0, -scope.keyPanSpeed);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan(scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan(-scope.keyPanSpeed, 0);\n\t\t\t\t\tscope.update();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfunction handleTouchStartRotate(event) {\n\t\t\trotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchStartDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyStart.set(0, distance);\n\t\t}\n\t\tfunction handleTouchStartPan(event) {\n\t\t\tpanStart.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t}\n\t\tfunction handleTouchMoveRotate(event) {\n\t\t\trotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart);\n\t\t\tlet element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\t\t\trotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed);\n\t\t\trotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed);\n\t\t\trotateStart.copy(rotateEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMoveDolly(event) {\n\t\t\tlet dx = event.touches[0].pageX - event.touches[1].pageX;\n\t\t\tlet dy = event.touches[0].pageY - event.touches[1].pageY;\n\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\tdollyEnd.set(0, distance);\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\t\t\telse if (dollyDelta.y < 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchMovePan(event) {\n\t\t\tpanEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n\t\t\tpanDelta.subVectors(panEnd, panStart);\n\t\t\tpan(panDelta.x, panDelta.y);\n\t\t\tpanStart.copy(panEnd);\n\t\t\tscope.update();\n\t\t}\n\t\tfunction handleTouchEnd(event) {\n\t\t}\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\t\tfunction onMouseDown(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.button) {\n\t\t\t\tcase scope.mouseButtons.ORBIT:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownRotate(event);\n\t\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.ZOOM:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownDolly(event);\n\t\t\t\t\tstate = STATE.DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase scope.mouseButtons.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseDownPan(event);\n\t\t\t\t\tstate = STATE.PAN;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tdocument.addEventListener(\"mousemove\", onMouseMove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", onMouseUp, false);\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onMouseMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (state) {\n\t\t\t\tcase STATE.ROTATE:\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.DOLLY:\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase STATE.PAN:\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleMouseMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tfunction onMouseUp(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleMouseUp(event);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove, false);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp, false);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onMouseWheel(event) {\n\t\t\tif (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE))\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\thandleMouseWheel(event);\n\t\t\tscope.dispatchEvent(startEvent); // not sure why these are here...\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t}\n\t\tfunction onKeyDown(event) {\n\t\t\tif (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\thandleKeyDown(event);\n\t\t}\n\t\tfunction onTouchStart(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartRotate(event);\n\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartDolly(event);\n\t\t\t\t\tstate = STATE.TOUCH_DOLLY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\thandleTouchStartPan(event);\n\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tscope.dispatchEvent(startEvent);\n\t\t\t}\n\t\t}\n\t\tfunction onTouchMove(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\tswitch (event.touches.length) {\n\t\t\t\tcase 1:// one-fingered touch: rotate\n\t\t\t\t\tif (scope.enableRotate === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_ROTATE)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveRotate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:// two-fingered touch: dolly\n\t\t\t\t\tif (scope.enableZoom === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_DOLLY)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMoveDolly(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:// three-fingered touch: pan\n\t\t\t\t\tif (scope.enablePan === false)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (state !== STATE.TOUCH_PAN)\n\t\t\t\t\t\treturn; // is this needed?...\n\t\t\t\t\thandleTouchMovePan(event);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tfunction onTouchEnd(event) {\n\t\t\tif (scope.enabled === false)\n\t\t\t\treturn;\n\t\t\thandleTouchEnd(event);\n\t\t\tscope.dispatchEvent(endEvent);\n\t\t\tstate = STATE.NONE;\n\t\t}\n\t\tfunction onContextMenu(event) {\n\t\t\tif (scope.enabled === false || scope.enablePan === false)\n\t\t\t\treturn;\n\t\t\tevent.preventDefault();\n\t\t}\n\t\t//\n\t\tscope.domElement.addEventListener(\"contextmenu\", onContextMenu, false);\n\t\tscope.domElement.addEventListener(\"mousedown\", onMouseDown, false);\n\t\tscope.domElement.addEventListener(\"wheel\", onMouseWheel, false);\n\t\tscope.domElement.addEventListener(\"touchstart\", onTouchStart, false);\n\t\tscope.domElement.addEventListener(\"touchend\", onTouchEnd, false);\n\t\tscope.domElement.addEventListener(\"touchmove\", onTouchMove, false);\n\t\twindow.addEventListener(\"keydown\", onKeyDown, false);\n\t\t// force an update at start\n\t\tthis.update();\n\t}\n}\n\nfunction createOrbitControls(skinViewer) {\n\tlet control = new OrbitControls(skinViewer.camera, skinViewer.renderer.domElement);\n\n\t// default configuration\n\tcontrol.enablePan = false;\n\tcontrol.target = new THREE.Vector3(0, -12, 0);\n\tcontrol.minDistance = 10;\n\tcontrol.maxDistance = 256;\n\tcontrol.update();\n\n\treturn control;\n}\n\nexport { OrbitControls, createOrbitControls };\n"],"names":["toFaceVertices","x1","y1","x2","y2","w","h","THREE","toSkinVertices","toCapeVertices","addVertices","box","top","bottom","left","front","right","back","faceVertexUvs","esp","SkinObject","slim","layer1Material","layer2Material","head","headBox","headMesh","add","head2Box","head2Mesh","renderOrder","body","bodyBox","bodyMesh","body2Box","body2Mesh","position","y","rightArm","rightArmPivot","rightArmBox","rightArmMesh","rightArm2Box","rightArm2Mesh","x","leftArm","leftArmPivot","leftArmBox","leftArmMesh","leftArm2Box","leftArm2Mesh","rightLeg","rightLegPivot","rightLegBox","rightLegMesh","rightLeg2Box","rightLeg2Mesh","leftLeg","leftLegPivot","leftLegBox","leftLegMesh","leftLeg2Box","leftLeg2Mesh","CapeObject","capeMaterial","capeBox","cape","z","PlayerObject","skin","visible","rotation","Math","PI","invokeAnimation","animation","player","time","CompositeAnimation","play","Function","AnimationHandle","paused","_paused","speed","_speed","_lastChange","_lastChangeX","dt","handles","Set","handle","remove","delete","forEach","WalkingAnimation","sin","basicArmRotationZ","cos","basicCapeRotationX","RunningAnimation","RotatingAnimation","copyImage","context","sX","sY","dX","dY","flipHorizontal","imgData","getImageData","index","index2","pA1","data","pA2","pA3","pA4","pB1","pB2","pB3","pB4","putImageData","convertSkinTo1_8","width","scale","copySkin","SkinViewer","options","domElement","animationPaused","animationTime","disposed","skinImg","Image","skinCanvas","document","createElement","skinTexture","magFilter","minFilter","capeImg","capeCanvas","capeTexture","map","side","transparent","opacity","alphaTest","scene","camera","renderer","angleRot","alpha","antialias","setSize","getShaderInfoLog","appendChild","playerObject","crossOrigin","onerror","console","error","src","onload","isOldFormat","height","skinContext","getContext","clearRect","drawImage","needsUpdate","capeContext","skinUrl","capeUrl","draw","requestAnimationFrame","render","aspect","updateProjectionMatrix","removeChild","dispose","url","getSize","newWidth","newHeight","OrbitControls","object","undefined","enabled","target","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","ZOOM","MIDDLE","PAN","target0","clone","position0","zoom0","zoom","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","copy","scope","reset","dispatchEvent","changeEvent","update","STATE","NONE","offset","quat","setFromUnitVectors","up","quatInverse","inverse","lastPosition","lastQuaternion","sub","applyQuaternion","setFromVector3","state","getAutoRotationAngle","sphericalDelta","max","min","makeSafe","radius","panOffset","setFromSpherical","lookAt","set","zoomChanged","distanceToSquared","EPS","dot","quaternion","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","type","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY","TOUCH_PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","rotateLeft","angle","rotateUp","panLeft","v","distance","objectMatrix","setFromMatrixColumn","multiplyScalar","panUp","pan","deltaX","deltaY","element","targetDistance","length","tan","fov","clientHeight","matrix","clientWidth","warn","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","event","clientX","clientY","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","subVectors","handleMouseMoveDolly","handleMouseMovePan","handleMouseWheel","handleKeyDown","keyCode","handleTouchStartRotate","touches","pageX","pageY","handleTouchStartDolly","dx","dy","sqrt","handleTouchStartPan","handleTouchMoveRotate","handleTouchMoveDolly","handleTouchMovePan","button","preventDefault","addEventListener","handleMouseUp","stopPropagation","handleTouchEnd","createOrbitControls","skinViewer","control"],"mappings":"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"} \ No newline at end of file