@react-three/drei 9.92.7 → 9.93.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.
package/README.md CHANGED
@@ -2545,8 +2545,16 @@ type Props = {
2545
2545
  alphaTest?: number
2546
2546
  /** Displays the texture on a SpriteGeometry always facing the camera, if set to false, it renders on a PlaneGeometry */
2547
2547
  asSprite?: boolean
2548
+ /** Allows for manual update of the sprite animation e.g: via ScrollControls */
2549
+ offset?: number
2550
+ /** Allows the sprite animation to start from the end towards the start */
2551
+ playBackwards: boolean
2548
2552
  /** Allows the animation to be paused after it ended so it can be restarted on demand via auto */
2549
2553
  resetOnEnd?: boolean
2554
+ /** An array of items to create instances from */
2555
+ instanceItems?: any[]
2556
+ /** The max number of items to instance (optional) */
2557
+ maxItems?: number
2550
2558
  }
2551
2559
  ```
2552
2560
 
@@ -2570,6 +2578,37 @@ Notes:
2570
2578
  />
2571
2579
  ```
2572
2580
 
2581
+ ScrollControls example
2582
+
2583
+ ```jsx
2584
+ ;<ScrollControls damping={0.2} maxSpeed={0.5} pages={2}>
2585
+ <SpriteAnimator
2586
+ position={[0.0, -1.5, -1.5]}
2587
+ startFrame={0}
2588
+ onEnd={doSomethingOnEnd}
2589
+ onStart={doSomethingOnStart}
2590
+ autoPlay={true}
2591
+ textureImageURL={'sprite.png'}
2592
+ textureDataURL={'sprite.json'}
2593
+ >
2594
+ <FireScroll />
2595
+ </SpriteAnimator>
2596
+ </ScrollControls>
2597
+
2598
+ function FireScroll() {
2599
+ const sprite = useSpriteAnimator()
2600
+ const scroll = useScroll()
2601
+ const ref = React.useRef()
2602
+ useFrame(() => {
2603
+ if (sprite && scroll) {
2604
+ sprite.current = scroll.offset
2605
+ }
2606
+ })
2607
+
2608
+ return null
2609
+ }
2610
+ ```
2611
+
2573
2612
  #### Stats
2574
2613
 
2575
2614
  [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.vercel.app/?path=/story/misc-stats--default-story)
package/core/Line.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"),i=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(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 a=o(e),c=s(t);const u=c.forwardRef((function({points:e,color:t="black",vertexColors:o,linewidth:s,lineWidth:u,segments:l,dashed:f,...d},m){const h=n.useThree((e=>e.size)),p=c.useMemo((()=>l?new i.LineSegments2:new i.Line2),[l]),[b]=c.useState((()=>new i.LineMaterial)),y=c.useMemo((()=>{const t=l?new i.LineSegmentsGeometry:new i.LineGeometry,n=e.map((e=>{const t=Array.isArray(e);return e instanceof r.Vector3?[e.x,e.y,e.z]:e instanceof r.Vector2?[e.x,e.y,0]:t&&3===e.length?[e[0],e[1],e[2]]:t&&2===e.length?[e[0],e[1],0]:e}));if(t.setPositions(n.flat()),o){const e=o.map((e=>e instanceof r.Color?e.toArray():e));t.setColors(e.flat())}return t}),[e,l,o]);return c.useLayoutEffect((()=>{p.computeLineDistances()}),[e,p]),c.useLayoutEffect((()=>{f?b.defines.USE_DASH="":delete b.defines.USE_DASH,b.needsUpdate=!0}),[f,b]),c.useEffect((()=>()=>y.dispose()),[y]),c.createElement("primitive",a.default({object:p,ref:m},d),c.createElement("primitive",{object:y,attach:"geometry"}),c.createElement("primitive",a.default({object:b,attach:"material",color:t,vertexColors:Boolean(o),resolution:[h.width,h.height],linewidth:null!=s?s:u,dashed:f},d)))}));exports.Line=u;
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"),i=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(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 a=o(e),c=s(t);const u=c.forwardRef((function({points:e,color:t="black",vertexColors:o,linewidth:s,lineWidth:u,segments:l,dashed:f,...d},m){const h=n.useThree((e=>e.size)),p=c.useMemo((()=>l?new i.LineSegments2:new i.Line2),[l]),[b]=c.useState((()=>new i.LineMaterial)),y=c.useMemo((()=>{const t=l?new i.LineSegmentsGeometry:new i.LineGeometry,n=e.map((e=>{const t=Array.isArray(e);return e instanceof r.Vector3||e instanceof r.Vector4?[e.x,e.y,e.z]:e instanceof r.Vector2?[e.x,e.y,0]:t&&3===e.length?[e[0],e[1],e[2]]:t&&2===e.length?[e[0],e[1],0]:e}));if(t.setPositions(n.flat()),o){const e=o.map((e=>e instanceof r.Color?e.toArray():e));t.setColors(e.flat())}return t}),[e,l,o]);return c.useLayoutEffect((()=>{p.computeLineDistances()}),[e,p]),c.useLayoutEffect((()=>{f?b.defines.USE_DASH="":delete b.defines.USE_DASH,b.needsUpdate=!0}),[f,b]),c.useEffect((()=>()=>y.dispose()),[y]),c.createElement("primitive",a.default({object:p,ref:m},d),c.createElement("primitive",{object:y,attach:"geometry"}),c.createElement("primitive",a.default({object:b,attach:"material",color:t,vertexColors:Boolean(o),resolution:[h.width,h.height],linewidth:null!=s?s:u,dashed:f},d)))}));exports.Line=u;
package/core/Line.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as React from 'react';
3
- import { Vector3, Vector2, Color } from 'three';
3
+ import { Vector3, Vector4, Vector2, Color } from 'three';
4
4
  import { useThree } from '@react-three/fiber';
5
5
  import { LineSegments2, Line2, LineMaterial, LineSegmentsGeometry, LineGeometry } from 'three-stdlib';
6
6
 
