playcanvas
Version:
PlayCanvas WebGL game engine
54 lines (51 loc) • 1.85 kB
JavaScript
import { Render } from '../../scene/render.js';
import { ResourceHandler } from './handler.js';
function onContainerAssetLoaded(containerAsset) {
var renderAsset = this;
if (!renderAsset.resource) return;
var containerResource = containerAsset.resource;
var render = containerResource.renders && containerResource.renders[renderAsset.data.renderIndex];
if (render) {
renderAsset.resource.meshes = render.resource.meshes;
}
}
function onContainerAssetAdded(containerAsset) {
var renderAsset = this;
renderAsset.registry.off("load:" + containerAsset.id, onContainerAssetLoaded, renderAsset);
renderAsset.registry.on("load:" + containerAsset.id, onContainerAssetLoaded, renderAsset);
renderAsset.registry.off("remove:" + containerAsset.id, onContainerAssetRemoved, renderAsset);
renderAsset.registry.once("remove:" + containerAsset.id, onContainerAssetRemoved, renderAsset);
if (!containerAsset.resource) {
renderAsset.registry.load(containerAsset);
} else {
onContainerAssetLoaded.call(renderAsset, containerAsset);
}
}
function onContainerAssetRemoved(containerAsset) {
var renderAsset = this;
renderAsset.registry.off("load:" + containerAsset.id, onContainerAssetLoaded, renderAsset);
if (renderAsset.resource) {
renderAsset.resource.destroy();
}
}
class RenderHandler extends ResourceHandler {
open(url, data) {
return new Render();
}
patch(asset, registry) {
if (!asset.data.containerAsset) {
return;
}
var containerAsset = registry.get(asset.data.containerAsset);
if (!containerAsset) {
registry.once("add:" + asset.data.containerAsset, onContainerAssetAdded, asset);
return;
}
onContainerAssetAdded.call(asset, containerAsset);
}
constructor(app){
super(app, 'render');
this._registry = app.assets;
}
}
export { RenderHandler };