Create a new Asset record. Add it to the AssetRegistry with AssetRegistry#add so the application can find and load it.
A non-unique but human-readable name which can be later used to retrieve the asset.
The type of asset (an AssetType), which selects the resource handler and the type of Asset#resource. The types a developer commonly creates are:
ArrayBufferstringstringstringstringTypes that the engine creates itself while loading, such as render or scene, are omitted
here; every built-in type is listed in AssetMap. Any other string is accepted for an
application-defined handler; see AssetMap for typing its resource.
Optionalfile: {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.
Optionalcontents?: ArrayBufferOptional file contents. This is faster than wrapping the data in a (base64 encoded) blob. Currently only used by container assets.
Optionalfilename?: stringThe filename of the resource file or null if no filename was set (e.g from using AssetRegistry#loadFromUrl).
Optionalhash?: stringThe MD5 hash of the resource file data and the Asset data field or null if hash was set (e.g from using AssetRegistry#loadFromUrl).
Optionalsize?: numberThe size of the resource file or null if no size was set (e.g. from using AssetRegistry#loadFromUrl).
Optionalurl?: stringThe URL of the resource file that contains the asset data.
Optionaldata: any = {}
JSON object or string 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).
Optionaloptions: { crossOrigin?: "anonymous" | "use-credentials" | null } = {}
The asset handler options. For container options see ContainerHandler.
OptionalcrossOrigin?: "anonymous" | "use-credentials" | nullFor use with texture assets that are loaded using the browser. This setting overrides the default crossOrigin specifier. For more details on crossOrigin and its use, see https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin.
The asset id.
True if the asset has finished attempting to load the resource. It is not guaranteed that the resources are available as there could have been a network error.
True if the resource is currently being loaded.
Optional JSON data that contains the asset handler options.
The asset registry that this Asset belongs to.
Asset tags. Enables finding of assets by tags using the AssetRegistry#findByTag method.
Gets optional asset JSON data.
Sets optional asset JSON data. This contains either the complete resource data (such as in the case of a material) or additional data (such as in the case of a model which contains mappings from mesh to material).
Gets the file details or null if no file.
Sets the file details or null if no file.
Gets the asset name.
Sets the asset name.
Gets whether to preload an asset.
Sets whether to preload an asset. If true, the asset will be loaded during the preload phase of application initialization or when calling AssetRegistry#add.
Gets the asset resource. Its type follows the asset's type: a Texture for an
Asset<'texture'>, a Material for an Asset<'material'> and so on (see
AssetMap), or unknown when the type is only known as a string. It is undefined
until the asset has loaded and after Asset#unload, so narrow it before use unless the
asset is known to be loaded, for example inside Asset#ready.
Sets the asset resource. For example, a StandardMaterial or a Texture. The
value is checked against the asset's type. As with the elements of an array, the check is
bypassed when assigning through a variable typed as a plain Asset, so keep typed assets
typed where their resource is assigned.
The resource.
Gets the asset resources. For a cube map asset, the first entry is the cube map and the
remaining entries are its prefiltered levels, some of which may be null.
Sets the asset resources. Some assets can hold more than one runtime resource (cube maps, for example).
Fire an event, all additional arguments are passed on to the event listener.
Name of event to fire.
Optionalarg1: any
First argument that is passed to the event handler.
Optionalarg2: any
Second argument that is passed to the event handler.
Optionalarg3: any
Third argument that is passed to the event handler.
Optionalarg4: any
Fourth argument that is passed to the event handler.
Optionalarg5: any
Fifth argument that is passed to the event handler.
Optionalarg6: any
Sixth argument that is passed to the event handler.
Optionalarg7: any
Seventh argument that is passed to the event handler.
Optionalarg8: any
Eighth argument that is passed to the event handler.
Self for chaining.
Test if there are any handlers bound to an event name.
The name of the event to test.
True if the object has handlers bound to the specified event name.
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.
Use this form to remove all listeners matching a name (and optionally callback/scope). To remove a single known subscription, prefer retaining the EventHandle returned by EventHandler#on / EventHandler#once and calling its EventHandle#off: it removes exactly that subscription and is faster (no scan of the callback list).
Optionalname: string
Name of the event to unbind.
Optionalcallback: HandleEventCallback
Function to be unbound.
Optionalscope: any
Scope that was used as the this when the event is fired.
Self for chaining.
const handler = () => {};
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 handler functions, called 'test' with scope this
Attach an event handler to an event.
Name of the event to bind the callback to.
Function that is called when event is fired. Note the callback is limited to 8 arguments.
Optionalscope: any = ...
Object to use as 'this' when the event is fired, defaults to current this.
An event handle. For later removal, prefer retaining this handle and calling its EventHandle#off over EventHandler#off with a name/callback: it removes exactly this subscription and is faster (no scan of the callback list).
Attach an event handler to an event. This handler will be removed after being fired once.
Name of the event to bind the callback to.
Function that is called when event is fired. Note the callback is limited to 8 arguments.
Optionalscope: any = ...
Object to use as 'this' when the event is fired, defaults to current this.
An event handle. For removal before it fires, prefer retaining this handle and calling its EventHandle#off over EventHandler#off with a name/callback: it removes exactly this subscription and is faster (no scan of the callback list).
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.
The callback fires on success only, and a failed load still marks the asset as loaded while
firing error rather than load. So a callback registered before the failure never runs,
and one registered after it runs immediately with Asset#resource still null. Listen
for the error event as well whenever a failure has to be handled, check asset.resource
inside the callback, and never await this callback alone.
The function called when the asset is ready. Passed the (asset) arguments.
Optionalscope: any
Scope object to use when calling the callback.
StaticEVENT_Fired when we add a new localized asset id to the asset.
StaticEVENT_Fired when one of the asset properties file, data, resource or resources is changed.
StaticEVENT_Fired if the asset encounters an error while loading.
StaticEVENT_Fired when the asset has completed loading.
StaticEVENT_Fired as the asset's file downloads, with the number of bytes received so far and the total
expected. Only asset types whose file is fetched as binary data report progress:
animation (GLB only), audio, binary, container, gsplat, model and texture.
Textures loaded through an image element have no download progress, so they fire once at 0
and once at a fixed placeholder total, whether or not the file was downloaded.
Please note:
asset.file.contents is supplied, so no progress is reportedStaticEVENT_Fired when the asset is removed from the asset registry.
StaticEVENT_Fired when we remove a localized asset id from the asset.
StaticEVENT_Fired just before the asset unloads the resource. This allows for the opportunity to prepare for an asset that will be unloaded. E.g. Changing the texture of a model to a default before the one it was using is unloaded.
An Asset is the engine's record of a single resource: a texture, a material, a glTF container, a sound, a script and so on. Assets live in the application's AssetRegistry at AppBase#assets, which loads them on demand.
An asset has five parts:
typeselects the ResourceHandler that loads it and the type ofresource.filenames the file that holds the data, when there is one.datacarries JSON that either is the resource, as for materials, or describes how to process the file, as for texture and model mappings.optionscarries handler-specific load options.resourceholds the loaded object, such as a Texture.resourcesholds every object the handler produced when there is more than one, such as a cube map and its prefiltered levels.Loading is driven by the registry: call AssetRegistry#load, or set preload so the asset loads when added. Wait for the result with ready or listen for the
loadanderrorevents. unload releases the resource.The
typestring also types the resource:new Asset('brick', 'texture', file)creates anAsset<'texture'>whoseresourceis a Texture once loaded, andapp.assets.find('brick', 'texture')returns one. See AssetMap for the built-in types and for adding application-defined ones. An asset whose type is only known as astringhas aresourceof typeunknown.Example
Template: K