mirror of
https://github.com/photonstorm/phaser
synced 2024-11-23 21:24:09 +00:00
Removed un-used texture parsers and added in new AtlasXML parser.
This commit is contained in:
parent
82591113bd
commit
e1b252e4fd
5 changed files with 82 additions and 205 deletions
|
@ -627,10 +627,10 @@ var TextureManager = new Class({
|
|||
|
||||
/**
|
||||
* Adds a Texture Atlas to this Texture Manager, where the atlas data is given
|
||||
* in the Starling XML format.
|
||||
* in the XML format.
|
||||
*
|
||||
* @method Phaser.Textures.TextureManager#addAtlasStarlingXML
|
||||
* @since 3.0.0
|
||||
* @method Phaser.Textures.TextureManager#addAtlasXML
|
||||
* @since 3.7.0
|
||||
*
|
||||
* @param {string} key - The unique string-based key of the Texture.
|
||||
* @param {HTMLImageElement} source - The source Image element.
|
||||
|
@ -638,64 +638,15 @@ var TextureManager = new Class({
|
|||
*
|
||||
* @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.
|
||||
*/
|
||||
addAtlasStarlingXML: function (key, source, data)
|
||||
addAtlasXML: function (key, source, data)
|
||||
{
|
||||
var texture = null;
|
||||
|
||||
if (this.checkKey(key))
|
||||
{
|
||||
texture = this.create(key, source);
|
||||
|
||||
if (Array.isArray(data))
|
||||
{
|
||||
for (var i = 0; i < data.length; i++)
|
||||
{
|
||||
Parser.StarlingXML(texture, i, data[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Parser.StarlingXML(texture, 0, data);
|
||||
}
|
||||
|
||||
this.emit('addtexture', key, texture);
|
||||
}
|
||||
|
||||
return texture;
|
||||
},
|
||||
|
||||
/**
|
||||
* Adds a Texture Atlas to this Texture Manager, where the atlas data is given
|
||||
* in the Pyxel JSON format.
|
||||
*
|
||||
* @method Phaser.Textures.TextureManager#addAtlasPyxel
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param {string} key - The unique string-based key of the Texture.
|
||||
* @param {HTMLImageElement} source - The source Image element.
|
||||
* @param {object} data - The Texture Atlas XML data.
|
||||
*
|
||||
* @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.
|
||||
*/
|
||||
addAtlasPyxel: function (key, source, data)
|
||||
{
|
||||
var texture = null;
|
||||
|
||||
if (this.checkKey(key))
|
||||
{
|
||||
texture = this.create(key, source);
|
||||
|
||||
if (Array.isArray(data))
|
||||
{
|
||||
for (var i = 0; i < data.length; i++)
|
||||
{
|
||||
Parser.Pyxel(texture, i, data[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Parser.Pyxel(texture, 0, data);
|
||||
}
|
||||
|
||||
Parser.AtlasXML(texture, 0, data);
|
||||
|
||||
this.emit('addtexture', key, texture);
|
||||
}
|
||||
|
|
75
src/textures/parsers/AtlasXML.js
Normal file
75
src/textures/parsers/AtlasXML.js
Normal file
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* @author Richard Davey <rich@photonstorm.com>
|
||||
* @copyright 2018 Photon Storm Ltd.
|
||||
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Parses an XML Texture Atlas object and adds all the Frames into a Texture.
|
||||
*
|
||||
* @function Phaser.Textures.Parsers.AtlasXML
|
||||
* @memberOf Phaser.Textures.Parsers
|
||||
* @private
|
||||
* @since 3.7.0
|
||||
*
|
||||
* @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.
|
||||
* @param {integer} sourceIndex - The index of the TextureSource.
|
||||
* @param {*} xml - The XML data.
|
||||
*
|
||||
* @return {Phaser.Textures.Texture} The Texture modified by this parser.
|
||||
*/
|
||||
var AtlasXML = function (texture, sourceIndex, xml)
|
||||
{
|
||||
// Malformed?
|
||||
if (!xml.getElementsByTagName('TextureAtlas'))
|
||||
{
|
||||
console.warn('Invalid Texture Atlas XML given');
|
||||
return;
|
||||
}
|
||||
|
||||
// Add in a __BASE entry (for the entire atlas)
|
||||
var source = texture.source[sourceIndex];
|
||||
|
||||
texture.add('__BASE', sourceIndex, 0, 0, source.width, source.height);
|
||||
|
||||
// By this stage frames is a fully parsed array
|
||||
var frames = xml.getElementsByTagName('SubTexture');
|
||||
|
||||
var newFrame;
|
||||
|
||||
for (var i = 0; i < frames.length; i++)
|
||||
{
|
||||
var frame = frames[i].attributes;
|
||||
|
||||
var name = frame.name.value;
|
||||
var x = parseInt(frame.x.value, 10);
|
||||
var y = parseInt(frame.y.value, 10);
|
||||
var width = parseInt(frame.width.value, 10);
|
||||
var height = parseInt(frame.height.value, 10);
|
||||
|
||||
// The frame values are the exact coordinates to cut the frame out of the atlas from
|
||||
newFrame = texture.add(name, sourceIndex, x, y, width, height);
|
||||
|
||||
// These are the original (non-trimmed) sprite values
|
||||
if (frame.frameX)
|
||||
{
|
||||
frameX = Math.abs(parseInt(frame.frameX.value, 10));
|
||||
frameY = Math.abs(parseInt(frame.frameY.value, 10));
|
||||
frameWidth = parseInt(frame.frameWidth.value, 10);
|
||||
frameHeight = parseInt(frame.frameHeight.value, 10);
|
||||
|
||||
newFrame.setTrim(
|
||||
width,
|
||||
height,
|
||||
frameX,
|
||||
frameY,
|
||||
frameWidth,
|
||||
frameHeight
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return texture;
|
||||
};
|
||||
|
||||
module.exports = AtlasXML;
|
|
@ -1,69 +0,0 @@
|
|||
/**
|
||||
* @author Richard Davey <rich@photonstorm.com>
|
||||
* @copyright 2018 Photon Storm Ltd.
|
||||
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Parses a Pyxel JSON object and adds the Frames to a Texture.
|
||||
*
|
||||
* @function Phaser.Textures.Parsers.Pyxel
|
||||
* @memberOf Phaser.Textures.Parsers
|
||||
* @private
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.
|
||||
* @param {object} json - The JSON data.
|
||||
*
|
||||
* @return {Phaser.Textures.Texture} The Texture modified by this parser.
|
||||
*/
|
||||
var Pyxel = function (texture, json)
|
||||
{
|
||||
// Malformed? There are a few keys to check here.
|
||||
var signature = [ 'layers', 'tilewidth', 'tileheight', 'tileswide', 'tileshigh' ];
|
||||
|
||||
signature.forEach(function (key)
|
||||
{
|
||||
if (!json[key])
|
||||
{
|
||||
// console.warn('Phaser.AnimationParser.JSONDataPyxel: Invalid Pyxel Tilemap JSON given, missing "' + key + '" key.');
|
||||
// console.log(json);
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
// For this purpose, I only care about parsing tilemaps with a single layer.
|
||||
if (json['layers'].length !== 1)
|
||||
{
|
||||
// console.warn('Phaser.AnimationParser.JSONDataPyxel: Too many layers, this parser only supports flat Tilemaps.');
|
||||
// console.log(json);
|
||||
return;
|
||||
}
|
||||
|
||||
var data = new Phaser.FrameData();
|
||||
|
||||
var tileheight = json['tileheight'];
|
||||
var tilewidth = json['tilewidth'];
|
||||
|
||||
var frames = json['layers'][0]['tiles'];
|
||||
var newFrame;
|
||||
|
||||
for (var i = 0; i < frames.length; i++)
|
||||
{
|
||||
newFrame = data.addFrame(new Phaser.Frame(
|
||||
i,
|
||||
frames[i].x,
|
||||
frames[i].y,
|
||||
tilewidth,
|
||||
tileheight,
|
||||
'frame_' + i // No names are included in pyxel tilemap data.
|
||||
));
|
||||
|
||||
// No trim data is included.
|
||||
newFrame.setTrim(false);
|
||||
}
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
module.exports = Pyxel;
|
|
@ -1,79 +0,0 @@
|
|||
/**
|
||||
* @author Richard Davey <rich@photonstorm.com>
|
||||
* @copyright 2018 Photon Storm Ltd.
|
||||
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Parses a Starling XML object and adds all the Frames into a Texture.
|
||||
*
|
||||
* @function Phaser.Textures.Parsers.StarlingXML
|
||||
* @memberOf Phaser.Textures.Parsers
|
||||
* @private
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.
|
||||
* @param {*} xml - The XML data.
|
||||
*
|
||||
* @return {Phaser.Textures.Texture} The Texture modified by this parser.
|
||||
*/
|
||||
var StarlingXML = function (texture, xml)
|
||||
{
|
||||
// Malformed?
|
||||
if (!xml.getElementsByTagName('TextureAtlas'))
|
||||
{
|
||||
// console.warn("Phaser.AnimationParser.XMLData: Invalid Texture Atlas XML given, missing <TextureAtlas> tag");
|
||||
return;
|
||||
}
|
||||
|
||||
// Let's create some frames then
|
||||
var data = new Phaser.FrameData();
|
||||
var frames = xml.getElementsByTagName('SubTexture');
|
||||
var newFrame;
|
||||
|
||||
var name;
|
||||
var frame;
|
||||
var x;
|
||||
var y;
|
||||
var width;
|
||||
var height;
|
||||
var frameX;
|
||||
var frameY;
|
||||
var frameWidth;
|
||||
var frameHeight;
|
||||
|
||||
for (var i = 0; i < frames.length; i++)
|
||||
{
|
||||
frame = frames[i].attributes;
|
||||
|
||||
name = frame.name.value;
|
||||
x = parseInt(frame.x.value, 10);
|
||||
y = parseInt(frame.y.value, 10);
|
||||
width = parseInt(frame.width.value, 10);
|
||||
height = parseInt(frame.height.value, 10);
|
||||
|
||||
frameX = null;
|
||||
frameY = null;
|
||||
|
||||
if (frame.frameX)
|
||||
{
|
||||
frameX = Math.abs(parseInt(frame.frameX.value, 10));
|
||||
frameY = Math.abs(parseInt(frame.frameY.value, 10));
|
||||
frameWidth = parseInt(frame.frameWidth.value, 10);
|
||||
frameHeight = parseInt(frame.frameHeight.value, 10);
|
||||
}
|
||||
|
||||
newFrame = data.addFrame(new Phaser.Frame(i, x, y, width, height, name));
|
||||
|
||||
// Trimmed?
|
||||
if (frameX !== null || frameY !== null)
|
||||
{
|
||||
newFrame.setTrim(true, width, height, frameX, frameY, frameWidth, frameHeight);
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
|
||||
};
|
||||
|
||||
module.exports = StarlingXML;
|
|
@ -10,14 +10,13 @@
|
|||
|
||||
module.exports = {
|
||||
|
||||
AtlasXML: require('./AtlasXML'),
|
||||
Canvas: require('./Canvas'),
|
||||
Image: require('./Image'),
|
||||
JSONArray: require('./JSONArray'),
|
||||
JSONHash: require('./JSONHash'),
|
||||
Pyxel: require('./Pyxel'),
|
||||
SpriteSheet: require('./SpriteSheet'),
|
||||
SpriteSheetFromAtlas: require('./SpriteSheetFromAtlas'),
|
||||
StarlingXML: require('./StarlingXML'),
|
||||
UnityYAML: require('./UnityYAML')
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue