@react-three/drei 9.115.0 → 9.116.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 +2 -2
- package/core/Bounds.js +0 -1
- package/core/Clone.js +1 -1
- package/core/Effects.js +3 -3
- package/core/Environment.cjs.js +1 -1
- package/core/Environment.js +1 -1
- package/core/Fbo.js +1 -1
- package/core/Hud.js +1 -1
- package/core/Instances.d.ts +17 -17
- package/core/Ktx2.d.ts +1 -1
- package/core/PerformanceMonitor.cjs.js +1 -1
- package/core/PerformanceMonitor.js +0 -1
- package/core/RenderCubeTexture.js +1 -1
- package/core/RenderTexture.js +1 -1
- package/core/SpotLight.cjs.js +1 -1
- package/core/SpriteAnimator.cjs.js +1 -1
- package/core/SpriteAnimator.d.ts +9 -0
- package/core/SpriteAnimator.js +35 -25
- package/core/Text.js +0 -1
- package/core/Trail.js +1 -1
- package/core/useAnimations.js +0 -1
- package/core/useBoxProjectedEnv.cjs.js +1 -1
- package/core/useEnvironment.d.ts +2 -2
- package/index.cjs.js +1 -1
- package/materials/BlurPass.cjs.js +1 -1
- package/package.json +14 -14
- package/web/FaceControls.cjs.js +1 -1
- package/web/FaceControls.d.ts +2 -1
- package/web/FaceControls.js +6 -2
- package/web/FaceLandmarker.cjs.js +1 -1
- package/web/FaceLandmarker.js +1 -1
- package/web/Facemesh.d.ts +14 -47
- package/web/Facemesh.js +1 -2
- package/web/Html.js +2 -2
- package/web/Loader.cjs.js +1 -1
- package/web/ScrollControls.js +1 -1
- package/web/Select.cjs.js +1 -1
- package/web/View.cjs.js +1 -1
- package/web/View.js +1 -1
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
[](https://codesandbox.io/s/bfplr)
|
|
2
|
-
|
|
3
1
|
[](https://drei.pmnd.rs/)
|
|
4
2
|
[](https://www.npmjs.com/package/@react-three/drei)
|
|
5
3
|
[](https://www.npmjs.com/package/@react-three/drei)
|
|
6
4
|
[](https://discord.com/channels/740090768164651008/741751532592038022)
|
|
7
5
|
[](https://github.com/codespaces/new?template_repository=pmndrs%2Fdrei)
|
|
8
6
|
|
|
7
|
+
[](https://codesandbox.io/s/bfplr)
|
|
8
|
+
|
|
9
9
|
A growing collection of useful helpers and fully functional, ready-made abstractions for [@react-three/fiber](https://github.com/pmndrs/react-three-fiber).
|
|
10
10
|
|
|
11
11
|
If you make a component that is generic enough to be useful to others, think about [CONTRIBUTING](CONTRIBUTING.md)!
|
package/core/Bounds.js
CHANGED
|
@@ -2,7 +2,6 @@ import * as React from 'react';
|
|
|
2
2
|
import * as THREE from 'three';
|
|
3
3
|
import { useThree, useFrame } from '@react-three/fiber';
|
|
4
4
|
|
|
5
|
-
// eslint-disable-next-line no-shadow
|
|
6
5
|
var AnimationState = /*#__PURE__*/function (AnimationState) {
|
|
7
6
|
AnimationState[AnimationState["NONE"] = 0] = "NONE";
|
|
8
7
|
AnimationState[AnimationState["START"] = 1] = "START";
|
package/core/Clone.js
CHANGED
|
@@ -22,7 +22,7 @@ function createSpread(child, {
|
|
|
22
22
|
if (typeof inject === 'function') spread = {
|
|
23
23
|
...spread,
|
|
24
24
|
children: inject(child)
|
|
25
|
-
};else if (
|
|
25
|
+
};else if (/*#__PURE__*/React.isValidElement(inject)) spread = {
|
|
26
26
|
...spread,
|
|
27
27
|
children: inject
|
|
28
28
|
};else spread = {
|
package/core/Effects.js
CHANGED
|
@@ -66,18 +66,18 @@ const Effects = /* @__PURE__ */React.forwardRef(({
|
|
|
66
66
|
if (!disableRender) (_composer$current3 = composer.current) == null || _composer$current3.render();
|
|
67
67
|
}, renderIndex);
|
|
68
68
|
const passes = [];
|
|
69
|
-
if (!disableRenderPass) passes.push(
|
|
69
|
+
if (!disableRenderPass) passes.push(/*#__PURE__*/React.createElement("renderPass", {
|
|
70
70
|
key: "renderpass",
|
|
71
71
|
attach: `passes-${passes.length}`,
|
|
72
72
|
args: [scene, camera]
|
|
73
73
|
}));
|
|
74
|
-
if (!disableGamma) passes.push(
|
|
74
|
+
if (!disableGamma) passes.push(/*#__PURE__*/React.createElement("shaderPass", {
|
|
75
75
|
attach: `passes-${passes.length}`,
|
|
76
76
|
key: "gammapass",
|
|
77
77
|
args: [GammaCorrectionShader]
|
|
78
78
|
}));
|
|
79
79
|
React.Children.forEach(children, el => {
|
|
80
|
-
el && passes.push(
|
|
80
|
+
el && passes.push(/*#__PURE__*/React.cloneElement(el, {
|
|
81
81
|
key: passes.length,
|
|
82
82
|
attach: `passes-${passes.length}`
|
|
83
83
|
}));
|
package/core/Environment.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("react"),r=require("@react-three/fiber"),t=require("three"),o=require("three-stdlib"),u=require("./useEnvironment.cjs.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,t.get?t:{enumerable:!0,get:function(){return e[r]}})}})),n.default=e,Object.freeze(n)}require("@monogrid/gainmap-js"),require("../helpers/environment-assets.cjs.js"),require("../helpers/deprecated.cjs.js");var c=a(e),s=i(n);function l(e,n,t,o,u={}){var a,i,c,s,l;u={backgroundBlurriness:null!==(a=u.blur)&&void 0!==a?a:0,backgroundIntensity:1,backgroundRotation:[0,0,0],environmentIntensity:1,environmentRotation:[0,0,0],...u};const d=(e=>{return(n=e).current&&n.current.isScene?e.current:e;var n})(n||t),m=d.background,b=d.environment,g={backgroundBlurriness:d.backgroundBlurriness,backgroundIntensity:d.backgroundIntensity,backgroundRotation:null!==(i=null==(c=d.backgroundRotation)||null==c.clone?void 0:c.clone())&&void 0!==i?i:[0,0,0],environmentIntensity:d.environmentIntensity,environmentRotation:null!==(s=null==(l=d.environmentRotation)||null==l.clone?void 0:l.clone())&&void 0!==s?s:[0,0,0]};return"only"!==e&&(d.environment=o),e&&(d.background=o),r.applyProps(d,u),()=>{"only"!==e&&(d.environment=b),e&&(d.background=m),r.applyProps(d,g)}}function d({scene:e,background:n=!1,map:t,...o}){const u=r.useThree((e=>e.scene));return s.useLayoutEffect((()=>{if(t)return l(n,e,u,t,o)})),null}function m({background:e=!1,scene:n,blur:t,backgroundBlurriness:o,backgroundIntensity:a,backgroundRotation:i,environmentIntensity:c,environmentRotation:d,...m}){const b=u.useEnvironment(m),g=r.useThree((e=>e.scene));return s.useLayoutEffect((()=>l(e,n,g,b,{blur:t,backgroundBlurriness:o,backgroundIntensity:a,backgroundRotation:i,environmentIntensity:c,environmentRotation:d}))),null}function b({children:e,near:n=1,far:o=1e3,resolution:u=256,frames:a=1,map:i,background:c=!1,blur:b,backgroundBlurriness:g,backgroundIntensity:v,backgroundRotation:p,environmentIntensity:f,environmentRotation:k,scene:y,files:E,path:h,preset:j,extensions:I}){const R=r.useThree((e=>e.gl)),x=r.useThree((e=>e.scene)),P=s.useRef(null),[q]=s.useState((()=>new t.Scene)),B=s.useMemo((()=>{const e=new t.WebGLCubeRenderTarget(u);return e.texture.type=t.HalfFloatType,e}),[u]);s.useLayoutEffect((()=>(1===a&&P.current.update(R,q),l(c,y,x,B.texture,{blur:b,backgroundBlurriness:g,backgroundIntensity:v,backgroundRotation:p,environmentIntensity:f,environmentRotation:k}))),[e,q,B.texture,y,x,c,a,R]);let O=1;return r.useFrame((()=>{(a===1/0||O<a)&&(P.current.update(R,q),O++)})),s.createElement(s.Fragment,null,r.createPortal(s.createElement(s.Fragment,null,e,s.createElement("cubeCamera",{ref:P,args:[n,o,B]}),E||j?s.createElement(m,{background:!0,files:E,preset:j,path:h,extensions:I}):i?s.createElement(d,{background:!0,map:i,extensions:I}):null),q))}function g(e){var n,t,a,i;const l=u.useEnvironment(e),m=e.map||l;s.useMemo((()=>r.extend({GroundProjectedEnvImpl:o.GroundProjectedEnv})),[]);const b=s.useMemo((()=>[m]),[m]),g=null==(n=e.ground)?void 0:n.height,v=null==(t=e.ground)?void 0:t.radius,p=null!==(a=null==(i=e.ground)?void 0:i.scale)&&void 0!==a?a:1e3;return s.createElement(s.Fragment,null,s.createElement(d,c.default({},e,{map:m})),s.createElement("groundProjectedEnvImpl",{args:b,scale:p,height:g,radius:v}))}exports.Environment=function(e){return e.ground?s.createElement(g,e):e.map?s.createElement(d,e):e.children?s.createElement(b,e):s.createElement(m,e)},exports.EnvironmentCube=m,exports.EnvironmentMap=d,exports.EnvironmentPortal=b;
|
package/core/Environment.js
CHANGED
|
@@ -126,7 +126,7 @@ function EnvironmentPortal({
|
|
|
126
126
|
count++;
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(
|
|
129
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement("cubeCamera", {
|
|
130
130
|
ref: camera,
|
|
131
131
|
args: [near, far, fbo]
|
|
132
132
|
}), files || preset ? /*#__PURE__*/React.createElement(EnvironmentCube, {
|
package/core/Fbo.js
CHANGED
|
@@ -6,7 +6,7 @@ import { useThree } from '@react-three/fiber';
|
|
|
6
6
|
|
|
7
7
|
// 👇 uncomment when TS version supports function overloads
|
|
8
8
|
// export function useFBO(settings?: FBOSettings)
|
|
9
|
-
function useFBO(
|
|
9
|
+
function useFBO(/** Width in pixels, or settings (will render fullscreen by default) */
|
|
10
10
|
width, /** Height in pixels */
|
|
11
11
|
height, /**Settings */
|
|
12
12
|
settings) {
|
package/core/Hud.js
CHANGED
|
@@ -41,7 +41,7 @@ function Hud({
|
|
|
41
41
|
camera: defaultCamera
|
|
42
42
|
} = useThree();
|
|
43
43
|
const [hudScene] = React.useState(() => new THREE.Scene());
|
|
44
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(
|
|
44
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(RenderHud, {
|
|
45
45
|
defaultScene: defaultScene,
|
|
46
46
|
defaultCamera: defaultCamera,
|
|
47
47
|
renderPriority: renderPriority
|
package/core/Instances.d.ts
CHANGED
|
@@ -48,25 +48,25 @@ export interface MergedProps extends InstancesProps {
|
|
|
48
48
|
}
|
|
49
49
|
export declare const Merged: ForwardRefComponent<any, THREE.Group>;
|
|
50
50
|
export declare function createInstances<T = InstanceProps>(): readonly [React.ForwardRefExoticComponent<Omit<InstancesProps, "ref"> & React.RefAttributes<THREE.InstancedMesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>, React.ForwardRefExoticComponent<React.PropsWithoutRef<T & Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<PositionMesh>, ReactThreeFiber.NodeProps<PositionMesh, typeof PositionMesh>>>, ReactThreeFiber.NonFunctionKeys<{
|
|
51
|
-
position?: ReactThreeFiber.Vector3
|
|
52
|
-
up?: ReactThreeFiber.Vector3
|
|
53
|
-
scale?: ReactThreeFiber.Vector3
|
|
54
|
-
rotation?: ReactThreeFiber.Euler
|
|
55
|
-
matrix?: ReactThreeFiber.Matrix4
|
|
56
|
-
quaternion?: ReactThreeFiber.Quaternion
|
|
57
|
-
layers?: ReactThreeFiber.Layers
|
|
58
|
-
dispose?: (() => void) | null
|
|
51
|
+
position?: ReactThreeFiber.Vector3;
|
|
52
|
+
up?: ReactThreeFiber.Vector3;
|
|
53
|
+
scale?: ReactThreeFiber.Vector3;
|
|
54
|
+
rotation?: ReactThreeFiber.Euler;
|
|
55
|
+
matrix?: ReactThreeFiber.Matrix4;
|
|
56
|
+
quaternion?: ReactThreeFiber.Quaternion;
|
|
57
|
+
layers?: ReactThreeFiber.Layers;
|
|
58
|
+
dispose?: (() => void) | null;
|
|
59
59
|
}>> & {
|
|
60
|
-
position?: ReactThreeFiber.Vector3
|
|
61
|
-
up?: ReactThreeFiber.Vector3
|
|
62
|
-
scale?: ReactThreeFiber.Vector3
|
|
63
|
-
rotation?: ReactThreeFiber.Euler
|
|
64
|
-
matrix?: ReactThreeFiber.Matrix4
|
|
65
|
-
quaternion?: ReactThreeFiber.Quaternion
|
|
66
|
-
layers?: ReactThreeFiber.Layers
|
|
67
|
-
dispose?: (() => void) | null
|
|
60
|
+
position?: ReactThreeFiber.Vector3;
|
|
61
|
+
up?: ReactThreeFiber.Vector3;
|
|
62
|
+
scale?: ReactThreeFiber.Vector3;
|
|
63
|
+
rotation?: ReactThreeFiber.Euler;
|
|
64
|
+
matrix?: ReactThreeFiber.Matrix4;
|
|
65
|
+
quaternion?: ReactThreeFiber.Quaternion;
|
|
66
|
+
layers?: ReactThreeFiber.Layers;
|
|
67
|
+
dispose?: (() => void) | null;
|
|
68
68
|
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
69
|
-
context?: React.Context<Api
|
|
69
|
+
context?: React.Context<Api>;
|
|
70
70
|
}> & React.RefAttributes<PositionMesh & T>>];
|
|
71
71
|
export declare const InstancedAttribute: React.ForwardRefExoticComponent<Omit<InstancedAttributeProps, "ref"> & React.RefAttributes<unknown>>;
|
|
72
72
|
export {};
|
package/core/Ktx2.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare function useKTX2<Url extends string[] | string | Record<string, s
|
|
|
4
4
|
[key in keyof Url]: Texture;
|
|
5
5
|
} : Texture;
|
|
6
6
|
export declare namespace useKTX2 {
|
|
7
|
-
var preload: (url: string, basisPath?: string) => undefined;
|
|
7
|
+
var preload: (url: string extends any[] ? string[] : string, basisPath?: string) => undefined;
|
|
8
8
|
var clear: (input: string | string[]) => void;
|
|
9
9
|
}
|
|
10
10
|
export declare const Ktx2: ({ children, input, basisPath, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("@react-three/fiber");function r(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,t.get?t:{enumerable:!0,get:function(){return e[r]}})}})),n.default=e,Object.freeze(n)}var t=r(e);const o=e.createContext(null);exports.PerformanceMonitor=function({iterations:r=10,ms:a=250,threshold:c=.75,step:s=.1,factor:l=.5,flipflops:i=1/0,bounds:f=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("@react-three/fiber");function r(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,t.get?t:{enumerable:!0,get:function(){return e[r]}})}})),n.default=e,Object.freeze(n)}var t=r(e);const o=e.createContext(null);exports.PerformanceMonitor=function({iterations:r=10,ms:a=250,threshold:c=.75,step:s=.1,factor:l=.5,flipflops:i=1/0,bounds:f=e=>e>100?[60,100]:[40,60],onIncline:u,onDecline:p,onChange:b,onFallback:h,children:d}){const g=Math.pow(10,0),[m,k]=e.useState((()=>({fps:0,index:0,factor:l,flipped:0,refreshrate:0,fallback:!1,frames:[],averages:[],subscriptions:new Map,subscribe:e=>{const n=Symbol();return m.subscriptions.set(n,e.current),()=>{m.subscriptions.delete(n)}}})));let v=0;return n.useFrame((()=>{const{frames:e,averages:n}=m;if(!m.fallback&&n.length<r){e.push(performance.now());const t=e[e.length-1]-e[0];if(t>=a){if(m.fps=Math.round(e.length/t*1e3*g)/g,m.refreshrate=Math.max(m.refreshrate,m.fps),n[m.index++%r]=m.fps,n.length===r){const[e,t]=f(m.refreshrate),o=n.filter((e=>e>=t)),a=n.filter((n=>n<e));o.length>r*c&&(m.factor=Math.min(1,m.factor+s),m.flipped++,u&&u(m),m.subscriptions.forEach((e=>e.onIncline&&e.onIncline(m)))),a.length>r*c&&(m.factor=Math.max(0,m.factor-s),m.flipped++,p&&p(m),m.subscriptions.forEach((e=>e.onDecline&&e.onDecline(m)))),v!==m.factor&&(v=m.factor,b&&b(m),m.subscriptions.forEach((e=>e.onChange&&e.onChange(m)))),m.flipped>i&&!m.fallback&&(m.fallback=!0,h&&h(m),m.subscriptions.forEach((e=>e.onFallback&&e.onFallback(m)))),m.averages=[]}m.frames=[]}}})),t.createElement(o.Provider,{value:m},d)},exports.usePerformanceMonitor=function({onIncline:n,onDecline:r,onChange:t,onFallback:a}){const c=e.useContext(o),s=e.useRef({onIncline:n,onDecline:r,onChange:t,onFallback:a});e.useLayoutEffect((()=>{s.current.onIncline=n,s.current.onDecline=r,s.current.onChange=t,s.current.onFallback=a}),[n,r,t,a]),e.useLayoutEffect((()=>c.subscribe(s)),[c])};
|
|
@@ -49,7 +49,7 @@ const RenderCubeTexture = /* @__PURE__ */React.forwardRef(({
|
|
|
49
49
|
fbo,
|
|
50
50
|
camera: camera.current
|
|
51
51
|
}), [fbo]);
|
|
52
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(
|
|
52
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(Container, {
|
|
53
53
|
renderPriority: renderPriority,
|
|
54
54
|
frames: frames,
|
|
55
55
|
camera: camera
|
package/core/RenderTexture.js
CHANGED
|
@@ -50,7 +50,7 @@ const RenderTexture = /* @__PURE__ */React.forwardRef(({
|
|
|
50
50
|
state.raycaster.setFromCamera(state.pointer.set(uv.x * 2 - 1, uv.y * 2 - 1), state.camera);
|
|
51
51
|
}, []);
|
|
52
52
|
React.useImperativeHandle(forwardRef, () => fbo.texture, [fbo]);
|
|
53
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(
|
|
53
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(Container, {
|
|
54
54
|
renderPriority: renderPriority,
|
|
55
55
|
frames: frames,
|
|
56
56
|
fbo: fbo
|
package/core/SpotLight.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"),a=require("@react-three/fiber"),n=require("three-stdlib"),o=require("../materials/SpotLightMaterial.cjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../helpers/constants.cjs.js");var l=i(e),s=u(t)
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("three-stdlib"),o=require("../materials/SpotLightMaterial.cjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../helpers/constants.cjs.js");var l=i(e),s=u(t);function c({opacity:e=1,radiusTop:t,radiusBottom:n,depthBuffer:i,color:u="white",distance:l=5,angle:c=.15,attenuation:p=5,anglePower:d=5}){const m=s.useRef(null),h=a.useThree((e=>e.size)),f=a.useThree((e=>e.camera)),g=a.useThree((e=>e.viewport.dpr)),[v]=s.useState((()=>new o.SpotLightMaterial)),[w]=s.useState((()=>new r.Vector3));t=void 0===t?.1:t,n=void 0===n?7*c:n,a.useFrame((()=>{v.uniforms.spotPosition.value.copy(m.current.getWorldPosition(w)),m.current.lookAt(m.current.parent.target.getWorldPosition(w))}));const S=s.useMemo((()=>{const e=new r.CylinderGeometry(t,n,l,128,64,!0);return e.applyMatrix4((new r.Matrix4).makeTranslation(0,-l/2,0)),e.applyMatrix4((new r.Matrix4).makeRotationX(-Math.PI/2)),e}),[l,t,n]);return s.createElement(s.Fragment,null,s.createElement("mesh",{ref:m,geometry:S,raycast:()=>null},s.createElement("primitive",{object:v,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":u,"uniforms-attenuation-value":p,"uniforms-anglePower-value":d,"uniforms-depth-value":i,"uniforms-cameraNear-value":f.near,"uniforms-cameraFar-value":f.far,"uniforms-resolution-value":i?[h.width*g,h.height*g]:[0,0]})))}function p(e,t,n,o,i){const[[u,l]]=s.useState((()=>[new r.Vector3,new r.Vector3]));s.useLayoutEffect((()=>{if(!(null==(t=e.current)?void 0:t.isSpotLight))throw new Error("SpotlightShadow must be a child of a SpotLight");var t;e.current.shadow.mapSize.set(n,o),e.current.shadow.needsUpdate=!0}),[e,n,o]),a.useFrame((()=>{if(!e.current)return;const r=e.current.position,a=e.current.target.position;l.copy(a).sub(r);var n=l.length();l.normalize().multiplyScalar(n*i),u.copy(r).add(l),t.current.position.copy(u),t.current.lookAt(e.current.target.position)}))}function d({distance:e=.4,alphaTest:t=.5,map:o,shader:i="#define GLSLIFY 1\nvarying vec2 vUv;uniform sampler2D uShadowMap;uniform float uTime;void main(){vec3 color=texture2D(uShadowMap,vUv).xyz;gl_FragColor=vec4(color,1.);}",width:u=512,height:l=512,scale:c=1,children:d,...m}){const h=s.useRef(null),f=m.spotlightRef,g=m.debug;p(f,h,u,l,e);const v=s.useMemo((()=>new r.WebGLRenderTarget(u,l,{format:r.RGBAFormat,stencilBuffer:!1})),[u,l]),w=s.useRef({uShadowMap:{value:o},uTime:{value:0}});s.useEffect((()=>{w.current.uShadowMap.value=o}),[o]);const S=s.useMemo((()=>new n.FullScreenQuad(new r.ShaderMaterial({uniforms:w.current,vertexShader:"\n varying vec2 vUv;\n\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:i}))),[i]);return s.useEffect((()=>()=>{S.material.dispose(),S.dispose()}),[S]),s.useEffect((()=>()=>v.dispose()),[v]),a.useFrame((({gl:e},t)=>{w.current.uTime.value+=t,e.setRenderTarget(v),S.render(e),e.setRenderTarget(null)})),s.createElement(s.Fragment,null,s.createElement("mesh",{ref:h,scale:c,castShadow:!0},s.createElement("planeGeometry",null),s.createElement("meshBasicMaterial",{transparent:!0,side:r.DoubleSide,alphaTest:t,alphaMap:v.texture,"alphaMap-wrapS":r.RepeatWrapping,"alphaMap-wrapT":r.RepeatWrapping,opacity:g?1:0},d)))}function m({distance:e=.4,alphaTest:t=.5,map:a,width:n=512,height:o=512,scale:i,children:u,...l}){const c=s.useRef(null),d=l.spotlightRef,m=l.debug;return p(d,c,n,o,e),s.createElement(s.Fragment,null,s.createElement("mesh",{ref:c,scale:i,castShadow:!0},s.createElement("planeGeometry",null),s.createElement("meshBasicMaterial",{transparent:!0,side:r.DoubleSide,alphaTest:t,alphaMap:a,"alphaMap-wrapS":r.RepeatWrapping,"alphaMap-wrapT":r.RepeatWrapping,opacity:m?1:0},u)))}const h=s.forwardRef((({opacity:e=1,radiusTop:t,radiusBottom:r,depthBuffer:a,color:n="white",distance:o=5,angle:i=.15,attenuation:u=5,anglePower:p=5,volumetric:d=!0,debug:m=!1,children:h,...f},g)=>{const v=s.useRef(null);return s.useImperativeHandle(g,(()=>v.current),[]),s.createElement("group",null,m&&v.current&&s.createElement("spotLightHelper",{args:[v.current]}),s.createElement("spotLight",l.default({ref:v,angle:i,color:n,distance:o,castShadow:!0},f),d&&s.createElement(c,{debug:m,opacity:e,radiusTop:t,radiusBottom:r,depthBuffer:a,color:n,distance:o,angle:i,attenuation:u,anglePower:p})),h&&s.cloneElement(h,{spotlightRef:v,debug:m}))}));exports.SpotLight=h,exports.SpotLightShadow=function(e){return e.shader?s.createElement(d,e):s.createElement(m,e)};
|
|
@@ -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-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:
|
|
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-composer"),require("../helpers/deprecated.cjs.js");var l=c(e),o=s(r),f=s(n);const i=o.createContext(null);const m=new f.PlaneGeometry(1,1),p=o.forwardRef((({startFrame:e,endFrame:r,fps:n,frameName:c,textureDataURL:s,textureImageURL:p,loop:d,numberOfFrames:h,autoPlay:y,animationNames:v,onStart:w,onEnd:E,onLoopEnd:g,onFrame:x,play:b,pause:F,flipX:S,alphaTest:j,children:R,asSprite:M,offset:A,playBackwards:O,resetOnEnd:z,maxItems:N,instanceItems:q,spriteDataset:L,canvasRenderingContext2DSettings:P,roundFramePosition:T=!1,meshProps:k={},...D},I)=>{var _;const C=o.useRef(),U=o.useRef(null),B=o.useRef(),G=o.useRef(),H=o.useRef(window.performance.now()),J=o.useRef(e||0),V=o.useRef(c||""),W=(null!=n?n:30)>0?1e3/(n||30):0,[X,K]=o.useState(new f.Texture),Q=o.useRef(0),[Y,Z]=o.useState([1,1,1]),$=S?-1:1,[ee,re]=o.useState(null==M||M),te=o.useRef(F),ne=o.useRef(A),ue=o.useRef(!1),ae=o.useRef([]),{spriteObj:ce,loadJsonAndTexture:se}=a.useSpriteLoader(null,null,v,h,void 0,P);function le(){}const oe=o.useMemo((()=>({current:ne.current,offset:ne.current,imageUrl:p,reset:le,hasEnded:!1,ref:I})),[p,L]);o.useImperativeHandle(I,(()=>C.current),[]),o.useLayoutEffect((()=>{ne.current=A}),[A]);const fe=(e,r)=>{const t=r/e;return G.current&&G.current.scale.set(1,t,1),[1,t,1]};o.useEffect((()=>{var e;L?ie(null==L||null==(e=L.spriteTexture)?void 0:e.clone(),L.spriteData):p&&s&&se(p,s)}),[L]),o.useEffect((()=>{var e;ce&&ie(null==ce||null==(e=ce.spriteTexture)?void 0:e.clone(),null==ce?void 0:ce.spriteData)}),[ce]),o.useEffect((()=>{re(null==M||M)}),[M]),o.useEffect((()=>{oe.hasEnded=!1,U.current&&!0===O?J.current=U.current.frames.length-1:J.current=0}),[O]),o.useLayoutEffect((()=>{me()}),[X,S]),o.useEffect((()=>{y&&(te.current=!1)}),[y]),o.useLayoutEffect((()=>{if(V.current!==c&&c&&(J.current=0,V.current=c,oe.hasEnded=!1,W<=0&&(J.current=r||e||0),U.current)){const{w:e,h:r}=de(U.current.frames).sourceSize,t=fe(e,r);Z(t)}}),[c,W]);const ie=(e,r=null)=>{if(null===r){if(h){const t=e.image.width,n=e.image.height;Q.current=h,O&&(J.current=h-1),U.current={frames:[],meta:{version:"1.0",size:{w:t,h:n},scale:"1"}},U.current.frames=r}}else{U.current=r,Q.current=U.current.frames.length,O&&(J.current=Q.current-1);const{w:t,h:n}=de(U.current.frames).sourceSize,u=fe(t,n);Z(u),B.current&&(B.current.map=e)}if(q)for(var t=0;t<q.length;t++){const e=Object.keys(U.current.frames),r=e[Math.floor(Math.random()*e.length)];ae.current.push({key:t,frames:U.current.frames,selectedFrame:r,offset:{x:0,y:0}})}K(e)},me=()=>{if(!U.current)return;const{meta:{size:e},frames:r}=U.current,{w:t,h:n}=Array.isArray(r)?r[0].sourceSize:c&&r[c]?r[c][0].sourceSize:{w:0,h:0};B.current.map.wrapS=B.current.map.wrapT=f.RepeatWrapping,B.current.map.center.set(0,0),B.current.map.repeat.set(1*$/(e.w/t),1/(e.h/n));const u=1/((e.h-1)/n);B.current.map.offset.x=0,B.current.map.offset.y=1-u,w&&w({currentFrameName:c,currentFrame:J.current})},pe=(e,r,t,n)=>{var u=void 0===A?oe.current:A;const a=J.current;let c=0,s=0;fe(e,r);const l=T?Math.round((t.w-1)/e):(t.w-1)/e,o=T?Math.round((t.h-1)/r):(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=$>0?d*(f/m):d*(f/m)-B.current.map.repeat.x,s=Math.abs(1-h)-h*(i/p),B.current.map.offset.x=c,B.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),J.current=e}else O?J.current-=1:J.current+=1};t.useFrame(((t,n)=>{var u,a;null!=(u=U.current)&&u.frames&&null!=(a=B.current)&&a.map&&(te.current||oe.hasEnded||!y&&!b||((()=>{const{meta:{size:t},frames:n}=U.current,{w:u,h:a}=de(n).sourceSize,s=Array.isArray(n)?n:c?n[c]:[],l=r||s.length-1;var o=void 0===A?oe.current:A;if(W<=0)return J.current=r||e||0,void pe(u,a,t,s);const f=window.performance.now(),i=f-H.current;if(!(i<=W)){var m=O?J.current<0:J.current>l,p=O?J.current===l:0===J.current,h=O?J.current<0:J.current>=l;if(m){if(J.current=d&&null!=e?e:0,O&&(J.current=l),d?null==g||g({currentFrameName:c,currentFrame:J.current}):(null==E||E({currentFrameName:c,currentFrame:J.current}),oe.hasEnded=!z,z&&(te.current=!0)),!d)return}else p&&(null==w||w({currentFrameName:c,currentFrame:J.current}));void 0!==o&&h?!1===ue.current&&(null==E||E({currentFrameName:c,currentFrame:J.current}),ue.current=!0):ue.current=!1,i<=W||(H.current=f-i%W,pe(u,a,t,s))}})(),x&&x({currentFrameName:V.current,currentFrame:J.current})))}));const de=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({},D,{ref:C,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!=Y?Y:[1,1,1],null!==(_=D.scale)&&void 0!==_?_:1)}),o.createElement(i.Provider,{value:oe},o.createElement(o.Suspense,{fallback:null},ee&&o.createElement("sprite",l.default({ref:G,scale:1,geometry:m},k),o.createElement("spriteMaterial",{premultipliedAlpha:!1,toneMapped:!1,ref:B,map:X,transparent:!0,alphaTest:null!=j?j:0})),!ee&&o.createElement(u.Instances,l.default({geometry:m,limit:null!=N?N:1},k),o.createElement("meshBasicMaterial",{premultipliedAlpha:!1,toneMapped:!1,side:f.DoubleSide,ref:B,map:X,transparent:!0,alphaTest:null!=j?j:0}),(null!=q?q:[0]).map(((e,r)=>o.createElement(u.Instance,l.default({key:r,ref:1===(null==q?void 0:q.length)?G:null,position:e,scale:1},k)))))),R))}));exports.SpriteAnimator=p,exports.useSpriteAnimator=function(){return o.useContext(i)};
|
package/core/SpriteAnimator.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
type CommonMeshProps = {
|
|
3
|
+
frustumCulled?: boolean;
|
|
4
|
+
renderOrder?: number;
|
|
5
|
+
visible?: boolean;
|
|
6
|
+
userData?: any;
|
|
7
|
+
matrixAutoUpdate?: boolean;
|
|
8
|
+
};
|
|
2
9
|
export type SpriteAnimatorProps = {
|
|
3
10
|
startFrame?: number;
|
|
4
11
|
endFrame?: number;
|
|
@@ -27,6 +34,8 @@ export type SpriteAnimatorProps = {
|
|
|
27
34
|
instanceItems?: any[];
|
|
28
35
|
spriteDataset?: any;
|
|
29
36
|
canvasRenderingContext2DSettings?: CanvasRenderingContext2DSettings;
|
|
37
|
+
roundFramePosition?: boolean;
|
|
38
|
+
meshProps?: CommonMeshProps;
|
|
30
39
|
} & JSX.IntrinsicElements['group'];
|
|
31
40
|
type SpriteAnimatorState = {
|
|
32
41
|
current: number | undefined;
|
package/core/SpriteAnimator.js
CHANGED
|
@@ -9,6 +9,7 @@ const context = /*#__PURE__*/React.createContext(null);
|
|
|
9
9
|
function useSpriteAnimator() {
|
|
10
10
|
return React.useContext(context);
|
|
11
11
|
}
|
|
12
|
+
const geometry = new THREE.PlaneGeometry(1, 1);
|
|
12
13
|
const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
13
14
|
startFrame,
|
|
14
15
|
endFrame,
|
|
@@ -37,6 +38,8 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
37
38
|
instanceItems,
|
|
38
39
|
spriteDataset,
|
|
39
40
|
canvasRenderingContext2DSettings,
|
|
41
|
+
roundFramePosition = false,
|
|
42
|
+
meshProps = {},
|
|
40
43
|
...props
|
|
41
44
|
}, fref) => {
|
|
42
45
|
var _props$scale;
|
|
@@ -47,7 +50,7 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
47
50
|
const timerOffset = React.useRef(window.performance.now());
|
|
48
51
|
const currentFrame = React.useRef(startFrame || 0);
|
|
49
52
|
const currentFrameName = React.useRef(frameName || '');
|
|
50
|
-
const fpsInterval = 1000 / (fps || 30);
|
|
53
|
+
const fpsInterval = (fps !== null && fps !== void 0 ? fps : 30) > 0 ? 1000 / (fps || 30) : 0;
|
|
51
54
|
const [spriteTexture, setSpriteTexture] = React.useState(new THREE.Texture());
|
|
52
55
|
const totalFrames = React.useRef(0);
|
|
53
56
|
const [aspect, setAspect] = React.useState([1, 1, 1]);
|
|
@@ -90,7 +93,9 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
90
93
|
var _spriteDataset$sprite;
|
|
91
94
|
parseSpriteDataLite(spriteDataset == null || (_spriteDataset$sprite = spriteDataset.spriteTexture) == null ? void 0 : _spriteDataset$sprite.clone(), spriteDataset.spriteData);
|
|
92
95
|
} else {
|
|
93
|
-
|
|
96
|
+
if (textureImageURL && textureDataURL) {
|
|
97
|
+
loadJsonAndTexture(textureImageURL, textureDataURL);
|
|
98
|
+
}
|
|
94
99
|
}
|
|
95
100
|
}, [spriteDataset]);
|
|
96
101
|
React.useEffect(() => {
|
|
@@ -125,6 +130,9 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
125
130
|
currentFrame.current = 0;
|
|
126
131
|
currentFrameName.current = frameName;
|
|
127
132
|
state.hasEnded = false;
|
|
133
|
+
if (fpsInterval <= 0) {
|
|
134
|
+
currentFrame.current = endFrame || startFrame || 0;
|
|
135
|
+
}
|
|
128
136
|
// modifySpritePosition()
|
|
129
137
|
if (spriteData.current) {
|
|
130
138
|
const {
|
|
@@ -135,7 +143,7 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
135
143
|
setAspect(_aspect);
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
|
-
}, [frameName]);
|
|
146
|
+
}, [frameName, fpsInterval]);
|
|
139
147
|
|
|
140
148
|
// lite version for pre-loaded assets
|
|
141
149
|
const parseSpriteDataLite = (textureData, frameData = null) => {
|
|
@@ -237,8 +245,6 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
237
245
|
const runAnimation = () => {
|
|
238
246
|
//if (!frameName) return
|
|
239
247
|
|
|
240
|
-
const now = window.performance.now();
|
|
241
|
-
const diff = now - timerOffset.current;
|
|
242
248
|
const {
|
|
243
249
|
meta: {
|
|
244
250
|
size: metaInfo
|
|
@@ -252,6 +258,14 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
252
258
|
const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [];
|
|
253
259
|
const _endFrame = endFrame || spriteFrames.length - 1;
|
|
254
260
|
var _offset = offset === undefined ? state.current : offset;
|
|
261
|
+
if (fpsInterval <= 0) {
|
|
262
|
+
currentFrame.current = endFrame || startFrame || 0;
|
|
263
|
+
calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
const now = window.performance.now();
|
|
267
|
+
const diff = now - timerOffset.current;
|
|
268
|
+
if (diff <= fpsInterval) return;
|
|
255
269
|
|
|
256
270
|
// conditionals to support backwards play
|
|
257
271
|
var endCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current > _endFrame;
|
|
@@ -278,7 +292,6 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
278
292
|
//calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames)
|
|
279
293
|
}
|
|
280
294
|
}
|
|
281
|
-
|
|
282
295
|
if (!loop) return;
|
|
283
296
|
} else if (onStartCondition) {
|
|
284
297
|
onStart == null || onStart({
|
|
@@ -313,8 +326,8 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
313
326
|
let finalValX = 0;
|
|
314
327
|
let finalValY = 0;
|
|
315
328
|
calculateAspectRatio(frameW, frameH);
|
|
316
|
-
const framesH = Math.round((metaInfo.w - 1) / frameW);
|
|
317
|
-
const framesV = Math.round((metaInfo.h - 1) / frameH);
|
|
329
|
+
const framesH = roundFramePosition ? Math.round((metaInfo.w - 1) / frameW) : (metaInfo.w - 1) / frameW;
|
|
330
|
+
const framesV = roundFramePosition ? Math.round((metaInfo.h - 1) / frameH) : (metaInfo.h - 1) / frameH;
|
|
318
331
|
if (!spriteFrames[targetFrame]) {
|
|
319
332
|
return;
|
|
320
333
|
}
|
|
@@ -345,7 +358,6 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
345
358
|
if (isNaN(frameIndex)) {
|
|
346
359
|
frameIndex = 0; //fallback
|
|
347
360
|
}
|
|
348
|
-
|
|
349
361
|
currentFrame.current = frameIndex;
|
|
350
362
|
} else {
|
|
351
363
|
// auto update
|
|
@@ -414,21 +426,21 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
414
426
|
value: state
|
|
415
427
|
}, /*#__PURE__*/React.createElement(React.Suspense, {
|
|
416
428
|
fallback: null
|
|
417
|
-
}, displayAsSprite && /*#__PURE__*/React.createElement("sprite", {
|
|
429
|
+
}, displayAsSprite && /*#__PURE__*/React.createElement("sprite", _extends({
|
|
418
430
|
ref: spriteRef,
|
|
419
|
-
scale: 1.0
|
|
420
|
-
|
|
431
|
+
scale: 1.0,
|
|
432
|
+
geometry: geometry
|
|
433
|
+
}, meshProps), /*#__PURE__*/React.createElement("spriteMaterial", {
|
|
421
434
|
premultipliedAlpha: false,
|
|
422
435
|
toneMapped: false,
|
|
423
436
|
ref: matRef,
|
|
424
437
|
map: spriteTexture,
|
|
425
438
|
transparent: true,
|
|
426
439
|
alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
|
|
427
|
-
})), !displayAsSprite && /*#__PURE__*/React.createElement(Instances, {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
}), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
440
|
+
})), !displayAsSprite && /*#__PURE__*/React.createElement(Instances, _extends({
|
|
441
|
+
geometry: geometry,
|
|
442
|
+
limit: maxItems !== null && maxItems !== void 0 ? maxItems : 1
|
|
443
|
+
}, meshProps), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
432
444
|
premultipliedAlpha: false,
|
|
433
445
|
toneMapped: false,
|
|
434
446
|
side: THREE.DoubleSide,
|
|
@@ -436,14 +448,12 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
436
448
|
map: spriteTexture,
|
|
437
449
|
transparent: true,
|
|
438
450
|
alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
|
|
439
|
-
}), (instanceItems !== null && instanceItems !== void 0 ? instanceItems : [0]).map((item, index) => {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
});
|
|
446
|
-
}))), children));
|
|
451
|
+
}), (instanceItems !== null && instanceItems !== void 0 ? instanceItems : [0]).map((item, index) => /*#__PURE__*/React.createElement(Instance, _extends({
|
|
452
|
+
key: index,
|
|
453
|
+
ref: (instanceItems == null ? void 0 : instanceItems.length) === 1 ? spriteRef : null,
|
|
454
|
+
position: item,
|
|
455
|
+
scale: 1.0
|
|
456
|
+
}, meshProps))))), children));
|
|
447
457
|
});
|
|
448
458
|
|
|
449
459
|
export { SpriteAnimator, useSpriteAnimator };
|
package/core/Text.js
CHANGED
|
@@ -4,7 +4,6 @@ import { Text as Text$1, preloadFont } from 'troika-three-text';
|
|
|
4
4
|
import { useThree } from '@react-three/fiber';
|
|
5
5
|
import { suspend } from 'suspend-react';
|
|
6
6
|
|
|
7
|
-
// eslint-disable-next-line prettier/prettier
|
|
8
7
|
const Text = /* @__PURE__ */React.forwardRef(({
|
|
9
8
|
sdfGlyphSize = 64,
|
|
10
9
|
anchorX = 'center',
|
package/core/Trail.js
CHANGED
|
@@ -138,7 +138,7 @@ const Trail = /* @__PURE__ */React.forwardRef((props, forwardRef) => {
|
|
|
138
138
|
if (!points.current) return;
|
|
139
139
|
geo.setPoints(points.current, attenuation);
|
|
140
140
|
});
|
|
141
|
-
return /*#__PURE__*/React.createElement("group", null, createPortal(
|
|
141
|
+
return /*#__PURE__*/React.createElement("group", null, createPortal(/*#__PURE__*/React.createElement("mesh", {
|
|
142
142
|
ref: forwardRef,
|
|
143
143
|
geometry: geo,
|
|
144
144
|
material: mat
|
package/core/useAnimations.js
CHANGED
|
@@ -7,7 +7,6 @@ function useAnimations(clips, root) {
|
|
|
7
7
|
const [actualRef] = React.useState(() => root ? root instanceof Object3D ? {
|
|
8
8
|
current: root
|
|
9
9
|
} : root : ref);
|
|
10
|
-
// eslint-disable-next-line prettier/prettier
|
|
11
10
|
const [mixer] = React.useState(() => new AnimationMixer(undefined));
|
|
12
11
|
React.useLayoutEffect(() => {
|
|
13
12
|
if (root) actualRef.current = root instanceof Object3D ? root : root.current;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),n=require("@react-three/fiber");function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var o=i(e),t=i(r);const a="\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),n=require("@react-three/fiber");function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var o=i(e),t=i(r);exports.useBoxProjectedEnv=function(e=new o.Vector3,r=new o.Vector3){const[i]=t.useState((()=>({position:new o.Vector3,size:new o.Vector3})));n.applyProps(i,{position:e,size:r});const a=t.useRef(null),c=t.useMemo((()=>({ref:a,onBeforeCompile:e=>function(e,r,n){e.defines.BOX_PROJECTED_ENV_MAP=!0,e.uniforms.envMapPosition={value:r},e.uniforms.envMapSize={value:n},e.vertexShader=`\n varying vec3 vWorldPosition;\n ${e.vertexShader.replace("#include <worldpos_vertex>","\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n")}`,e.fragmentShader=`\n \n#ifdef BOX_PROJECTED_ENV_MAP\n uniform vec3 envMapSize;\n uniform vec3 envMapPosition;\n varying vec3 vWorldPosition;\n \n vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {\n vec3 nDir = normalize( v );\n vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbminmax;\n rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;\n rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;\n rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;\n float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );\n vec3 boxIntersection = vWorldPosition + nDir * correction; \n return boxIntersection - cubePos;\n }\n#endif\n\n ${e.fragmentShader.replace("#include <envmap_physical_pars_fragment>",o.ShaderChunk.envmap_physical_pars_fragment).replace("vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );","vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );\n#endif\n\n ").replace("reflectVec = inverseTransformDirection( reflectVec, viewMatrix );","reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );\n#endif\n\n ")}`}(e,i.position,i.size),customProgramCacheKey:()=>JSON.stringify(i.position.toArray())+JSON.stringify(i.size.toArray())})),[...i.position.toArray(),...i.size.toArray()]);return t.useLayoutEffect((()=>{a.current.needsUpdate=!0}),[i]),c};
|
package/core/useEnvironment.d.ts
CHANGED
|
@@ -10,8 +10,8 @@ export type EnvironmentLoaderProps = {
|
|
|
10
10
|
};
|
|
11
11
|
export declare function useEnvironment({ files, path, preset, encoding, extensions, }?: Partial<EnvironmentLoaderProps>): Texture;
|
|
12
12
|
export declare namespace useEnvironment {
|
|
13
|
-
var preload: (preloadOptions?: EnvironmentLoaderPreloadOptions
|
|
14
|
-
var clear: (clearOptions?: EnvironmentLoaderClearOptions
|
|
13
|
+
var preload: (preloadOptions?: EnvironmentLoaderPreloadOptions) => void;
|
|
14
|
+
var clear: (clearOptions?: EnvironmentLoaderClearOptions) => void;
|
|
15
15
|
}
|
|
16
16
|
type EnvironmentLoaderPreloadOptions = Omit<EnvironmentLoaderProps, 'encoding'>;
|
|
17
17
|
type EnvironmentLoaderClearOptions = Pick<EnvironmentLoaderProps, 'files' | 'preset'>;
|