UNPKG

odin

Version:

Node.js Canvas/WebGL Javascript Game Framework

119 lines (82 loc) 3.16 kB
if (typeof(define) !== "function") { var define = require("amdefine")(module); } define([ "odin/base/class", "odin/core/assets/asset", "odin/core/game/log" ], function(Class, Asset, Log) { "use strict"; function Assets() { Array.call(this); this.hash = {}; } Assets.prototype = Object.create(Array.prototype); Assets.prototype.constructor = Assets; Assets.prototype.get = function(name) { var asset = this.hash[name]; if (asset) return asset; Log.error("Assets.get: can't find asset with name " + name + ", it has not been added to Assets, use Assets.addAsset(asset)"); return undefined; }; Assets.prototype.addAsset = function(asset) { if (!(asset instanceof Asset)) { Log.error("Assets.addAsset: can't add passed argument, it is not an instance of Asset"); return this; } var name = asset.name; if (this.hash[name]) { Log.error("Assets.addAsset: Assets already have Asset named " + asset.name); return undefined; } asset.assets = this; this.push(asset); this.hash[name] = asset; return asset; }; Assets.prototype.addAssets = function() { for (var i = 0, il = arguments.length; i < il; i++) this.addAsset(arguments[i]); }; Assets.prototype.removeAsset = function(asset) { var name = typeof(asset) === "string" ? asset : asset.name; asset = this.hash[name]; if (!asset) { Log.error("Assets.removeAsset: Assets does not have an Asset named " + name); return undefined; } this.splice(this.indexOf(asset), 1); this.hash[name] = null; return asset; }; Assets.prototype.removeAssets = function() { for (var i = 0, il = arguments.length; i < il; i++) this.removeAsset(arguments[i]); }; Assets.prototype.toJSON = function(json, pack) { json || (json = {}); var jsonAssets = json.assets || (json.assets = []), jsonAsset, i = this.length; while (i--) { if ((jsonAsset = this[i]).json) jsonAssets[i] = jsonAsset.toJSON(jsonAssets[i], pack); } return json; }; Assets.prototype.fromJSON = function(json) { var assetsHash = this.hash, jsonAssets = json.assets || (json.assets = []), asset, jsonAsset, i = jsonAssets.length; while (i--) { if (!(jsonAsset = jsonAssets[i])) continue; if ((asset = assetsHash[jsonAsset.name])) { asset.fromJSON(jsonAsset); } else { this.add(Class.fromJSON(jsonAsset)); } } return this; }; return new Assets; } );