declare namespace pc {
/**
* @name pc.Asset
* @class An asset record of a file or data resource that can be loaded by the engine.
* The asset contains three important fields:
* file: contains the details of a file (filename, url) which contains the resource data, e.g. an image file for a texture asset
* data: contains a JSON blob which contains either the resource data for the asset (e.g. material data) or additional data for the file (e.g. material mappings for a model)
* resource: contains the final resource when it is loaded. (e.g. a {@link pc.StandardMaterial} or a {@link pc.Texture})
*
* See the {@link pc.AssetRegistry} for details on loading resources from assets.
* @property {String} name The name of the asset
* @property {Number} id The asset id
* @property {String} type The type of the asset. One of ["animation", "audio", "binary", "cubemap", "css", "font", "json", "html", "material", "model", "script", "shader", "text", "texture"]
* @property {pc.Tags} tags Interface for tagging. Allows to find assets by tags using {@link pc.AssetRegistry#findByTag} method.
* @property {Object} file The file details or null if no file
* @property {String} [file.url] The URL of the resource file that contains the asset data
* @property {String} [file.filename] The filename of the resource file
* @property {Number} [file.size] The size of the resource file
* @property {String} [file.hash] The MD5 hash of the resource file data and the Asset data field
* @property {Object} data JSON data that contains either the complete resource data (e.g. in the case of a material) or additional data (e.g. in the case of a model it contains mappings from mesh to material)
* @property {Object} resource A reference to the resource when the asset is loaded. e.g. a {@link pc.Texture} or a {@link pc.Model}
* @property {Array} resources A reference to the resources of the asset when it's loaded. An asset can hold more runtime resources than one e.g. cubemaps
* @property {Boolean} preload If true the asset will be loaded during the preload phase of application set up.
* @property {Boolean} loaded True if the resource is loaded. e.g. if asset.resource is not null
* @property {pc.AssetRegistry} registry The asset registry that this Asset belongs to
* @description Create a new Asset record. Generally, Assets are created in the loading process and you won't need to create them by hand.
* @param {String} name A non-unique but human-readable name which can be later used to retrieve the asset.
* @param {String} type Type of asset. One of ["animation", "audio", "binary", "cubemap", "css", "font", "json", "html", "material", "model", "script", "shader", "text", "texture"]
* @param {Object} file Details about the file the asset is made from. At the least must contain the 'url' field. For assets that don't contain file data use null.
* @example
* var file = {
* filename: "filename.txt",
* url: "/example/filename.txt",
* }
* @param {Object} [data] JSON object with additional data about the asset (e.g. for texture and model assets) or contains the asset data itself (e.g. in the case of materials)
* @example
* var asset = new pc.Asset("a texture", "texture", {
* url: "http://example.com/my/assets/here/texture.png"
* });
*/
class Asset {
constructor(name: string, type: string, file: { url: string, filename?: string, size?: number, hash?: string } | null, data?: {})
name: string;
id: number;
type: string;
tags: pc.Tags;
file: { url: string, filename?: string, size?: number, hash?: string } | null;
data: {};
resource: pc.Texture | pc.Model | pc.Material;
resources: Array;
preload: boolean;
loaded: boolean;
registry: pc.AssetRegistry;
/**
* @name pc.Asset#getFileUrl
* @function
* @description Return the URL required to fetch the file for this asset.
* @returns {String} The URL
* @example
* var assets = app.assets.find("My Image", "texture");
* var img = "<img src='" + assets[0].getFileUrl() + "'>";
*/
getFileUrl(): string;
/**
* @function
* @name pc.Asset#ready
* @description Take a callback which is called as soon as the asset is loaded. If the asset is already loaded the callback is called straight away
* @param {Function} callback The function called when the asset is ready. Passed the (asset) arguments
* @example
* var asset = app.assets.find("My Asset");
* asset.ready(function (asset) {
* // asset loaded
* });
* app.assets.load(asset);
*/
ready(callback: (...args: any[]) => {}, scope: any): void;
/**
* @function
* @name pc.Asset#unload
* @description Destroys the associated resource and marks asset as unloaded.
* @example
* var asset = app.assets.find("My Asset");
* asset.unload();
* // asset.resource is null
*/
unload(): void;
// Events
/**
* @function
* @name pc.Asset#on
* @description Attach an event handler to an event
* @param {String} name Name of the event to bind the callback to
* @param {Function} callback Function that is called when event is fired. Note the callback is limited to 8 arguments.
* @param {Object} [scope] Object to use as 'this' when the event is fired, defaults to current this
* @example
* obj.on('test', function (a, b) {
* console.log(a + b);
* });
* obj.fire('test', 1, 2); // prints 3 to the console
*/
on(name: string, callback: (...args: any[]) => void, scope: any): any;
/**
* @function
* @name pc.Asset#off
* @description Detach an event handler from an event. If callback is not provided then all callbacks are unbound from the event,
* if scope is not provided then all events with the callback will be unbound.
* @param {String} [name] Name of the event to unbind
* @param {Function} [callback] Function to be unbound
* @param {Object} [scope] Scope that was used as the this when the event is fired
* @example
* var handler = function () {
* };
* obj.on('test', handler);
*
* obj.off(); // Removes all events
* obj.off('test'); // Removes all events called 'test'
* obj.off('test', handler); // Removes all handler functions, called 'test'
* obj.off('test', handler, this); // Removes all hander functions, called 'test' with scope this
*/
off(name: string, callback: (...args: any[]) => void, scope: any): any;
/**
* @function
* @name pc.Asset#fire
* @description Fire an event, all additional arguments are passed on to the event listener
* @param {Object} name Name of event to fire
* @param {*} [...] Arguments that are passed to the event handler
* @example
* obj.fire('test', 'This is the message');
*/
fire(name: string, arg1: any, arg2?: any, arg3?: any, arg4?: any, arg5?: any, arg6?: any, arg7?: any, arg8?: any): any;
/**
* @function
* @name pc.Asset#once
* @description Attach an event handler to an event. This handler will be removed after being fired once.
* @param {String} name Name of the event to bind the callback to
* @param {Function} callback Function that is called when event is fired. Note the callback is limited to 8 arguments.
* @param {Object} [scope] Object to use as 'this' when the event is fired, defaults to current this
* @example
* obj.once('test', function (a, b) {
* console.log(a + b);
* });
* obj.fire('test', 1, 2); // prints 3 to the console
* obj.fire('test', 1, 2); // not going to get handled
*/
once(name: string, callback: (...args: any[]) => void, scope: any): any;
/**
* @function
* @name pc.Asset#hasEvent
* @description Test if there are any handlers bound to an event name
* @param {String} name The name of the event to test
* @example
* obj.on('test', function () { }); // bind an event to 'test'
* obj.hasEvent('test'); // returns true
*/
hasEvent(name: string): boolean;
}
}