pixi-fusion
Version:
This module offers a set of common components needed for playing games.
44 lines (43 loc) • 1.42 kB
JavaScript
import React, { useCallback, useEffect, useMemo, useState } from "react";
import { AssetsManagerContext } from "./AssetsManager.context";
import { Assets } from "pixi.js";
export const AssetsManager = ({ children }) => {
const [isFetching, setIsFetching] = useState(false);
const [isFetched, setIsFetched] = useState(false);
const [isError, setIsError] = useState(false);
const [error, setError] = useState();
useEffect(() => {
Assets.cache.reset();
}, []);
const load = useCallback(async (groupId, localAsset) => {
try {
Assets.addBundle(groupId, localAsset);
await Assets.loadBundle(groupId);
setIsFetched(true);
}
catch (e) {
setIsError(true);
setIsFetched(false);
setError(e);
}
finally {
setIsFetching(false);
}
}, []);
const unload = useCallback((groupId) => {
Assets.unloadBundle(groupId);
}, []);
const getAsset = useCallback((alias) => {
return Assets.get(alias);
}, []);
const conextValue = useMemo(() => ({
load,
unload,
getAsset,
isFetching,
isFetched,
isError,
error
}), [load, unload, getAsset, isFetching, isFetched, isError, error]);
return React.createElement(AssetsManagerContext.Provider, { value: conextValue }, children);
};