@react-three/drei 9.97.4 → 9.97.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/Cloud.cjs.js +1 -1
- package/core/Cloud.d.ts +1 -0
- package/core/Cloud.js +3 -1
- package/core/SpriteAnimator.cjs.js +1 -1
- package/core/SpriteAnimator.js +30 -8
- package/core/useSpriteLoader.cjs.js +1 -1
- package/core/useSpriteLoader.js +30 -2
- package/index.cjs.js +1 -1
- package/package.json +1 -1
- package/react-three-drei-0.0.0-semantic-release.tgz +0 -0
package/core/Cloud.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),n=require("@react-three/fiber"),a=require("./useTexture.cjs.js"),o=require("uuid"),u=require("../helpers/deprecated.cjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),n=require("@react-three/fiber"),a=require("./useTexture.cjs.js"),o=require("uuid"),u=require("../helpers/deprecated.cjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var l=i(e),s=c(t);const d=new r.Matrix4,f=new r.Vector3,m=new r.Quaternion,p=new r.Vector3,g=new r.Quaternion,h=new r.Vector3,y=s.createContext(null),x=s.forwardRef((({children:e,material:t=r.MeshLambertMaterial,texture:o="https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png",range:i,limit:c=200,frustumCulled:x,...v},b)=>{var M,w;const C=s.useMemo((()=>class extends t{constructor(){super();const e=parseInt(r.REVISION.replace(/\D+/g,""))>=154?"opaque_fragment":"output_fragment";this.onBeforeCompile=t=>{t.vertexShader="attribute float opacity;\n varying float vOpacity;\n "+t.vertexShader.replace("#include <fog_vertex>","#include <fog_vertex>\n vOpacity = opacity;\n "),t.fragmentShader="varying float vOpacity;\n "+t.fragmentShader.replace(`#include <${e}>`,`#include <${e}>\n gl_FragColor = vec4(outgoingLight, diffuseColor.a * vOpacity);\n `)}}}),[t]);n.extend({CloudMaterial:C});const E=s.useRef(null),A=s.useRef([]),O=s.useMemo((()=>new Float32Array(Array.from({length:c},(()=>1)))),[c]),j=s.useMemo((()=>new Float32Array(Array.from({length:c},(()=>[1,1,1])).flat())),[c]),R=a.useTexture(o);let U,V=0,_=0;const q=new r.Quaternion,F=new r.Vector3(0,0,1),S=new r.Vector3;n.useFrame(((e,t)=>{for(V=e.clock.getElapsedTime(),d.copy(E.current.matrixWorld).invert(),e.camera.matrixWorld.decompose(p,g,h),_=0;_<A.current.length;_++)U=A.current[_],U.ref.current.matrixWorld.decompose(f,m,h),f.add(S.copy(U.position).applyQuaternion(m).multiply(h)),m.copy(g).multiply(q.setFromAxisAngle(F,U.rotation+=t*U.rotationFactor)),h.multiplyScalar(U.volume+(1+Math.sin(V*U.density*U.speed))/2*U.growth),U.matrix.compose(f,m,h).premultiply(d),U.dist=f.distanceTo(p);for(A.current.sort(((e,t)=>t.dist-e.dist)),_=0;_<A.current.length;_++)U=A.current[_],O[_]=U.opacity*(U.dist<U.fade-1?U.dist/U.fade:1),E.current.setMatrixAt(_,U.matrix),E.current.setColorAt(_,U.color);E.current.geometry.attributes.opacity.needsUpdate=!0,E.current.instanceMatrix.needsUpdate=!0,E.current.instanceColor&&(E.current.instanceColor.needsUpdate=!0)})),s.useLayoutEffect((()=>{const e=Math.min(c,void 0!==i?i:c,A.current.length);E.current.count=e,u.setUpdateRange(E.current.instanceMatrix,{offset:0,count:16*e}),E.current.instanceColor&&u.setUpdateRange(E.current.instanceColor,{offset:0,count:3*e}),u.setUpdateRange(E.current.geometry.attributes.opacity,{offset:0,count:e})}));let D=[null!==(M=R.image.width)&&void 0!==M?M:1,null!==(w=R.image.height)&&void 0!==w?w:1],I=Math.max(D[0],D[1]);return D=[D[0]/I,D[1]/I],s.createElement("group",l.default({ref:b},v),s.createElement(y.Provider,{value:A},e,s.createElement("instancedMesh",{matrixAutoUpdate:!1,ref:E,args:[null,null,c],frustumCulled:x},s.createElement("instancedBufferAttribute",{usage:r.DynamicDrawUsage,attach:"instanceColor",args:[j,3]}),s.createElement("planeGeometry",{args:[...D]},s.createElement("instancedBufferAttribute",{usage:r.DynamicDrawUsage,attach:"attributes-opacity",args:[O,1]})),s.createElement("cloudMaterial",{key:t.name,map:R,transparent:!0,depthWrite:!1}))))})),v=s.forwardRef((({opacity:e=1,speed:t=0,bounds:a=[5,1,1],segments:u=20,color:i="#ffffff",fade:c=10,volume:d=6,smallestVolume:f=.25,distribute:m=null,growth:p=4,concentrate:g="inside",seed:h=Math.random(),...x},v)=>{function b(){const e=1e4*Math.sin(h++);return e-Math.floor(e)}const M=s.useContext(y),w=s.useRef(null),[C]=s.useState((()=>o.v4())),E=s.useMemo((()=>[...new Array(u)].map(((e,t)=>({segments:u,bounds:new r.Vector3(1,1,1),position:new r.Vector3,uuid:C,index:t,ref:w,dist:0,matrix:new r.Matrix4,color:new r.Color,rotation:t*(Math.PI/u)})))),[u,C]);return s.useLayoutEffect((()=>{E.forEach(((r,o)=>{var l;n.applyProps(r,{volume:d,color:i,speed:t,growth:p,opacity:e,fade:c,bounds:a,density:Math.max(.5,b()),rotationFactor:Math.max(.2,.5*b())*t});const s=null==m?void 0:m(r,o);(s||u>1)&&r.position.copy(r.bounds).multiply(null!==(l=null==s?void 0:s.point)&&void 0!==l?l:{x:2*b()-1,y:2*b()-1,z:2*b()-1});const h=Math.abs(r.position.x),y=Math.abs(r.position.y),x=Math.abs(r.position.z),v=Math.max(h,y,x);r.length=1,h===v&&(r.length-=h/r.bounds.x),y===v&&(r.length-=y/r.bounds.y),x===v&&(r.length-=x/r.bounds.z),r.volume=(void 0!==(null==s?void 0:s.volume)?s.volume:Math.max(Math.max(0,f),"random"===g?b():"inside"===g?r.length:1-r.length))*d}))}),[g,a,c,i,e,p,d,h,u,t]),s.useLayoutEffect((()=>{const e=E;return M.current=[...M.current,...e],()=>{M.current=M.current.filter((e=>e.uuid!==C))}}),[E]),s.useImperativeHandle(v,(()=>w.current),[]),s.createElement("group",l.default({ref:w},x))})),b=s.forwardRef(((e,t)=>s.useContext(y)?s.createElement(v,l.default({ref:t},e)):s.createElement(x,null,s.createElement(v,l.default({ref:t},e)))));exports.Cloud=b,exports.CloudInstance=v,exports.Clouds=x;
|
package/core/Cloud.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ type CloudProps = JSX.IntrinsicElements['group'] & {
|
|
|
51
51
|
fade?: number;
|
|
52
52
|
opacity?: number;
|
|
53
53
|
color?: ReactThreeFiber.Color;
|
|
54
|
+
frustumCulled?: boolean;
|
|
54
55
|
};
|
|
55
56
|
export declare const Clouds: React.ForwardRefExoticComponent<Omit<CloudsProps, "ref"> & React.RefAttributes<Group>>;
|
|
56
57
|
export declare const CloudInstance: React.ForwardRefExoticComponent<Omit<CloudProps, "ref"> & React.RefAttributes<Group>>;
|
package/core/Cloud.js
CHANGED
|
@@ -20,6 +20,7 @@ const Clouds = /* @__PURE__ */React.forwardRef(({
|
|
|
20
20
|
texture = CLOUD_URL,
|
|
21
21
|
range,
|
|
22
22
|
limit = 200,
|
|
23
|
+
frustumCulled,
|
|
23
24
|
...props
|
|
24
25
|
}, fref) => {
|
|
25
26
|
var _image$width, _image$height;
|
|
@@ -116,7 +117,8 @@ const Clouds = /* @__PURE__ */React.forwardRef(({
|
|
|
116
117
|
}, children, /*#__PURE__*/React.createElement("instancedMesh", {
|
|
117
118
|
matrixAutoUpdate: false,
|
|
118
119
|
ref: instance,
|
|
119
|
-
args: [null, null, limit]
|
|
120
|
+
args: [null, null, limit],
|
|
121
|
+
frustumCulled: frustumCulled
|
|
120
122
|
}, /*#__PURE__*/React.createElement("instancedBufferAttribute", {
|
|
121
123
|
usage: DynamicDrawUsage,
|
|
122
124
|
attach: "instanceColor",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three"),u=require("./Instances.cjs.js"),a=require("./useSpriteLoader.cjs.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("react-merge-refs"),require("react-composer"),require("../helpers/deprecated.cjs.js");var l=c(e),o=s(r),f=s(n);const i=o.createContext(null);const m=o.forwardRef((({startFrame:e,endFrame:r,fps:n,frameName:c,textureDataURL:s,textureImageURL:m,loop:p,numberOfFrames:d,autoPlay:h,animationNames:y,onStart:E,onEnd:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three"),u=require("./Instances.cjs.js"),a=require("./useSpriteLoader.cjs.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("react-merge-refs"),require("react-composer"),require("../helpers/deprecated.cjs.js");var l=c(e),o=s(r),f=s(n);const i=o.createContext(null);const m=o.forwardRef((({startFrame:e,endFrame:r,fps:n,frameName:c,textureDataURL:s,textureImageURL:m,loop:p,numberOfFrames:d,autoPlay:h,animationNames:y,onStart:E,onEnd:v,onLoopEnd:w,onFrame:b,play:g,pause:x,flipX:F,alphaTest:S,children:j,asSprite:R,offset:A,playBackwards:M,resetOnEnd:O,maxItems:z,instanceItems:N,spriteDataset:q,...L},T)=>{var k;const I=o.useRef(),D=o.useRef(null),P=o.useRef(),_=o.useRef(),U=o.useRef(window.performance.now()),B=o.useRef(e||0),C=o.useRef(c||""),G=1e3/(n||30),[H,J]=o.useState(new f.Texture),V=o.useRef(0),[W,X]=o.useState([1,1,1]),K=F?-1:1,[Q,Y]=o.useState(null==R||R),Z=o.useRef(x),$=o.useRef(A),ee=o.useRef(!1),re=o.useRef([]),{spriteObj:te,loadJsonAndTexture:ne}=a.useSpriteLoader(null,null,y,d);function ue(){}const ae=o.useMemo((()=>({current:$.current,offset:$.current,imageUrl:m,reset:ue,hasEnded:!1,ref:T})),[m,q]);o.useImperativeHandle(T,(()=>I.current),[]),o.useLayoutEffect((()=>{$.current=A}),[A]);const ce=(e,r)=>{const t=r/e;return _.current&&_.current.scale.set(1,t,1),[1,t,1]};o.useEffect((()=>{var e;q?se(null==q||null==(e=q.spriteTexture)?void 0:e.clone(),q.spriteData):ne(m,s)}),[q]),o.useEffect((()=>{var e;te&&se(null==te||null==(e=te.spriteTexture)?void 0:e.clone(),null==te?void 0:te.spriteData)}),[te]),o.useEffect((()=>{Y(null==R||R)}),[R]),o.useEffect((()=>{ae.hasEnded=!1,D.current&&!0===M?B.current=D.current.frames.length-1:B.current=0}),[M]),o.useLayoutEffect((()=>{le()}),[H,F]),o.useEffect((()=>{h&&(Z.current=!1)}),[h]),o.useLayoutEffect((()=>{if(C.current!==c&&c&&(B.current=0,C.current=c,ae.hasEnded=!1,D.current)){const{w:e,h:r}=fe(D.current.frames).sourceSize,t=ce(e,r);X(t)}}),[c]);const se=(e,r=null)=>{if(null===r){if(d){const t=e.image.width,n=e.image.height;V.current=d,M&&(B.current=d-1),D.current={frames:[],meta:{version:"1.0",size:{w:t,h:n},scale:"1"}},D.current.frames=r}}else{D.current=r,V.current=D.current.frames.length,M&&(B.current=V.current-1);const{w:t,h:n}=fe(D.current.frames).sourceSize,u=ce(t,n);X(u),P.current&&(P.current.map=e)}if(N)for(var t=0;t<N.length;t++){const e=Object.keys(D.current.frames),r=e[Math.floor(Math.random()*e.length)];re.current.push({key:t,frames:D.current.frames,selectedFrame:r,offset:{x:0,y:0}})}J(e)},le=()=>{if(!D.current)return;const{meta:{size:e},frames:r}=D.current,{w:t,h:n}=Array.isArray(r)?r[0].sourceSize:c&&r[c]?r[c][0].sourceSize:{w:0,h:0};P.current.map.wrapS=P.current.map.wrapT=f.RepeatWrapping,P.current.map.center.set(0,0),P.current.map.repeat.set(1*K/(e.w/t),1/(e.h/n));const u=1/((e.h-1)/n);P.current.map.offset.x=0,P.current.map.offset.y=1-u,E&&E({currentFrameName:c,currentFrame:B.current})},oe=(e,r,t,n)=>{var u=void 0===A?ae.current:A;const a=B.current;let c=0,s=0;ce(e,r);const l=(t.w-1)/e,o=(t.h-1)/r;if(!n[a])return;const{frame:{x:f,y:i},sourceSize:{w:m,h:p}}=n[a],d=1/l,h=1/o;if(c=K>0?d*(f/m):d*(f/m)-P.current.map.repeat.x,s=Math.abs(1-h)-h*(i/p),P.current.map.offset.x=c,P.current.map.offset.y=s,null!=u){let e=Math.floor(u*n.length);e=Math.max(0,Math.min(e,n.length-1)),isNaN(e)&&(e=0),B.current=e}else M?B.current-=1:B.current+=1};t.useFrame(((t,n)=>{var u,a;null!=(u=D.current)&&u.frames&&null!=(a=P.current)&&a.map&&(Z.current||ae.hasEnded||!h&&!g||((()=>{const t=window.performance.now(),n=t-U.current,{meta:{size:u},frames:a}=D.current,{w:s,h:l}=fe(a).sourceSize,o=Array.isArray(a)?a:c?a[c]:[],f=r||o.length-1;var i=void 0===A?ae.current:A,m=M?B.current<0:B.current>f,d=M?B.current===f:0===B.current,h=M?B.current<0:B.current>=f;if(m){if(B.current=p&&null!=e?e:0,M&&(B.current=f),p?null==w||w({currentFrameName:c,currentFrame:B.current}):(null==v||v({currentFrameName:c,currentFrame:B.current}),ae.hasEnded=!O,O&&(Z.current=!0)),!p)return}else d&&(null==E||E({currentFrameName:c,currentFrame:B.current}));void 0!==i&&h?!1===ee.current&&(null==v||v({currentFrameName:c,currentFrame:B.current}),ee.current=!0):ee.current=!1,n<=G||(U.current=t-n%G,oe(s,l,u,o))})(),b&&b({currentFrameName:C.current,currentFrame:B.current})))}));const fe=e=>{if(Array.isArray(e))return e[0];if("object"==typeof e&&null!==e){const r=Object.keys(e);return c?e[c][0]:e[r[0]][0]}return{w:0,h:0}};return o.createElement("group",l.default({},L,{ref:I,scale:function(e,r){let t=[];return"number"==typeof r?t=[r,r,r]:Array.isArray(r)?t=r:r instanceof f.Vector3&&(t=[r.x,r.y,r.z]),e.map(((e,r)=>e*t[r]))}(null!=W?W:[1,1,1],null!==(k=L.scale)&&void 0!==k?k:1)}),o.createElement(i.Provider,{value:ae},o.createElement(o.Suspense,{fallback:null},Q&&o.createElement("sprite",{ref:_,scale:1},o.createElement("spriteMaterial",{premultipliedAlpha:!1,toneMapped:!1,ref:P,map:H,transparent:!0,alphaTest:null!=S?S:0})),!Q&&o.createElement(u.Instances,{limit:null!=z?z:1},o.createElement("planeGeometry",{args:[1,1]}),o.createElement("meshBasicMaterial",{premultipliedAlpha:!1,toneMapped:!1,side:f.DoubleSide,ref:P,map:H,transparent:!0,alphaTest:null!=S?S:0}),(null!=N?N:[0]).map(((e,r)=>o.createElement(u.Instance,{key:r,ref:1===(null==N?void 0:N.length)?_:null,position:e,scale:1}))))),j))}));exports.SpriteAnimator=m,exports.useSpriteAnimator=function(){return o.useContext(i)};
|
package/core/SpriteAnimator.js
CHANGED
|
@@ -38,6 +38,7 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
38
38
|
spriteDataset,
|
|
39
39
|
...props
|
|
40
40
|
}, fref) => {
|
|
41
|
+
var _props$scale;
|
|
41
42
|
const ref = React.useRef();
|
|
42
43
|
const spriteData = React.useRef(null);
|
|
43
44
|
const matRef = React.useRef();
|
|
@@ -223,10 +224,12 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
223
224
|
const frameOffsetY = 1 / framesV;
|
|
224
225
|
matRef.current.map.offset.x = 0.0; //-matRef.current.map.repeat.x
|
|
225
226
|
matRef.current.map.offset.y = 1 - frameOffsetY;
|
|
226
|
-
if (onStart)
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
if (onStart) {
|
|
228
|
+
onStart({
|
|
229
|
+
currentFrameName: frameName,
|
|
230
|
+
currentFrame: currentFrame.current
|
|
231
|
+
});
|
|
232
|
+
}
|
|
230
233
|
};
|
|
231
234
|
|
|
232
235
|
// run the animation on each frame
|
|
@@ -385,15 +388,34 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
385
388
|
};
|
|
386
389
|
}
|
|
387
390
|
};
|
|
391
|
+
function multiplyScale(initialScale, newScale) {
|
|
392
|
+
let _newScale = [];
|
|
393
|
+
|
|
394
|
+
// If newScale is a single number, convert it to a Vector3
|
|
395
|
+
if (typeof newScale === 'number') {
|
|
396
|
+
_newScale = [newScale, newScale, newScale];
|
|
397
|
+
} else if (Array.isArray(newScale)) {
|
|
398
|
+
// If newScale is an array, convert it to a Vector3
|
|
399
|
+
_newScale = newScale;
|
|
400
|
+
} else if (newScale instanceof THREE.Vector3) {
|
|
401
|
+
_newScale = [newScale.x, newScale.y, newScale.z];
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Multiply the scale values element-wise
|
|
405
|
+
const result = initialScale.map((value, index) => value * _newScale[index]);
|
|
406
|
+
// Convert the result to an array of numbers
|
|
407
|
+
return result;
|
|
408
|
+
}
|
|
388
409
|
return /*#__PURE__*/React.createElement("group", _extends({}, props, {
|
|
389
|
-
ref: ref
|
|
410
|
+
ref: ref,
|
|
411
|
+
scale: multiplyScale(aspect !== null && aspect !== void 0 ? aspect : [1, 1, 1], (_props$scale = props.scale) !== null && _props$scale !== void 0 ? _props$scale : 1.0)
|
|
390
412
|
}), /*#__PURE__*/React.createElement(context.Provider, {
|
|
391
413
|
value: state
|
|
392
414
|
}, /*#__PURE__*/React.createElement(React.Suspense, {
|
|
393
415
|
fallback: null
|
|
394
416
|
}, displayAsSprite && /*#__PURE__*/React.createElement("sprite", {
|
|
395
417
|
ref: spriteRef,
|
|
396
|
-
scale:
|
|
418
|
+
scale: 1.0
|
|
397
419
|
}, /*#__PURE__*/React.createElement("spriteMaterial", {
|
|
398
420
|
premultipliedAlpha: false,
|
|
399
421
|
toneMapped: false,
|
|
@@ -416,9 +438,9 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
416
438
|
}), (instanceItems !== null && instanceItems !== void 0 ? instanceItems : [0]).map((item, index) => {
|
|
417
439
|
return /*#__PURE__*/React.createElement(Instance, {
|
|
418
440
|
key: index,
|
|
419
|
-
ref: spriteRef,
|
|
441
|
+
ref: (instanceItems == null ? void 0 : instanceItems.length) === 1 ? spriteRef : null,
|
|
420
442
|
position: item,
|
|
421
|
-
scale:
|
|
443
|
+
scale: 1.0
|
|
422
444
|
});
|
|
423
445
|
}))), children));
|
|
424
446
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("@react-three/fiber"),t=require("react");function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var s=n(e),o=n(t);const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("@react-three/fiber"),t=require("react");function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var s=n(e),o=n(t);const a=e=>{if(Array.isArray(e))return e[0];if("object"==typeof e&&null!==e){return e[Object.keys(e)[0]][0]}return{w:0,h:0}},u=(e,r,t,n)=>{const o=r*(n.aspect>e/r?n.width/e:n.height/r),a=e*(n.aspect>e/r?n.width/e:n.height/r)*t,u=o*t;let c=Math.min(1,a),i=Math.min(1,u);return a>1&&(c=1,i=u/a*1),new s.Vector3(c,i,1)};function c(n,c,i,f,l){const h=r.useThree((e=>e.viewport)),m=o.useRef(null),d=o.useRef(0),[p,w]=t.useState(null),[y,x]=o.useState(new s.Texture),g=new s.TextureLoader,[S,L]=t.useState(null);function b(e){(e||n)&&new Promise((r=>{g.load(null!=e?e:n,r)})).then((e=>{O(null,e)}))}function j(e,r,t){const n=fetch(e).then((e=>e.json())),s=new Promise((e=>{g.load(r,e)}));Promise.all([n,s]).then((e=>{t(e[0],e[1])}))}o.useLayoutEffect((()=>(c&&n?j(c,n,O):n&&b(),()=>{n&&r.useLoader.clear(e.TextureLoader,n)})),[]);const O=(e,r)=>{let t=new s.Vector3(1,1,1);if(null===e){if(r&&f){const e=r.image.width,n=r.image.height,s=e/f,o=n;if(d.current=f,m.current={frames:[],meta:{version:"1.0",size:{w:e,h:n},scale:"1"}},parseInt(s.toString(),10)===s)for(let e=0;e<f;e++)m.current.frames.push({frame:{x:e*s,y:0,w:s,h:o},rotated:!1,trimmed:!1,spriteSourceSize:{x:0,y:0,w:s,h:o},sourceSize:{w:s,h:n}});t=u(s,o,.1,h)}}else if(r){m.current=e,m.current.frames=z(),d.current=Array.isArray(e.frames)?e.frames.length:Object.keys(e.frames).length;const{w:r,h:n}=a(e.frames).sourceSize;t=u(r,n,.1,h)}w(m.current),r.encoding=s.sRGBEncoding,x(r),L({spriteTexture:r,spriteData:m.current,aspect:t})},z=()=>{const e={},r=m.current,t=i;if(t&&Array.isArray(r.frames)){for(let n=0;n<t.length;n++){e[t[n]]=[];for(const s of r.frames){const r=s.frame,o=r.x,a=r.y,u=r.w,c=r.h,i=s.sourceSize.w,f=s.sourceSize.h;"string"==typeof s.filename&&-1!==s.filename.toLowerCase().indexOf(t[n].toLowerCase())&&e[t[n]].push({x:o,y:a,w:u,h:c,frame:r,sourceSize:{w:i,h:f}})}}return e}if(t&&"object"==typeof r.frames){for(let n=0;n<t.length;n++){e[t[n]]=[];for(const s in r.frames){const o=r.frames[s],a=o.frame,u=a.x,c=a.y,i=a.w,f=a.h,l=o.sourceSize.w,h=o.sourceSize.h;"string"==typeof s&&-1!==s.toLowerCase().indexOf(t[n].toLowerCase())&&e[t[n]].push({x:u,y:c,w:i,h:f,frame:a,sourceSize:{w:l,h:h}})}}return e}{const e=[];for(const t in r.frames)e.push(r.frames[t]);return e}};return o.useLayoutEffect((()=>{null==l||l(y,p)}),[y,p]),{spriteObj:S,loadJsonAndTexture:function(e,r){r&&e?j(r,e,O):b(e)}}}c.preload=t=>r.useLoader.preload(e.TextureLoader,t),c.clear=t=>r.useLoader.clear(e.TextureLoader,t),exports.calculateAspectRatio=u,exports.getFirstItem=a,exports.useSpriteLoader=c;
|
package/core/useSpriteLoader.js
CHANGED
|
@@ -137,7 +137,7 @@ function useSpriteLoader(input, json, animationNames, numberOfFrames, onLoad) {
|
|
|
137
137
|
}
|
|
138
138
|
} else if (_spriteTexture) {
|
|
139
139
|
spriteDataRef.current = json;
|
|
140
|
-
spriteDataRef.current.frames =
|
|
140
|
+
spriteDataRef.current.frames = parseFrames();
|
|
141
141
|
totalFrames.current = Array.isArray(json.frames) ? json.frames.length : Object.keys(json.frames).length;
|
|
142
142
|
const {
|
|
143
143
|
w,
|
|
@@ -160,7 +160,35 @@ function useSpriteLoader(input, json, animationNames, numberOfFrames, onLoad) {
|
|
|
160
160
|
const sprites = {};
|
|
161
161
|
const data = spriteDataRef.current;
|
|
162
162
|
const delimiters = animationNames;
|
|
163
|
-
if (delimiters) {
|
|
163
|
+
if (delimiters && Array.isArray(data['frames'])) {
|
|
164
|
+
for (let i = 0; i < delimiters.length; i++) {
|
|
165
|
+
// we convert each named animation group into an array
|
|
166
|
+
sprites[delimiters[i]] = [];
|
|
167
|
+
for (const value of data['frames']) {
|
|
168
|
+
const frameData = value['frame'];
|
|
169
|
+
const x = frameData['x'];
|
|
170
|
+
const y = frameData['y'];
|
|
171
|
+
const width = frameData['w'];
|
|
172
|
+
const height = frameData['h'];
|
|
173
|
+
const sourceWidth = value['sourceSize']['w'];
|
|
174
|
+
const sourceHeight = value['sourceSize']['h'];
|
|
175
|
+
if (typeof value['filename'] === 'string' && value['filename'].toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) {
|
|
176
|
+
sprites[delimiters[i]].push({
|
|
177
|
+
x: x,
|
|
178
|
+
y: y,
|
|
179
|
+
w: width,
|
|
180
|
+
h: height,
|
|
181
|
+
frame: frameData,
|
|
182
|
+
sourceSize: {
|
|
183
|
+
w: sourceWidth,
|
|
184
|
+
h: sourceHeight
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return sprites;
|
|
191
|
+
} else if (delimiters && typeof data['frames'] === 'object') {
|
|
164
192
|
for (let i = 0; i < delimiters.length; i++) {
|
|
165
193
|
// we convert each named animation group into an array
|
|
166
194
|
sprites[delimiters[i]] = [];
|