Base Spine plugin now handles a lot more

This commit is contained in:
Richard Davey 2018-10-26 19:39:11 +01:00
parent f95f611c1f
commit 28895c5162
3 changed files with 65 additions and 109 deletions

View file

@ -9,6 +9,8 @@ var ScenePlugin = require('../../../src/plugins/ScenePlugin');
var SpineFile = require('./SpineFile');
var SpineGameObject = require('./gameobject/SpineGameObject');
var runtime;
/**
* @classdesc
* TODO
@ -27,7 +29,7 @@ var SpinePlugin = new Class({
initialize:
function SpinePlugin (scene, pluginManager)
function SpinePlugin (scene, pluginManager, SpineRuntime)
{
console.log('BaseSpinePlugin created');
@ -35,9 +37,6 @@ var SpinePlugin = new Class({
var game = pluginManager.game;
this.canvas = game.canvas;
this.context = game.context;
// Create a custom cache to store the spine data (.atlas files)
this.cache = game.cache.addCustom('spine');
@ -45,11 +44,17 @@ var SpinePlugin = new Class({
this.textures = game.textures;
this.skeletonRenderer;
this.drawDebug = false;
// Register our file type
pluginManager.registerFileType('spine', this.spineFileCallback, scene);
// Register our game object
pluginManager.registerGameObject('spine', this.createSpineFactory(this));
runtime = SpineRuntime;
},
spineFileCallback: function (key, jsonURL, atlasURL, jsonXhrSettings, atlasXhrSettings)
@ -103,6 +108,47 @@ var SpinePlugin = new Class({
return callback;
},
getRuntime: function ()
{
return runtime;
},
createSkeleton: function (key, skeletonJSON)
{
var atlas = this.getAtlas(key);
var atlasLoader = new runtime.AtlasAttachmentLoader(atlas);
var skeletonJson = new runtime.SkeletonJson(atlasLoader);
var data = (skeletonJSON) ? skeletonJSON : this.json.get(key);
var skeletonData = skeletonJson.readSkeletonData(data);
var skeleton = new runtime.Skeleton(skeletonData);
return { skeletonData: skeletonData, skeleton: skeleton };
},
getBounds: function (skeleton)
{
var offset = new runtime.Vector2();
var size = new runtime.Vector2();
skeleton.getBounds(offset, size, []);
return { offset: offset, size: size };
},
createAnimationState: function (skeleton)
{
var stateData = new runtime.AnimationStateData(skeleton.data);
var state = new runtime.AnimationState(stateData);
return { stateData: stateData, state: state };
},
/**
* The Scene that owns this plugin is shutting down.
* We need to kill and reset all internal properties as well as stop listening to Scene events.

View file

@ -8,8 +8,6 @@ var Class = require('../../../src/utils/Class');
var BaseSpinePlugin = require('./BaseSpinePlugin');
var SpineCanvas = require('SpineCanvas');
var runtime;
/**
* @classdesc
* Just the Canvas Runtime.
@ -32,9 +30,7 @@ var SpineCanvasPlugin = new Class({
{
console.log('SpineCanvasPlugin created');
BaseSpinePlugin.call(this, scene, pluginManager);
runtime = SpineCanvas;
BaseSpinePlugin.call(this, scene, pluginManager, SpineCanvas);
},
boot: function ()
@ -42,18 +38,13 @@ var SpineCanvasPlugin = new Class({
this.skeletonRenderer = new SpineCanvas.canvas.SkeletonRenderer(this.game.context);
},
getRuntime: function ()
{
return runtime;
},
createSkeleton: function (key, child)
getAtlas: function (key)
{
var atlasData = this.cache.get(key);
if (!atlasData)
{
console.warn('No skeleton data for: ' + key);
console.warn('No atlas data for: ' + key);
return;
}
@ -64,41 +55,7 @@ var SpineCanvasPlugin = new Class({
return new SpineCanvas.canvas.CanvasTexture(textures.get(path).getSourceImage());
});
var atlasLoader = new SpineCanvas.AtlasAttachmentLoader(atlas);
var skeletonJson = new SpineCanvas.SkeletonJson(atlasLoader);
var data = this.json.get(key);
if (child)
{
data = data[child];
}
var skeletonData = skeletonJson.readSkeletonData(data);
var skeleton = new SpineCanvas.Skeleton(skeletonData);
return { skeletonData: skeletonData, skeleton: skeleton };
},
getBounds: function (skeleton)
{
var offset = new SpineCanvas.Vector2();
var size = new SpineCanvas.Vector2();
skeleton.getBounds(offset, size, []);
return { offset: offset, size: size };
},
createAnimationState: function (skeleton)
{
var stateData = new SpineCanvas.AnimationStateData(skeleton.data);
var state = new SpineCanvas.AnimationState(stateData);
return { stateData: stateData, state: state };
return atlas;
}
});

View file

@ -9,8 +9,6 @@ var BaseSpinePlugin = require('./BaseSpinePlugin');
var SpineWebGL = require('SpineWebGL');
var Matrix4 = require('../../../src/math/Matrix4');
var runtime;
/**
* @classdesc
* Just the WebGL Runtime.
@ -33,9 +31,14 @@ var SpineWebGLPlugin = new Class({
{
console.log('SpineWebGLPlugin created');
BaseSpinePlugin.call(this, scene, pluginManager);
BaseSpinePlugin.call(this, scene, pluginManager, SpineWebGL);
runtime = SpineWebGL;
this.gl;
this.mvp;
this.shader;
this.batcher;
this.debugRenderer;
this.debugShader;
},
boot: function ()
@ -55,34 +58,18 @@ var SpineWebGLPlugin = new Class({
this.shapes = new SpineWebGL.webgl.ShapeRenderer(gl);
var debugRenderer = new SpineWebGL.webgl.SkeletonDebugRenderer(gl);
debugRenderer.premultipliedAlpha = true;
debugRenderer.drawRegionAttachments = true;
debugRenderer.drawBoundingBoxes = true;
debugRenderer.drawMeshHull = true;
debugRenderer.drawMeshTriangles = true;
debugRenderer.drawPaths = true;
this.drawDebug = false;
this.debugRenderer = new SpineWebGL.webgl.SkeletonDebugRenderer(gl);
this.debugShader = SpineWebGL.webgl.Shader.newColored(gl);
this.debugRenderer = debugRenderer;
},
getRuntime: function ()
{
return runtime;
},
createSkeleton: function (key, child)
getAtlas: function (key)
{
var atlasData = this.cache.get(key);
if (!atlasData)
{
console.warn('No skeleton data for: ' + key);
console.warn('No atlas data for: ' + key);
return;
}
@ -95,41 +82,7 @@ var SpineWebGLPlugin = new Class({
return new SpineWebGL.webgl.GLTexture(gl, textures.get(path).getSourceImage());
});
var atlasLoader = new SpineWebGL.AtlasAttachmentLoader(atlas);
var skeletonJson = new SpineWebGL.SkeletonJson(atlasLoader);
var data = this.json.get(key);
if (child)
{
data = data[child];
}
var skeletonData = skeletonJson.readSkeletonData(data);
var skeleton = new SpineWebGL.Skeleton(skeletonData);
return { skeletonData: skeletonData, skeleton: skeleton };
},
getBounds: function (skeleton)
{
var offset = new SpineWebGL.Vector2();
var size = new SpineWebGL.Vector2();
skeleton.getBounds(offset, size, []);
return { offset: offset, size: size };
},
createAnimationState: function (skeleton)
{
var stateData = new SpineWebGL.AnimationStateData(skeleton.data);
var state = new SpineWebGL.AnimationState(stateData);
return { stateData: stateData, state: state };
return atlas;
}
});