@react-three/drei 9.97.0 → 9.97.1
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.
|
@@ -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:w,onLoopEnd:v,onFrame:
|
|
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:w,onLoopEnd:v,onFrame:b,play:g,pause:x,flipX:F,alphaTest:S,children:j,asSprite:R,offset:M,playBackwards:O,resetOnEnd:A,maxItems:z,instanceItems:N,spriteDataset:q,...L},T)=>{const k=o.useRef(),I=o.useRef(null),D=o.useRef(),P=o.useRef(),_=o.useRef(window.performance.now()),U=o.useRef(e||0),B=o.useRef(c||""),C=1e3/(n||30),[G,H]=o.useState(new f.Texture),J=o.useRef(0),[W,X]=o.useState([1,1,1]),K=F?-1:1,[Q,V]=o.useState(null==R||R),Y=o.useRef(x),Z=o.useRef(M),$=o.useRef(!1),ee=o.useRef([]),{spriteObj:re,loadJsonAndTexture:te}=a.useSpriteLoader(null,null,y,d);function ne(){}const ue=o.useMemo((()=>({current:Z.current,offset:Z.current,imageUrl:m,reset:ne,hasEnded:!1,ref:T})),[m,q]);o.useImperativeHandle(T,(()=>k.current),[]),o.useLayoutEffect((()=>{Z.current=M}),[M]);const ae=(e,r)=>{const t=r/e;return P.current&&P.current.scale.set(1,t,1),[1,t,1]};o.useEffect((()=>{var e;q?ce(null==q||null==(e=q.spriteTexture)?void 0:e.clone(),q.spriteData):te(m,s)}),[q]),o.useEffect((()=>{var e;re&&ce(null==re||null==(e=re.spriteTexture)?void 0:e.clone(),null==re?void 0:re.spriteData)}),[re]),o.useEffect((()=>{V(null==R||R)}),[R]),o.useEffect((()=>{ue.hasEnded=!1,I.current&&!0===O?U.current=I.current.frames.length-1:U.current=0}),[O]),o.useLayoutEffect((()=>{se()}),[G,F]),o.useEffect((()=>{h&&(Y.current=!1)}),[h]),o.useLayoutEffect((()=>{if(B.current!==c&&c&&(U.current=0,B.current=c,ue.hasEnded=!1,I.current)){const{w:e,h:r}=oe(I.current.frames).sourceSize,t=ae(e,r);X(t)}}),[c]);const ce=(e,r=null)=>{if(null===r){if(d){const t=e.image.width,n=e.image.height;J.current=d,O&&(U.current=d-1),I.current={frames:[],meta:{version:"1.0",size:{w:t,h:n},scale:"1"}},I.current.frames=r}}else{I.current=r,J.current=I.current.frames.length,O&&(U.current=J.current-1);const{w:t,h:n}=oe(I.current.frames).sourceSize,u=ae(t,n);X(u),D.current&&(D.current.map=e)}if(N)for(var t=0;t<N.length;t++){const e=Object.keys(I.current.frames),r=e[Math.floor(Math.random()*e.length)];ee.current.push({key:t,frames:I.current.frames,selectedFrame:r,offset:{x:0,y:0}})}H(e)},se=()=>{if(!I.current)return;const{meta:{size:e},frames:r}=I.current,{w:t,h:n}=Array.isArray(r)?r[0].sourceSize:c&&r[c]?r[c][0].sourceSize:{w:0,h:0};D.current.map.wrapS=D.current.map.wrapT=f.RepeatWrapping,D.current.map.center.set(0,0),D.current.map.repeat.set(1*K/(e.w/t),1/(e.h/n));const u=1/((e.h-1)/n);D.current.map.offset.x=0,D.current.map.offset.y=1-u,E&&E({currentFrameName:c,currentFrame:U.current})},le=(e,r,t,n)=>{var u=void 0===M?ue.current:M;const a=U.current;let c=0,s=0;ae(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)-D.current.map.repeat.x,s=Math.abs(1-h)-h*(i/p),D.current.map.offset.x=c,D.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),U.current=e}else O?U.current-=1:U.current+=1};t.useFrame(((t,n)=>{var u,a;null!=(u=I.current)&&u.frames&&null!=(a=D.current)&&a.map&&(Y.current||ue.hasEnded||!h&&!g||((()=>{const t=window.performance.now(),n=t-_.current,{meta:{size:u},frames:a}=I.current,{w:s,h:l}=oe(a).sourceSize,o=Array.isArray(a)?a:c?a[c]:[],f=r||o.length-1;var i=void 0===M?ue.current:M,m=O?U.current<0:U.current>f,d=O?U.current===f:0===U.current,h=O?U.current<0:U.current>=f;if(m){if(U.current=p&&null!=e?e:0,O&&(U.current=f),p?null==v||v({currentFrameName:c,currentFrame:U.current}):(null==w||w({currentFrameName:c,currentFrame:U.current}),ue.hasEnded=!A,A&&(Y.current=!0)),!p)return}else d&&(null==E||E({currentFrameName:c,currentFrame:U.current}));void 0!==i&&h?!1===$.current&&(null==w||w({currentFrameName:c,currentFrame:U.current}),$.current=!0):$.current=!1,n<=C||(_.current=t-n%C,le(s,l,u,o))})(),b&&b({currentFrameName:B.current,currentFrame:U.current})))}));const oe=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:k}),o.createElement(i.Provider,{value:ue},o.createElement(o.Suspense,{fallback:null},Q&&o.createElement("sprite",{ref:P,scale:W},o.createElement("spriteMaterial",{premultipliedAlpha:!1,toneMapped:!1,ref:D,map:G,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:D,map:G,transparent:!0,alphaTest:null!=S?S:0}),(null!=N?N:[0]).map(((e,r)=>o.createElement(u.Instance,{key:r,ref:P,position:e,scale:W}))))),j))}));exports.SpriteAnimator=m,exports.useSpriteAnimator=function(){return o.useContext(i)};
|
package/core/SpriteAnimator.js
CHANGED
|
@@ -118,12 +118,12 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
118
118
|
pauseRef.current = false;
|
|
119
119
|
}
|
|
120
120
|
}, [autoPlay]);
|
|
121
|
-
React.
|
|
121
|
+
React.useLayoutEffect(() => {
|
|
122
122
|
if (currentFrameName.current !== frameName && frameName) {
|
|
123
123
|
currentFrame.current = 0;
|
|
124
124
|
currentFrameName.current = frameName;
|
|
125
125
|
state.hasEnded = false;
|
|
126
|
-
modifySpritePosition()
|
|
126
|
+
// modifySpritePosition()
|
|
127
127
|
if (spriteData.current) {
|
|
128
128
|
const {
|
|
129
129
|
w,
|
|
@@ -339,7 +339,6 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
339
339
|
// Ensure the frame index is within the valid range
|
|
340
340
|
frameIndex = Math.max(0, Math.min(frameIndex, spriteFrames.length - 1));
|
|
341
341
|
if (isNaN(frameIndex)) {
|
|
342
|
-
console.log('nan frame detected');
|
|
343
342
|
frameIndex = 0; //fallback
|
|
344
343
|
}
|
|
345
344
|
|
|
@@ -403,7 +402,7 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
403
402
|
transparent: true,
|
|
404
403
|
alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
|
|
405
404
|
})), !displayAsSprite && /*#__PURE__*/React.createElement(Instances, {
|
|
406
|
-
limit: maxItems // Optional: max amount of items (for calculating buffer size)
|
|
405
|
+
limit: maxItems !== null && maxItems !== void 0 ? maxItems : 1 // Optional: max amount of items (for calculating buffer size)
|
|
407
406
|
}, /*#__PURE__*/React.createElement("planeGeometry", {
|
|
408
407
|
args: [1, 1]
|
|
409
408
|
}), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
@@ -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),
|
|
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 u=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}},a=(e,r,t,n)=>{const o=r*(n.aspect>e/r?n.width/e:n.height/r),u=e*(n.aspect>e/r?n.width/e:n.height/r)*t,a=o*t;let c=Math.min(1,u),i=Math.min(1,a);return u>1&&(c=1,i=a/u*1),new s.Vector3(c,i,1)};function c(n,c,i,f,l){const h=r.useThree((e=>e.viewport)),d=o.useRef(null),m=o.useRef(0),[p,w]=t.useState(null),[y,g]=o.useState(new s.Texture),x=new s.TextureLoader,[b,L]=t.useState(null);function S(e){(e||n)&&new Promise((r=>{x.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=>{x.load(r,e)}));Promise.all([n,s]).then((e=>{t(e[0],e[1])}))}o.useLayoutEffect((()=>(c&&n?j(c,n,O):n&&S(),()=>{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(m.current=f,d.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++)d.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=a(s,o,.1,h)}}else if(r){d.current=e,d.current.frames=Array.isArray(e.frames)?e.frames:z(),m.current=Array.isArray(e.frames)?e.frames.length:Object.keys(e.frames).length;const{w:r,h:n}=u(e.frames).sourceSize;t=a(r,n,.1,h)}w(d.current),r.encoding=s.sRGBEncoding,g(r),L({spriteTexture:r,spriteData:d.current,aspect:t})},z=()=>{const e={},r=d.current,t=i;if(t){for(let n=0;n<t.length;n++){e[t[n]]=[];for(const s in r.frames){const o=r.frames[s],u=o.frame,a=u.x,c=u.y,i=u.w,f=u.h,l=o.sourceSize.w,h=o.sourceSize.h;"string"==typeof s&&-1!==s.toLowerCase().indexOf(t[n].toLowerCase())&&e[t[n]].push({x:a,y:c,w:i,h:f,frame:u,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:b,loadJsonAndTexture:function(e,r){r&&e?j(r,e,O):S(e)}}}c.preload=t=>r.useLoader.preload(e.TextureLoader,t),c.clear=t=>r.useLoader.clear(e.TextureLoader,t),exports.calculateAspectRatio=a,exports.getFirstItem=u,exports.useSpriteLoader=c;
|
package/core/useSpriteLoader.js
CHANGED
|
@@ -2,7 +2,7 @@ import * as THREE from 'three';
|
|
|
2
2
|
import { TextureLoader } from 'three';
|
|
3
3
|
import { useThree, useLoader } from '@react-three/fiber';
|
|
4
4
|
import * as React from 'react';
|
|
5
|
-
import { useState
|
|
5
|
+
import { useState } from 'react';
|
|
6
6
|
|
|
7
7
|
// utils
|
|
8
8
|
const getFirstItem = param => {
|
|
@@ -37,7 +37,6 @@ const calculateAspectRatio = (width, height, factor, v) => {
|
|
|
37
37
|
};
|
|
38
38
|
function useSpriteLoader(input, json, animationNames, numberOfFrames, onLoad) {
|
|
39
39
|
const v = useThree(state => state.viewport);
|
|
40
|
-
const gl = useThree(state => state.gl);
|
|
41
40
|
const spriteDataRef = React.useRef(null);
|
|
42
41
|
const totalFrames = React.useRef(0);
|
|
43
42
|
const aspectFactor = 0.1;
|
|
@@ -163,6 +162,7 @@ function useSpriteLoader(input, json, animationNames, numberOfFrames, onLoad) {
|
|
|
163
162
|
const delimiters = animationNames;
|
|
164
163
|
if (delimiters) {
|
|
165
164
|
for (let i = 0; i < delimiters.length; i++) {
|
|
165
|
+
// we convert each named animation group into an array
|
|
166
166
|
sprites[delimiters[i]] = [];
|
|
167
167
|
for (const innerKey in data['frames']) {
|
|
168
168
|
const value = data['frames'][innerKey];
|
|
@@ -188,22 +188,19 @@ function useSpriteLoader(input, json, animationNames, numberOfFrames, onLoad) {
|
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
|
+
return sprites;
|
|
192
|
+
} else {
|
|
193
|
+
// we need to convert it into an array
|
|
194
|
+
const spritesArr = [];
|
|
195
|
+
for (const key in data.frames) {
|
|
196
|
+
spritesArr.push(data.frames[key]);
|
|
197
|
+
}
|
|
198
|
+
return spritesArr;
|
|
191
199
|
}
|
|
192
|
-
return sprites;
|
|
193
200
|
};
|
|
194
201
|
React.useLayoutEffect(() => {
|
|
195
202
|
onLoad == null || onLoad(spriteTexture, spriteData);
|
|
196
203
|
}, [spriteTexture, spriteData]);
|
|
197
|
-
|
|
198
|
-
// https://github.com/mrdoob/three.js/issues/22696
|
|
199
|
-
// Upload the texture to the GPU immediately instead of waiting for the first render
|
|
200
|
-
// NOTE: only available for WebGLRenderer
|
|
201
|
-
useEffect(() => {
|
|
202
|
-
if ('initTexture' in gl) {
|
|
203
|
-
const array = Array.isArray(spriteTexture) ? spriteTexture : [spriteTexture];
|
|
204
|
-
array.forEach(gl.initTexture);
|
|
205
|
-
}
|
|
206
|
-
}, [gl, spriteTexture]);
|
|
207
204
|
return {
|
|
208
205
|
spriteObj,
|
|
209
206
|
loadJsonAndTexture
|