-
Display Bones
+
Display Bones
diff --git a/spine-ts/webgl/demos/stretchy.js b/spine-ts/webgl/demos/stretchy.js
index 90d0d4d73..3d4aaef46 100644
--- a/spine-ts/webgl/demos/stretchy.js
+++ b/spine-ts/webgl/demos/stretchy.js
@@ -9,6 +9,7 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
var lastFrameTime = Date.now() / 1000;
var target = null;
var kneeFront, kneeBack;
+ var hoverTargets = [null, null, null];
var controlBones = ["front leg controller", "back leg controller", "hip"];
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(), temp3 = new spine.webgl.Vector3();
var kneePos = new spine.Vector2();
@@ -22,35 +23,7 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
renderer = new spine.webgl.SceneRenderer(canvas, gl);
assetManager = new spine.webgl.AssetManager(gl, pathPrefix);
- input = new spine.webgl.Input(canvas);
- input.addListener({
- down: function(x, y) {
- for (var i = 0; i < controlBones.length; i++) {
- var bone = skeleton.findBone(controlBones[i]);
- renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
- if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
- target = bone;
- }
- }
- },
- up: function(x, y) {
- target = null;
- },
- dragged: function(x, y) {
- if (target != null) {
- renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
- if (target.parent !== null) {
- target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y));
- target.x = temp2.x;
- target.y = temp2.y;
- } else {
- target.x = coords.x - skeleton.x;
- target.y = coords.y - skeleton.y;
- }
- }
- },
- moved: function (x, y) { }
- })
+ input = new spine.webgl.Input(canvas);
assetManager.loadTexture("stretchyman.png");
assetManager.loadText("stretchyman.json");
assetManager.loadText("stretchyman.atlas");
@@ -82,6 +55,7 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
renderer.skeletonDebugRenderer.drawMeshTriangles = false;
setupUI();
+ setupInput();
loadingComplete(canvas, render);
} else requestAnimationFrame(load);
@@ -89,12 +63,55 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
function setupUI() {
var checkbox = $("#stretchydemo-drawbones");
+ renderer.skeletonDebugRenderer.drawPaths = false;
+ renderer.skeletonDebugRenderer.drawBones = false;
checkbox.change(function() {
renderer.skeletonDebugRenderer.drawPaths = this.checked;
renderer.skeletonDebugRenderer.drawBones = this.checked;
});
}
+ function setupInput (){
+ input.addListener({
+ down: function(x, y) {
+ for (var i = 0; i < controlBones.length; i++) {
+ var bone = skeleton.findBone(controlBones[i]);
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
+ target = bone;
+ }
+ }
+ },
+ up: function(x, y) {
+ target = null;
+ },
+ dragged: function(x, y) {
+ if (target != null) {
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ if (target.parent !== null) {
+ target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y));
+ target.x = temp2.x;
+ target.y = temp2.y;
+ } else {
+ target.x = coords.x - skeleton.x;
+ target.y = coords.y - skeleton.y;
+ }
+ }
+ },
+ moved: function (x, y) {
+ for (var i = 0; i < controlBones.length; i++) {
+ var bone = skeleton.findBone(controlBones[i]);
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
+ hoverTargets[i] = bone;
+ } else {
+ hoverTargets[i] = null;
+ }
+ }
+ }
+ });
+ }
+
function centerKnee(kneeBone, hipBone, footBone) {
temp.set(footBone.worldX + skeleton.x, footBone.worldY + skeleton.y, 0)
.sub(temp3.set(hipBone.worldX + skeleton.x, hipBone.worldY + skeleton.y, 0));
@@ -126,14 +143,16 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
renderer.begin();
renderer.drawSkeleton(skeleton, true);
renderer.drawSkeletonDebug(skeleton, false, ["root", "front leg middle", "back leg middle"]);
+ gl.lineWidth(2);
for (var i = 0; i < controlBones.length; i++) {
var bone = skeleton.findBone(controlBones[i]);
- var colorInner = bone === target ? COLOR_INNER_SELECTED : COLOR_INNER;
- var colorOuter = bone === target ? COLOR_OUTER_SELECTED : COLOR_OUTER;
- renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner);
- renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter);
+ var colorInner = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER;
+ var colorOuter = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER;
+ renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner);
+ renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter);
}
- renderer.end();
+ renderer.end();
+ gl.lineWidth(1);
}
init();
diff --git a/spine-ts/webgl/demos/transformconstraint.html b/spine-ts/webgl/demos/transformconstraint.html
index ce548382a..4df06109c 100644
--- a/spine-ts/webgl/demos/transformconstraint.html
+++ b/spine-ts/webgl/demos/transformconstraint.html
@@ -16,7 +16,8 @@
-
Rotation Offset
+
Rotation Offset
+
Translation Mix
diff --git a/spine-ts/webgl/demos/transformconstraint.js b/spine-ts/webgl/demos/transformconstraint.js
index 38cb46966..8618e6b4e 100644
--- a/spine-ts/webgl/demos/transformconstraint.js
+++ b/spine-ts/webgl/demos/transformconstraint.js
@@ -6,12 +6,14 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
var canvas, gl, renderer, input, assetManager;
var skeleton, state, bounds;
- var lastFrameTime = Date.now() / 1000;
- var target = null;
- var wheel1;
+ var lastFrameTime = Date.now() / 1000;
+ var rotateHandle;
+ var target = null;
+ var hoverTargets = [null, null, null];
+ var controlBones = ["wheel2overlay", "wheel3overlay", "rotate-handle"];
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2();
var lastRotation = 0;
- var rotationOffset, mix, lastOffset = 0;
+ var rotationOffset, mix, lastOffset = 0, lastMix = 50;
function init () {
@@ -22,26 +24,6 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
renderer = new spine.webgl.SceneRenderer(canvas, gl);
assetManager = new spine.webgl.AssetManager(gl, pathPrefix);
input = new spine.webgl.Input(canvas);
- var getRotation = function(x, y) {
- renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
- var v = coords.sub(new spine.webgl.Vector3(wheel1.worldX, wheel1.worldY, 0)).normalize();
- var angle = Math.acos(v.x) * spine.MathUtils.radiansToDegrees;
- if (v.y < 0) angle = 360 - angle;
- return angle;
- }
- input.addListener({
- down: function(x, y) {
- lastRotation = getRotation(x, y);
- },
- up: function(x, y) { },
- dragged: function(x, y) {
- var rotation = getRotation(x, y);
- var delta = rotation - lastRotation;
- wheel1.rotation += delta;
- lastRotation = rotation;
- },
- moved: function (x, y) { }
- })
assetManager.loadTexture("tank.png");
assetManager.loadText("transformConstraint.json");
assetManager.loadText("tank.atlas");
@@ -65,7 +47,7 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data));
skeleton.setToSetupPose();
skeleton.updateWorldTransform();
- wheel1 = skeleton.findBone("wheel1");
+ rotateHandle = skeleton.findBone("rotate-handle");
renderer.camera.position.x = offset.x + bounds.x / 2;
renderer.camera.position.y = offset.y + bounds.y / 2;
@@ -73,8 +55,9 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
renderer.skeletonDebugRenderer.drawRegionAttachments = false;
renderer.skeletonDebugRenderer.drawMeshHull = false;
renderer.skeletonDebugRenderer.drawMeshTriangles = false;
-
+
setupUI();
+ setupInput();
loadingComplete(canvas, render);
} else requestAnimationFrame(load);
@@ -89,9 +72,75 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
skeleton.findTransformConstraint("wheel2").data.offsetRotation += delta;
skeleton.findTransformConstraint("wheel3").data.offsetRotation += delta;
$("#transformdemo-rotationoffset-label").text(val + "°");
+ }});
+
+ translationMix = $("#transformdemo-translationmix");
+ translationMix.slider({ range: "max", min: 0, max: 100, value: 50, slide: function () {
+ var val = translationMix.slider("value");
+ var delta = val - lastMix;
+ lastMix = val;
+ skeleton.findTransformConstraint("wheel1").translateMix += delta / 100;
+ $("#transformdemo-translationmix-label").text(val + "%");
}});
}
+ function setupInput() {
+ var getRotation = function(x, y) {
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ var wheel1 = skeleton.findBone("wheel1overlay");
+ var v = coords.sub(new spine.webgl.Vector3(wheel1.worldX, wheel1.worldY, 0)).normalize();
+ var angle = Math.acos(v.x) * spine.MathUtils.radiansToDegrees;
+ if (v.y < 0) angle = 360 - angle;
+ return angle;
+ }
+ input.addListener({
+ down: function(x, y) {
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ for (var i = 0; i < controlBones.length; i++) {
+ var bone = skeleton.findBone(controlBones[i]);
+ if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
+ target = bone;
+ if (target === rotateHandle) lastRotation = getRotation(x, y);
+ }
+ }
+ },
+ up: function(x, y) {
+ target = null;
+ },
+ dragged: function(x, y) {
+ if (target != null) {
+ if (target === rotateHandle) {
+ var rotation = getRotation(x, y);
+ var delta = rotation - lastRotation;
+ skeleton.findBone("wheel1").rotation += delta;
+ lastRotation = rotation;
+ } else {
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ if (target.parent !== null) {
+ target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y));
+ target.x = temp2.x;
+ target.y = temp2.y;
+ } else {
+ target.x = coords.x - skeleton.x;
+ target.y = coords.y - skeleton.y;
+ }
+ }
+ }
+ },
+ moved: function (x, y) {
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ for (var i = 0; i < controlBones.length; i++) {
+ var bone = skeleton.findBone(controlBones[i]);
+ if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
+ hoverTargets[i] = bone;
+ } else {
+ hoverTargets[i] = null;
+ }
+ }
+ }
+ })
+ }
+
function render () {
var now = Date.now() / 1000;
var delta = now - lastFrameTime;
@@ -109,11 +158,16 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
renderer.begin();
renderer.drawSkeleton(skeleton, true);
- renderer.drawSkeletonDebug(skeleton, false, ["root"]);
- var bone = wheel1;
- var colorInner = bone === target ? COLOR_INNER_SELECTED : COLOR_INNER;
- var colorOuter = bone === target ? COLOR_OUTER_SELECTED : COLOR_OUTER;
- renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter);
+ renderer.drawSkeletonDebug(skeleton, false, ["root", "rotate-handle"]);
+ gl.lineWidth(2);
+ for (var i = 0; i < controlBones.length; i++) {
+ var bone = skeleton.findBone(controlBones[i]);
+ var colorInner = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER;
+ var colorOuter = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER;
+ renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner);
+ renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter);
+ }
+ gl.lineWidth(1);
renderer.end();
}
diff --git a/spine-ts/webgl/demos/utils.js b/spine-ts/webgl/demos/utils.js
index cb9142e1b..3d4130272 100644
--- a/spine-ts/webgl/demos/utils.js
+++ b/spine-ts/webgl/demos/utils.js
@@ -1,5 +1,10 @@
var spineDemos;
(function(spineDemos) {
+ spineDemos.HOVER_COLOR_INNER = new spine.Color(0.478, 0, 0, 0.25);
+ spineDemos.HOVER_COLOR_OUTER = new spine.Color(1, 1, 1, 1);
+ spineDemos.NON_HOVER_COLOR_INNER = new spine.Color(0.478, 0, 0, 0.5);
+ spineDemos.NON_HOVER_COLOR_OUTER = new spine.Color(1, 0, 0, 0.8);
+
spineDemos.setupRendering = function (canvas, renderFunc) {
var isVisible = false;
diff --git a/spine-ts/webgl/demos/vine.html b/spine-ts/webgl/demos/vine.html
index ef317a177..2abab14ba 100644
--- a/spine-ts/webgl/demos/vine.html
+++ b/spine-ts/webgl/demos/vine.html
@@ -14,11 +14,8 @@
-
-
-
Spacing
-
-
Display Bones & Path
+
+
Display Bones & Path
diff --git a/spine-ts/webgl/demos/vine.js b/spine-ts/webgl/demos/vine.js
index 5ffcd5c10..fea16aea9 100644
--- a/spine-ts/webgl/demos/vine.js
+++ b/spine-ts/webgl/demos/vine.js
@@ -7,10 +7,11 @@ var vineDemo = function(pathPrefix, loadingComplete) {
var canvas, gl, renderer, input, assetManager;
var skeleton, state, bounds;
var lastFrameTime = Date.now() / 1000;
- var target = null;
+ var target = null;
+ var hoverTargets = [null, null, null, null, null];
var controlBones = ["vine-control1", "vine-control2", "vine-control3", "vine-control4"];
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2();
- var playButton, timeLine, spacing, isPlaying = true, playTime = 0;
+ var playButton, timeLine, isPlaying = true, playTime = 0;
function init () {
@@ -21,34 +22,6 @@ var vineDemo = function(pathPrefix, loadingComplete) {
renderer = new spine.webgl.SceneRenderer(canvas, gl);
assetManager = new spine.webgl.AssetManager(gl, pathPrefix);
input = new spine.webgl.Input(canvas);
- input.addListener({
- down: function(x, y) {
- for (var i = 0; i < controlBones.length; i++) {
- var bone = skeleton.findBone(controlBones[i]);
- renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
- if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
- target = bone;
- }
- }
- },
- up: function(x, y) {
- target = null;
- },
- dragged: function(x, y) {
- if (target != null) {
- renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
- if (target.parent !== null) {
- target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y));
- target.x = temp2.x;
- target.y = temp2.y;
- } else {
- target.x = coords.x - skeleton.x;
- target.y = coords.y - skeleton.y;
- }
- }
- },
- moved: function (x, y) { }
- })
assetManager.loadTexture("vine.png");
assetManager.loadText("vine.json");
assetManager.loadText("vine.atlas");
@@ -81,6 +54,7 @@ var vineDemo = function(pathPrefix, loadingComplete) {
renderer.skeletonDebugRenderer.drawMeshTriangles = false;
setupUI();
+ setupInput();
loadingComplete(canvas, render);
} else requestAnimationFrame(load);
@@ -114,12 +88,8 @@ var vineDemo = function(pathPrefix, loadingComplete) {
}
}});
- spacing = $("#vinedemo-spacing");
- spacing.slider({ range: "max", min: -100, max: 100, value: 0, slide: function () {
- skeleton.findPathConstraint("vine-path").spacing = spacing.slider("value");
- $("#vinedemo-spacing-label").text(skeleton.findPathConstraint("vine-path").spacing + "%");
- }});
-
+ renderer.skeletonDebugRenderer.drawPaths = false;
+ renderer.skeletonDebugRenderer.drawBones = false;
var checkbox = $("#vinedemo-drawbones");
checkbox.change(function() {
renderer.skeletonDebugRenderer.drawPaths = this.checked;
@@ -127,6 +97,47 @@ var vineDemo = function(pathPrefix, loadingComplete) {
});
}
+ function setupInput() {
+ input.addListener({
+ down: function(x, y) {
+ for (var i = 0; i < controlBones.length; i++) {
+ var bone = skeleton.findBone(controlBones[i]);
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
+ target = bone;
+ }
+ }
+ },
+ up: function(x, y) {
+ target = null;
+ },
+ dragged: function(x, y) {
+ if (target != null) {
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ if (target.parent !== null) {
+ target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y));
+ target.x = temp2.x;
+ target.y = temp2.y;
+ } else {
+ target.x = coords.x - skeleton.x;
+ target.y = coords.y - skeleton.y;
+ }
+ }
+ },
+ moved: function (x, y) {
+ for (var i = 0; i < controlBones.length; i++) {
+ var bone = skeleton.findBone(controlBones[i]);
+ renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
+ if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
+ hoverTargets[i] = bone;
+ } else {
+ hoverTargets[i] = null;
+ }
+ }
+ }
+ });
+ }
+
function render () {
var now = Date.now() / 1000;
var delta = now - lastFrameTime;
@@ -157,13 +168,15 @@ var vineDemo = function(pathPrefix, loadingComplete) {
renderer.begin();
renderer.drawSkeleton(skeleton, true);
renderer.drawSkeletonDebug(skeleton);
+ gl.lineWidth(2);
for (var i = 0; i < controlBones.length; i++) {
var bone = skeleton.findBone(controlBones[i]);
- var colorInner = bone === target ? COLOR_INNER_SELECTED : COLOR_INNER;
- var colorOuter = bone === target ? COLOR_OUTER_SELECTED : COLOR_OUTER;
- renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner);
- renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter);
+ var colorInner = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER;
+ var colorOuter = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER;
+ renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner);
+ renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter);
}
+ gl.lineWidth(1);
renderer.end();
}