// findAssetsByClass.js
(function () {
/* global AdventureJS A */
var p = AdventureJS.Assets.Tangible.prototype;
/**
* Find instances of specified class within this asset, for example
* find all coins within a purse. Returns an array of assets.
* @memberOf AdventureJS.Assets.Tangible
* @method AdventureJS.Assets.Tangible#findAssetsByClass
* @param {String} instanceClass
* @returns {Array}
*/
p.findAssetsByClass = function Tangible_findAssetsByClass(
instanceClass,
params = {}
) {
if ("string" !== typeof instanceClass) return [];
// did we receive a valid class name?
let c = AdventureJS[instanceClass] || AdventureJS.Assets[instanceClass];
if (!c) {
// if not, since class names are propercased,
// make an effort to propercase
// @TODO case check / lookup
instanceClass = A.FX.propercase(instanceClass);
}
c = AdventureJS[instanceClass] || AdventureJS.Assets[instanceClass];
if (!c) return [];
var contents = this.getAllNestedContents();
var foundInstances = [];
for (var i = 0; i < contents.length; i++) {
var asset_id = contents[i];
if (params.exclude?.includes(asset_id)) continue;
var asset = this.game.getAsset(asset_id);
if (asset) {
let c = AdventureJS[instanceClass] || AdventureJS.Assets[instanceClass];
if (c && asset instanceof c) {
foundInstances.push(asset);
}
}
}
return foundInstances;
};
})();