[ts] Modularize player, add package.json files, fix up module paths.

This commit is contained in:
Mario Zechner 2021-08-25 21:00:17 +02:00
parent 79f0abf765
commit 17c342ac61
33 changed files with 1251 additions and 10010 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -61,6 +61,14 @@
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@esotericsoftware/spine-canvas": {
"resolved": "spine-canvas",
"link": true
},
"node_modules/@esotericsoftware/spine-core": {
"resolved": "spine-core",
"link": true
},
"node_modules/@esotericsoftware/spine-webgl": { "node_modules/@esotericsoftware/spine-webgl": {
"resolved": "spine-webgl", "resolved": "spine-webgl",
"link": true "link": true
@ -5398,13 +5406,17 @@
"spine-canvas": { "spine-canvas": {
"name": "@esotericsoftware/spine-canvas", "name": "@esotericsoftware/spine-canvas",
"version": "4.0.1", "version": "4.0.1",
"extraneous": true, "license": "LicenseRef-LICENSE",
"license": "LicenseRef-LICENSE" "devDependencies": {
"npx": "^10.2.2",
"rollup": "^2.56.2",
"rollup-plugin-dts": "^3.0.2",
"typescript": "^4.3.5"
}
}, },
"spine-core": { "spine-core": {
"name": "@esotericsoftware/spine-core", "name": "@esotericsoftware/spine-core",
"version": "4.0.1", "version": "4.0.1",
"extraneous": true,
"license": "LicenseRef-LICENSE" "license": "LicenseRef-LICENSE"
}, },
"spine-webgl": { "spine-webgl": {
@ -5443,6 +5455,18 @@
"js-tokens": "^4.0.0" "js-tokens": "^4.0.0"
} }
}, },
"@esotericsoftware/spine-canvas": {
"version": "file:spine-canvas",
"requires": {
"npx": "^10.2.2",
"rollup": "^2.56.2",
"rollup-plugin-dts": "^3.0.2",
"typescript": "^4.3.5"
}
},
"@esotericsoftware/spine-core": {
"version": "file:spine-core"
},
"@esotericsoftware/spine-webgl": { "@esotericsoftware/spine-webgl": {
"version": "file:spine-webgl" "version": "file:spine-webgl"
}, },

View File

