2018-02-12 07:02:47 +01:00
|
|
|
// Use pure ES5 for max browser compatibility
|
|
|
|
|
|
|
|
|
|
var skinViewer, control, handles = {}, globalAnimationSpeed = 1;
|
|
|
|
|
|
2018-10-28 16:55:30 +01:00
|
|
|
var skinParts = {}
|
|
|
|
|
|
2018-02-12 07:02:47 +01:00
|
|
|
function el(id) {
|
2018-10-28 16:55:30 +01:00
|
|
|
return document.getElementById(id);
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function initSkinViewer() {
|
2018-10-28 16:55:30 +01:00
|
|
|
if (skinViewer instanceof skinview3d.SkinViewer) {
|
|
|
|
|
skinViewer.dispose();
|
|
|
|
|
handles = {};
|
|
|
|
|
control = undefined;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Reset animation speed
|
|
|
|
|
el('speed').value = globalAnimationSpeed = 1;
|
|
|
|
|
|
|
|
|
|
skinViewer = new skinview3d.SkinViewer({
|
|
|
|
|
domElement: el("skin_container"),
|
|
|
|
|
width: el('width').value,
|
|
|
|
|
height: el('height').value,
|
|
|
|
|
skinUrl: el('skin_url').value,
|
|
|
|
|
capeUrl: el('cape_url').value || null
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
skinViewer.camera.position.z = 70;
|
|
|
|
|
skinViewer.animation = new skinview3d.CompositeAnimation();
|
|
|
|
|
|
|
|
|
|
control = skinview3d.createOrbitControls(skinViewer);
|
|
|
|
|
|
|
|
|
|
var parts = skinViewer.playerObject.skin;
|
|
|
|
|
|
|
|
|
|
// set inner parts
|
|
|
|
|
skinParts.head = parts.head.innerLayer;
|
|
|
|
|
skinParts.body = parts.body.innerLayer;
|
|
|
|
|
skinParts.leftArm = parts.leftArm.innerLayer;
|
|
|
|
|
skinParts.rightArm = parts.rightArm.innerLayer;
|
|
|
|
|
skinParts.leftLeg = parts.leftLeg.innerLayer;
|
|
|
|
|
skinParts.rightLeg = parts.rightLeg.innerLayer;
|
|
|
|
|
|
|
|
|
|
// set outter parts
|
|
|
|
|
skinParts.head2 = parts.head.outerLayer;
|
|
|
|
|
skinParts.body2 = parts.body.outerLayer;
|
|
|
|
|
skinParts.leftArm2 = parts.leftArm.outerLayer;
|
|
|
|
|
skinParts.rightArm2 = parts.rightArm.outerLayer;
|
|
|
|
|
skinParts.leftLeg2 = parts.leftLeg.outerLayer;
|
|
|
|
|
skinParts.rightLeg2 = parts.rightLeg.outerLayer;
|
|
|
|
|
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function hotReloadTextures() {
|
2018-10-28 16:55:30 +01:00
|
|
|
var capeObject = skinViewer.playerObject.cape;
|
2018-10-28 23:02:32 +01:00
|
|
|
var capeUrl = el('cape_url').value;
|
|
|
|
|
var skinUrl = el('skin_url').value;
|
2018-10-28 16:55:30 +01:00
|
|
|
|
|
|
|
|
// I've noted there is not a good way to set the cape to null
|
2018-10-28 23:02:32 +01:00
|
|
|
// so we hide it as work around but need to raise an issue
|
|
|
|
|
if (capeUrl === "") {
|
2018-10-28 16:55:30 +01:00
|
|
|
capeObject.visible = false;
|
2018-10-28 23:02:32 +01:00
|
|
|
} else {
|
|
|
|
|
skinViewer.capeUrl = capeUrl;
|
2018-10-28 16:55:30 +01:00
|
|
|
}
|
|
|
|
|
|
2018-10-28 23:02:32 +01:00
|
|
|
skinViewer.skinUrl = skinUrl;
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function resizeSkinViewer() {
|
2018-10-28 16:55:30 +01:00
|
|
|
skinViewer.width = el('width').value;
|
|
|
|
|
skinViewer.height = el('height').value;
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function pause() {
|
2018-10-28 16:55:30 +01:00
|
|
|
skinViewer.animationPaused = !skinViewer.animationPaused;
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function walk() {
|
2018-10-28 16:55:30 +01:00
|
|
|
if (handles.run) {
|
|
|
|
|
handles.run.remove();
|
|
|
|
|
delete handles.run;
|
|
|
|
|
}
|
2018-02-12 07:02:47 +01:00
|
|
|
|
2018-10-28 16:55:30 +01:00
|
|
|
handles.walk = handles.walk || skinViewer.animation.add(skinview3d.WalkingAnimation);
|
|
|
|
|
handles.walk.speed = globalAnimationSpeed;
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function run() {
|
2018-10-28 16:55:30 +01:00
|
|
|
if (handles.walk) {
|
|
|
|
|
handles.walk.remove();
|
|
|
|
|
delete handles.walk;
|
|
|
|
|
}
|
2018-02-12 07:02:47 +01:00
|
|
|
|
2018-10-28 16:55:30 +01:00
|
|
|
handles.run = handles.run || skinViewer.animation.add(skinview3d.RunningAnimation);
|
|
|
|
|
handles.run.speed = globalAnimationSpeed;
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function rotate() {
|
2018-10-28 16:55:30 +01:00
|
|
|
if (handles.rotate) {
|
|
|
|
|
handles.rotate.paused = !handles.rotate.paused;
|
|
|
|
|
} else {
|
|
|
|
|
handles.rotate = skinViewer.animation.add(skinview3d.RotatingAnimation);
|
|
|
|
|
handles.rotate.speed = globalAnimationSpeed;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function togglePart(partName) {
|
|
|
|
|
skinParts[partName].visible = !skinParts[partName].visible;
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function setGlobalAnimationSpeed() {
|
2018-10-28 16:55:30 +01:00
|
|
|
var currentSpeed = el('speed').value;
|
2018-02-12 07:02:47 +01:00
|
|
|
|
2018-10-28 16:55:30 +01:00
|
|
|
if (!isNaN(currentSpeed)) {
|
|
|
|
|
globalAnimationSpeed = currentSpeed;
|
2018-02-12 07:02:47 +01:00
|
|
|
|
2018-10-28 16:55:30 +01:00
|
|
|
for (var key in handles) {
|
|
|
|
|
handles[key].speed = currentSpeed;
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-02-12 07:02:47 +01:00
|
|
|
}
|