@eva/react-eva
Version:
React EVA是一个让开发同学能够在React技术体系下,利用EVA JS的游戏研发能力,开发动画、游戏类场景的框架。它可以让开发同学用熟悉的JSX和Hooks语法编写动画、游戏场景的代码。
41 lines (34 loc) • 987 B
text/typescript
import {useMemo} from 'react';
import {resource} from '@eva/eva.js';
let resourceCount = 0;
const resourceNameMap = {};
export default function useResource({name, type, src, preload}) {
const urls = Object.keys(src).sort().map(key => {
if (typeof src[key] === 'string') {
return src[key];
} else {
return src[key].url || src[key].src;
}
});
return useMemo(() => {
const mapKey = urls.join('|');
const resourceCacheName = resourceNameMap[mapKey];
let resourceName;
if ( resourceCacheName !== undefined &&
(name === undefined || name === resourceCacheName)) {
resourceName = resourceCacheName;
} else {
resourceName = name || `resource_${type}_${++resourceCount}`;
resourceNameMap[mapKey] = resourceName;
resource.addResource([
{
name: resourceName,
type,
src,
preload: preload ?? true,
},
]);
}
return resourceName;
}, urls);
}