@ -3,7 +3,11 @@
"version": "4.0.1", "version": "4.0.1",
"description": "The official Spine Runtimes for the web.", "description": "The official Spine Runtimes for the web.",
"scripts": { "scripts": {
"build": "npx tsc -b --clean; tsc -b; npx rollup -c rollup.config.js --sourcemap;" "build": "rm -rf build && npm run build:core && npm run build:canvas && npm run build:webgl && npm run build:player",
"build:core": "npx esbuild --bundle spine-core/src/index.ts --tsconfig=spine-core/tsconfig.json --minify --sourcemap --outfile=build/spine-core.js --format=iife --global-name=\"spine\"",
"build:canvas": "npx esbuild --bundle spine-canvas/src/index.ts --tsconfig=spine-canvas/tsconfig.json --minify --sourcemap --outfile=build/spine-canvas.js --format=iife --global-name=\"spine\"",
"build:webgl": "npx esbuild --bundle spine-webgl/src/index.ts --tsconfig=spine-webgl/tsconfig.json --minify --sourcemap --outfile=build/spine-webgl.js --format=iife --global-name=\"spine\"",
"build:player": "npx esbuild --bundle spine-player/src/index.ts --tsconfig=spine-player/tsconfig.json --sourcemap --outfile=build/spine-player.js --format=iife --global-name=\"spine\""
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -3,6 +3,10 @@
"version": "4.0.1", "version": "4.0.1",
"description": "The official Spine Runtimes for the web.", "description": "The official Spine Runtimes for the web.",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist/**/*"
],
"scripts": {}, "scripts": {},
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { AssetManagerBase, Downloader } from "spine-core"; import { AssetManagerBase, Downloader } from "@esotericsoftware/spine-core"
import { CanvasTexture } from "./CanvasTexture"; import { CanvasTexture } from "./CanvasTexture";
export class AssetManager extends AssetManagerBase { export class AssetManager extends AssetManagerBase {

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Texture, TextureFilter, TextureWrap } from "spine-core"; import { Texture, TextureFilter, TextureWrap } from "@esotericsoftware/spine-core";
export class CanvasTexture extends Texture { export class CanvasTexture extends Texture {
constructor(image: HTMLImageElement) { constructor(image: HTMLImageElement) {

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Utils, Color, Skeleton, RegionAttachment, TextureAtlasRegion, BlendMode, MeshAttachment, Slot } from "spine-core"; import { Utils, Color, Skeleton, RegionAttachment, TextureAtlasRegion, BlendMode, MeshAttachment, Slot } from "@esotericsoftware/spine-core";
import { CanvasTexture } from "./CanvasTexture"; import { CanvasTexture } from "./CanvasTexture";
export class SkeletonRenderer { export class SkeletonRenderer {

View File

@ -2,7 +2,7 @@ export * from "./AssetManager";
export * from "./CanvasTexture"; export * from "./CanvasTexture";
export * from "./SkeletonRenderer"; export * from "./SkeletonRenderer";
export * from "spine-core"; export * from "@esotericsoftware/spine-core"
// Before modularization, we would expose spine-core on the global // Before modularization, we would expose spine-core on the global
// `spine` object, and spine-canvas on the global `spine.canvas` object. // `spine` object, and spine-canvas on the global `spine.canvas` object.
@ -23,9 +23,5 @@ export * from "spine-core";
// //
// This will break if esbuild renames the variable `src_exports` pointing to // This will break if esbuild renames the variable `src_exports` pointing to
// the exports object. // the exports object.
declare global {
var spine: any;
}
let exports = eval("src_exports"); let exports = eval("src_exports");
exports.canvas = exports; if (exports) exports.canvas = exports;

View File

@ -5,7 +5,7 @@
"rootDir": "./src", "rootDir": "./src",
"outDir": "./dist", "outDir": "./dist",
"paths": { "paths": {
"spine-core": [ "@esotericsoftware/spine-core": [
"../spine-core/src" "../spine-core/src"
] ]
} }

View File

@ -3,6 +3,10 @@
"version": "4.0.1", "version": "4.0.1",
"description": "The official Spine Runtimes for the web.", "description": "The official Spine Runtimes for the web.",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist/**/*"
],
"scripts": {}, "scripts": {},
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -0,0 +1,30 @@
{
"name": "@esotericsoftware/spine-player",
"version": "4.0.1",
"description": "The official Spine Runtimes for the web.",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist/**/*"
],
"scripts": {},
"repository": {
"type": "git",
"url": "git+https://github.com/esotericsoftware/spine-runtimes.git"
},
"keywords": [
"gamedev",
"animations",
"2d",
"spine",
"game-dev",
"runtimes",
"skeletal"
],
"author": "Esoteric Software LLC",
"license": "LicenseRef-LICENSE",
"bugs": {
"url": "https://github.com/esotericsoftware/spine-runtimes/issues"
},
"homepage": "https://github.com/esotericsoftware/spine-runtimes#readme"
}

View File

@ -27,7 +27,9 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
module spine { import { Animation, AnimationState, AnimationStateData, AtlasAttachmentLoader, Bone, Color, Downloader, MathUtils, MixBlend, MixDirection, Skeleton, SkeletonBinary, SkeletonData, SkeletonJson, StringMap, TextureAtlas, TextureFilter, TimeKeeper, TrackEntry, Vector2 } from "@esotericsoftware/spine-core"
import { AssetManager, GLTexture, Input, LoadingScreen, ManagedWebGLRenderingContext, ResizeMode, SceneRenderer, Vector3 } from "@esotericsoftware/spine-webgl"
export interface SpinePlayerConfig { export interface SpinePlayerConfig {
/* The URL of the skeleton JSON file (.json). */ /* The URL of the skeleton JSON file (.json). */
jsonUrl: string jsonUrl: string
@ -44,7 +46,7 @@ module spine {
/* Raw data URIs, mapping a path to base64 encoded raw data. When player's asset manager resolves the jsonUrl, binaryUrl, /* Raw data URIs, mapping a path to base64 encoded raw data. When player's asset manager resolves the jsonUrl, binaryUrl,
atlasUrl, or the image paths referenced in the atlas, it will first look for that path in the raw data URIs. This atlasUrl, or the image paths referenced in the atlas, it will first look for that path in the raw data URIs. This
allows embedding assets directly in HTML/JS. Default: none */ allows embedding assets directly in HTML/JS. Default: none */
rawDataURIs: Map<string> rawDataURIs: StringMap<string>
/* Optional: The name of the animation to be played. Default: empty animation */ /* Optional: The name of the animation to be played. Default: empty animation */
animation: string animation: string
@ -105,7 +107,7 @@ module spine {
transitionTime: number transitionTime: number
/* Optional: Viewports for specific animations. Default: none */ /* Optional: Viewports for specific animations. Default: none */
animations: Map<Viewport> animations: StringMap<Viewport>
} }
/* Optional: Whether the canvas is transparent, allowing the web page behind the canvas to show through when /* Optional: Whether the canvas is transparent, allowing the web page behind the canvas to show through when
@ -158,7 +160,7 @@ module spine {
/* Optional: The downloader used by the player's asset manager. Passing the same downloader to multiple players using the /* Optional: The downloader used by the player's asset manager. Passing the same downloader to multiple players using the
same assets ensures the assets are only downloaded once. Default: new instance */ same assets ensures the assets are only downloaded once. Default: new instance */
downloader: spine.Downloader downloader: Downloader
} }
export interface Viewport { export interface Viewport {
@ -180,10 +182,10 @@ module spine {
public parent: HTMLElement; public parent: HTMLElement;
public dom: HTMLElement; public dom: HTMLElement;
public canvas: HTMLCanvasElement; public canvas: HTMLCanvasElement;
public context: spine.webgl.ManagedWebGLRenderingContext; public context: ManagedWebGLRenderingContext;
public sceneRenderer: spine.webgl.SceneRenderer; public sceneRenderer: SceneRenderer;
public loadingScreen: spine.webgl.LoadingScreen; public loadingScreen: LoadingScreen;
public assetManager: spine.webgl.AssetManager; public assetManager: AssetManager;
public bg = new Color(); public bg = new Color();
public bgFullscreen = new Color(); public bgFullscreen = new Color();
@ -253,7 +255,7 @@ module spine {
} }
private validateConfig(config: SpinePlayerConfig) { private validateConfig(config: SpinePlayerConfig) {
if (!config) throw new Error("A configuration object must be passed to to new spine.SpinePlayer()."); if (!config) throw new Error("A configuration object must be passed to to new SpinePlayer().");
if ((config as any).skelUrl) config.binaryUrl = (config as any).skelUrl; if ((config as any).skelUrl) config.binaryUrl = (config as any).skelUrl;
if (!config.jsonUrl && !config.binaryUrl) throw new Error("A URL must be specified for the skeleton JSON or binary file."); if (!config.jsonUrl && !config.binaryUrl) throw new Error("A URL must be specified for the skeleton JSON or binary file.");
if (!config.atlasUrl) throw new Error("A URL must be specified for the atlas file."); if (!config.atlasUrl) throw new Error("A URL must be specified for the atlas file.");
@ -288,17 +290,17 @@ module spine {
try { try {
// Setup the OpenGL context. // Setup the OpenGL context.
this.canvas = findWithClass(dom, "spine-player-canvas") as HTMLCanvasElement; this.canvas = findWithClass(dom, "spine-player-canvas") as HTMLCanvasElement;
this.context = new spine.webgl.ManagedWebGLRenderingContext(this.canvas, { alpha: config.alpha }); this.context = new ManagedWebGLRenderingContext(this.canvas, { alpha: config.alpha });
// Setup the scene renderer and loading screen. // Setup the scene renderer and loading screen.
this.sceneRenderer = new spine.webgl.SceneRenderer(this.canvas, this.context, true); this.sceneRenderer = new SceneRenderer(this.canvas, this.context, true);
if (config.showLoading) this.loadingScreen = new spine.webgl.LoadingScreen(this.sceneRenderer); if (config.showLoading) this.loadingScreen = new LoadingScreen(this.sceneRenderer);
} catch (e) { } catch (e) {
this.showError("Sorry, your browser does not support WebGL.\nPlease use the latest version of Firefox, Chrome, Edge, or Safari.", e); this.showError("Sorry, your browser does not support \nPlease use the latest version of Firefox, Chrome, Edge, or Safari.", e);
} }
// Load the assets. // Load the assets.
this.assetManager = new spine.webgl.AssetManager(this.context, "", config.downloader); this.assetManager = new AssetManager(this.context, "", config.downloader);
if (config.rawDataURIs) { if (config.rawDataURIs) {
for (let path in config.rawDataURIs) for (let path in config.rawDataURIs)
this.assetManager.setRawDataURI(path, config.rawDataURIs[path]); this.assetManager.setRawDataURI(path, config.rawDataURIs[path]);
@ -415,7 +417,7 @@ module spine {
minFilter = TextureFilter.Linear; // Don't use mipmaps without anisotropic. minFilter = TextureFilter.Linear; // Don't use mipmaps without anisotropic.
page.texture.setFilters(minFilter, TextureFilter.Nearest); page.texture.setFilters(minFilter, TextureFilter.Nearest);
} }
if (minFilter != TextureFilter.Nearest && minFilter != TextureFilter.Linear) (page.texture as spine.webgl.GLTexture).update(true); if (minFilter != TextureFilter.Nearest && minFilter != TextureFilter.Linear) (page.texture as GLTexture).update(true);
} }
// Load skeleton data. // Load skeleton data.
@ -520,10 +522,10 @@ module spine {
let selectedBones = this.selectedBones = new Array<Bone>(controlBones.length); let selectedBones = this.selectedBones = new Array<Bone>(controlBones.length);
let canvas = this.canvas; let canvas = this.canvas;
let target: Bone = null; let target: Bone = null;
let offset = new spine.Vector2(); let offset = new Vector2();
let coords = new spine.webgl.Vector3(); let coords = new Vector3();
let mouse = new spine.webgl.Vector3(); let mouse = new Vector3();
let position = new spine.Vector2(); let position = new Vector2();
let skeleton = this.skeleton; let skeleton = this.skeleton;
let renderer = this.sceneRenderer; let renderer = this.sceneRenderer;
@ -550,7 +552,7 @@ module spine {
return best; return best;
}; };
new spine.webgl.Input(canvas).addListener({ new Input(canvas).addListener({
down: (x, y) => { down: (x, y) => {
target = closest(x, y); target = closest(x, y);
}, },
@ -720,7 +722,7 @@ module spine {
let steps = 100, stepTime = animation.duration ? animation.duration / steps : 0, time = 0; let steps = 100, stepTime = animation.duration ? animation.duration / steps : 0, time = 0;
let minX = 100000000, maxX = -100000000, minY = 100000000, maxY = -100000000; let minX = 100000000, maxX = -100000000, minY = 100000000, maxY = -100000000;
let offset = new spine.Vector2(), size = new spine.Vector2(); let offset = new Vector2(), size = new Vector2();
for (let i = 0; i < steps; i++, time += stepTime) { for (let i = 0; i < steps; i++, time += stepTime) {
animation.apply(this.skeleton, time, time, false, null, 1, MixBlend.setup, MixDirection.mixIn); animation.apply(this.skeleton, time, time, false, null, 1, MixBlend.setup, MixDirection.mixIn);
@ -762,7 +764,7 @@ module spine {
if (skeleton) { if (skeleton) {
// Resize the canvas. // Resize the canvas.
let renderer = this.sceneRenderer; let renderer = this.sceneRenderer;
renderer.resize(webgl.ResizeMode.Expand); renderer.resize(ResizeMode.Expand);
let playDelta = this.paused ? 0 : delta * this.speed; let playDelta = this.paused ? 0 : delta * this.speed;
if (config.frame) config.frame(this, playDelta); if (config.frame) config.frame(this, playDelta);
@ -1117,7 +1119,7 @@ module spine {
this.setValue(0); this.setValue(0);
let dragging = false; let dragging = false;
new spine.webgl.Input(this.slider).addListener({ new Input(this.slider).addListener({
down: (x, y) => { down: (x, y) => {
dragging = true; dragging = true;
this.value.classList.add("hovering"); this.value.classList.add("hovering");
@ -1180,8 +1182,7 @@ module spine {
.replace(/'/g, "&#39;"); .replace(/'/g, "&#39;");
} }
const BONE_INNER_OVER = new spine.Color(0.478, 0, 0, 0.25); const BONE_INNER_OVER = new Color(0.478, 0, 0, 0.25);
const BONE_OUTER_OVER = new spine.Color(1, 1, 1, 1); const BONE_OUTER_OVER = new Color(1, 1, 1, 1);
const BONE_INNER = new spine.Color(0.478, 0, 0, 0.5); const BONE_INNER = new Color(0.478, 0, 0, 0.5);
const BONE_OUTER = new spine.Color(1, 0, 0, 0.8); const BONE_OUTER = new Color(1, 0, 0, 0.8);
}

View File

@ -29,7 +29,6 @@
declare function CodeMirror(el: Element, config: any): void; declare function CodeMirror(el: Element, config: any): void;
module spine {
export class SpinePlayerEditor { export class SpinePlayerEditor {
private static DEFAULT_CODE = private static DEFAULT_CODE =
` `
@ -114,4 +113,3 @@ body { margin: 0px; }
}, 500); }, 500);
} }
} }
}

View File

@ -0,0 +1,27 @@
export * from './Player';
export * from './PlayerEditor';
export * from "@esotericsoftware/spine-core";
export * from "@esotericsoftware/spine-webgl";
// Before modularization, we would expose spine-core on the global
// `spine` object, and spine-webgl on the global `spine.webgl` object.
// This was used by clients when including spine-webgl via <script src="spine-webgl.js">
//
// Now with modularization and using esbuild for bundling, we need to emulate this old
// behaviour as to not break old clients.
//
// We pass `--global-name=spine` to esbuild. This will create an object containing
// all exports and assign it to the global variable called `spine`.
//
// That solves half the issue. We also need to assign the exports object to
// `spine.webgl`. esbuild creates a local variable called `scr_exports` pointing
// to the exports object. We get to it via eval, then assign it to itself, on a new
// property called `webgl`. The client can then access the APIs through `spine` and
// `spine.webgl` as before (with the caveat that both spine-core and spine-webgl are
// now in `spine` and `spine.webgl`).
//
// This will break if esbuild renames the variable `src_exports` pointing to
// the exports object.
let exports = eval("src_exports");
if (exports) exports.webgl = exports;

View File

@ -0,0 +1,30 @@
{
"extends": "../tsconfig.base.json",
"compilerOptions": {
"baseUrl": ".",
"rootDir": "./src",
"outDir": "./dist",
"paths": {
"@esotericsoftware/spine-core": [
"../spine-core/src"
],
"@esotericsoftware/spine-webgl": [
"../spine-webgl/src"
]
}
},
"include": [
"**/*.ts"
],
"exclude": [
"dist/**/*.d.ts"
],
"references": [
{
"path": "../spine-core"
},
{
"path": "../spine-webgl"
}
]
}

View File

@ -3,6 +3,10 @@
"version": "4.0.1", "version": "4.0.1",
"description": "The official Spine Runtimes for the web.", "description": "The official Spine Runtimes for the web.",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist/**/*"
],
"scripts": {}, "scripts": {},
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -27,14 +27,15 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { AssetManagerBase, Downloader } from "spine-core"; import { AssetManagerBase, Downloader } from "@esotericsoftware/spine-core"
import { ManagedWebGLRenderingContext } from "./WebGL"; import { ManagedWebGLRenderingContext } from "./WebGL";
import { GLTexture } from "./GLTexture";
export class AssetManager extends AssetManagerBase { export class AssetManager extends AssetManagerBase {
constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, pathPrefix: string = "", downloader: Downloader = null) { constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, pathPrefix: string = "", downloader: Downloader = null) {
super((image: HTMLImageElement | ImageBitmap) => { super((image: HTMLImageElement | ImageBitmap) => {
return new spine.webgl.GLTexture(context, image); return new GLTexture(context, image);
}, pathPrefix, downloader); }, pathPrefix, downloader);
} }
} }

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Texture, Disposable, Restorable, TextureFilter, TextureWrap } from "spine-core"; import { Texture, Disposable, Restorable, TextureFilter, TextureWrap } from "@esotericsoftware/spine-core";
import { ManagedWebGLRenderingContext } from "./WebGL"; import { ManagedWebGLRenderingContext } from "./WebGL";
export class GLTexture extends Texture implements Disposable, Restorable { export class GLTexture extends Texture implements Disposable, Restorable {

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Pool } from "spine-core"; import { Pool } from "@esotericsoftware/spine-core";
export class Input { export class Input {
element: HTMLElement; element: HTMLElement;
@ -38,7 +38,7 @@ export class Input {
private listeners = new Array<InputListener>(); private listeners = new Array<InputListener>();
touchesPool = new Pool<Touch>(() => { touchesPool = new Pool<Touch>(() => {
return new spine.webgl.Touch(0, 0, 0); return new Touch(0, 0, 0);
}); });
constructor(element: HTMLElement) { constructor(element: HTMLElement) {

View File

@ -27,6 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Color, TimeKeeper } from "@esotericsoftware/spine-core";
import { GLTexture } from "./GLTexture"; import { GLTexture } from "./GLTexture";
import { ResizeMode, SceneRenderer } from "./SceneRenderer"; import { ResizeMode, SceneRenderer } from "./SceneRenderer";
@ -44,9 +45,9 @@ export class LoadingScreen {
private angle = 0; private angle = 0;
private fadeOut = 0; private fadeOut = 0;
private fadeIn = 0; private fadeIn = 0;
private timeKeeper = new spine.TimeKeeper(); private timeKeeper = new TimeKeeper();
backgroundColor = new spine.Color(0.135, 0.135, 0.135, 1); backgroundColor = new Color(0.135, 0.135, 0.135, 1);
private tempColor = new spine.Color(); private tempColor = new Color();
constructor(renderer: SceneRenderer) { constructor(renderer: SceneRenderer) {
this.renderer = renderer; this.renderer = renderer;

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Disposable, Restorable } from "spine-core"; import { Disposable, Restorable } from "@esotericsoftware/spine-core";
import { Shader } from "./Shader"; import { Shader } from "./Shader";
import { ManagedWebGLRenderingContext } from "./WebGL"; import { ManagedWebGLRenderingContext } from "./WebGL";

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Disposable } from "spine-core"; import { Disposable } from "@esotericsoftware/spine-core";
import { GLTexture } from "./GLTexture"; import { GLTexture } from "./GLTexture";
import { Mesh, Position2Attribute, ColorAttribute, TexCoordAttribute, Color2Attribute } from "./Mesh"; import { Mesh, Position2Attribute, ColorAttribute, TexCoordAttribute, Color2Attribute } from "./Mesh";
import { Shader } from "./Shader"; import { Shader } from "./Shader";

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Color, Disposable, Skeleton, MathUtils, TextureAtlasRegion } from "spine-core"; import { Color, Disposable, Skeleton, MathUtils, TextureAtlasRegion } from "@esotericsoftware/spine-core";
import { OrthoCamera } from "./Camera"; import { OrthoCamera } from "./Camera";
import { GLTexture } from "./GLTexture"; import { GLTexture } from "./GLTexture";
import { PolygonBatcher } from "./PolygonBatcher"; import { PolygonBatcher } from "./PolygonBatcher";

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Disposable, Restorable } from "spine-core"; import { Disposable, Restorable } from "@esotericsoftware/spine-core";
import { ManagedWebGLRenderingContext } from "./WebGL"; import { ManagedWebGLRenderingContext } from "./WebGL";
export class Shader implements Disposable, Restorable { export class Shader implements Disposable, Restorable {

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Disposable, Color, Vector2, MathUtils } from "spine-core"; import { Disposable, Color, Vector2, MathUtils } from "@esotericsoftware/spine-core";
import { Mesh, Position2Attribute, ColorAttribute } from "./Mesh"; import { Mesh, Position2Attribute, ColorAttribute } from "./Mesh";
import { Shader } from "./Shader"; import { Shader } from "./Shader";
import { ManagedWebGLRenderingContext } from "./WebGL"; import { ManagedWebGLRenderingContext } from "./WebGL";

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Disposable, Color, SkeletonBounds, Utils, Skeleton, RegionAttachment, MeshAttachment, PathAttachment, ClippingAttachment } from "spine-core"; import { Disposable, Color, SkeletonBounds, Utils, Skeleton, RegionAttachment, MeshAttachment, PathAttachment, ClippingAttachment } from "@esotericsoftware/spine-core";
import { ShapeRenderer } from "./ShapeRenderer"; import { ShapeRenderer } from "./ShapeRenderer";
import { ManagedWebGLRenderingContext } from "./WebGL"; import { ManagedWebGLRenderingContext } from "./WebGL";

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { NumberArrayLike, VertexEffect, Color, SkeletonClipping, Vector2, Utils, Skeleton, BlendMode, RegionAttachment, TextureAtlasRegion, MeshAttachment, ClippingAttachment } from "spine-core"; import { NumberArrayLike, VertexEffect, Color, SkeletonClipping, Vector2, Utils, Skeleton, BlendMode, RegionAttachment, TextureAtlasRegion, MeshAttachment, ClippingAttachment } from "@esotericsoftware/spine-core";
import { GLTexture } from "./GLTexture"; import { GLTexture } from "./GLTexture";
import { PolygonBatcher } from "./PolygonBatcher"; import { PolygonBatcher } from "./PolygonBatcher";
import { ManagedWebGLRenderingContext, WebGLBlendModeConverter } from "./WebGL"; import { ManagedWebGLRenderingContext, WebGLBlendModeConverter } from "./WebGL";
@ -120,7 +120,7 @@ export class SkeletonRenderer {
renderable.numVertices = (mesh.worldVerticesLength >> 1); renderable.numVertices = (mesh.worldVerticesLength >> 1);
renderable.numFloats = renderable.numVertices * clippedVertexSize; renderable.numFloats = renderable.numVertices * clippedVertexSize;
if (renderable.numFloats > renderable.vertices.length) { if (renderable.numFloats > renderable.vertices.length) {
renderable.vertices = this.vertices = spine.Utils.newFloatArray(renderable.numFloats); renderable.vertices = this.vertices = Utils.newFloatArray(renderable.numFloats);
} }
mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize); mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize);
triangles = mesh.triangles; triangles = mesh.triangles;

View File

@ -27,7 +27,7 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/ *****************************************************************************/
import { Restorable, BlendMode } from "spine-core"; import { Restorable, BlendMode } from "@esotericsoftware/spine-core";
export class ManagedWebGLRenderingContext { export class ManagedWebGLRenderingContext {
public canvas: HTMLCanvasElement | OffscreenCanvas; public canvas: HTMLCanvasElement | OffscreenCanvas;

View File

@ -14,7 +14,7 @@ export * from './SkeletonRenderer';
export * from './Vector3'; export * from './Vector3';
export * from './WebGL'; export * from './WebGL';
export * from "spine-core"; export * from "@esotericsoftware/spine-core";
// Before modularization, we would expose spine-core on the global // Before modularization, we would expose spine-core on the global
// `spine` object, and spine-webgl on the global `spine.webgl` object. // `spine` object, and spine-webgl on the global `spine.webgl` object.
@ -35,9 +35,5 @@ export * from "spine-core";
// //
// This will break if esbuild renames the variable `src_exports` pointing to // This will break if esbuild renames the variable `src_exports` pointing to
// the exports object. // the exports object.
declare global {
var spine: any;
}
let exports = eval("src_exports"); let exports = eval("src_exports");
exports.webgl = exports; if (exports) exports.webgl = exports;

View File

@ -5,7 +5,7 @@
"rootDir": "./src", "rootDir": "./src",
"outDir": "./dist", "outDir": "./dist",
"paths": { "paths": {
"spine-core": [ "@esotericsoftware/spine-core": [
"../spine-core/src" "../spine-core/src"
] ]
} }

View File

@ -10,7 +10,6 @@
"ES2015" "ES2015"
], ],
"declaration": true, "declaration": true,
"declarationMap": true,
"composite": true, "composite": true,
"moduleResolution": "node", "moduleResolution": "node",
} }

View File

@ -6,6 +6,12 @@
}, },
{ {
"path": "./spine-canvas" "path": "./spine-canvas"
},
{
"path": "./spine-webgl"
},
{
"path": "./spine-player"
} }
] ]
} }