silphius/app/react/context/assets.js
2024-07-30 09:56:53 -05:00

30 lines
733 B
JavaScript

import {Texture} from '@pixi/core';
import {Assets} from '@pixi/assets';
import {createContext, useContext, useEffect} from 'react';
const context = createContext();
export default context;
const loading = {};
export function useAsset(source) {
const [assets, setAssets] = useContext(context);
useEffect(() => {
if (!source) {
return;
}
if (!assets[source]) {
if (!loading[source]) {
(loading[source] = Assets.load(source)).then((asset) => {
setAssets((assets) => ({
...assets,
[source]: asset,
}));
});
}
}
}, [assets, setAssets, source]);
return source ? assets[source] : {data: {meta: {}}, textures: {'': Texture.WHITE}};
}