mirror of
https://github.com/photonstorm/phaser
synced 2024-12-23 19:43:28 +00:00
239 lines
5.4 KiB
JavaScript
239 lines
5.4 KiB
JavaScript
|
/**
|
||
|
* @author Richard Davey <rich@photonstorm.com>
|
||
|
* @copyright 2016 Photon Storm Ltd.
|
||
|
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
||
|
*/
|
||
|
|
||
|
var Parser = require('./parsers');
|
||
|
var Texture = require('./Texture');
|
||
|
|
||
|
/**
|
||
|
* Textures are managed by the global TextureManager. This is a singleton class that is
|
||
|
* responsible for creating and delivering Textures and their corresponding Frames to Game Objects.
|
||
|
*
|
||
|
* Sprites and other Game Objects get the texture data they need from the TextureManager.
|
||
|
*
|
||
|
* Access it via `state.textures`.
|
||
|
*
|
||
|
* @class Phaser.TextureManager
|
||
|
* @constructor
|
||
|
* @param {Phaser.Game} game
|
||
|
*/
|
||
|
var TextureManager = function (game)
|
||
|
{
|
||
|
// Required? Remove if not
|
||
|
this.game = game;
|
||
|
|
||
|
this.list = {};
|
||
|
};
|
||
|
|
||
|
TextureManager.prototype.constructor = TextureManager;
|
||
|
|
||
|
TextureManager.prototype = {
|
||
|
|
||
|
addImage: function (key, source)
|
||
|
{
|
||
|
var texture = this.create(key, source);
|
||
|
|
||
|
Parser.Image(texture, 0);
|
||
|
|
||
|
return texture;
|
||
|
},
|
||
|
|
||
|
addCanvas: function (key, source)
|
||
|
{
|
||
|
var texture = this.create(key, source);
|
||
|
|
||
|
Parser.Canvas(texture, 0);
|
||
|
|
||
|
return texture;
|
||
|
},
|
||
|
|
||
|
addAtlasJSONArray: function (key, source, data)
|
||
|
{
|
||
|
var texture = this.create(key, source);
|
||
|
|
||
|
if (Array.isArray(data))
|
||
|
{
|
||
|
for (var i = 0; i < data.length; i++)
|
||
|
{
|
||
|
Parser.JSONArray(texture, i, data[i]);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Parser.JSONArray(texture, 0, data);
|
||
|
}
|
||
|
|
||
|
return texture;
|
||
|
},
|
||
|
|
||
|
addAtlasJSONHash: function (key, source, data)
|
||
|
{
|
||
|
var texture = this.create(key, source);
|
||
|
|
||
|
if (Array.isArray(data))
|
||
|
{
|
||
|
for (var i = 0; i < data.length; i++)
|
||
|
{
|
||
|
Parser.JSONHash(texture, i, data[i]);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Parser.JSONHash(texture, 0, data);
|
||
|
}
|
||
|
|
||
|
return texture;
|
||
|
},
|
||
|
|
||
|
addSpriteSheet: function (key, source, frameWidth, frameHeight, startFrame, endFrame, margin, spacing)
|
||
|
{
|
||
|
var texture = this.create(key, source);
|
||
|
|
||
|
var width = texture.source[0].width;
|
||
|
var height = texture.source[0].height;
|
||
|
|
||
|
Parser.SpriteSheet(texture, 0, 0, 0, width, height, frameWidth, frameHeight, startFrame, endFrame, margin, spacing);
|
||
|
|
||
|
return texture;
|
||
|
},
|
||
|
|
||
|
addSpriteSheetFromAtlas: function (key, atlasKey, atlasFrame, frameWidth, frameHeight, startFrame, endFrame, margin, spacing)
|
||
|
{
|
||
|
var atlas = this.get(atlasKey);
|
||
|
var sheet = atlas.get(atlasFrame);
|
||
|
|
||
|
if (sheet)
|
||
|
{
|
||
|
var texture = this.create(key, sheet.source.image);
|
||
|
|
||
|
Parser.SpriteSheet(texture, 0, sheet.cutX, sheet.cutY, sheet.cutWidth, sheet.cutHeight, frameWidth, frameHeight, startFrame, endFrame, margin, spacing);
|
||
|
|
||
|
return texture;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
addAtlasStarlingXML: function (key, source, data)
|
||
|
{
|
||
|
var 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);
|
||
|
}
|
||
|
|
||
|
return texture;
|
||
|
},
|
||
|
|
||
|
addAtlasPyxel: function (key, source, data)
|
||
|
{
|
||
|
var 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);
|
||
|
}
|
||
|
|
||
|
return texture;
|
||
|
},
|
||
|
|
||
|
create: function (key, source)
|
||
|
{
|
||
|
var texture = new Texture(this, key, source);
|
||
|
|
||
|
this.list[key] = texture;
|
||
|
|
||
|
return texture;
|
||
|
|
||
|
},
|
||
|
|
||
|
exists: function (key)
|
||
|
{
|
||
|
return (this.list.hasOwnProperty(key));
|
||
|
},
|
||
|
|
||
|
get: function (key)
|
||
|
{
|
||
|
if (key === undefined) { key = '__DEFAULT'; }
|
||
|
|
||
|
if (this.list[key])
|
||
|
{
|
||
|
return this.list[key];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return this.list['__MISSING'];
|
||
|
}
|
||
|
},
|
||
|
|
||
|
cloneFrame: function (key, frame)
|
||
|
{
|
||
|
if (this.list[key])
|
||
|
{
|
||
|
return this.list[key].get(frame).clone();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
getFrame: function (key, frame)
|
||
|
{
|
||
|
if (this.list[key])
|
||
|
{
|
||
|
return this.list[key].get(frame);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
setTexture: function (gameObject, key, frame)
|
||
|
{
|
||
|
if (this.list[key])
|
||
|
{
|
||
|
gameObject.texture = this.list[key];
|
||
|
gameObject.frame = gameObject.texture.get(frame);
|
||
|
}
|
||
|
|
||
|
return gameObject;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Passes all Textures to the given callback.
|
||
|
*
|
||
|
* @method each
|
||
|
* @param {function} callback - The function to call.
|
||
|
* @param {object} [thisArg] - Value to use as `this` when executing callback.
|
||
|
* @param {...*} [arguments] - Additional arguments that will be passed to the callback, after the child.
|
||
|
*/
|
||
|
each: function (callback, thisArg)
|
||
|
{
|
||
|
var args = [ null ];
|
||
|
|
||
|
for (var i = 1; i < arguments.length; i++)
|
||
|
{
|
||
|
args.push(arguments[i]);
|
||
|
}
|
||
|
|
||
|
for (var texture in this.list)
|
||
|
{
|
||
|
args[0] = this.list[texture];
|
||
|
|
||
|
callback.apply(thisArg, args);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
module.exports = TextureManager;
|