123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- var spineDemos = {
- HOVER_COLOR_INNER: new spine.Color(0.478, 0, 0, 0.25),
- HOVER_COLOR_OUTER: new spine.Color(1, 1, 1, 1),
- NON_HOVER_COLOR_INNER: new spine.Color(0.478, 0, 0, 0.5),
- NON_HOVER_COLOR_OUTER: new spine.Color(1, 0, 0, 0.8),
- demos: [],
- loopRunning: false,
- canvases: [],
- downloader: new spine.Downloader(),
- path: "assets/"
- };
- window.onerror = function (msg, url, lineNo, columnNo, error) {
- var string = msg.toLowerCase();
- var substring = "script error";
- if (string.indexOf(substring) > -1)
- alert('Script Error: See Browser Console for Detail');
- else {
- var message = [
- 'Message: ' + msg,
- 'URL: ' + url,
- 'Line: ' + lineNo,
- 'Column: ' + columnNo,
- 'Error object: ' + JSON.stringify(error)
- ].join(' - ');
- alert(message);
- }
- return false;
- };
- (function () {
- var timeKeeper = new spine.TimeKeeper();
- function loop() {
- timeKeeper.update();
- if (spineDemos.log) console.log(timeKeeper.delta + ", " + timeKeeper.framesPerSecond);
- requestAnimationFrame(loop);
- var demos = spineDemos.demos;
- for (var i = 0; i < demos.length; i++) {
- var demo = demos[i];
- checkElementVisible(demo);
- renderDemo(demo);
- }
- }
- function renderDemo(demo) {
- if (demo.visible) {
- var canvas = demo.canvas;
- if (canvas.parentElement != demo.placeholder) {
- $(canvas).detach();
- demo.placeholder.appendChild(canvas);
- }
- let complete = demo.assetManager.isLoadingComplete();
- if (complete) {
- if (!demo.loaded) {
- demo.loaded = true;
- demo.loadingComplete();
- }
- if (spineDemos.log) console.log("Rendering: " + canvas.id);
- demo.render();
- }
- demo.loadingScreen.draw(complete);
- }
- }
- function checkElementVisible(demo) {
- const rect = demo.placeholder.getBoundingClientRect();
- const windowHeight = (window.innerHeight || document.documentElement.clientHeight);
- const windowWidth = (window.innerWidth || document.documentElement.clientWidth);
- const vertInView = (rect.top <= windowHeight * 1.1) && ((rect.top + rect.height) >= windowHeight * -0.1);
- const horInView = (rect.left <= windowWidth * 1.1) && ((rect.left + rect.width) >= windowWidth * -0.1);
- demo.visible = (vertInView && horInView);
- }
- function createCanvases(numCanvases) {
- for (var i = 0; i < numCanvases; i++) {
- var canvas = document.createElement("canvas");
- canvas.width = 1; canvas.height = 1;
- canvas.context = new spine.ManagedWebGLRenderingContext(canvas, { alpha: false });
- canvas.id = "canvas-" + i;
- spineDemos.canvases.push(canvas);
- }
- }
- spineDemos.init = function () {
- var numCanvases = 5;
- var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
- var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1;
- if (isFirefox && isAndroid) numCanvases = 2;
- createCanvases(numCanvases);
- loadSliders();
- requestAnimationFrame(loop);
- }
- spineDemos.addDemo = function (demo, placeholder) {
- var canvas = spineDemos.canvases[spineDemos.demos.length % spineDemos.canvases.length];
- demo(canvas);
- demo.placeholder = placeholder;
- demo.canvas = canvas;
- demo.visible = false;
- var renderer = new spine.SceneRenderer(canvas, canvas.context.gl);
- demo.loadingScreen = new spine.LoadingScreen(renderer);
- $(window).on('DOMContentLoaded load resize scroll', function () {
- checkElementVisible(demo);
- renderDemo(demo);
- });
- checkElementVisible(demo);
- spineDemos.demos.push(demo);
- }
- var coords = new spine.Vector3();
- var mouse = new spine.Vector3();
- spineDemos.closest = function (canvas, renderer, skeleton, controlBones, hoverTargets, x, y) {
- mouse.set(x, canvas.clientHeight - y, 0)
- var bestDistance = 24, index = 0;
- var best;
- for (var i = 0; i < controlBones.length; i++) {
- hoverTargets[i] = null;
- let bone = skeleton.findBone(controlBones[i]);
- let distance = renderer.camera.worldToScreen(
- coords.set(bone.worldX, bone.worldY, 0),
- canvas.clientWidth, canvas.clientHeight).distance(mouse);
- if (distance < bestDistance) {
- bestDistance = distance;
- best = bone;
- index = i;
- }
- }
- if (best) hoverTargets[index] = best;
- return best;
- };
- var position = new spine.Vector3();
- spineDemos.dragged = function (canvas, renderer, target, x, y) {
- if (target) {
- x = spine.MathUtils.clamp(x, 0, canvas.clientWidth)
- y = spine.MathUtils.clamp(y, 0, canvas.clientHeight);
- renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.clientWidth, canvas.clientHeight);
- if (target.parent !== null) {
- target.parent.worldToLocal(position.set(coords.x, coords.y));
- target.x = position.x;
- target.y = position.y;
- } else {
- target.x = coords.x;
- target.y = coords.y;
- }
- }
- };
- loadSliders = function () {
- $(window).resize(function () {
- $(".slider").each(function () {
- $(this).data("slider").resized();
- });
- });
- $(".slider").each(function () {
- var div = $(this), handle = $("<div/>").appendTo(div);
- var bg1, bg2;
- if (div.hasClass("filled")) {
- bg1 = $("<span/>").appendTo(div)[0].style;
- bg2 = $("<span/>").appendTo(div)[0].style;
- }
- var hw = handle.width(), value = 0, object, lastX;
- handle = handle[0].style;
- positionHandle(0);
- function positionHandle(percent) {
- var w = div.width();
- var x = Math.round((w - hw - 3) * percent + 1);
- if (x != lastX) {
- lastX = x;
- handle.transform = "translateX(" + x + "px)";
- if (bg1) {
- var w1 = x + hw / 2;
- bg1.width = w1 + "px";
- bg2.width = (w - w1) + "px";
- bg2.left = w1 + "px";
- }
- }
- value = percent;
- }
- function mouseEvent(e) {
- var x = e.pageX;
- if (!x && e.originalEvent.touches) x = e.originalEvent.touches[0].pageX;
- var percent = Math.max(0, Math.min(1, (x - div.offset().left - hw / 2) / (div.width() - hw - 2)));
- positionHandle(percent);
- if (object.changed) object.changed(percent);
- }
- function clearEvents() {
- $(document).off("mouseup.slider mousemove.slider touchmove.slider touchend.slider");
- }
- div.on("mousedown touchstart", function (e) {
- mouseEvent(e);
- e.preventDefault(); // Disable text selection.
- $(document).on("mousemove.slider touchmove.slider", mouseEvent).on("mouseup.slider touchend.slider", clearEvents);
- });
- div.data("slider", object = {
- set: positionHandle,
- get: function () { return value; },
- resized: function () {
- lastX = null;
- positionHandle(value);
- }
- });
- });
- }
- })();
|