Browse Source

[ts] Player updates.

* If no config animation, start paused and set one when first clicked (showControls only).
* Updated player editor to 4.0.
* Don't name example index.html to make it easier to reach other files in same dir.
* Adjust CSS.
Nathan Sweet 4 years ago
parent
commit
b044bdbf47

File diff suppressed because it is too large
+ 2 - 3
spine-ts/build/spine-all.js


File diff suppressed because it is too large
+ 0 - 0
spine-ts/build/spine-all.js.map


File diff suppressed because it is too large
+ 2 - 3
spine-ts/build/spine-player.js


File diff suppressed because it is too large
+ 0 - 0
spine-ts/build/spine-player.js.map


+ 1 - 1
spine-ts/player/example/index.html → spine-ts/player/example/example.html

@@ -3,7 +3,7 @@
 <head>
 	<meta charset="utf-8">
 	<script src="../../build/spine-player.js"></script>
-	<link rel="stylesheet" href="../css/spine-player.css">
+	<link rel="stylesheet" href="../css/spine-player.xscss">
 	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 </head>
 

+ 31 - 19
spine-ts/player/src/Player.ts

@@ -209,7 +209,6 @@ module spine {
 			this.bg.setFromString(config.backgroundColor);
 			this.bgFullscreen.setFromString(config.fullScreenBackgroundColor);
 
-			this.parent.style.position = "relative";
 			this.parent.appendChild(this.create());
 			if (!config.alpha) { // Prevents a flash before the first frame is drawn.
 				let hex = config.backgroundColor;
@@ -233,9 +232,9 @@ module spine {
 			if (config.premultipliedAlpha === undefined) config.premultipliedAlpha = true;
 			if (!config.debug) config.debug = {} as any;
 			if (config.animations && config.animation && config.animations.indexOf(config.animation) < 0)
-				throw new Error("Animation '" + config.animation + "' is not in the config animation list: " + toString(this.config.animations));
+				throw new Error("Animation '" + config.animation + "' is not in the config animation list: " + toString(config.animations));
 			if (config.skins && config.skin && config.skins.indexOf(config.skin) < 0)
-				throw new Error("Default skin '" + config.skin + "' is not in the config skins list: " + toString(this.config.skins));
+				throw new Error("Default skin '" + config.skin + "' is not in the config skins list: " + toString(config.skins));
 			if (!config.viewport) config.viewport = {} as any;
 			if (!config.viewport.animations) config.viewport.animations = {};
 			if (config.viewport.debugRender === undefined) config.viewport.debugRender = false;
@@ -263,7 +262,7 @@ module spine {
 </div></div>` : "";
 
 			let dom = this.dom = createElement(
-				/*html*/`<div class="spine-player"><canvas class="spine-player-canvas" style="display:block;height:100%;width:100%"></canvas>${controls}</div>`);
+				/*html*/`<div class="spine-player" style="position:relative;height:100%"><canvas class="spine-player-canvas" style="display:block;width:100%;height:100%"></canvas>${controls}</div>`);
 
 			try {
 				// Setup the OpenGL context.
@@ -450,26 +449,29 @@ module spine {
 				if (skeletonData.animations.length == 1 || (config.animations && config.animations.length == 1)) this.animationButton.classList.add("spine-player-hidden");
 			}
 
-			this.play();
-
 			if (config.success) config.success(this);
 
 			let entry = this.animationState.getCurrent(0);
 			if (!entry) {
-				if (this.config.animation)
-					this.setAnimation(this.config.animation);
-				else {
+				if (config.animation) {
+					entry = this.setAnimation(config.animation);
+					this.play();
+				} else {
 					entry = this.animationState.setEmptyAnimation(0);
 					entry.trackEnd = 100000000;
 					this.setViewport(entry.animation);
+					this.pause();
 				}
-			} else if (!this.currentViewport)
+			} else if (!this.currentViewport) {
 				this.setViewport(entry.animation);
+				this.play();
+			}
 		}
 
 		private setupInput () {
-			let controlBones = this.config.controlBones;
-			if (!controlBones.length && !this.config.showControls) return;
+			let config = this.config;
+			let controlBones = config.controlBones;
+			if (!controlBones.length && !config.showControls) return;
 			let selectedBones = this.selectedBones = new Array<Bone>(controlBones.length);
 			let canvas = this.canvas;
 			let input = new spine.webgl.Input(canvas);
@@ -506,7 +508,7 @@ module spine {
 				up: (x, y) => {
 					if (target)
 						target = null;
-					else if (this.config.showControls)
+					else if (config.showControls)
 						(this.paused ? this.play() : this.pause());
 				},
 				dragged: (x, y) => {
@@ -527,7 +529,7 @@ module spine {
 				moved: (x, y) => closest(x, y)
 			});
 
-			if (!this.config.showControls) return;
+			if (!config.showControls) return;
 
 			// For manual hover to work, we need to disable hidding controls if the mouse/touch entered the clickable area of a child of the controls.
 			// For this we need to register a mouse handler on the document and see if we are within the canvas area.
@@ -570,12 +572,22 @@ module spine {
 
 		play () {
 			this.paused = false;
-			if (this.config.showControls) {
+			let config = this.config;
+			if (config.showControls) {
 				this.cancelId = setTimeout(() => {
 					if (!this.paused) this.playerControls.classList.add("spine-player-controls-hidden");
 				}, 1000);
 				this.playButton.classList.remove("spine-player-button-icon-play");
 				this.playButton.classList.add("spine-player-button-icon-pause");
+
+				// If no config animation, set one when first clicked.
+				if (!config.animation) {
+					if (config.animations && config.animations.length)
+						config.animation = config.animations[0];
+					else if (this.skeleton.data.animations.length)
+						config.animation = this.skeleton.data.animations[0].name;
+					if (config.animation) this.setAnimation(config.animation);
+				}
 			}
 		}
 
@@ -844,10 +856,10 @@ module spine {
 			let popup = new Popup(this.dom, this.playerControls, /*html*/`
 <div class="spine-player-popup-title">Speed</div>
 <hr>
-<div class="spine-player-row" style="user-select: none; align-items: center; padding: 8px;">
+<div class="spine-player-row" style="align-items:center;padding:8px">
 <div class="spine-player-column">
-	<div class="spine-player-speed-slider" style="margin-bottom: 4px;"></div>
-	<div class="spine-player-row" style="justify-content: space-between;"><div>0.1x</div><div>1x</div><div>2x</div></div>
+	<div class="spine-player-speed-slider" style="margin-bottom:4px"></div>
+	<div class="spine-player-row" style="justify-content:space-between"><div>0.1x</div><div>1x</div><div>2x</div></div>
 </div>
 </div>`);
 			let slider = new Slider(2, 0.1, true);
@@ -994,7 +1006,7 @@ module spine {
 			} else {
 				this.error = true;
 				this.dom.appendChild(createElement(
-					/*html*/`<div class="spine-player-error" style="background:#000; color:#fff; position:absolute; top:0; width:100%; height:100%; display:flex; justify-content:center; align-items:center; overflow:auto; z-index:999">`
+					/*html*/`<div class="spine-player-error" style="background:#000;color:#fff;position:absolute;top:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;overflow:auto;z-index:999">`
 					+ message.replace("\n", "<br><br>") + `</div>`));
 				if (this.config.error) this.config.error(this, message);
 				throw (error ? error : new Error(message));

+ 6 - 8
spine-ts/player/src/PlayerEditor.ts

@@ -33,15 +33,15 @@ module spine {
 	export class SpinePlayerEditor {
 		private static DEFAULT_CODE =
 		`
-<script src="https://esotericsoftware.com/files/spine-player/3.7/spine-player.js"></script>
-<link rel="stylesheet" href="https://esotericsoftware.com/files/spine-player/3.7/spine-player.css">
+<script src="https://esotericsoftware.com/files/spine-player/4.0/spine-player.js"></script>
+<link rel="stylesheet" href="https://esotericsoftware.com/files/spine-player/4.0/spine-player.css">
 
 <div id="player-container" style="width: 100%; height: 100vh;"></div>
 
 <script>
 new spine.SpinePlayer("player-container", {
-	jsonUrl: "https://esotericsoftware.com/files/examples/spineboy/export/spineboy-pro.json",
-	atlasUrl: "https://esotericsoftware.com/files/examples/spineboy/export/spineboy-pma.atlas"
+	jsonUrl: "https://esotericsoftware.com/files/examples/4.0/spineboy/export/spineboy-pro.json",
+	atlasUrl: "https://esotericsoftware.com/files/examples/4.0/spineboy/export/spineboy-pma.atlas"
 });
 </script>
 		`.trim();
@@ -50,9 +50,7 @@ new spine.SpinePlayer("player-container", {
 `<html>
 <head>
 <style>
-body {
-	margin: 0px;
-}
+body { margin: 0px; }
 </style>
 </head>
 <body>`.trim()
@@ -60,7 +58,7 @@ body {
 		private code: any;
 		private player: HTMLIFrameElement;
 
-		constructor(parent: HTMLElement) {
+		constructor (parent: HTMLElement) {
 			this.render(parent);
 		}
 

Some files were not shown because too many files changed in this diff