11import * as React from 'react'
2- import { useFrame , useThree , Vector3 } from '@react-three/fiber'
2+ import { useFrame , Vector3 } from '@react-three/fiber'
33import * as THREE from 'three'
44
55export type SpriteAnimatorProps = {
@@ -53,7 +53,6 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
5353 } ,
5454 fref
5555) => {
56- const v = useThree ( ( state ) => state . viewport )
5756 const spriteData = React . useRef < any > ( null )
5857 const [ isJsonReady , setJsonReady ] = React . useState ( false )
5958 const hasEnded = React . useRef ( false )
@@ -118,13 +117,6 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
118117 modifySpritePosition ( )
119118 } , [ spriteTexture , flipX ] )
120119
121- React . useEffect ( ( ) => {
122- if ( autoPlay === false ) {
123- if ( play ) {
124- }
125- }
126- } , [ pause ] )
127-
128120 React . useEffect ( ( ) => {
129121 if ( autoPlay ) {
130122 pauseRef . current = false
@@ -148,7 +140,7 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
148140 const parseSpriteData = ( json : any , _spriteTexture : THREE . Texture ) : void => {
149141 // sprite only case
150142 if ( json === null ) {
151- if ( _spriteTexture && numberOfFrames ) {
143+ if ( numberOfFrames ) {
152144 //get size from texture
153145 const width = _spriteTexture . image . width
154146 const height = _spriteTexture . image . height
@@ -161,8 +153,8 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
161153 meta : {
162154 version : '1.0' ,
163155 size : { w : width , h : height } ,
164- scale : '1'
165- }
156+ scale : '1' ,
157+ } ,
166158 }
167159
168160 if ( parseInt ( frameWidth . toString ( ) , 10 ) === frameWidth ) {
@@ -173,12 +165,12 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
173165 rotated : false ,
174166 trimmed : false ,
175167 spriteSourceSize : { x : 0 , y : 0 , w : frameWidth , h : frameHeight } ,
176- sourceSize : { w : frameWidth , h : height }
168+ sourceSize : { w : frameWidth , h : height } ,
177169 } )
178170 }
179171 }
180172 }
181- } else if ( _spriteTexture ) {
173+ } else {
182174 spriteData . current = json
183175 spriteData . current . frames = Array . isArray ( json . frames ) ? json . frames : parseFrames ( )
184176 totalFrames . current = Array . isArray ( json . frames ) ? json . frames . length : Object . keys ( json . frames ) . length
@@ -207,7 +199,7 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
207199 for ( let i = 0 ; i < delimiters . length ; i ++ ) {
208200 sprites [ delimiters [ i ] ] = [ ]
209201
210- for ( let innerKey in data [ 'frames' ] ) {
202+ for ( const innerKey in data [ 'frames' ] ) {
211203 const value = data [ 'frames' ] [ innerKey ]
212204 const frameData = value [ 'frame' ]
213205 const x = frameData [ 'x' ]
@@ -217,14 +209,14 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
217209 const sourceWidth = value [ 'sourceSize' ] [ 'w' ]
218210 const sourceHeight = value [ 'sourceSize' ] [ 'h' ]
219211
220- if ( typeof innerKey === 'string' && innerKey . toLowerCase ( ) . indexOf ( delimiters [ i ] . toLowerCase ( ) ) !== - 1 ) {
212+ if ( innerKey . toLowerCase ( ) . indexOf ( delimiters [ i ] . toLowerCase ( ) ) !== - 1 ) {
221213 sprites [ delimiters [ i ] ] . push ( {
222214 x : x ,
223215 y : y ,
224216 w : width ,
225217 h : height ,
226218 frame : frameData ,
227- sourceSize : { w : sourceWidth , h : sourceHeight }
219+ sourceSize : { w : sourceWidth , h : sourceHeight } ,
228220 } )
229221 }
230222 }
@@ -245,7 +237,7 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
245237 if ( ! spriteData . current ) return
246238 const {
247239 meta : { size : metaInfo } ,
248- frames
240+ frames,
249241 } = spriteData . current
250242
251243 const { w : frameW , h : frameH } = Array . isArray ( frames )
@@ -277,26 +269,24 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
277269 const diff = now - timerOffset . current
278270 const {
279271 meta : { size : metaInfo } ,
280- frames
272+ frames,
281273 } = spriteData . current
282274 const { w : frameW , h : frameH } = getFirstItem ( frames ) . sourceSize
283275 const spriteFrames = Array . isArray ( frames ) ? frames : frameName ? frames [ frameName ] : [ ]
284276
285- let finalValX = 0
286- let finalValY = 0
287277 const _endFrame = endFrame || spriteFrames . length - 1
288278
289279 if ( currentFrame . current > _endFrame ) {
290280 currentFrame . current = loop ? startFrame ?? 0 : 0
291281 if ( loop ) {
292282 onLoopEnd ?.( {
293283 currentFrameName : frameName ,
294- currentFrame : currentFrame . current
284+ currentFrame : currentFrame . current ,
295285 } )
296286 } else {
297287 onEnd ?.( {
298288 currentFrameName : frameName ,
299- currentFrame : currentFrame . current
289+ currentFrame : currentFrame . current ,
300290 } )
301291 hasEnded . current = resetOnEnd ? false : true
302292 if ( resetOnEnd ) {
@@ -329,20 +319,22 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
329319 const framesV = ( metaInfo . h - 1 ) / frameH
330320 const {
331321 frame : { x : frameX , y : frameY } ,
332- sourceSize : { w : originalSizeX , h : originalSizeY }
322+ sourceSize : { w : originalSizeX , h : originalSizeY } ,
333323 } = spriteFrames [ currentFrame . current ]
334324 const frameOffsetX = 1 / framesH
335325 const frameOffsetY = 1 / framesV
336326 finalValX =
337- flipOffset > 0 ? frameOffsetX * ( frameX / originalSizeX ) : frameOffsetX * ( frameX / originalSizeX ) - matRef . current . map . repeat . x
327+ flipOffset > 0
328+ ? frameOffsetX * ( frameX / originalSizeX )
329+ : frameOffsetX * ( frameX / originalSizeX ) - matRef . current . map . repeat . x
338330 finalValY = Math . abs ( 1 - frameOffsetY ) - frameOffsetY * ( frameY / originalSizeY )
339331
340332 matRef . current . map . offset . x = finalValX
341333 matRef . current . map . offset . y = finalValY
342334 }
343335
344336 // *** Warning! It runs on every frame! ***
345- useFrame ( ( state , delta ) => {
337+ useFrame ( ( _state , _delta ) => {
346338 if ( ! spriteData . current ?. frames || ! matRef . current ?. map ) {
347339 return
348340 }
@@ -370,11 +362,17 @@ export const SpriteAnimator: React.FC<SpriteAnimatorProps> = (
370362 }
371363
372364 return (
373- < group { ...props } >
365+ < group ref = { fref } { ...props } >
374366 < React . Suspense fallback = { null } >
375367 { displayAsSprite && (
376368 < sprite ref = { spriteRef } scale = { aspect } >
377- < spriteMaterial toneMapped = { false } ref = { matRef } map = { spriteTexture } transparent = { true } alphaTest = { alphaTest ?? 0.0 } />
369+ < spriteMaterial
370+ toneMapped = { false }
371+ ref = { matRef }
372+ map = { spriteTexture }
373+ transparent = { true }
374+ alphaTest = { alphaTest ?? 0.0 }
375+ />
378376 </ sprite >
379377 ) }
380378 { ! displayAsSprite && (
0 commit comments