@@ -21,7 +21,7 @@ const Line = /* @__PURE__ */React.forwardRef(function Line({
21
21
  const geom = segments ? new LineSegmentsGeometry() : new LineGeometry();
22
22
  const pValues = points.map(p => {
23
23
  const isArray = Array.isArray(p);
24
- return p instanceof Vector3 ? [p.x, p.y, p.z] : p instanceof Vector2 ? [p.x, p.y, 0] : isArray && p.length === 3 ? [p[0], p[1], p[2]] : isArray && p.length === 2 ? [p[0], p[1], 0] : p;
24
+ return p instanceof Vector3 || p instanceof Vector4 ? [p.x, p.y, p.z] : p instanceof Vector2 ? [p.x, p.y, 0] : isArray && p.length === 3 ? [p[0], p[1], p[2]] : isArray && p.length === 2 ? [p[0], p[1], 0] : p;
25
25
  });
26
26
  geom.setPositions(pValues.flat());
27
27
  if (vertexColors) {
@@ -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");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(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=a(e),c=u(r),f=u(n);const o=c.forwardRef((({startFrame:e,endFrame:r,fps:n,frameName:a,textureDataURL:u,textureImageURL:o,loop:m,numberOfFrames:l,autoPlay:i,animationNames:p,onStart:h,onEnd:w,onLoopEnd:d,onFrame:y,play:S,pause:b,flipX:x,alphaTest:E,children:g,asSprite:z,resetOnEnd:R,...F},A)=>{const O=c.useRef(null),[j,L]=c.useState(!1),v=c.useRef(!1),M=c.useRef(),P=c.useRef(),T=c.useRef(window.performance.now()),N=c.useRef(),k=c.useRef(e||0),q=c.useRef(a||""),_=1e3/(n||30),[D,C]=c.useState(new f.Texture),I=c.useRef(0),[U,B]=c.useState([1,1,1]),G=x?-1:1,[W,X]=c.useState(null==z||z),H=c.useRef(b);const J=(e,r)=>{const t=r/e;return P.current&&P.current.scale.set(1,t,1),[1,t,1]};c.useEffect((()=>{if(u&&o)!function(e,r,t){const n=new f.TextureLoader,a=fetch(e).then((e=>e.json())),u=new Promise((e=>{n.load(r,e)}));Promise.all([a,u]).then((e=>{t(e[0],e[1])}))}(u,o,K);else if(o){const e=new f.TextureLoader;new Promise((r=>{e.load(o,r)})).then((e=>{K(null,e)}))}}),[]),c.useEffect((()=>{X(null==z||z)}),[z]),c.useLayoutEffect((()=>{V()}),[D,x]),c.useEffect((()=>{i&&(H.current=!1)}),[i]),c.useEffect((()=>{if(q.current!==a&&a&&(k.current=0,q.current=a,v.current=!1,V(),O.current)){const{w:e,h:r}=Z(O.current.frames).sourceSize,t=J(e,r);B(t)}}),[a]);const K=(e,r)=>{if(null===e){if(l){const e=r.image.width,t=r.image.height,n=e/l,a=t;if(N.current=r,I.current=l,O.current={frames:[],meta:{version:"1.0",size:{w:e,h:t},scale:"1"}},parseInt(n.toString(),10)===n)for(let e=0;e<l;e++)O.current.frames.push({frame:{x:e*n,y:0,w:n,h:a},rotated:!1,trimmed:!1,spriteSourceSize:{x:0,y:0,w:n,h:a},sourceSize:{w:n,h:t}})}}else{O.current=e,O.current.frames=Array.isArray(e.frames)?e.frames:Q(),I.current=Array.isArray(e.frames)?e.frames.length:Object.keys(e.frames).length,N.current=r;const{w:t,h:n}=Z(e.frames).sourceSize,a=J(t,n);B(a),M.current&&(M.current.map=r)}r.premultiplyAlpha=!1,C(r)},Q=()=>{const e={},r=O.current,t=p;if(t){for(let n=0;n<t.length;n++){e[t[n]]=[];for(const a in r.frames){const u=r.frames[a],s=u.frame,c=s.x,f=s.y,o=s.w,m=s.h,l=u.sourceSize.w,i=u.sourceSize.h;-1!==a.toLowerCase().indexOf(t[n].toLowerCase())&&e[t[n]].push({x:c,y:f,w:o,h:m,frame:s,sourceSize:{w:l,h:i}})}}return e}if(a){const e=[];for(const t in r.frames)e.push(r.frames[t]);return e}},V=()=>{if(!O.current)return;const{meta:{size:e},frames:r}=O.current,{w:t,h:n}=Array.isArray(r)?r[0].sourceSize:a&&r[a]?r[a][0].sourceSize:{w:0,h:0};M.current.map.wrapS=M.current.map.wrapT=f.RepeatWrapping,M.current.map.center.set(0,0),M.current.map.repeat.set(1*G/(e.w/t),1/(e.h/n));const u=1/((e.h-1)/n);M.current.map.offset.x=0,M.current.map.offset.y=1-u,L(!0),h&&h({currentFrameName:a,currentFrame:k.current})},Y=(e,r,t,n)=>{let a=0,u=0;J(e,r);const s=(t.w-1)/e,c=(t.h-1)/r,{frame:{x:f,y:o},sourceSize:{w:m,h:l}}=n[k.current],i=1/s,p=1/c;a=G>0?i*(f/m):i*(f/m)-M.current.map.repeat.x,u=Math.abs(1-p)-p*(o/l),M.current.map.offset.x=a,M.current.map.offset.y=u};t.useFrame(((t,n)=>{var u,s;null!=(u=O.current)&&u.frames&&null!=(s=M.current)&&s.map&&(H.current||v.current||!i&&!S||((()=>{const t=window.performance.now(),n=t-T.current,{meta:{size:u},frames:s}=O.current,{w:c,h:f}=Z(s).sourceSize,o=Array.isArray(s)?s:a?s[a]:[],l=r||o.length-1;k.current>l&&(k.current=m&&null!=e?e:0,m?null==d||d({currentFrameName:a,currentFrame:k.current}):(null==w||w({currentFrameName:a,currentFrame:k.current}),v.current=!R,R&&(H.current=!0)),!m)||n<=_||(T.current=t-n%_,Y(c,f,u,o),k.current+=1)})(),y&&y({currentFrameName:q.current,currentFrame:k.current})))}));const Z=e=>{if(Array.isArray(e))return e[0];if("object"==typeof e&&null!==e){const r=Object.keys(e);return a?e[a][0]:e[r[0]][0]}return{w:0,h:0}};return c.createElement("group",s.default({ref:A},F),c.createElement(c.Suspense,{fallback:null},W&&c.createElement("sprite",{ref:P,scale:U},c.createElement("spriteMaterial",{toneMapped:!1,ref:M,map:D,transparent:!0,alphaTest:null!=E?E:0})),!W&&c.createElement("mesh",{ref:P,scale:U},c.createElement("planeGeometry",{args:[1,1]}),c.createElement("meshBasicMaterial",{toneMapped:!1,side:f.DoubleSide,ref:M,map:D,transparent:!0,alphaTest:null!=E?E:0}))),g)}));exports.SpriteAnimator=o;
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"),a=require("./Instances.cjs.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(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 s=u(e),o=c(r),f=c(n);const l=o.createContext(null);const m=o.forwardRef((({startFrame:e,endFrame:r,fps:n,frameName:u,textureDataURL:c,textureImageURL:m,loop:i,numberOfFrames:p,autoPlay:h,animationNames:d,onStart:w,onEnd:y,onLoopEnd:E,onFrame:g,play:x,pause:S,flipX:b,alphaTest:F,children:R,asSprite:j,offset:v,playBackwards:z,resetOnEnd:M,maxItems:A,instanceItems:O,...N},L)=>{const k=o.useRef(),q=o.useRef(null),I=o.useRef(),P=o.useRef(),T=o.useRef(window.performance.now()),C=o.useRef(),D=o.useRef(e||0),_=o.useRef(u||""),B=1e3/(n||30),[U,G]=o.useState(new f.Texture),H=o.useRef(0),[W,X]=o.useState([1,1,1]),J=b?-1:1,[K,Q]=o.useState(null==j||j),V=o.useRef(S),Y=o.useRef(v),Z=o.useRef(!1),$=o.useRef([]);function ee(){}const re=o.useMemo((()=>({current:Y.current,offset:Y.current,imageUrl:m,reset:ee,hasEnded:!1,ref:L})),[m]);o.useImperativeHandle(L,(()=>k.current),[]),o.useLayoutEffect((()=>{Y.current=v}),[v]);const te=(e,r)=>{const t=r/e;return P.current&&P.current.scale.set(1,t,1),[1,t,1]};o.useEffect((()=>{if(c&&m)!function(e,r,t){const n=new f.TextureLoader,a=fetch(e).then((e=>e.json())),u=new Promise((e=>{n.load(r,e)}));Promise.all([a,u]).then((e=>{t(e[0],e[1])}))}(c,m,ne);else if(m){const e=new f.TextureLoader;new Promise((r=>{e.load(m,r)})).then((e=>{ne(null,e)}))}}),[]),o.useEffect((()=>{Q(null==j||j)}),[j]),o.useEffect((()=>{re.hasEnded=!1,q.current&&!0===z?D.current=q.current.frames.length-1:D.current=0}),[z]),o.useLayoutEffect((()=>{ue()}),[U,b]),o.useEffect((()=>{h&&(V.current=!1)}),[h]),o.useEffect((()=>{if(_.current!==u&&u&&(D.current=0,_.current=u,re.hasEnded=!1,ue(),q.current)){const{w:e,h:r}=se(q.current.frames).sourceSize,t=te(e,r);X(t)}}),[u]);const ne=(e,r)=>{if(null===e){if(p){const e=r.image.width,t=r.image.height,n=e/p,a=t;if(C.current=r,H.current=p,z&&(D.current=p-1),q.current={frames:[],meta:{version:"1.0",size:{w:e,h:t},scale:"1"}},parseInt(n.toString(),10)===n)for(let e=0;e<p;e++)q.current.frames.push({frame:{x:e*n,y:0,w:n,h:a},rotated:!1,trimmed:!1,spriteSourceSize:{x:0,y:0,w:n,h:a},sourceSize:{w:n,h:t}})}}else{q.current=e,q.current.frames=Array.isArray(e.frames)?e.frames:ae(),H.current=Array.isArray(e.frames)?e.frames.length:Object.keys(e.frames).length,C.current=r,z&&(D.current=H.current-1);const{w:t,h:n}=se(e.frames).sourceSize,a=te(t,n);X(a),I.current&&(I.current.map=r)}if(O)for(var t=0;t<O.length;t++){const e=Object.keys(q.current.frames),r=e[Math.floor(Math.random()*e.length)];$.current.push({key:t,frames:q.current.frames,selectedFrame:r,offset:{x:0,y:0}})}r.premultiplyAlpha=!1,G(r)},ae=()=>{const e={},r=q.current,t=d;if(t){for(let n=0;n<t.length;n++){e[t[n]]=[];for(const a in r.frames){const u=r.frames[a],c=u.frame,s=c.x,o=c.y,f=c.w,l=c.h,m=u.sourceSize.w,i=u.sourceSize.h;-1!==a.toLowerCase().indexOf(t[n].toLowerCase())&&e[t[n]].push({x:s,y:o,w:f,h:l,frame:c,sourceSize:{w:m,h:i}})}}return e}if(u){const e=[];for(const t in r.frames)e.push(r.frames[t]);return e}},ue=()=>{if(!q.current)return;const{meta:{size:e},frames:r}=q.current,{w:t,h:n}=Array.isArray(r)?r[0].sourceSize:u&&r[u]?r[u][0].sourceSize:{w:0,h:0};I.current.map.wrapS=I.current.map.wrapT=f.RepeatWrapping,I.current.map.center.set(0,0),I.current.map.repeat.set(1*J/(e.w/t),1/(e.h/n));const a=1/((e.h-1)/n);I.current.map.offset.x=0,I.current.map.offset.y=1-a,w&&w({currentFrameName:u,currentFrame:D.current})},ce=(e,r,t,n)=>{var a=void 0===v?re.current:v;const u=D.current;let c=0,s=0;te(e,r);const o=(t.w-1)/e,f=(t.h-1)/r;if(!n[u])return;const{frame:{x:l,y:m},sourceSize:{w:i,h:p}}=n[u],h=1/o,d=1/f;if(c=J>0?h*(l/i):h*(l/i)-I.current.map.repeat.x,s=Math.abs(1-d)-d*(m/p),I.current.map.offset.x=c,I.current.map.offset.y=s,null!=a){let e=Math.floor(a*n.length);e=Math.max(0,Math.min(e,n.length-1)),isNaN(e)&&(console.log("nan frame detected"),e=0),D.current=e}else z?D.current-=1:D.current+=1};t.useFrame(((t,n)=>{var a,c;null!=(a=q.current)&&a.frames&&null!=(c=I.current)&&c.map&&(V.current||re.hasEnded||!h&&!x||((()=>{const t=window.performance.now(),n=t-T.current,{meta:{size:a},frames:c}=q.current,{w:s,h:o}=se(c).sourceSize,f=Array.isArray(c)?c:u?c[u]:[],l=r||f.length-1;var m=void 0===v?re.current:v,p=z?D.current<0:D.current>l,h=z?D.current===l:0===D.current,d=z?D.current<0:D.current>=l;if(p){if(D.current=i&&null!=e?e:0,z&&(D.current=l),i?null==E||E({currentFrameName:u,currentFrame:D.current}):(null==y||y({currentFrameName:u,currentFrame:D.current}),m||console.log("will end"),re.hasEnded=!M,M&&(V.current=!0)),!i)return}else h&&(null==w||w({currentFrameName:u,currentFrame:D.current}));void 0!==m&&d?!1===Z.current&&(null==y||y({currentFrameName:u,currentFrame:D.current}),Z.current=!0):Z.current=!1,n<=B||(T.current=t-n%B,ce(s,o,a,f))})(),g&&g({currentFrameName:_.current,currentFrame:D.current})))}));const se=e=>{if(Array.isArray(e))return e[0];if("object"==typeof e&&null!==e){const r=Object.keys(e);return u?e[u][0]:e[r[0]][0]}return{w:0,h:0}};return o.createElement("group",s.default({},N,{ref:k}),o.createElement(l.Provider,{value:re},o.createElement(o.Suspense,{fallback:null},K&&o.createElement("sprite",{ref:P,scale:W},o.createElement("spriteMaterial",{toneMapped:!1,ref:I,map:U,transparent:!0,alphaTest:null!=F?F:0})),!K&&o.createElement(a.Instances,{limit:A},o.createElement("planeGeometry",{args:[1,1]}),o.createElement("meshBasicMaterial",{toneMapped:!1,side:f.DoubleSide,ref:I,map:U,transparent:!0,alphaTest:null!=F?F:0}),(null!=O?O:[0]).map(((e,r)=>{const t=U.clone();return I.current&&$.current[r]&&t.offset.set($.current[r].offset.x,$.current[r].offset.y),o.createElement(a.Instance,{key:r,ref:P,position:e,scale:W},o.createElement("meshBasicMaterial",{toneMapped:!1,side:f.DoubleSide,map:t,transparent:!0,alphaTest:null!=F?F:0}))})))),R))}));exports.SpriteAnimator=m,exports.useSpriteAnimator=function(){return o.useContext(l)};
@@ -20,6 +20,18 @@ export type SpriteAnimatorProps = {
20
20
  position?: Array<number>;
21
21
  alphaTest?: number;
22
22
  asSprite?: boolean;
23
+ offset?: number;
24
+ playBackwards?: boolean;
23
25
  resetOnEnd?: boolean;
26
+ maxItems?: number;
27
+ instanceItems?: any[];
24
28
  } & JSX.IntrinsicElements['group'];
29
+ type SpriteAnimatorState = {
30
+ current: number | undefined;
31
+ offset: number | undefined;
32
+ hasEnded: boolean | undefined;
33
+ ref: React.MutableRefObject<any> | undefined | null | ((instance: any) => void);
34
+ };
35
+ export declare function useSpriteAnimator(): SpriteAnimatorState;
25
36
  export declare const SpriteAnimator: React.FC<SpriteAnimatorProps>;
37
+ export {};
@@ -2,7 +2,12 @@ import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as React from 'react';
3
3
  import { useFrame } from '@react-three/fiber';
4
4
  import * as THREE from 'three';
5
+ import { Instances, Instance } from './Instances.js';
5
6
 
7
+ const context = /*#__PURE__*/React.createContext(null);
8
+ function useSpriteAnimator() {
9
+ return React.useContext(context);
10
+ }
6
11
  const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
7
12
  startFrame,
8
13
  endFrame,
@@ -24,12 +29,16 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
24
29
  alphaTest,
25
30
  children,
26
31
  asSprite,
32
+ offset,
33
+ playBackwards,
27
34
  resetOnEnd,
35
+ maxItems,
36
+ instanceItems,
28
37
  ...props
29
38
  }, fref) => {
39
+ const ref = React.useRef();
30
40
  const spriteData = React.useRef(null);
31
- const [isJsonReady, setJsonReady] = React.useState(false);
32
- const hasEnded = React.useRef(false);
41
+ //const hasEnded = React.useRef(false)
33
42
  const matRef = React.useRef();
34
43
  const spriteRef = React.useRef();
35
44
  const timerOffset = React.useRef(window.performance.now());
@@ -43,6 +52,24 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
43
52
  const flipOffset = flipX ? -1 : 1;
44
53
  const [displayAsSprite, setDisplayAsSprite] = React.useState(asSprite !== null && asSprite !== void 0 ? asSprite : true);
45
54
  const pauseRef = React.useRef(pause);
55
+ const pos = React.useRef(offset);
56
+ const softEnd = React.useRef(false);
57
+ const frameBuffer = React.useRef([]);
58
+ //
59
+
60
+ function reset() {}
61
+ const state = React.useMemo(() => ({
62
+ current: pos.current,
63
+ offset: pos.current,
64
+ imageUrl: textureImageURL,
65
+ reset: reset,
66
+ hasEnded: false,
67
+ ref: fref
68
+ }), [textureImageURL]);
69
+ React.useImperativeHandle(fref, () => ref.current, []);
70
+ React.useLayoutEffect(() => {
71
+ pos.current = offset;
72
+ }, [offset]);
46
73
  function loadJsonAndTextureAndExecuteCallback(jsonUrl, textureUrl, callback) {
47
74
  const textureLoader = new THREE.TextureLoader();
48
75
  const jsonPromise = fetch(jsonUrl).then(response => response.json());
@@ -78,6 +105,16 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
78
105
  React.useEffect(() => {
79
106
  setDisplayAsSprite(asSprite !== null && asSprite !== void 0 ? asSprite : true);
80
107
  }, [asSprite]);
108
+
109
+ // support backwards play
110
+ React.useEffect(() => {
111
+ state.hasEnded = false;
112
+ if (spriteData.current && playBackwards === true) {
113
+ currentFrame.current = spriteData.current.frames.length - 1;
114
+ } else {
115
+ currentFrame.current = 0;
116
+ }
117
+ }, [playBackwards]);
81
118
  React.useLayoutEffect(() => {
82
119
  modifySpritePosition();
83
120
  }, [spriteTexture, flipX]);
@@ -90,7 +127,7 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
90
127
  if (currentFrameName.current !== frameName && frameName) {
91
128
  currentFrame.current = 0;
92
129
  currentFrameName.current = frameName;
93
- hasEnded.current = false;
130
+ state.hasEnded = false;
94
131
  modifySpritePosition();
95
132
  if (spriteData.current) {
96
133
  const {
@@ -102,6 +139,8 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
102
139
  }
103
140
  }
104
141
  }, [frameName]);
142
+
143
+ // parse sprite-data from JSON file (jsonHash or jsonArray)
105
144
  const parseSpriteData = (json, _spriteTexture) => {
106
145
  // sprite only case
107
146
  if (json === null) {
@@ -113,6 +152,9 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
113
152
  const frameHeight = height;
114
153
  textureData.current = _spriteTexture;
115
154
  totalFrames.current = numberOfFrames;
155
+ if (playBackwards) {
156
+ currentFrame.current = numberOfFrames - 1;
157
+ }
116
158
  spriteData.current = {
117
159
  frames: [],
118
160
  meta: {
@@ -155,6 +197,9 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
155
197
  spriteData.current.frames = Array.isArray(json.frames) ? json.frames : parseFrames();
156
198
  totalFrames.current = Array.isArray(json.frames) ? json.frames.length : Object.keys(json.frames).length;
157
199
  textureData.current = _spriteTexture;
200
+ if (playBackwards) {
201
+ currentFrame.current = totalFrames.current - 1;
202
+ }
158
203
  const {
159
204
  w,
160
205
  h
@@ -165,6 +210,23 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
165
210
  matRef.current.map = _spriteTexture;
166
211
  }
167
212
  }
213
+
214
+ // buffer for instanced
215
+ if (instanceItems) {
216
+ for (var i = 0; i < instanceItems.length; i++) {
217
+ const keys = Object.keys(spriteData.current.frames);
218
+ const randomKey = keys[Math.floor(Math.random() * keys.length)];
219
+ frameBuffer.current.push({
220
+ key: i,
221
+ frames: spriteData.current.frames,
222
+ selectedFrame: randomKey,
223
+ offset: {
224
+ x: 0,
225
+ y: 0
226
+ }
227
+ });
228
+ }
229
+ }
168
230
  _spriteTexture.premultiplyAlpha = false;
169
231
  setSpriteTexture(_spriteTexture);
170
232
  };
@@ -239,7 +301,6 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
239
301
  const frameOffsetY = 1 / framesV;
240
302
  matRef.current.map.offset.x = 0.0; //-matRef.current.map.repeat.x
241
303
  matRef.current.map.offset.y = 1 - frameOffsetY;
242
- setJsonReady(true);
243
304
  if (onStart) onStart({
244
305
  currentFrameName: frameName,
245
306
  currentFrame: currentFrame.current
@@ -263,8 +324,17 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
263
324
  } = getFirstItem(frames).sourceSize;
264
325
  const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [];
265
326
  const _endFrame = endFrame || spriteFrames.length - 1;
266
- if (currentFrame.current > _endFrame) {
327
+ var _offset = offset === undefined ? state.current : offset;
328
+
329
+ // conditionals to support backwards play
330
+ var endCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current > _endFrame;
331
+ var onStartCondition = playBackwards ? currentFrame.current === _endFrame : currentFrame.current === 0;
332
+ var manualProgressEndCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current >= _endFrame;
333
+ if (endCondition) {
267
334
  currentFrame.current = loop ? startFrame !== null && startFrame !== void 0 ? startFrame : 0 : 0;
335
+ if (playBackwards) {
336
+ currentFrame.current = _endFrame;
337
+ }
268
338
  if (loop) {
269
339
  onLoopEnd == null || onLoopEnd({
270
340
  currentFrameName: frameName,
@@ -275,7 +345,10 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
275
345
  currentFrameName: frameName,
276
346
  currentFrame: currentFrame.current
277
347
  });
278
- hasEnded.current = resetOnEnd ? false : true;
348
+ if (!_offset) {
349
+ console.log('will end');
350
+ }
351
+ state.hasEnded = resetOnEnd ? false : true;
279
352
  if (resetOnEnd) {
280
353
  pauseRef.current = true;
281
354
  //calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames)
@@ -283,18 +356,44 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
283
356
  }
284
357
 
285
358
  if (!loop) return;
359
+ } else if (onStartCondition) {
360
+ onStart == null || onStart({
361
+ currentFrameName: frameName,
362
+ currentFrame: currentFrame.current
363
+ });
286
364
  }
365
+
366
+ // for manual update
367
+ if (_offset !== undefined && manualProgressEndCondition) {
368
+ if (softEnd.current === false) {
369
+ onEnd == null || onEnd({
370
+ currentFrameName: frameName,
371
+ currentFrame: currentFrame.current
372
+ });
373
+ softEnd.current = true;
374
+ }
375
+ } else {
376
+ // same for start?
377
+ softEnd.current = false;
378
+ }
379
+
380
+ // clock to limit fps
287
381
  if (diff <= fpsInterval) return;
288
382
  timerOffset.current = now - diff % fpsInterval;
289
383
  calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames);
290
- currentFrame.current += 1;
291
384
  };
292
385
  const calculateFinalPosition = (frameW, frameH, metaInfo, spriteFrames) => {
386
+ // get the manual update offset to find the next frame
387
+ var _offset = offset === undefined ? state.current : offset;
388
+ const targetFrame = currentFrame.current;
293
389
  let finalValX = 0;
294
390
  let finalValY = 0;
295
391
  calculateAspectRatio(frameW, frameH);
296
392
  const framesH = (metaInfo.w - 1) / frameW;
297
393
  const framesV = (metaInfo.h - 1) / frameH;
394
+ if (!spriteFrames[targetFrame]) {
395
+ return;
396
+ }
298
397
  const {
299
398
  frame: {
300
399
  x: frameX,
@@ -304,13 +403,35 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
304
403
  w: originalSizeX,
305
404
  h: originalSizeY
306
405
  }
307
- } = spriteFrames[currentFrame.current];
406
+ } = spriteFrames[targetFrame];
308
407
  const frameOffsetX = 1 / framesH;
309
408
  const frameOffsetY = 1 / framesV;
310
409
  finalValX = flipOffset > 0 ? frameOffsetX * (frameX / originalSizeX) : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x;
311
410
  finalValY = Math.abs(1 - frameOffsetY) - frameOffsetY * (frameY / originalSizeY);
312
411
  matRef.current.map.offset.x = finalValX;
313
412
  matRef.current.map.offset.y = finalValY;
413
+
414
+ // if manual update is active
415
+ if (_offset !== undefined && _offset !== null) {
416
+ // Calculate the frame index, based on offset given from the provider
417
+ let frameIndex = Math.floor(_offset * spriteFrames.length);
418
+
419
+ // Ensure the frame index is within the valid range
420
+ frameIndex = Math.max(0, Math.min(frameIndex, spriteFrames.length - 1));
421
+ if (isNaN(frameIndex)) {
422
+ console.log('nan frame detected');
423
+ frameIndex = 0; //fallback
424
+ }
425
+
426
+ currentFrame.current = frameIndex;
427
+ } else {
428
+ // auto update
429
+ if (playBackwards) {
430
+ currentFrame.current -= 1;
431
+ } else {
432
+ currentFrame.current += 1;
433
+ }
434
+ }
314
435
  };
315
436
 
316
437
  // *** Warning! It runs on every frame! ***
@@ -322,7 +443,7 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
322
443
  if (pauseRef.current) {
323
444
  return;
324
445
  }
325
- if (!hasEnded.current && (autoPlay || play)) {
446
+ if (!state.hasEnded && (autoPlay || play)) {
326
447
  runAnimation();
327
448
  onFrame && onFrame({
328
449
  currentFrameName: currentFrameName.current,
@@ -345,9 +466,11 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
345
466
  };
346
467
  }
347
468
  };
348
- return /*#__PURE__*/React.createElement("group", _extends({
349
- ref: fref
350
- }, props), /*#__PURE__*/React.createElement(React.Suspense, {
469
+ return /*#__PURE__*/React.createElement("group", _extends({}, props, {
470
+ ref: ref
471
+ }), /*#__PURE__*/React.createElement(context.Provider, {
472
+ value: state
473
+ }, /*#__PURE__*/React.createElement(React.Suspense, {
351
474
  fallback: null
352
475
  }, displayAsSprite && /*#__PURE__*/React.createElement("sprite", {
353
476
  ref: spriteRef,
@@ -358,9 +481,8 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
358
481
  map: spriteTexture,
359
482
  transparent: true,
360
483
  alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
361
- })), !displayAsSprite && /*#__PURE__*/React.createElement("mesh", {
362
- ref: spriteRef,
363
- scale: aspect
484
+ })), !displayAsSprite && /*#__PURE__*/React.createElement(Instances, {
485
+ limit: maxItems // Optional: max amount of items (for calculating buffer size)
364
486
  }, /*#__PURE__*/React.createElement("planeGeometry", {
365
487
  args: [1, 1]
366
488
  }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
@@ -370,7 +492,25 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
370
492
  map: spriteTexture,
371
493
  transparent: true,
372
494
  alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
373
- }))), children);
495
+ }), (instanceItems !== null && instanceItems !== void 0 ? instanceItems : [0]).map((item, index) => {
496
+ const texture = spriteTexture.clone();
497
+ if (matRef.current && frameBuffer.current[index]) {
498
+ texture.offset.set(frameBuffer.current[index].offset.x, frameBuffer.current[index].offset.y); // Set the offset for this item
499
+ }
500
+
501
+ return /*#__PURE__*/React.createElement(Instance, {
502
+ key: index,
503
+ ref: spriteRef,
504
+ position: item,
505
+ scale: aspect
506
+ }, /*#__PURE__*/React.createElement("meshBasicMaterial", {
507
+ toneMapped: false,
508
+ side: THREE.DoubleSide,
509
+ map: texture,
510
+ transparent: true,
511
+ alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
512
+ }));
513
+ }))), children));
374
514
  });
375
515
 
376
- export { SpriteAnimator };
516
+ export { SpriteAnimator, useSpriteAnimator };
package/core/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./ScreenSpace.cjs.js"),s=require("./QuadraticBezierLine.cjs.js"),t=require("./CubicBezierLine.cjs.js"),o=require("./CatmullRomLine.cjs.js"),i=require("./Line.cjs.js"),a=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),c=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),j=require("./GradientTexture.cjs.js"),p=require("./Image.cjs.js"),l=require("./Edges.cjs.js"),x=require("./Outlines.cjs.js"),q=require("./Trail.cjs.js"),d=require("./Sampler.cjs.js"),m=require("./ComputedAttribute.cjs.js"),h=require("./Clone.cjs.js"),C=require("./MarchingCubes.cjs.js"),M=require("./Decal.cjs.js"),S=require("./Svg.cjs.js"),T=require("./Gltf.cjs.js"),f=require("./AsciiRenderer.cjs.js"),P=require("./Splat.cjs.js"),b=require("./OrthographicCamera.cjs.js"),B=require("./PerspectiveCamera.cjs.js"),g=require("./CubeCamera.cjs.js"),v=require("./DeviceOrientationControls.cjs.js"),F=require("./FlyControls.cjs.js"),A=require("./MapControls.cjs.js"),L=require("./OrbitControls.cjs.js"),D=require("./TrackballControls.cjs.js"),k=require("./ArcballControls.cjs.js"),E=require("./TransformControls.cjs.js"),G=require("./PointerLockControls.cjs.js"),R=require("./FirstPersonControls.cjs.js"),w=require("./CameraControls.cjs.js"),z=require("./FaceControls.cjs.js"),O=require("./MotionPathControls.cjs.js"),y=require("./GizmoHelper.cjs.js"),I=require("./GizmoViewcube.cjs.js"),H=require("./GizmoViewport.cjs.js"),V=require("./Grid.cjs.js"),W=require("./useCubeTexture.cjs.js"),Q=require("./useFBX.cjs.js"),X=require("./useGLTF.cjs.js"),K=require("./useKTX2.cjs.js"),N=require("./useProgress.cjs.js"),U=require("./useTexture.cjs.js"),_=require("./useVideoTexture.cjs.js"),J=require("./useFont.cjs.js"),Y=require("./Stats.cjs.js"),Z=require("./StatsGl.cjs.js"),$=require("./useDepthBuffer.cjs.js"),ee=require("./useAspect.cjs.js"),re=require("./useCamera.cjs.js"),se=require("./useDetectGPU.cjs.js"),te=require("./useHelper.cjs.js"),oe=require("./useBVH.cjs.js"),ie=require("./useContextBridge.cjs.js"),ae=require("./useAnimations.cjs.js"),ue=require("./useFBO.cjs.js"),ce=require("./useIntersect.cjs.js"),ne=require("./useBoxProjectedEnv.cjs.js"),je=require("./BBAnchor.cjs.js"),pe=require("./useTrailTexture.cjs.js"),le=require("./useCubeCamera.cjs.js"),xe=require("./Example.cjs.js"),qe=require("./SpriteAnimator.cjs.js"),de=require("./FaceLandmarker.cjs.js"),me=require("./CurveModifier.cjs.js"),he=require("./MeshDistortMaterial.cjs.js"),Ce=require("./MeshWobbleMaterial.cjs.js"),Me=require("./MeshReflectorMaterial.cjs.js"),Se=require("./MeshRefractionMaterial.cjs.js"),Te=require("./MeshTransmissionMaterial.cjs.js"),fe=require("./MeshDiscardMaterial.cjs.js"),Pe=require("./PointMaterial.cjs.js"),be=require("./shaderMaterial.cjs.js"),Be=require("./softShadows.cjs.js"),ge=require("./shapes.cjs.js"),ve=require("./Facemesh.cjs.js"),Fe=require("./RoundedBox.cjs.js"),Ae=require("./ScreenQuad.cjs.js"),Le=require("./Center.cjs.js"),De=require("./Resize.cjs.js"),ke=require("./Bounds.cjs.js"),Ee=require("./CameraShake.cjs.js"),Ge=require("./Float.cjs.js"),Re=require("./Stage.cjs.js"),we=require("./Backdrop.cjs.js"),ze=require("./Shadow.cjs.js"),Oe=require("./Caustics.cjs.js"),ye=require("./ContactShadows.cjs.js"),Ie=require("./AccumulativeShadows.cjs.js"),He=require("./Reflector.cjs.js"),Ve=require("./SpotLight.cjs.js"),We=require("./Environment.cjs.js"),Qe=require("./Lightformer.cjs.js"),Xe=require("./Sky.cjs.js"),Ke=require("./Stars.cjs.js"),Ne=require("./Cloud.cjs.js"),Ue=require("./Sparkles.cjs.js"),_e=require("./useEnvironment.cjs.js"),Je=require("./useMatcapTexture.cjs.js"),Ye=require("./useNormalTexture.cjs.js"),Ze=require("./Wireframe.cjs.js"),$e=require("./ShadowAlpha.cjs.js"),er=require("./Points.cjs.js"),rr=require("./Instances.cjs.js"),sr=require("./Segments.cjs.js"),tr=require("./Detailed.cjs.js"),or=require("./Preload.cjs.js"),ir=require("./BakeShadows.cjs.js"),ar=require("./meshBounds.cjs.js"),ur=require("./AdaptiveDpr.cjs.js"),cr=require("./AdaptiveEvents.cjs.js"),nr=require("./PerformanceMonitor.cjs.js"),jr=require("./RenderTexture.cjs.js"),pr=require("./RenderCubeTexture.cjs.js"),lr=require("./Mask.cjs.js"),xr=require("./Hud.cjs.js"),qr=require("./Fisheye.cjs.js"),dr=require("./MeshPortalMaterial.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("three"),require("@react-three/fiber"),require("react-merge-refs"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("../helpers/constants.cjs.js"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("camera-controls"),require("maath"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("stats-gl"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../materials/MeshRefractionMaterial.cjs.js"),require("../materials/DiscardMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("uuid"),require("../helpers/deprecated.cjs.js"),require("../materials/WireframeMaterial.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.ScreenSpace=r.ScreenSpace,exports.QuadraticBezierLine=s.QuadraticBezierLine,exports.CubicBezierLine=t.CubicBezierLine,exports.CatmullRomLine=o.CatmullRomLine,exports.Line=i.Line,exports.PositionalAudio=a.PositionalAudio,exports.Text=u.Text,exports.Text3D=c.Text3D,exports.Effects=n.Effects,exports.isWebGL2Available=n.isWebGL2Available,exports.GradientTexture=j.GradientTexture,exports.GradientType=j.GradientType,exports.Image=p.Image,exports.Edges=l.Edges,exports.Outlines=x.Outlines,exports.Trail=q.Trail,exports.useTrail=q.useTrail,exports.Sampler=d.Sampler,exports.useSurfaceSampler=d.useSurfaceSampler,exports.ComputedAttribute=m.ComputedAttribute,exports.Clone=h.Clone,exports.MarchingCube=C.MarchingCube,exports.MarchingCubes=C.MarchingCubes,exports.MarchingPlane=C.MarchingPlane,exports.Decal=M.Decal,exports.Svg=S.Svg,exports.Gltf=T.Gltf,exports.AsciiRenderer=f.AsciiRenderer,exports.Splat=P.Splat,exports.OrthographicCamera=b.OrthographicCamera,exports.PerspectiveCamera=B.PerspectiveCamera,exports.CubeCamera=g.CubeCamera,exports.DeviceOrientationControls=v.DeviceOrientationControls,exports.FlyControls=F.FlyControls,exports.MapControls=A.MapControls,exports.OrbitControls=L.OrbitControls,exports.TrackballControls=D.TrackballControls,exports.ArcballControls=k.ArcballControls,exports.TransformControls=E.TransformControls,exports.PointerLockControls=G.PointerLockControls,exports.FirstPersonControls=R.FirstPersonControls,exports.CameraControls=w.CameraControls,exports.FaceControls=z.FaceControls,exports.useFaceControls=z.useFaceControls,exports.MotionPathControls=O.MotionPathControls,exports.useMotion=O.useMotion,exports.GizmoHelper=y.GizmoHelper,exports.useGizmoContext=y.useGizmoContext,exports.GizmoViewcube=I.GizmoViewcube,exports.GizmoViewport=H.GizmoViewport,exports.Grid=V.Grid,exports.useCubeTexture=W.useCubeTexture,exports.useFBX=Q.useFBX,exports.useGLTF=X.useGLTF,exports.useKTX2=K.useKTX2,exports.useProgress=N.useProgress,exports.IsObject=U.IsObject,exports.useTexture=U.useTexture,exports.useVideoTexture=_.useVideoTexture,exports.useFont=J.useFont,exports.Stats=Y.Stats,exports.StatsGl=Z.StatsGl,exports.useDepthBuffer=$.useDepthBuffer,exports.useAspect=ee.useAspect,exports.useCamera=re.useCamera,exports.useDetectGPU=se.useDetectGPU,exports.useHelper=te.useHelper,exports.Bvh=oe.Bvh,exports.useBVH=oe.useBVH,exports.useContextBridge=ie.useContextBridge,exports.useAnimations=ae.useAnimations,exports.useFBO=ue.useFBO,exports.useIntersect=ce.useIntersect,exports.useBoxProjectedEnv=ne.useBoxProjectedEnv,exports.BBAnchor=je.BBAnchor,exports.useTrailTexture=pe.useTrailTexture,exports.useCubeCamera=le.useCubeCamera,exports.Example=xe.Example,exports.SpriteAnimator=qe.SpriteAnimator,exports.FaceLandmarker=de.FaceLandmarker,exports.FaceLandmarkerDefaults=de.FaceLandmarkerDefaults,exports.useFaceLandmarker=de.useFaceLandmarker,exports.CurveModifier=me.CurveModifier,exports.MeshDistortMaterial=he.MeshDistortMaterial,exports.MeshWobbleMaterial=Ce.MeshWobbleMaterial,exports.MeshReflectorMaterial=Me.MeshReflectorMaterial,exports.MeshRefractionMaterial=Se.MeshRefractionMaterial,exports.MeshTransmissionMaterial=Te.MeshTransmissionMaterial,exports.MeshDiscardMaterial=fe.MeshDiscardMaterial,exports.PointMaterial=Pe.PointMaterial,exports.PointMaterialImpl=Pe.PointMaterialImpl,exports.shaderMaterial=be.shaderMaterial,exports.SoftShadows=Be.SoftShadows,exports.Box=ge.Box,exports.Capsule=ge.Capsule,exports.Circle=ge.Circle,exports.Cone=ge.Cone,exports.Cylinder=ge.Cylinder,exports.Dodecahedron=ge.Dodecahedron,exports.Extrude=ge.Extrude,exports.Icosahedron=ge.Icosahedron,exports.Lathe=ge.Lathe,exports.Octahedron=ge.Octahedron,exports.Plane=ge.Plane,exports.Polyhedron=ge.Polyhedron,exports.Ring=ge.Ring,exports.Shape=ge.Shape,exports.Sphere=ge.Sphere,exports.Tetrahedron=ge.Tetrahedron,exports.Torus=ge.Torus,exports.TorusKnot=ge.TorusKnot,exports.Tube=ge.Tube,exports.Facemesh=ve.Facemesh,exports.FacemeshDatas=ve.FacemeshDatas,exports.FacemeshEye=ve.FacemeshEye,exports.FacemeshEyeDefaults=ve.FacemeshEyeDefaults,exports.RoundedBox=Fe.RoundedBox,exports.ScreenQuad=Ae.ScreenQuad,exports.Center=Le.Center,exports.Resize=De.Resize,exports.Bounds=ke.Bounds,exports.useBounds=ke.useBounds,exports.CameraShake=Ee.CameraShake,exports.Float=Ge.Float,exports.Stage=Re.Stage,exports.Backdrop=we.Backdrop,exports.Shadow=ze.Shadow,exports.Caustics=Oe.Caustics,exports.ContactShadows=ye.ContactShadows,exports.AccumulativeShadows=Ie.AccumulativeShadows,exports.RandomizedLight=Ie.RandomizedLight,exports.accumulativeContext=Ie.accumulativeContext,exports.Reflector=He.Reflector,exports.SpotLight=Ve.SpotLight,exports.SpotLightShadow=Ve.SpotLightShadow,exports.Environment=We.Environment,exports.EnvironmentCube=We.EnvironmentCube,exports.EnvironmentMap=We.EnvironmentMap,exports.EnvironmentPortal=We.EnvironmentPortal,exports.Lightformer=Qe.Lightformer,exports.Sky=Xe.Sky,exports.calcPosFromAngles=Xe.calcPosFromAngles,exports.Stars=Ke.Stars,exports.Cloud=Ne.Cloud,exports.CloudInstance=Ne.CloudInstance,exports.Clouds=Ne.Clouds,exports.Sparkles=Ue.Sparkles,exports.useEnvironment=_e.useEnvironment,exports.useMatcapTexture=Je.useMatcapTexture,exports.useNormalTexture=Ye.useNormalTexture,exports.Wireframe=Ze.Wireframe,exports.ShadowAlpha=$e.ShadowAlpha,exports.Point=er.Point,exports.Points=er.Points,exports.PointsBuffer=er.PointsBuffer,exports.PositionPoint=er.PositionPoint,exports.Instance=rr.Instance,exports.Instances=rr.Instances,exports.Merged=rr.Merged,exports.Segment=sr.Segment,exports.SegmentObject=sr.SegmentObject,exports.Segments=sr.Segments,exports.Detailed=tr.Detailed,exports.Preload=or.Preload,exports.BakeShadows=ir.BakeShadows,exports.meshBounds=ar.meshBounds,exports.AdaptiveDpr=ur.AdaptiveDpr,exports.AdaptiveEvents=cr.AdaptiveEvents,exports.PerformanceMonitor=nr.PerformanceMonitor,exports.usePerformanceMonitor=nr.usePerformanceMonitor,exports.RenderTexture=jr.RenderTexture,exports.RenderCubeTexture=pr.RenderCubeTexture,exports.Mask=lr.Mask,exports.useMask=lr.useMask,exports.Hud=xr.Hud,exports.Fisheye=qr.Fisheye,exports.MeshPortalMaterial=dr.MeshPortalMaterial;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./ScreenSpace.cjs.js"),s=require("./QuadraticBezierLine.cjs.js"),t=require("./CubicBezierLine.cjs.js"),o=require("./CatmullRomLine.cjs.js"),i=require("./Line.cjs.js"),a=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),c=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),j=require("./GradientTexture.cjs.js"),p=require("./Image.cjs.js"),l=require("./Edges.cjs.js"),x=require("./Outlines.cjs.js"),q=require("./Trail.cjs.js"),d=require("./Sampler.cjs.js"),m=require("./ComputedAttribute.cjs.js"),h=require("./Clone.cjs.js"),C=require("./MarchingCubes.cjs.js"),M=require("./Decal.cjs.js"),S=require("./Svg.cjs.js"),T=require("./Gltf.cjs.js"),f=require("./AsciiRenderer.cjs.js"),P=require("./Splat.cjs.js"),b=require("./OrthographicCamera.cjs.js"),B=require("./PerspectiveCamera.cjs.js"),g=require("./CubeCamera.cjs.js"),v=require("./DeviceOrientationControls.cjs.js"),F=require("./FlyControls.cjs.js"),A=require("./MapControls.cjs.js"),L=require("./OrbitControls.cjs.js"),D=require("./TrackballControls.cjs.js"),k=require("./ArcballControls.cjs.js"),E=require("./TransformControls.cjs.js"),G=require("./PointerLockControls.cjs.js"),R=require("./FirstPersonControls.cjs.js"),w=require("./CameraControls.cjs.js"),z=require("./FaceControls.cjs.js"),O=require("./MotionPathControls.cjs.js"),y=require("./GizmoHelper.cjs.js"),I=require("./GizmoViewcube.cjs.js"),H=require("./GizmoViewport.cjs.js"),V=require("./Grid.cjs.js"),W=require("./useCubeTexture.cjs.js"),Q=require("./useFBX.cjs.js"),X=require("./useGLTF.cjs.js"),K=require("./useKTX2.cjs.js"),N=require("./useProgress.cjs.js"),U=require("./useTexture.cjs.js"),_=require("./useVideoTexture.cjs.js"),J=require("./useFont.cjs.js"),Y=require("./Stats.cjs.js"),Z=require("./StatsGl.cjs.js"),$=require("./useDepthBuffer.cjs.js"),ee=require("./useAspect.cjs.js"),re=require("./useCamera.cjs.js"),se=require("./useDetectGPU.cjs.js"),te=require("./useHelper.cjs.js"),oe=require("./useBVH.cjs.js"),ie=require("./useContextBridge.cjs.js"),ae=require("./useAnimations.cjs.js"),ue=require("./useFBO.cjs.js"),ce=require("./useIntersect.cjs.js"),ne=require("./useBoxProjectedEnv.cjs.js"),je=require("./BBAnchor.cjs.js"),pe=require("./useTrailTexture.cjs.js"),le=require("./useCubeCamera.cjs.js"),xe=require("./Example.cjs.js"),qe=require("./SpriteAnimator.cjs.js"),de=require("./FaceLandmarker.cjs.js"),me=require("./CurveModifier.cjs.js"),he=require("./MeshDistortMaterial.cjs.js"),Ce=require("./MeshWobbleMaterial.cjs.js"),Me=require("./MeshReflectorMaterial.cjs.js"),Se=require("./MeshRefractionMaterial.cjs.js"),Te=require("./MeshTransmissionMaterial.cjs.js"),fe=require("./MeshDiscardMaterial.cjs.js"),Pe=require("./PointMaterial.cjs.js"),be=require("./shaderMaterial.cjs.js"),Be=require("./softShadows.cjs.js"),ge=require("./shapes.cjs.js"),ve=require("./Facemesh.cjs.js"),Fe=require("./RoundedBox.cjs.js"),Ae=require("./ScreenQuad.cjs.js"),Le=require("./Center.cjs.js"),De=require("./Resize.cjs.js"),ke=require("./Bounds.cjs.js"),Ee=require("./CameraShake.cjs.js"),Ge=require("./Float.cjs.js"),Re=require("./Stage.cjs.js"),we=require("./Backdrop.cjs.js"),ze=require("./Shadow.cjs.js"),Oe=require("./Caustics.cjs.js"),ye=require("./ContactShadows.cjs.js"),Ie=require("./AccumulativeShadows.cjs.js"),He=require("./Reflector.cjs.js"),Ve=require("./SpotLight.cjs.js"),We=require("./Environment.cjs.js"),Qe=require("./Lightformer.cjs.js"),Xe=require("./Sky.cjs.js"),Ke=require("./Stars.cjs.js"),Ne=require("./Cloud.cjs.js"),Ue=require("./Sparkles.cjs.js"),_e=require("./useEnvironment.cjs.js"),Je=require("./useMatcapTexture.cjs.js"),Ye=require("./useNormalTexture.cjs.js"),Ze=require("./Wireframe.cjs.js"),$e=require("./ShadowAlpha.cjs.js"),er=require("./Points.cjs.js"),rr=require("./Instances.cjs.js"),sr=require("./Segments.cjs.js"),tr=require("./Detailed.cjs.js"),or=require("./Preload.cjs.js"),ir=require("./BakeShadows.cjs.js"),ar=require("./meshBounds.cjs.js"),ur=require("./AdaptiveDpr.cjs.js"),cr=require("./AdaptiveEvents.cjs.js"),nr=require("./PerformanceMonitor.cjs.js"),jr=require("./RenderTexture.cjs.js"),pr=require("./RenderCubeTexture.cjs.js"),lr=require("./Mask.cjs.js"),xr=require("./Hud.cjs.js"),qr=require("./Fisheye.cjs.js"),dr=require("./MeshPortalMaterial.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("three"),require("@react-three/fiber"),require("react-merge-refs"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("../helpers/constants.cjs.js"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("camera-controls"),require("maath"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("stats-gl"),require("detect-gpu"),require("three-mesh-bvh"),require("react-composer"),require("../helpers/deprecated.cjs.js"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../materials/MeshRefractionMaterial.cjs.js"),require("../materials/DiscardMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("uuid"),require("../materials/WireframeMaterial.cjs.js"),exports.Billboard=e.Billboard,exports.ScreenSpace=r.ScreenSpace,exports.QuadraticBezierLine=s.QuadraticBezierLine,exports.CubicBezierLine=t.CubicBezierLine,exports.CatmullRomLine=o.CatmullRomLine,exports.Line=i.Line,exports.PositionalAudio=a.PositionalAudio,exports.Text=u.Text,exports.Text3D=c.Text3D,exports.Effects=n.Effects,exports.isWebGL2Available=n.isWebGL2Available,exports.GradientTexture=j.GradientTexture,exports.GradientType=j.GradientType,exports.Image=p.Image,exports.Edges=l.Edges,exports.Outlines=x.Outlines,exports.Trail=q.Trail,exports.useTrail=q.useTrail,exports.Sampler=d.Sampler,exports.useSurfaceSampler=d.useSurfaceSampler,exports.ComputedAttribute=m.ComputedAttribute,exports.Clone=h.Clone,exports.MarchingCube=C.MarchingCube,exports.MarchingCubes=C.MarchingCubes,exports.MarchingPlane=C.MarchingPlane,exports.Decal=M.Decal,exports.Svg=S.Svg,exports.Gltf=T.Gltf,exports.AsciiRenderer=f.AsciiRenderer,exports.Splat=P.Splat,exports.OrthographicCamera=b.OrthographicCamera,exports.PerspectiveCamera=B.PerspectiveCamera,exports.CubeCamera=g.CubeCamera,exports.DeviceOrientationControls=v.DeviceOrientationControls,exports.FlyControls=F.FlyControls,exports.MapControls=A.MapControls,exports.OrbitControls=L.OrbitControls,exports.TrackballControls=D.TrackballControls,exports.ArcballControls=k.ArcballControls,exports.TransformControls=E.TransformControls,exports.PointerLockControls=G.PointerLockControls,exports.FirstPersonControls=R.FirstPersonControls,exports.CameraControls=w.CameraControls,exports.FaceControls=z.FaceControls,exports.useFaceControls=z.useFaceControls,exports.MotionPathControls=O.MotionPathControls,exports.useMotion=O.useMotion,exports.GizmoHelper=y.GizmoHelper,exports.useGizmoContext=y.useGizmoContext,exports.GizmoViewcube=I.GizmoViewcube,exports.GizmoViewport=H.GizmoViewport,exports.Grid=V.Grid,exports.useCubeTexture=W.useCubeTexture,exports.useFBX=Q.useFBX,exports.useGLTF=X.useGLTF,exports.useKTX2=K.useKTX2,exports.useProgress=N.useProgress,exports.IsObject=U.IsObject,exports.useTexture=U.useTexture,exports.useVideoTexture=_.useVideoTexture,exports.useFont=J.useFont,exports.Stats=Y.Stats,exports.StatsGl=Z.StatsGl,exports.useDepthBuffer=$.useDepthBuffer,exports.useAspect=ee.useAspect,exports.useCamera=re.useCamera,exports.useDetectGPU=se.useDetectGPU,exports.useHelper=te.useHelper,exports.Bvh=oe.Bvh,exports.useBVH=oe.useBVH,exports.useContextBridge=ie.useContextBridge,exports.useAnimations=ae.useAnimations,exports.useFBO=ue.useFBO,exports.useIntersect=ce.useIntersect,exports.useBoxProjectedEnv=ne.useBoxProjectedEnv,exports.BBAnchor=je.BBAnchor,exports.useTrailTexture=pe.useTrailTexture,exports.useCubeCamera=le.useCubeCamera,exports.Example=xe.Example,exports.SpriteAnimator=qe.SpriteAnimator,exports.useSpriteAnimator=qe.useSpriteAnimator,exports.FaceLandmarker=de.FaceLandmarker,exports.FaceLandmarkerDefaults=de.FaceLandmarkerDefaults,exports.useFaceLandmarker=de.useFaceLandmarker,exports.CurveModifier=me.CurveModifier,exports.MeshDistortMaterial=he.MeshDistortMaterial,exports.MeshWobbleMaterial=Ce.MeshWobbleMaterial,exports.MeshReflectorMaterial=Me.MeshReflectorMaterial,exports.MeshRefractionMaterial=Se.MeshRefractionMaterial,exports.MeshTransmissionMaterial=Te.MeshTransmissionMaterial,exports.MeshDiscardMaterial=fe.MeshDiscardMaterial,exports.PointMaterial=Pe.PointMaterial,exports.PointMaterialImpl=Pe.PointMaterialImpl,exports.shaderMaterial=be.shaderMaterial,exports.SoftShadows=Be.SoftShadows,exports.Box=ge.Box,exports.Capsule=ge.Capsule,exports.Circle=ge.Circle,exports.Cone=ge.Cone,exports.Cylinder=ge.Cylinder,exports.Dodecahedron=ge.Dodecahedron,exports.Extrude=ge.Extrude,exports.Icosahedron=ge.Icosahedron,exports.Lathe=ge.Lathe,exports.Octahedron=ge.Octahedron,exports.Plane=ge.Plane,exports.Polyhedron=ge.Polyhedron,exports.Ring=ge.Ring,exports.Shape=ge.Shape,exports.Sphere=ge.Sphere,exports.Tetrahedron=ge.Tetrahedron,exports.Torus=ge.Torus,exports.TorusKnot=ge.TorusKnot,exports.Tube=ge.Tube,exports.Facemesh=ve.Facemesh,exports.FacemeshDatas=ve.FacemeshDatas,exports.FacemeshEye=ve.FacemeshEye,exports.FacemeshEyeDefaults=ve.FacemeshEyeDefaults,exports.RoundedBox=Fe.RoundedBox,exports.ScreenQuad=Ae.ScreenQuad,exports.Center=Le.Center,exports.Resize=De.Resize,exports.Bounds=ke.Bounds,exports.useBounds=ke.useBounds,exports.CameraShake=Ee.CameraShake,exports.Float=Ge.Float,exports.Stage=Re.Stage,exports.Backdrop=we.Backdrop,exports.Shadow=ze.Shadow,exports.Caustics=Oe.Caustics,exports.ContactShadows=ye.ContactShadows,exports.AccumulativeShadows=Ie.AccumulativeShadows,exports.RandomizedLight=Ie.RandomizedLight,exports.accumulativeContext=Ie.accumulativeContext,exports.Reflector=He.Reflector,exports.SpotLight=Ve.SpotLight,exports.SpotLightShadow=Ve.SpotLightShadow,exports.Environment=We.Environment,exports.EnvironmentCube=We.EnvironmentCube,exports.EnvironmentMap=We.EnvironmentMap,exports.EnvironmentPortal=We.EnvironmentPortal,exports.Lightformer=Qe.Lightformer,exports.Sky=Xe.Sky,exports.calcPosFromAngles=Xe.calcPosFromAngles,exports.Stars=Ke.Stars,exports.Cloud=Ne.Cloud,exports.CloudInstance=Ne.CloudInstance,exports.Clouds=Ne.Clouds,exports.Sparkles=Ue.Sparkles,exports.useEnvironment=_e.useEnvironment,exports.useMatcapTexture=Je.useMatcapTexture,exports.useNormalTexture=Ye.useNormalTexture,exports.Wireframe=Ze.Wireframe,exports.ShadowAlpha=$e.ShadowAlpha,exports.Point=er.Point,exports.Points=er.Points,exports.PointsBuffer=er.PointsBuffer,exports.PositionPoint=er.PositionPoint,exports.Instance=rr.Instance,exports.Instances=rr.Instances,exports.Merged=rr.Merged,exports.Segment=sr.Segment,exports.SegmentObject=sr.SegmentObject,exports.Segments=sr.Segments,exports.Detailed=tr.Detailed,exports.Preload=or.Preload,exports.BakeShadows=ir.BakeShadows,exports.meshBounds=ar.meshBounds,exports.AdaptiveDpr=ur.AdaptiveDpr,exports.AdaptiveEvents=cr.AdaptiveEvents,exports.PerformanceMonitor=nr.PerformanceMonitor,exports.usePerformanceMonitor=nr.usePerformanceMonitor,exports.RenderTexture=jr.RenderTexture,exports.RenderCubeTexture=pr.RenderCubeTexture,exports.Mask=lr.Mask,exports.useMask=lr.useMask,exports.Hud=xr.Hud,exports.Fisheye=qr.Fisheye,exports.MeshPortalMaterial=dr.MeshPortalMaterial;
package/core/index.js CHANGED
@@ -66,7 +66,7 @@ export { BBAnchor } from './BBAnchor.js';
66
66
  export { useTrailTexture } from './useTrailTexture.js';
67
67
  export { useCubeCamera } from './useCubeCamera.js';
68
68
  export { Example } from './Example.js';
69
- export { SpriteAnimator } from './SpriteAnimator.js';
69
+ export { SpriteAnimator, useSpriteAnimator } from './SpriteAnimator.js';
70
70
  export { FaceLandmarker, FaceLandmarkerDefaults, useFaceLandmarker } from './FaceLandmarker.js';
71
71
  export { CurveModifier } from './CurveModifier.js';
72
72
  export { MeshDistortMaterial } from './MeshDistortMaterial.js';
@@ -142,6 +142,8 @@ import '../helpers/useEffectfulState.js';
142
142
  import 'stats-gl';
143
143
  import 'detect-gpu';
144
144
  import 'three-mesh-bvh';
145
+ import 'react-composer';
146
+ import '../helpers/deprecated.js';
145
147
  import '../materials/BlurPass.js';
146
148
  import '../materials/ConvolutionMaterial.js';
147
149
  import '../materials/MeshReflectorMaterial.js';
@@ -150,6 +152,4 @@ import '../materials/DiscardMaterial.js';
150
152
  import '../helpers/environment-assets.js';
151
153
  import '../materials/SpotLightMaterial.js';
152
154
  import 'uuid';
153
- import '../helpers/deprecated.js';
154
155
  import '../materials/WireframeMaterial.js';
155
- import 'react-composer';