@splinetool/runtime 2.0.77 → 2.0.78
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/build/{runtime-bloom-SGWFTQ43.js → runtime-bloom-BLGIKDNQ.js} +1 -1
- package/build/runtime-bloom-BLGIKDNQ.js.br +0 -0
- package/build/runtime-bloom-BLGIKDNQ.js.gz +0 -0
- package/build/{runtime-brightnessContrast-3UTV7FCG.js → runtime-brightnessContrast-AKEVG3HR.js} +1 -1
- package/build/runtime-brightnessContrast-AKEVG3HR.js.br +0 -0
- package/build/runtime-brightnessContrast-AKEVG3HR.js.gz +0 -0
- package/build/{runtime-chromaticAberration-3ZR5GYBD.js → runtime-chromaticAberration-CJXZOVUA.js} +1 -1
- package/build/runtime-chromaticAberration-CJXZOVUA.js.br +0 -0
- package/build/runtime-chromaticAberration-CJXZOVUA.js.gz +0 -0
- package/build/{runtime-chunk-6GWU4YCO.js → runtime-chunk-5H6VPLTB.js} +1 -1
- package/build/runtime-chunk-5H6VPLTB.js.br +0 -0
- package/build/runtime-chunk-5H6VPLTB.js.gz +0 -0
- package/build/{runtime-chunk-OWWB5PWZ.js → runtime-chunk-67XYII4R.js} +1 -1
- package/build/{runtime-chunk-OWWB5PWZ.js.br → runtime-chunk-67XYII4R.js.br} +0 -0
- package/build/runtime-chunk-67XYII4R.js.gz +0 -0
- package/build/{runtime-chunk-E635BCSZ.js → runtime-chunk-7QKPATHR.js} +1 -1
- package/build/runtime-chunk-7QKPATHR.js.br +0 -0
- package/build/runtime-chunk-7QKPATHR.js.gz +0 -0
- package/build/{runtime-chunk-6MHKNHIJ.js → runtime-chunk-AIAGSHYQ.js} +1 -1
- package/build/runtime-chunk-AIAGSHYQ.js.br +0 -0
- package/build/runtime-chunk-AIAGSHYQ.js.gz +0 -0
- package/build/{runtime-chunk-25EO7VPR.js → runtime-chunk-AKDBKOG2.js} +1 -1
- package/build/runtime-chunk-AKDBKOG2.js.br +0 -0
- package/build/runtime-chunk-AKDBKOG2.js.gz +0 -0
- package/build/{runtime-chunk-2ILKVPU7.js → runtime-chunk-BE22RDJE.js} +1 -1
- package/build/runtime-chunk-BE22RDJE.js.br +0 -0
- package/build/runtime-chunk-BE22RDJE.js.gz +0 -0
- package/build/{runtime-chunk-NTVPXSOS.js → runtime-chunk-BZZJZWYB.js} +1 -1
- package/build/runtime-chunk-BZZJZWYB.js.br +0 -0
- package/build/runtime-chunk-BZZJZWYB.js.gz +0 -0
- package/build/{runtime-chunk-P7X6NW5K.js → runtime-chunk-E4QRLMNN.js} +1 -1
- package/build/runtime-chunk-E4QRLMNN.js.br +0 -0
- package/build/runtime-chunk-E4QRLMNN.js.gz +0 -0
- package/build/{runtime-chunk-Q5T3KCHG.js → runtime-chunk-EAUIIPGL.js} +1 -1
- package/build/runtime-chunk-EAUIIPGL.js.br +0 -0
- package/build/runtime-chunk-EAUIIPGL.js.gz +0 -0
- package/build/{runtime-chunk-HR4NYGBJ.js → runtime-chunk-FLOULQFC.js} +1 -1
- package/build/runtime-chunk-FLOULQFC.js.br +2 -0
- package/build/runtime-chunk-FLOULQFC.js.gz +0 -0
- package/build/{runtime-chunk-RF2N5NLP.js → runtime-chunk-FSVP4JLG.js} +1 -1
- package/build/runtime-chunk-FSVP4JLG.js.br +0 -0
- package/build/{runtime-chunk-RF2N5NLP.js.gz → runtime-chunk-FSVP4JLG.js.gz} +0 -0
- package/build/{runtime-chunk-VWOW3I3F.js → runtime-chunk-HIFOSG33.js} +1 -1
- package/build/runtime-chunk-HIFOSG33.js.br +0 -0
- package/build/runtime-chunk-HIFOSG33.js.gz +0 -0
- package/build/{runtime-chunk-YP644KQB.js → runtime-chunk-IAV77RF7.js} +1 -1
- package/build/runtime-chunk-IAV77RF7.js.br +0 -0
- package/build/runtime-chunk-IAV77RF7.js.gz +0 -0
- package/build/{runtime-chunk-PVLR72QB.js → runtime-chunk-J26PDWXZ.js} +1 -1
- package/build/{runtime-chunk-PVLR72QB.js.br → runtime-chunk-J26PDWXZ.js.br} +0 -0
- package/build/runtime-chunk-J26PDWXZ.js.gz +0 -0
- package/build/{runtime-chunk-2XTIPMG3.js → runtime-chunk-J4DLIJUZ.js} +1 -1
- package/build/runtime-chunk-J4DLIJUZ.js.br +0 -0
- package/build/runtime-chunk-J4DLIJUZ.js.gz +0 -0
- package/build/{runtime-chunk-6JIJ47Z6.js → runtime-chunk-JPD7WF7H.js} +1 -1
- package/build/runtime-chunk-JPD7WF7H.js.br +0 -0
- package/build/runtime-chunk-JPD7WF7H.js.gz +0 -0
- package/build/{runtime-chunk-RUHSBN6Z.js → runtime-chunk-KVO4BD4I.js} +1 -1
- package/build/runtime-chunk-KVO4BD4I.js.br +0 -0
- package/build/runtime-chunk-KVO4BD4I.js.gz +0 -0
- package/build/{runtime-chunk-YKHSGLFC.js → runtime-chunk-LHPN54CL.js} +1 -1
- package/build/{runtime-chunk-YKHSGLFC.js.br → runtime-chunk-LHPN54CL.js.br} +0 -0
- package/build/runtime-chunk-LHPN54CL.js.gz +0 -0
- package/build/{runtime-chunk-YCVDVV27.js → runtime-chunk-N4IYKCD4.js} +1 -1
- package/build/runtime-chunk-N4IYKCD4.js.br +0 -0
- package/build/runtime-chunk-N4IYKCD4.js.gz +0 -0
- package/build/{runtime-chunk-A5G32UJU.js → runtime-chunk-QIDW3BF7.js} +1 -1
- package/build/runtime-chunk-QIDW3BF7.js.br +0 -0
- package/build/runtime-chunk-QIDW3BF7.js.gz +0 -0
- package/build/{runtime-chunk-NBHUK2SE.js → runtime-chunk-QKJWZ7FI.js} +1 -1
- package/build/runtime-chunk-QKJWZ7FI.js.br +0 -0
- package/build/runtime-chunk-QKJWZ7FI.js.gz +0 -0
- package/build/{runtime-chunk-BVMFLXGM.js → runtime-chunk-R4S4M2CX.js} +1 -1
- package/build/runtime-chunk-R4S4M2CX.js.br +0 -0
- package/build/runtime-chunk-R4S4M2CX.js.gz +0 -0
- package/build/{runtime-chunk-WIFURWRG.js → runtime-chunk-TLKSQZIK.js} +1 -1
- package/build/runtime-chunk-TLKSQZIK.js.br +0 -0
- package/build/runtime-chunk-TLKSQZIK.js.gz +0 -0
- package/build/{runtime-chunk-B7HJFNDU.js → runtime-chunk-UM3BOFRB.js} +1 -1
- package/build/runtime-chunk-UM3BOFRB.js.br +0 -0
- package/build/runtime-chunk-UM3BOFRB.js.gz +0 -0
- package/build/{runtime-chunk-PF2NJUFW.js → runtime-chunk-VGYXNKAV.js} +1 -1
- package/build/runtime-chunk-VGYXNKAV.js.br +0 -0
- package/build/runtime-chunk-VGYXNKAV.js.gz +0 -0
- package/build/{runtime-chunk-WKWLM3FK.js → runtime-chunk-VILHL2A3.js} +1 -1
- package/build/runtime-chunk-VILHL2A3.js.br +0 -0
- package/build/runtime-chunk-VILHL2A3.js.gz +0 -0
- package/build/{runtime-chunk-62KBLHKB.js → runtime-chunk-VUGCWL55.js} +1 -1
- package/build/runtime-chunk-VUGCWL55.js.br +0 -0
- package/build/runtime-chunk-VUGCWL55.js.gz +0 -0
- package/build/{runtime-chunk-BC4EZOEJ.js → runtime-chunk-ZKC6ZNGZ.js} +1 -1
- package/build/runtime-chunk-ZKC6ZNGZ.js.br +0 -0
- package/build/runtime-chunk-ZKC6ZNGZ.js.gz +0 -0
- package/build/{runtime-classicRuntime-XCN3ZR72.js → runtime-classicRuntime-TIXC6A7J.js} +1 -1
- package/build/runtime-classicRuntime-TIXC6A7J.js.br +0 -0
- package/build/runtime-classicRuntime-TIXC6A7J.js.gz +0 -0
- package/build/{runtime-cloners-4W7FLRGV.js → runtime-cloners-MHUMZ5KT.js} +1 -1
- package/build/runtime-cloners-MHUMZ5KT.js.br +0 -0
- package/build/runtime-cloners-MHUMZ5KT.js.gz +0 -0
- package/build/{runtime-components-GDXXOOQR.js → runtime-components-CVLXSYHS.js} +1 -1
- package/build/runtime-components-CVLXSYHS.js.br +0 -0
- package/build/runtime-components-CVLXSYHS.js.gz +0 -0
- package/build/{runtime-createDestroy-POAFJS7C.js → runtime-createDestroy-RP5SUEO4.js} +1 -1
- package/build/runtime-createDestroy-RP5SUEO4.js.br +0 -0
- package/build/runtime-createDestroy-RP5SUEO4.js.gz +0 -0
- package/build/{runtime-depthOfField-EHGOA7NI.js → runtime-depthOfField-UX4I4M7K.js} +1 -1
- package/build/runtime-depthOfField-UX4I4M7K.js.br +0 -0
- package/build/runtime-depthOfField-UX4I4M7K.js.gz +0 -0
- package/build/{runtime-dragDrop-W33Z6Y6W.js → runtime-dragDrop-EGL7S5S5.js} +1 -1
- package/build/runtime-dragDrop-EGL7S5S5.js.br +0 -0
- package/build/runtime-dragDrop-EGL7S5S5.js.gz +0 -0
- package/build/{runtime-gameControls-IEFSF4I7.js → runtime-gameControls-2DDLTBQF.js} +1 -1
- package/build/runtime-gameControls-2DDLTBQF.js.br +0 -0
- package/build/runtime-gameControls-2DDLTBQF.js.gz +0 -0
- package/build/{runtime-hair-XVBS2GA7.js → runtime-hair-3UEJB5FX.js} +1 -1
- package/build/runtime-hair-3UEJB5FX.js.br +0 -0
- package/build/runtime-hair-3UEJB5FX.js.gz +0 -0
- package/build/{runtime-hueSaturation-WCJBBDYB.js → runtime-hueSaturation-TC6KGXQ6.js} +1 -1
- package/build/runtime-hueSaturation-TC6KGXQ6.js.br +0 -0
- package/build/runtime-hueSaturation-TC6KGXQ6.js.gz +0 -0
- package/build/{runtime-mergeStaticGeometries-P5LQGUAM.js → runtime-mergeStaticGeometries-5RJDOXOR.js} +1 -1
- package/build/runtime-mergeStaticGeometries-5RJDOXOR.js.br +0 -0
- package/build/runtime-mergeStaticGeometries-5RJDOXOR.js.gz +0 -0
- package/build/{runtime-miscActions-APTMY76T.js → runtime-miscActions-J75DJJ3S.js} +1 -1
- package/build/runtime-miscActions-J75DJJ3S.js.br +0 -0
- package/build/runtime-miscActions-J75DJJ3S.js.gz +0 -0
- package/build/{runtime-mouseHover-NRO5UCG7.js → runtime-mouseHover-Y3VQ74MU.js} +1 -1
- package/build/runtime-mouseHover-Y3VQ74MU.js.br +0 -0
- package/build/runtime-mouseHover-Y3VQ74MU.js.gz +0 -0
- package/build/{runtime-noise-KM7YQMBM.js → runtime-noise-VDTKGLRY.js} +1 -1
- package/build/runtime-noise-VDTKGLRY.js.br +0 -0
- package/build/runtime-noise-VDTKGLRY.js.gz +0 -0
- package/build/{runtime-particles-GKDZPI7K.js → runtime-particles-GGLPX4N3.js} +1 -1
- package/build/runtime-particles-GGLPX4N3.js.br +0 -0
- package/build/runtime-particles-GGLPX4N3.js.gz +0 -0
- package/build/{runtime-paths-DOXCHUT5.js → runtime-paths-SSVMYZ7I.js} +1 -1
- package/build/runtime-paths-SSVMYZ7I.js.br +0 -0
- package/build/runtime-paths-SSVMYZ7I.js.gz +0 -0
- package/build/{runtime-pixelation-ZLBCYVUE.js → runtime-pixelation-7IVB5AHQ.js} +1 -1
- package/build/runtime-pixelation-7IVB5AHQ.js.br +0 -0
- package/build/runtime-pixelation-7IVB5AHQ.js.gz +0 -0
- package/build/{runtime-resize-SD25URWW.js → runtime-resize-Y2MQXLFX.js} +1 -1
- package/build/runtime-resize-Y2MQXLFX.js.br +0 -0
- package/build/runtime-resize-Y2MQXLFX.js.gz +0 -0
- package/build/{runtime-sceneTransition-O4XWLR26.js → runtime-sceneTransition-7I22WEJO.js} +1 -1
- package/build/runtime-sceneTransition-7I22WEJO.js.br +0 -0
- package/build/runtime-sceneTransition-7I22WEJO.js.gz +0 -0
- package/build/{runtime-scroll-2D4Z5GPS.js → runtime-scroll-SO45MYTH.js} +1 -1
- package/build/runtime-scroll-SO45MYTH.js.br +0 -0
- package/build/runtime-scroll-SO45MYTH.js.gz +0 -0
- package/build/runtime-shapeBlends-6AN6DOFU.js +1 -0
- package/build/runtime-shapeBlends-6AN6DOFU.js.br +0 -0
- package/build/runtime-shapeBlends-6AN6DOFU.js.gz +0 -0
- package/build/{runtime-text-FKMTHZ4K.js → runtime-text-E2ASXWZX.js} +1 -1
- package/build/runtime-text-E2ASXWZX.js.br +0 -0
- package/build/runtime-text-E2ASXWZX.js.gz +0 -0
- package/build/{runtime-textInputs-QNN3S2GJ.js → runtime-textInputs-FNLXJFVY.js} +1 -1
- package/build/runtime-textInputs-FNLXJFVY.js.br +0 -0
- package/build/runtime-textInputs-FNLXJFVY.js.gz +0 -0
- package/build/{runtime-timeline-KX5GBP37.js → runtime-timeline-CJZI4YO7.js} +1 -1
- package/build/runtime-timeline-CJZI4YO7.js.br +0 -0
- package/build/runtime-timeline-CJZI4YO7.js.gz +0 -0
- package/build/{runtime-tracking-44SCAGUQ.js → runtime-tracking-YTG7FGE7.js} +1 -1
- package/build/runtime-tracking-YTG7FGE7.js.br +0 -0
- package/build/runtime-tracking-YTG7FGE7.js.gz +0 -0
- package/build/runtime-transitions-HPFANIJ6.js +1 -0
- package/build/runtime-transitions-HPFANIJ6.js.br +0 -0
- package/build/runtime-transitions-HPFANIJ6.js.gz +0 -0
- package/build/{runtime-ui2d-BKNIWTYT.js → runtime-ui2d-IQYCXIGE.js} +1 -1
- package/build/runtime-ui2d-IQYCXIGE.js.br +0 -0
- package/build/runtime-ui2d-IQYCXIGE.js.gz +0 -0
- package/build/{runtime-vectorShapes-LZ4FR3HV.js → runtime-vectorShapes-MB5TXEDV.js} +1 -1
- package/build/runtime-vectorShapes-MB5TXEDV.js.br +0 -0
- package/build/runtime-vectorShapes-MB5TXEDV.js.gz +0 -0
- package/build/{runtime-vignette-DUC5F7RW.js → runtime-vignette-P4T5Y5FL.js} +1 -1
- package/build/runtime-vignette-P4T5Y5FL.js.br +0 -0
- package/build/runtime-vignette-P4T5Y5FL.js.gz +0 -0
- package/build/{runtime-webgpu-MR5IDANE.js → runtime-webgpu-NMDQXIWA.js} +1 -1
- package/build/runtime-webgpu-NMDQXIWA.js.br +0 -0
- package/build/runtime-webgpu-NMDQXIWA.js.gz +0 -0
- package/build/runtime.cjs +8 -8
- package/build/runtime.js +1 -1
- package/build/runtime.js.br +0 -0
- package/build/runtime.js.gz +0 -0
- package/build/runtime.standalone.js +1 -1
- package/build/runtime.standalone.js.br +0 -0
- package/build/runtime.standalone.js.gz +0 -0
- package/build/runtime.standalone.webgl.js +1 -1
- package/build/runtime.standalone.webgl.js.br +0 -0
- package/build/runtime.standalone.webgl.js.gz +0 -0
- package/build/runtime.standalone.webgpu.js +1 -1
- package/build/runtime.standalone.webgpu.js.br +0 -0
- package/build/runtime.standalone.webgpu.js.gz +0 -0
- package/build/runtime.standalone.webgpu.micro.js +1 -1
- package/build/runtime.standalone.webgpu.micro.js.br +0 -0
- package/build/runtime.standalone.webgpu.micro.js.gz +0 -0
- package/build/runtime.standalone.webgpu.min.js +1 -1
- package/build/runtime.standalone.webgpu.min.js.br +0 -0
- package/build/runtime.standalone.webgpu.min.js.gz +0 -0
- package/package.json +1 -1
- package/build/runtime-bloom-SGWFTQ43.js.br +0 -0
- package/build/runtime-bloom-SGWFTQ43.js.gz +0 -0
- package/build/runtime-brightnessContrast-3UTV7FCG.js.br +0 -0
- package/build/runtime-brightnessContrast-3UTV7FCG.js.gz +0 -0
- package/build/runtime-chromaticAberration-3ZR5GYBD.js.br +0 -0
- package/build/runtime-chromaticAberration-3ZR5GYBD.js.gz +0 -0
- package/build/runtime-chunk-25EO7VPR.js.br +0 -0
- package/build/runtime-chunk-25EO7VPR.js.gz +0 -0
- package/build/runtime-chunk-2ILKVPU7.js.br +0 -0
- package/build/runtime-chunk-2ILKVPU7.js.gz +0 -0
- package/build/runtime-chunk-2XTIPMG3.js.br +0 -0
- package/build/runtime-chunk-2XTIPMG3.js.gz +0 -0
- package/build/runtime-chunk-62KBLHKB.js.br +0 -0
- package/build/runtime-chunk-62KBLHKB.js.gz +0 -0
- package/build/runtime-chunk-6GWU4YCO.js.br +0 -0
- package/build/runtime-chunk-6GWU4YCO.js.gz +0 -0
- package/build/runtime-chunk-6JIJ47Z6.js.br +0 -0
- package/build/runtime-chunk-6JIJ47Z6.js.gz +0 -0
- package/build/runtime-chunk-6MHKNHIJ.js.br +0 -0
- package/build/runtime-chunk-6MHKNHIJ.js.gz +0 -0
- package/build/runtime-chunk-A5G32UJU.js.br +0 -1
- package/build/runtime-chunk-A5G32UJU.js.gz +0 -0
- package/build/runtime-chunk-B7HJFNDU.js.br +0 -0
- package/build/runtime-chunk-B7HJFNDU.js.gz +0 -0
- package/build/runtime-chunk-BC4EZOEJ.js.br +0 -0
- package/build/runtime-chunk-BC4EZOEJ.js.gz +0 -0
- package/build/runtime-chunk-BVMFLXGM.js.br +0 -0
- package/build/runtime-chunk-BVMFLXGM.js.gz +0 -0
- package/build/runtime-chunk-E635BCSZ.js.br +0 -0
- package/build/runtime-chunk-E635BCSZ.js.gz +0 -0
- package/build/runtime-chunk-HR4NYGBJ.js.br +0 -0
- package/build/runtime-chunk-HR4NYGBJ.js.gz +0 -0
- package/build/runtime-chunk-NBHUK2SE.js.br +0 -0
- package/build/runtime-chunk-NBHUK2SE.js.gz +0 -0
- package/build/runtime-chunk-NTVPXSOS.js.br +0 -0
- package/build/runtime-chunk-NTVPXSOS.js.gz +0 -0
- package/build/runtime-chunk-OWWB5PWZ.js.gz +0 -0
- package/build/runtime-chunk-P7X6NW5K.js.br +0 -0
- package/build/runtime-chunk-P7X6NW5K.js.gz +0 -0
- package/build/runtime-chunk-PF2NJUFW.js.br +0 -0
- package/build/runtime-chunk-PF2NJUFW.js.gz +0 -0
- package/build/runtime-chunk-PVLR72QB.js.gz +0 -0
- package/build/runtime-chunk-Q5T3KCHG.js.br +0 -0
- package/build/runtime-chunk-Q5T3KCHG.js.gz +0 -0
- package/build/runtime-chunk-RF2N5NLP.js.br +0 -0
- package/build/runtime-chunk-RUHSBN6Z.js.br +0 -0
- package/build/runtime-chunk-RUHSBN6Z.js.gz +0 -0
- package/build/runtime-chunk-VWOW3I3F.js.br +0 -0
- package/build/runtime-chunk-VWOW3I3F.js.gz +0 -0
- package/build/runtime-chunk-WIFURWRG.js.br +0 -0
- package/build/runtime-chunk-WIFURWRG.js.gz +0 -0
- package/build/runtime-chunk-WKWLM3FK.js.br +0 -0
- package/build/runtime-chunk-WKWLM3FK.js.gz +0 -0
- package/build/runtime-chunk-YCVDVV27.js.br +0 -0
- package/build/runtime-chunk-YCVDVV27.js.gz +0 -0
- package/build/runtime-chunk-YKHSGLFC.js.gz +0 -0
- package/build/runtime-chunk-YP644KQB.js.br +0 -0
- package/build/runtime-chunk-YP644KQB.js.gz +0 -0
- package/build/runtime-classicRuntime-XCN3ZR72.js.br +0 -0
- package/build/runtime-classicRuntime-XCN3ZR72.js.gz +0 -0
- package/build/runtime-cloners-4W7FLRGV.js.br +0 -1
- package/build/runtime-cloners-4W7FLRGV.js.gz +0 -0
- package/build/runtime-components-GDXXOOQR.js.br +0 -0
- package/build/runtime-components-GDXXOOQR.js.gz +0 -0
- package/build/runtime-createDestroy-POAFJS7C.js.br +0 -0
- package/build/runtime-createDestroy-POAFJS7C.js.gz +0 -0
- package/build/runtime-depthOfField-EHGOA7NI.js.br +0 -0
- package/build/runtime-depthOfField-EHGOA7NI.js.gz +0 -0
- package/build/runtime-dragDrop-W33Z6Y6W.js.br +0 -0
- package/build/runtime-dragDrop-W33Z6Y6W.js.gz +0 -0
- package/build/runtime-gameControls-IEFSF4I7.js.br +0 -0
- package/build/runtime-gameControls-IEFSF4I7.js.gz +0 -0
- package/build/runtime-hair-XVBS2GA7.js.br +0 -1
- package/build/runtime-hair-XVBS2GA7.js.gz +0 -0
- package/build/runtime-hueSaturation-WCJBBDYB.js.br +0 -0
- package/build/runtime-hueSaturation-WCJBBDYB.js.gz +0 -0
- package/build/runtime-mergeStaticGeometries-P5LQGUAM.js.br +0 -0
- package/build/runtime-mergeStaticGeometries-P5LQGUAM.js.gz +0 -0
- package/build/runtime-miscActions-APTMY76T.js.br +0 -0
- package/build/runtime-miscActions-APTMY76T.js.gz +0 -0
- package/build/runtime-mouseHover-NRO5UCG7.js.br +0 -0
- package/build/runtime-mouseHover-NRO5UCG7.js.gz +0 -0
- package/build/runtime-noise-KM7YQMBM.js.br +0 -0
- package/build/runtime-noise-KM7YQMBM.js.gz +0 -0
- package/build/runtime-particles-GKDZPI7K.js.br +0 -0
- package/build/runtime-particles-GKDZPI7K.js.gz +0 -0
- package/build/runtime-paths-DOXCHUT5.js.br +0 -0
- package/build/runtime-paths-DOXCHUT5.js.gz +0 -0
- package/build/runtime-pixelation-ZLBCYVUE.js.br +0 -0
- package/build/runtime-pixelation-ZLBCYVUE.js.gz +0 -0
- package/build/runtime-resize-SD25URWW.js.br +0 -0
- package/build/runtime-resize-SD25URWW.js.gz +0 -0
- package/build/runtime-sceneTransition-O4XWLR26.js.br +0 -0
- package/build/runtime-sceneTransition-O4XWLR26.js.gz +0 -0
- package/build/runtime-scroll-2D4Z5GPS.js.br +0 -0
- package/build/runtime-scroll-2D4Z5GPS.js.gz +0 -0
- package/build/runtime-shapeBlends-FUUKLGPZ.js +0 -1
- package/build/runtime-shapeBlends-FUUKLGPZ.js.br +0 -0
- package/build/runtime-shapeBlends-FUUKLGPZ.js.gz +0 -0
- package/build/runtime-text-FKMTHZ4K.js.br +0 -0
- package/build/runtime-text-FKMTHZ4K.js.gz +0 -0
- package/build/runtime-textInputs-QNN3S2GJ.js.br +0 -0
- package/build/runtime-textInputs-QNN3S2GJ.js.gz +0 -0
- package/build/runtime-timeline-KX5GBP37.js.br +0 -0
- package/build/runtime-timeline-KX5GBP37.js.gz +0 -0
- package/build/runtime-tracking-44SCAGUQ.js.br +0 -0
- package/build/runtime-tracking-44SCAGUQ.js.gz +0 -0
- package/build/runtime-transitions-MYS3FPJE.js +0 -1
- package/build/runtime-transitions-MYS3FPJE.js.br +0 -0
- package/build/runtime-transitions-MYS3FPJE.js.gz +0 -0
- package/build/runtime-ui2d-BKNIWTYT.js.br +0 -0
- package/build/runtime-ui2d-BKNIWTYT.js.gz +0 -0
- package/build/runtime-vectorShapes-LZ4FR3HV.js.br +0 -0
- package/build/runtime-vectorShapes-LZ4FR3HV.js.gz +0 -0
- package/build/runtime-vignette-DUC5F7RW.js.br +0 -0
- package/build/runtime-vignette-DUC5F7RW.js.gz +0 -0
- package/build/runtime-webgpu-MR5IDANE.js.br +0 -0
- package/build/runtime-webgpu-MR5IDANE.js.gz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as n}from"./runtime-chunk-
|
|
1
|
+
import{a as n}from"./runtime-chunk-FLOULQFC.js";import"./runtime-chunk-BZZJZWYB.js";import{a as t}from"./runtime-chunk-UIRA2CWJ.js";import"./runtime-chunk-J26PDWXZ.js";import{Bc as e,Db as r,Fc as a,Le as i,Oc as o,Tc as c,Vc as y,we as s}from"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";new s,new c,new Float32Array([255/256/256**3,255/256/65536,255/256/256,255/256]);var l=new Map([[0,null],[1,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x+y,1.0)*opacity+x*(1.0-opacity);}"],[2,"vec3 blend(const in vec3 x,const in vec3 y,const in float opacity){return y*opacity+x*(1.0-opacity);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){float a=min(y.a,opacity);return vec4(blend(x.rgb,y.rgb,a),max(x.a,a));}"],[3,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y)*0.5*opacity+x*(1.0-opacity);}"],[4,"float blend(const in float x,const in float y){return(y==0.0)?y:max(1.0-(1.0-x)/y,0.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[5,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[6,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x,y)*opacity+x*(1.0-opacity);}"],[7,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return abs(x-y)*opacity+x*(1.0-opacity);}"],[8,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y-2.0*x*y)*opacity+x*(1.0-opacity);}"],[9,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x,y)*opacity+x*(1.0-opacity);}"],[10,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return x*y*opacity+x*(1.0-opacity);}"],[11,"float blend(const in float x,const in float y){return(y>0.0)?min(x/y,1.0):1.0;}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[12,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-abs(1.0-x-y))*opacity+x*(1.0-opacity);}"],[13,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return y*opacity+x*(1.0-opacity);}"],[14,"float blend(const in float x,const in float y){return(x<0.5)?(2.0*x*y):(1.0-2.0*(1.0-x)*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[15,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x*x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[16,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-(1.0-x)*(1.0-y))*opacity+x*(1.0-opacity);}"],[17,"float blend(const in float x,const in float y){return(y<0.5)?(2.0*x*y+x*x*(1.0-2.0*y)):(sqrt(x)*(2.0*y-1.0)+2.0*x*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[18,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x+y-1.0,0.0)*opacity+x*(1.0-opacity);}"]]),d=class extends e{constructor(n,t=1){super(),this.f=n,this.opacity=new i(t)}getOpacity(){return this.opacity.value}setOpacity(n){this.opacity.value=n}get blendFunction(){return this.f}set blendFunction(n){this.f=n,this.dispatchEvent({type:"change"})}getBlendFunction(){return this.blendFunction}setBlendFunction(n){this.blendFunction=n}getShaderCode(){return l.get(this.blendFunction)}},u=class extends e{constructor(n,t,{attributes:e=0,blendFunction:r=16,defines:a=new Map,uniforms:i=new Map,extensions:o=null,vertexShader:c=null}={}){super(),this.name=n,this.renderer=null,this.attributes=e,this.fragmentShader=t,this.vertexShader=c,this.defines=a,this.uniforms=i,this.extensions=o,this.blendMode=new d(r),this.blendMode.addEventListener("change",n=>this.setChanged())}getName(){return this.name}setRenderer(n){this.renderer=n}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(n){this.attributes=n,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(n){this.fragmentShader=n,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(n){this.vertexShader=n,this.setChanged()}setChanged(){this.dispatchEvent({type:"change"})}setDepthTexture(n,t=r){}update(n,t,e){}setSize(n,t){}initialize(n,t,e){}dispose(){for(let n of Object.keys(this)){let t=this[n];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof y||t===this.renderer)continue;this[n].dispose()}}}},x=(new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10]),new a,new o,new c,class extends u{constructor({blendFunction:n=16,premultiply:t=!1}={}){super("NoiseEffect","void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 noise=vec3(rand(uv*time));\n#ifdef PREMULTIPLY\noutputColor=vec4(min(inputColor.rgb*noise,vec3(1.0)),inputColor.a);\n#else\noutputColor=vec4(noise,inputColor.a);\n#endif\n}",{blendFunction:n}),this.premultiply=t}get premultiply(){return this.defines.has("PREMULTIPLY")}set premultiply(n){this.premultiply!==n&&(n?this.defines.set("PREMULTIPLY","1"):this.defines.delete("PREMULTIPLY"),this.setChanged())}isPremultiplied(){return this.premultiply}setPremultiplied(n){this.premultiply=n}});function p(n,t,e){return n+(t-n)*e}function w(n,t,e,r){let a=p(n,t,.75),i=p(e,r,.75);return p(a,i,.875)}Math.PI,new a,new a,new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array(2),new Float32Array(2),new Float32Array([0,-.25,.25,-.125,.125,-.375,.375]),new Float32Array([0,0]),new Float32Array([.25,-.25]),new Float32Array([-.25,.25]),new Float32Array([.125,-.125]),new Float32Array([-.125,.125]),new Uint8Array([0,0]),new Uint8Array([3,0]),new Uint8Array([0,3]),new Uint8Array([3,3]),new Uint8Array([1,0]),new Uint8Array([4,0]),new Uint8Array([1,3]),new Uint8Array([4,3]),new Uint8Array([0,1]),new Uint8Array([3,1]),new Uint8Array([0,4]),new Uint8Array([3,4]),new Uint8Array([1,1]),new Uint8Array([4,1]),new Uint8Array([1,4]),new Uint8Array([4,4]),new Uint8Array([0,0]),new Uint8Array([1,0]),new Uint8Array([0,2]),new Uint8Array([1,2]),new Uint8Array([2,0]),new Uint8Array([3,0]),new Uint8Array([2,2]),new Uint8Array([3,2]),new Uint8Array([0,1]),new Uint8Array([1,1]),new Uint8Array([0,3]),new Uint8Array([1,3]),new Uint8Array([2,1]),new Uint8Array([3,1]),new Uint8Array([2,3]),new Uint8Array([3,3]),new Map([[w(0,0,0,0),new Float32Array([0,0,0,0])],[w(0,0,0,1),new Float32Array([0,0,0,1])],[w(0,0,1,0),new Float32Array([0,0,1,0])],[w(0,0,1,1),new Float32Array([0,0,1,1])],[w(0,1,0,0),new Float32Array([0,1,0,0])],[w(0,1,0,1),new Float32Array([0,1,0,1])],[w(0,1,1,0),new Float32Array([0,1,1,0])],[w(0,1,1,1),new Float32Array([0,1,1,1])],[w(1,0,0,0),new Float32Array([1,0,0,0])],[w(1,0,0,1),new Float32Array([1,0,0,1])],[w(1,0,1,0),new Float32Array([1,0,1,0])],[w(1,0,1,1),new Float32Array([1,0,1,1])],[w(1,1,0,0),new Float32Array([1,1,0,0])],[w(1,1,0,1),new Float32Array([1,1,0,1])],[w(1,1,1,0),new Float32Array([1,1,1,0])],[w(1,1,1,1),new Float32Array([1,1,1,1])]]);var A=class extends n{constructor(){super(x),this.blendFunction=14}};t("noise",()=>new A);
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as e,d as t,e as i}from"./runtime-chunk-GFTBNL2W.js";import{b as n,e as s}from"./runtime-chunk-NEOF7SBZ.js";import{b as r,v as o}from"./runtime-chunk-YKHSGLFC.js";import"./runtime-chunk-RTLL6WIB.js";import"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a,d as l}from"./runtime-chunk-TZCHGFVF.js";import{S as u,k as c}from"./runtime-chunk-JBTA64YE.js";import{Aa as d,Cc as h,Dc as m,Ec as p,Ed as v,Fc as f,Gd as y,Ic as S,Ja as g,Jc as x,Pc as z,Rc as b,Vd as T,Wc as E,Wd as P,Xd as R,bd as _,dd as C,kd as A,ld as D,nd as w,pd as F,qd as I,te as V}from"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var N=new E,U=new f,O=new m,L=new m,M=new m,B=class{constructor(e){this.geometry=e.geometry,this.randomFunction=Math.random,this.indexAttribute=this.geometry.index,this.positionAttribute=this.geometry.getAttribute("position"),this.normalAttribute=this.geometry.getAttribute("normal"),this.colorAttribute=this.geometry.getAttribute("color"),this.uvAttribute=this.geometry.getAttribute("uv"),this.weightAttribute=null,this.distribution=null}setWeightAttribute(e){return this.weightAttribute=e?this.geometry.getAttribute(e):null,this}build(){let e=this.indexAttribute,t=this.positionAttribute,i=this.weightAttribute,n=e?e.count/3:t.count/3,s=new Float32Array(n);for(let r=0;r<n;r++){let n=1,o=3*r,a=3*r+1,l=3*r+2;e&&(o=e.getX(o),a=e.getX(a),l=e.getX(l)),i&&(n=i.getX(o)+i.getX(a)+i.getX(l)),N.a.fromBufferAttribute(t,o),N.b.fromBufferAttribute(t,a),N.c.fromBufferAttribute(t,l),n*=N.getArea(),s[r]=n}let r=new Float32Array(n),o=0;for(let e=0;e<n;e++)o+=s[e],r[e]=o;return this.distribution=r,this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t,i,n){let s=this._sampleFaceIndex();return this._sampleFace(s,e,t,i,n)}_sampleFaceIndex(){let e=this.distribution[this.distribution.length-1];return this._binarySearch(this.randomFunction()*e)}_binarySearch(e){let t=this.distribution,i=0,n=t.length-1,s=-1;for(;i<=n;){let r=Math.ceil((i+n)/2);if(0===r||t[r-1]<=e&&t[r]>e){s=r;break}e<t[r]?n=r-1:i=r+1}return s}_sampleFace(e,t,i,n,s){let r=this.randomFunction(),o=this.randomFunction();r+o>1&&(r=1-r,o=1-o);let a=this.indexAttribute,l=3*e,u=3*e+1,c=3*e+2;return a&&(l=a.getX(l),u=a.getX(u),c=a.getX(c)),N.a.fromBufferAttribute(this.positionAttribute,l),N.b.fromBufferAttribute(this.positionAttribute,u),N.c.fromBufferAttribute(this.positionAttribute,c),t.set(0,0,0).addScaledVector(N.a,r).addScaledVector(N.b,o).addScaledVector(N.c,1-(r+o)),void 0!==i&&(void 0!==this.normalAttribute?(N.a.fromBufferAttribute(this.normalAttribute,l),N.b.fromBufferAttribute(this.normalAttribute,u),N.c.fromBufferAttribute(this.normalAttribute,c),i.set(0,0,0).addScaledVector(N.a,r).addScaledVector(N.b,o).addScaledVector(N.c,1-(r+o)).normalize()):N.getNormal(i)),void 0!==n&&void 0!==this.colorAttribute&&(N.a.fromBufferAttribute(this.colorAttribute,l),N.b.fromBufferAttribute(this.colorAttribute,u),N.c.fromBufferAttribute(this.colorAttribute,c),U.set(0,0,0).addScaledVector(N.a,r).addScaledVector(N.b,o).addScaledVector(N.c,1-(r+o)),n.r=U.x,n.g=U.y,n.b=U.z),void 0!==s&&void 0!==this.uvAttribute&&(O.fromBufferAttribute(this.uvAttribute,l),L.fromBufferAttribute(this.uvAttribute,u),M.fromBufferAttribute(this.uvAttribute,c),s.set(0,0).addScaledVector(O,r).addScaledVector(L,o).addScaledVector(M,1-(r+o))),this}};function Q(e,t){let i=e,n=new Float32Array(4*t*t);for(let e=0;e<t*t;e++)n[4*e]=i[3*e],n[4*e+1]=i[3*e+1],n[4*e+2]=i[3*e+2],n[4*e+3]=0;let s=new w(n,t,t,g,d);return s.needsUpdate=!0,s}var W=class{constructor(e,t,i,n){this.type="SphereEmitterShape",this.targetMesh=void 0,this.size=e,this.type=i,this.textureSize=function(e){let t=Math.ceil(Math.sqrt(e));return Math.max(t,1)}(t),this.targetMesh="BufferGeometry"===n?.geometry.type||"Mesh"===n?.type&&n&&n.geometry.hasAttribute("position")&&n.geometry.hasAttribute("normal")?n:this.getMesh(i,1);let{positions:s,dataTexture:r,dataTextureNormals:o}=this.createPositions(this.textureSize,this.targetMesh??this.getMesh(i,1));this.positionsTexture=r,this.positionsAttribute=s,this.directionsTexture=o}createPositions(e,t){let{positions:i,normals:n}=function(e,t){let i=new D(e.geometry,e.material),n=[],s=[],r=new f,o=new f;null!==i.geometry.index&&(i.geometry=i.geometry.toNonIndexed());let a=new B(i).build();for(let e=0;e<t;e++)a.sample(r,o),n.push(r.x,r.y,r.z),s.push(o.x,o.y,o.z);return{positions:new Float32Array(n),normals:new Float32Array(s)}}(t,e*e);return{dataTexture:Q(i,e),positions:i,dataTextureNormals:Q(n,e)}}getMesh(e,t){let i=null;switch(e){case"SphereEmitterShape":i=new P(.5*t,32,32);break;case"TorusEmitterShape":i=new R(.5*t,.3,15,40);break;case"ConeEmitterShape":i=new y(t,t,15);break;case"BoxEmitterShape":i=new v(t,t,t);break;case"PlaneEmitterShape":i=new T(t,t),i.rotateX(-Math.PI/2);break;default:i=new P(t,32,32)}return new D(i,new A({color:16711680}))}applyToShader(e,t){this.size=(new f).fromArray(t.size.map(e=>"number"==typeof e?e:1)),e.uEmitterSize.value=this.size}dispose(){this.positionsTexture.dispose(),this.directionsTexture.dispose(),this.positionsAttribute=new Float32Array}};function k(e){let t={...e},i=u.defaultData;t.forceFieldObjectId&&(t.colliderEntityId=t.forceFieldObjectId);let n={...i.shape,...t.shape},s={...i.renderMaterial,...t.renderMaterial};return{...i,...t,shape:n,renderMaterial:s}}var q=class extends b{constructor(n,s){super(),this.type="ParticleEmitter",this.debugMode=!1,this.worldSpace=!0,this.rootObject=null,this.gpuCompute=null,this.positionSimRT=null,this.velocitySimRT=null,this.emissionRateSimRT=null,this.emitterShape=void 0,this.isEmitting=!1,this.hasBeenReset=!1,this.emittedParticlesAmount=0,this.lastEmitTime=0,this.globalTime=0,this.targetFPS=60,this.previousRatio=1,this.lerpFactor=.4,this.particlesAmount=0,this.noiseStrength=0,this.noiseScale=0,this.isBillboardBased=!0,this.simFeaturesDefinition={USE_COLLIDER:!1,USE_ATTRACTOR:!1,USE_VORTEX:!1,USE_SPHERE_COLLIDER:!1,USE_BOX_COLLIDER:!1,USE_FORCE_LOCAL_SPACE:!1,USE_NORMALS:!1,USE_CURL_NOISE:!0,USE_SIMPLEX_NOISE:!1,USE_FBM_NOISE:!1},this.textureLoader=new V,this.textureRequestId=0,this.currentWorldPosition=new f,this.systemQuaternion=new p,this.worldGravity=new f(0,0,0),this.directionAxis=new f(0,0,0),this.colliderV3=new f(0,0,0),this.colliderQuaternion=new p(0,0,0,1),this.matrixAutoUpdate=!0,this.renderer=n,this.system=s,this.shared=s.context.shared;let r=s.data;this.material=i(n)?e()?.createMaterial(r.renderMaterial,s.context)??t().createMaterial(r.renderMaterial,s.context):t().createMaterial(r.renderMaterial,s.context),this.material.uniforms={uSize:{value:0},uSizeEnd:{value:0},uColor:{value:r.renderMaterial.color},uColor2:{value:r.renderMaterial.color2},uPosition:{value:new f(0,0,0)},uEmissionData:{value:new f(0,0,0)},uTexture:{value:this.defaultTexture},uWorldOffset:{value:new f(0,0,0)},uWorldQuaternion:{value:new x(0,0,0,1)},uRandScaleFactor:{value:r.randomScale??0},uRandRotationFactor:{value:r.randomRotation??0},uRotation:{value:r.renderMaterial.spriteRotation[0]??0},uRotationEnd:{value:r.renderMaterial.spriteRotation[1]??0}},this.setTexture(this.material.uniforms,r.renderMaterial.texture),this.init(r)}setTexture(e,t){let i=t.data,n=++this.textureRequestId;if("string"==typeof t){let i=this.shared.image(t),s=()=>{if(n!==this.textureRequestId)return;let t=new S(i.img);t.needsUpdate=!0,e.uTexture.value=t};return void(i.loaded?s():i.loadPromise.then(s))}if("string"!=typeof i){let t=new Image;t.onload=()=>{if(n!==this.textureRequestId)return;let i=new S(t);i.needsUpdate=!0,e.uTexture.value=i};let s=new Blob([i],{type:"image/*"}),r=URL.createObjectURL(s);t.src=r}}updateGeometryAttributes(e,t){let n=function(e){let t=new Float32Array(e*e*2);for(let i=0;i<e;i++)for(let n=0;n<e;n++){let s=i*e+n;t[2*s+0]=i/(e-1),t[2*s+1]=n/(e-1)}return t}(t);if(!this.emitterShape?.positionsAttribute)return;let s=new F(n,2);e.geometry.setAttribute("ref",s),i(this.renderer)&&e.geometry.setAttribute("particleRef",s)}applyWorldSpace(){if(!(this.system.started&&this.worldSpace&&this.positionSimRT&&this.velocitySimRT))return;let e=this.system;e.getWorldQuaternion(this.systemQuaternion),this.systemQuaternion.invert(),e.getWorldPosition(this.currentWorldPosition),this.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.positionSimRT.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.systemQuaternion.invert(),this.positionSimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.velocitySimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize())}update(e,t){if(!this.gpuCompute||!this.positionSimRT||!this.velocitySimRT||!this.emissionRateSimRT||this.hasBeenReset)return;if(this.checkIfAllParticlesAreDead()&&!this.hasBeenReset)return void this.reset();this.applyWorldSpace(),this.globalTime=e,this.positionSimRT.material.uniforms.uTime.value=e,this.emissionRateSimRT.material.uniforms.uTime.value=e;let i=1e3/t,n=this.targetFPS/i,s=this.previousRatio+(n-this.previousRatio)*this.lerpFactor;this.positionSimRT.material.uniforms.uFPSRatio.value=s,this.previousRatio=s;let r=this.isEmitting?this.GoEmitSomeParticles(e,this.system.data.birthRatePerSec):0;this.emissionRateSimRT.material.uniforms.uLastIndexEmitted.value=this.emittedParticlesAmount,this.emissionRateSimRT.material.uniforms.uParticlesToEmit.value=r,this.material.uniforms.uPosition.value=this.gpuCompute.getCurrentRenderTarget(this.positionSimRT)?.texture,this.system.colliderEntities.length>0&&this.renderColliders(),this.gpuCompute.compute()}renderColliders(){if(!this.velocitySimRT)return;let e=this.system.colliderEntities[0],t=this.simFeaturesDefinition.USE_COLLIDER||this.simFeaturesDefinition.USE_ATTRACTOR||this.simFeaturesDefinition.USE_VORTEX;if(e.destroyedInAction&&t&&this.init(k({...this.system.data,colliderEntityId:null})),!e||e.destroyedInAction)return;e.getWorldPosition(this.colliderV3),0===this.colliderV3.y&&(this.colliderV3.y=1e-4),this.velocitySimRT.material.uniforms.uColliderPos.value.copy(this.colliderV3);let i=e.data.size;this.colliderV3.fromArray(i),this.velocitySimRT.material.uniforms.uColliderSize.value.copy(this.simFeaturesDefinition.USE_SPHERE_COLLIDER?this.colliderV3.multiplyScalar(.5):this.colliderV3),e.getWorldQuaternion(this.colliderQuaternion),this.velocitySimRT.material.uniforms.uColliderQuaternion.value.copy(this.colliderQuaternion.normalize()),this.velocitySimRT.material.uniforms.uColliderQuaternionInvert.value.copy(this.colliderQuaternion.normalize().invert())}updateState(e){!this.velocitySimRT||!this.positionSimRT||(e.renderMaterial&&this.updateMaterialState(e.renderMaterial),this.updateParticleState(e))}updateVariableState(e,t){if(!this.velocitySimRT||!this.positionSimRT)return;"size"===t[2]&&this.material.updateState({size:[e,this.material.uniforms.uSizeEnd.value]}),"sizeEnd"===t[2]&&this.material.updateState({size:[this.material.uniforms.uSize.value,e]});let i=(e,t)=>{let i=[...this.system.data.shape.size];i[e]=t,this.updateParticleState({shape:{...this.system.data.shape,size:i}})};"shape_size_0"===t[2]&&i(0,e),"shape_size_1"===t[2]&&i(1,e),"shape_size_2"===t[2]&&i(2,e),"speed"===t[2]&&(this.velocitySimRT.material.uniforms.uSpeed.value=e/10),"gravity"===t[2]&&this.worldGravity.set(0,e/100,0),"noiseStrength"===t[2]&&(this.noiseStrength=e,this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),"noiseScale"===t[2]&&(this.noiseScale=e,this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),"direction_x"===t[2]&&(this.directionAxis=this.getDirectionAxis([Number(e),this.system.data.direction[1],this.system.data.direction[2]])),"direction_y"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],Number(e),this.system.data.direction[2]])),"direction_z"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],this.system.data.direction[1],Number(e)]))}updateMaterialState(e){this.material.updateState({...e,size:e.size?[Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","size"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","sizeEnd"]))]:[0,0]}),e.texture&&(this.setTexture(this.material.uniforms,e.texture),this.material.needsUpdate=!0)}updateParticleState(e){if(this.positionSimRT&&this.velocitySimRT){if(this.shouldReInitGPUCompute(e)&&this.init(k(this.system.data)),void 0!==e.life&&(this.positionSimRT.material.uniforms.uMaxLifeTime.value=e.life),void 0!==e.speed&&(this.velocitySimRT.material.uniforms.uSpeed.value=Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10),void 0!==e.collisionBounce&&(this.velocitySimRT.material.uniforms.uBounce.value=e.collisionBounce),void 0!==e.noiseStrength&&(this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),void 0!==e.noiseScale&&(this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"])),this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),void 0!==e.noiseSeed&&(this.velocitySimRT.material.uniforms.uNoiseSeed.value=e.noiseSeed),void 0!==e.randomMass&&(this.velocitySimRT.material.uniforms.uRandomMassFactor.value=e.randomMass),void 0!==e.renderMaterial?.size){let t=this.shared.getVariable(e.renderMaterial.size[0],[this.uuid,"particles","size"]);this.velocitySimRT.material.uniforms.particleSize.value=Number(t)}if(void 0!==e.renderMaterial?.spriteRotation&&(this.material.uniforms.uRotation.value=e.renderMaterial.spriteRotation[0],this.material.uniforms.uRotationEnd.value=e.renderMaterial.spriteRotation[1]),void 0!==e.shape){let t=e.shape.size??this.system.data.shape.size,i=[Number(this.shared.getVariable(t[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(t[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(t[2],[this.uuid,"particles","shape_size_2"]))],n={...k(this.system.data).shape,size:i};this.emitterShape?.applyToShader(this.positionSimRT.material.uniforms,n)}if(void 0!==e.gravity&&(this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.velocitySimRT.material.uniforms.uGravity={value:this.worldGravity}),void 0!==e.direction){let t=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(t),this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis}void 0!==e.randomRotation&&(this.material.uniforms.uRandRotationFactor.value=e.randomRotation),void 0!==e.randomScale&&(this.material.uniforms.uRandScaleFactor.value=e.randomScale)}}updateForceFieldParameters(e){!this.velocitySimRT||(void 0!==e.forceIntensity&&(this.velocitySimRT.material.uniforms.uForceIntensity.value=e.forceIntensity),void 0!==e.forceDambing&&(this.velocitySimRT.material.uniforms.uForceDamping.value=e.forceDambing))}getDirectionAxis(e){let t=[Number(e[0])*h.DEG2RAD,Number(e[1])*h.DEG2RAD,Number(e[2])*h.DEG2RAD],i=new z(t[0],t[1],t[2],"XYZ");return this.directionAxis.set(0,1,0).applyEuler(i).normalize(),this.velocitySimRT&&(this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis),this.directionAxis}shouldReInitGPUCompute(e){let{birthRatePerSec:t,rootObjectType:i,colliderEntityId:n,shape:s,emitTimeDuration:r,emitTimeCycle:o,life:a,directionMode:l,noiseType:u}=e;return void 0!==t||void 0!==i||n||null===n||void 0!==o||void 0!==s||void 0!==a||void 0!==r||void 0!==l||void 0!==u}init(n){this.dispose(),this.particlesAmount=this.getMaxParticlesAmount({birthRatePerSecond:n.birthRatePerSec,particleMaxLifeTime:n.life,loopDuration:"infinity"===n.emitTimeCycle?0:n.emitTimeDuration}),this.particlesAmount>1e5&&(console.warn("The maximum number of particles is limited to 100000."),this.particlesAmount=1e5),this.emitterShape=this.createShape(n.shape,this.particlesAmount);let s=setInterval(()=>{if(!this.emitterShape)return;let e=this.emitterShape.positionsTexture.source.data.data;e&&!isNaN(e[0])?clearInterval(s):this.init(n)},100);if(!this.emitterShape)return;let r=this.updateSimulationDefinition(n),o=i(this.renderer)?e().createComputation(this.emitterShape.textureSize,this.emitterShape.textureSize,this.renderer,this.simFeaturesDefinition):t().createComputation(this.emitterShape.textureSize,this.emitterShape.textureSize,this.renderer),a=o.addVariable("uCurrentPosition",r+"\n\n\n\nuniform sampler2D uOriginalPosition;\nuniform float uTime;\nuniform float uSpeed; \nuniform vec3 uWorldOffset; \nuniform vec4 uWorldQuaternion;\nuniform float uMaxLifeTime;\nuniform vec3 uEmitterSize;\nuniform float uFPSRatio; \n\nfloat random (vec2 st) {\n return fract(sin(dot(st.xy,\n vec2(12.9898,78.233)))*\n 43758.5453123);\n}\nvec3 applyQuaternionToVector( vec4 q, vec3 v ){\n return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\n}\n\nvec3 applyForce(vec3 force, float mass) {\n vec3 acceleration = force / mass;\n \n return acceleration;\n }\n \n\nvoid main() {\n vec2 vUv = gl_FragCoord.xy / resolution.xy;\n vec3 position = texture2D( uCurrentPosition, vUv ).xyz;\n float currentLife = texture2D( uCurrentPosition, vUv ).w; \n float isSpawning = texture2D( uCurrentEmissionRate, vUv ).r; \n float isActive = texture2D( uCurrentEmissionRate, vUv ).g; \n float timeStart = texture2D( uCurrentEmissionRate, vUv ).b; \n vec3 originalPosition = ((texture2D( uOriginalPosition, vUv ).xyz) * uEmitterSize);\n vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz;\n float collisionFlag = texture2D( uCurrentVelocity, vUv ).w; \n float lifeTime = uMaxLifeTime;\n\n \n \n float isColliding = step(0.5, collisionFlag); \n float bounceOffset = 3.0 * isColliding; \n vec3 collisionAdjustedVelocity = velocity * (1.0 + bounceOffset);\n\n \n vec3 fpsVelocity = velocity * min(uFPSRatio, 5.0);\n position += mix(fpsVelocity, collisionAdjustedVelocity, isColliding);\n\n \n \n \n vec3 newPosition = applyQuaternionToVector(uWorldQuaternion, originalPosition) + uWorldOffset;\n originalPosition = mix(originalPosition, newPosition, isSpawning);\n position = mix(position, originalPosition, isSpawning);;\n timeStart = mix(timeStart, uTime, isSpawning);\n\n \n float timeLeft = max(lifeTime - (uTime - timeStart), 0.0);\n float life_Normalize = timeLeft / lifeTime;\n\n \n vec4 activeColor = vec4(position, life_Normalize);\n \n gl_FragColor = mix(vec4(0.0), activeColor, isActive);\n\n}\n",this.emitterShape.positionsTexture),l=o.addVariable("uCurrentVelocity",r+"\n\n\n\nuniform sampler2D uOriginalPosition;\nuniform sampler2D uDirections; \nuniform vec3 uDirectionsAxis;\nuniform vec4 uWorldQuaternion;\nuniform vec3 uGravity; \nuniform float uNoiseStrength; \nuniform float uNoiseScale; \nuniform float uNoiseSeed; \nuniform float particleSize;\nuniform float uSpeed; \nuniform float uRandomMassFactor;\n\n\nuniform vec3 uColliderPos; \nuniform vec3 uColliderSize; \nuniform vec4 uColliderQuaternion; \nuniform vec4 uColliderQuaternionInvert; \nuniform float uBounce; \nuniform float uForceDamping;\nuniform float uForceIntensity;\n\n\n\n\n vec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n }\n \n vec4 mod289(vec4 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n }\n \n vec4 permute(vec4 x) {\n return mod289(((x*34.0)+1.0)*x);\n }\n \n vec4 taylorInvSqrt(vec4 r)\n {\n return 1.79284291400159 - 0.85373472095314 * r;\n }\n \n vec3 fade(vec3 t) {\n return t*t*t*(t*(t*6.0-15.0)+10.0);\n}\n\n float snoise(vec3 v)\n {\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy; \n vec3 x3 = x0 - D.yyy; \n \n \n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n \n \n \n float n_ = 0.142857142857; \n vec3 ns = n_ * D.wyz - D.xzx;\n \n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); \n \n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); \n \n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n \n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n \n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n \n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n \n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n \n \n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n \n \n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n }\n \n vec3 snoiseVec3( vec3 x ){\n \n float s = snoise(vec3( x ));\n float s1 = snoise(vec3( x.y - 19.1 , x.z + 33.4 , x.x + 47.2 ));\n float s2 = snoise(vec3( x.z + 74.2 , x.x - 124.5 , x.y + 99.4 ));\n vec3 c = vec3( s , s1 , s2 );\n return c;\n \n }\n \n \n vec3 curlNoise( vec3 p, float seed){\n p += seed;\n const float e = .1;\n vec3 dx = vec3( e , 0.0 , 0.0 );\n vec3 dy = vec3( 0.0 , e , 0.0 );\n vec3 dz = vec3( 0.0 , 0.0 , e );\n \n vec3 p_x0 = snoiseVec3( p - dx );\n vec3 p_x1 = snoiseVec3( p + dx );\n vec3 p_y0 = snoiseVec3( p - dy );\n vec3 p_y1 = snoiseVec3( p + dy );\n vec3 p_z0 = snoiseVec3( p - dz );\n vec3 p_z1 = snoiseVec3( p + dz );\n \n float x = p_y1.z - p_y0.z - p_z1.y + p_z0.y;\n float y = p_z1.x - p_z0.x - p_x1.z + p_x0.z;\n float z = p_x1.y - p_x0.y - p_y1.x + p_y0.x;\n \n const float divisor = 1.0 / ( 2.0 * e );\n return normalize( vec3( x , y , z ) * divisor );\n \n }\n\n\n\nfloat cnoise(vec3 P)\n{\n vec3 Pi0 = floor(P); \n vec3 Pi1 = Pi0 + vec3(1.0); \n Pi0 = mod289(Pi0);\n Pi1 = mod289(Pi1);\n vec3 Pf0 = fract(P); \n vec3 Pf1 = Pf0 - vec3(1.0); \n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n\n vec4 gx0 = ixy0 * (1.0 / 7.0);\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n\n vec4 gx1 = ixy1 * (1.0 / 7.0);\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n\n vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\n vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\n vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\n vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\n vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\n vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\n vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\n vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\n\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); \n return 2.2 * n_xyz;\n}\n\n\nvec3 fbm_vec3(vec3 p, float frequency, float offset)\n{\n return vec3(\n cnoise((p+vec3(offset))*frequency),\n cnoise((p+vec3(offset+20.0))*frequency),\n cnoise((p+vec3(offset-30.0))*frequency)\n );\n}\n\n\nfloat rand(vec2 co){\n return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);\n}\nvec3 applyQuaternionToVector( vec4 q, vec3 v ){\n return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\n } \nvec3 applyForce(vec3 force, float mass) {\n vec3 acceleration = force / mass;\n \n return acceleration;\n}\n\nvec4 conjugate(vec4 q) {\n return vec4(q.w, -q.x, -q.y, -q.z);\n}\n\n\nvec3 ellipsoidNormal(vec3 p, vec3 radii) {\n return normalize(p / (radii * radii));\n}\n\nfloat friction = .3;\n\nvoid main() {\n vec2 vUv = gl_FragCoord.xy / resolution.xy;\n vec3 position = texture2D( uCurrentPosition, vUv ).xyz;\n vec3 originalPosition = texture2D( uOriginalPosition, vUv ).xyz;\n float timeLeft = texture2D( uCurrentPosition, vUv ).w;\n vec3 directions = texture2D( uDirections, vUv ).xyz; \n vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz;\n float mass = rand(originalPosition.xy) * 0.5 + 0.5;\n float isSpawning = texture2D( uCurrentEmissionRate, vUv ).x; \n float isActive = texture2D( uCurrentEmissionRate, vUv ).y; \n float collisionFlag =texture2D( uCurrentVelocity, vUv ).w; \n\n \n mass = (1.0 - (uRandomMassFactor * mass));\n \n if (isActive == 1.0) {\n \n \n \n #ifdef USE_CURL_NOISE\n if (uNoiseScale > 0.0 ) {\n velocity = curlNoise(position * uNoiseScale * .002, uNoiseSeed) * ( uNoiseStrength + 1.0) * .05 * uSpeed;\n }\n \n if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) {\n velocity += curlNoise( position, uNoiseSeed) * uNoiseStrength * 0.05 * uSpeed;\n }\n #endif\n \n #ifdef USE_SIMPLEX_NOISE\n if (uNoiseScale > 0.0 ) {\n velocity = vec3(snoise(position * uNoiseScale * .001) * ( uNoiseStrength + 1.0) * .1);\n velocity *= uSpeed;\n }\n \n if (uNoiseStrength > 0.0 && uNoiseScale == 0.0) {\n velocity += vec3(snoise(position * uNoiseStrength * .001) * .05 * uSpeed);\n }\n #endif\n \n #ifdef USE_FBM_NOISE\n if (uNoiseScale > 0.0 ) {\n velocity = fbm_vec3(position * uNoiseScale * .001, ( uNoiseStrength + 1.0), uNoiseSeed);\n velocity *= uSpeed;\n }\n \n if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) { \n velocity += fbm_vec3(position * uNoiseStrength * .001, ( uNoiseStrength + 1.0), uNoiseSeed) * .1 * uSpeed;\n }\n #endif\n\n \n \n #ifdef USE_COLLIDER\n float restitution = max(uBounce * 2., .01); \n \n \n #ifdef USE_SPHERE_COLLIDER \n \n vec3 radii = uColliderSize;\n \n vec3 relPos = position - uColliderPos;\n \n relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); \n \n vec3 scaledPos = relPos / radii;\n \n float dist = length(scaledPos); \n \n \n if (dist <= 1. + particleSize / length(radii) && collisionFlag == 0.0) {\n \n vec3 adjustedPos = scaledPos * (1.0 + particleSize / length(radii)); \n \n vec3 normal = ellipsoidNormal(adjustedPos, radii);\n \n normal = applyQuaternionToVector(uColliderQuaternion, normal);\n \n velocity = reflect(velocity, normal) * restitution;\n\n collisionFlag = 1.0;\n } else {\n collisionFlag = 0.0;\n }\n #endif\n\n \n \n #ifdef USE_BOX_COLLIDER\n \n vec3 boxHalfSize = uColliderSize / 2.0;\n \n vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); \n \n vec3 localDistance = abs(localPos) - boxHalfSize;\n float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); \n\n \n if (distToSurface <= particleSize * 0.5 && collisionFlag == 0.0) { \n \n vec3 normal;\n if (localDistance.x > localDistance.y && localDistance.x > localDistance.z) {\n normal = vec3(sign(localPos.x), 0.0, 0.0);\n } else if (localDistance.y > localDistance.z) {\n normal = vec3(0.0, sign(localPos.y), 0.0);\n } else {\n normal = vec3(0.0, 0.0, sign(localPos.z));\n } \n \n normal = applyQuaternionToVector(uColliderQuaternion, normal); \n \n velocity = reflect(velocity, normal) * restitution;\n \n collisionFlag = 1.0;\n } else {\n collisionFlag = 0.0;\n }\n #endif \n #endif \n \n\n \n \n #ifdef USE_ATTRACTOR\n\n #ifdef USE_SPHERE_COLLIDER \n \n vec3 radii = uColliderSize;\n \n vec3 relPos = position - uColliderPos;\n \n relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); \n \n vec3 scaledPos = relPos / radii;\n \n float distToSurface = length(scaledPos); \n float insideCheck = 1.0;\n\n #endif\n\n\n #ifdef USE_BOX_COLLIDER\n \n vec3 boxHalfSize = uColliderSize / 2.0;\n \n vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); \n vec3 localDistance = abs(localPos) - boxHalfSize;\n float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z));\n float insideCheck = particleSize;\n #endif \n \n \n #ifdef USE_FORCE_LOCAL_SPACE\n if (distToSurface <= insideCheck ) { \n \n #ifdef USE_SPHERE_COLLIDER \n float attractorStrength = (1.0 - distToSurface ) * uForceIntensity; \n #endif\n\n #ifdef USE_BOX_COLLIDER\n float attractorStrength = max((1.0 - insideCheck / distToSurface), 0.) * uForceIntensity; \n #endif\n\n float attractorDamping = uForceDamping; \n \n \n vec3 attractorRadii = uColliderSize;\n \n vec3 relPos = position - uColliderPos;\n \n relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); \n \n vec3 scaledPos = relPos / attractorRadii;\n\n \n float attractorRadius = length(scaledPos);\n \n vec3 relativePosition = position - uColliderPos;\n \n vec3 attractorForce = normalize(relativePosition) * attractorStrength;\n \n velocity -= attractorForce;\n \n velocity *= attractorDamping;\n }\n #else \n \n vec3 relativePosition = position - uColliderPos;\n \n vec3 attractorForce = normalize(relativePosition) * uForceIntensity;\n \n velocity -= attractorForce;\n \n velocity *= uForceDamping;\n #endif \n #endif \n \n \n \n #ifdef USE_VORTEX\n \n vec3 boxHalfSize = uColliderSize / 2.0;\n \n vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); \n vec3 localDistance = abs(localPos) - boxHalfSize;\n float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z));\n\n \n if (distToSurface <= particleSize) {\n float vortexStrength = uForceIntensity;\n vec3 localTopCenter = vec3(0.0, 0., 0.0);\n\n \n vec3 vortexCenter = uColliderPos + applyQuaternionToVector(uColliderQuaternion, localTopCenter);\n \n vec3 vortexVector = vortexCenter - position;\n\n \n \n vec3 upVector = vec3(0.0, 1.0, 0.01);\n vec3 rotationAxis = cross(upVector, applyQuaternionToVector(uColliderQuaternion, vortexVector));\n rotationAxis = normalize(rotationAxis);\n\n \n float rotationSpeed = length(vortexVector * vortexStrength * 3.0) ; \n\n vec3 rotationVelocity = rotationAxis * rotationSpeed;\n \n velocity = rotationVelocity * 0.005 ;\n\n \n \n \n vec3 originDirection = applyQuaternionToVector(uWorldQuaternion, directions);\n velocity += applyForce( originDirection * uSpeed * (1. - uForceDamping) , mass * .5);\n }\n #endif \n\n } \n \n\n \n \n \n #ifdef USE_NORMALS\n velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, directions) * uSpeed, isSpawning);\n #else\n velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, uDirectionsAxis) * uSpeed, isSpawning); \n #endif\n \n \n velocity += applyForce(uGravity, mass * .5) * (1.0 - collisionFlag);\n\n gl_FragColor = vec4(velocity, collisionFlag);\n}\n",this.emitterShape.directionsTexture),u=o.addVariable("uCurrentEmissionRate","\n\n\n\n\nuniform sampler2D uIndex; \nuniform float uLastIndexEmitted; \nuniform float uParticlesToEmit; \nuniform float uTime;\n\nvoid main() {\n vec2 vUv = gl_FragCoord.xy / resolution.xy;\n float particleIndex = texture(uIndex, vUv).x;\n float timeLeft = texture2D( uCurrentPosition, vUv ).w;\n float isActive = texture2D( uCurrentEmissionRate, vUv ).g; \n float timeStart = texture2D( uCurrentEmissionRate, vUv ).b;\n\n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n float emitLowerBound = step(uLastIndexEmitted, particleIndex);\n float emitUpperBound = step(particleIndex, uLastIndexEmitted + uParticlesToEmit - 1.0);\n float emitParticle = emitLowerBound * emitUpperBound; \n\n \n timeStart = mix(timeStart, uTime, emitParticle);\n gl_FragColor = vec4(emitParticle, mix(isActive, 1.0, emitParticle), timeStart, 1.0);\n\n\n}\n",function(e){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=0,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new w(t,e,e,g,d);return i.needsUpdate=!0,i}(this.emitterShape.textureSize));o.setVariableDependencies(a,[a,l,u]),o.setVariableDependencies(l,[a,l,u]),o.setVariableDependencies(u,[a,l,u]);let c=function({size:e}){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=i,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new w(t,e,e,g,d);return i.needsUpdate=!0,i}({size:this.emitterShape.textureSize}),h={uOriginalPosition:{value:this.emitterShape.positionsTexture},uWorldOffset:{value:new f(0,0,0)},uWorldQuaternion:{value:new x(0,0,0,1)},uTime:{value:0},uFPSRatio:{value:1},uMaxLifeTime:{value:n.life},uEmitterSize:{value:new f(Number(this.shared.getVariable(n.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(n.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(n.shape.size[2],[this.uuid,"particles","shape_size_2"])))},particleSize:{value:0}};a.material.uniforms=h;let m=this.getDirectionFromVariable(n.direction);this.directionAxis=this.getDirectionAxis(m),this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.noiseStrength=Number(this.shared.getVariable(n.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.noiseScale=Number(this.shared.getVariable(n.noiseScale,[this.uuid,"particles","noiseScale"]));let p=n.colliderEntityId&&this.system.getColliderData(n.colliderEntityId),v={uOriginalPosition:{value:this.emitterShape.positionsTexture},uDirections:{value:this.emitterShape.directionsTexture},uDirectionsAxis:{value:this.directionAxis},uWorldQuaternion:{value:new x(0,0,0,1)},uColliderPos:{value:new f(0,0,0)},uColliderSize:{value:new f(0,0,0)},uForceIntensity:{value:p?p.forceIntensity:0},uForceDamping:{value:p?p.forceDambing:0},uColliderQuaternion:{value:new x(0,0,0,1)},uColliderQuaternionInvert:{value:new x(0,0,0,1)},particleSize:{value:0},uGravity:{value:this.worldGravity},uNoiseStrength:{value:this.noiseStrength},uNoiseScale:{value:this.noiseScale},uNoiseSeed:{value:n.noiseSeed},uRandomMassFactor:{value:n.randomMass},uBounce:{value:n.collisionBounce},uSpeed:{value:Number(this.shared.getVariable(n.speed,[this.uuid,"particles","speed"]))/10}};l.material.uniforms=v;let y={uIndex:{value:c},uTime:{value:0},uLastIndexEmitted:{value:0},uParticlesToEmit:{value:0}};u.material.uniforms=y;let S=[Number(this.shared.getVariable(n.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(n.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(n.shape.size[2],[this.uuid,"particles","shape_size_2"]))],z={...k(this.system.data).shape,size:S};this.emitterShape.applyToShader(a.material.uniforms,z),o.init(),this.gpuCompute=o,this.positionSimRT=a,this.velocitySimRT=l,this.emissionRateSimRT=u,this.material.uniforms.uPosition.value=o.getCurrentRenderTarget(a)?.texture,this.rootObject=this.createPrimaryEmitter(this.emitterShape.textureSize),this.add(this.rootObject),this.material.needsUpdate=!0}getDirectionFromVariable(e){return[Number(this.shared.getVariable(e[0],[this.uuid,"particles","direction_x"])),Number(this.shared.getVariable(e[1],[this.uuid,"particles","direction_y"])),Number(this.shared.getVariable(e[2],[this.uuid,"particles","direction_z"]))]}updateSimulationDefinition(e){if(this.simFeaturesDefinition.USE_COLLIDER=!1,this.simFeaturesDefinition.USE_ATTRACTOR=!1,this.simFeaturesDefinition.USE_VORTEX=!1,this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!1,this.simFeaturesDefinition.USE_BOX_COLLIDER=!1,this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!1,this.simFeaturesDefinition.USE_NORMALS=!1,this.simFeaturesDefinition.USE_CURL_NOISE=!1,this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!1,this.simFeaturesDefinition.USE_FBM_NOISE=!1,e.colliderEntityId&&this.system.colliderEntities.length>0){let t=this.system.getColliderData(e.colliderEntityId);switch(t?.forceType){case"attractor":this.simFeaturesDefinition.USE_ATTRACTOR=!0;break;case"collider":this.simFeaturesDefinition.USE_COLLIDER=!0;break;case"vortex":this.simFeaturesDefinition.USE_VORTEX=!0}let i=t?.colliderType;"sphere"===i&&(this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!0),"box"===i&&(this.simFeaturesDefinition.USE_BOX_COLLIDER=!0),"helper"===t?.forceRange&&(this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!0)}"normals"===e.directionMode&&(this.simFeaturesDefinition.USE_NORMALS=!0),"curl"===e.noiseType&&(this.simFeaturesDefinition.USE_CURL_NOISE=!0),"simplex"===e.noiseType&&(this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!0),"fbm"===e.noiseType&&(this.simFeaturesDefinition.USE_FBM_NOISE=!0);let t="";for(let[e,i]of Object.entries(this.simFeaturesDefinition))i&&(t+=`#define ${e}\n`);return t}createShape(e,t){this.emitterShape&&this.emitterShape.dispose();let i=new f(Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.size[2],[this.uuid,"particles","shape_size_2"])));if("MeshEmitterShape"===e.type){let n=null;return this.system.context.scene.traverseEntity(t=>{t.uuid===e.fromMeshId&&(n=t)}),n?new W(i,t,e.type,n):new W(i,t,"SphereEmitterShape")}return new W(i,t,e.type)}createPrimaryEmitter(e){let t=e*e,i=new I(new T(1,1,1),this.material,t);return i.renderOrder=1,this.updateGeometryAttributes(i,e),this.material.needsUpdate=!0,i.onBeforeRender=()=>{this.applyWorldSpace()},i}getMaxParticlesAmount({birthRatePerSecond:e,particleMaxLifeTime:t,loopDuration:i=0}){return Math.ceil(e*(t+i))}dispose(){!this.gpuCompute||(this.rootObject?.parent?.remove(this.rootObject),this.gpuCompute.dispose(),this.material.nodeMaterialDispose(),this.emitterShape?.dispose())}GoEmitSomeParticles(e,t){let i=e-this.lastEmitTime,n=1/t;if(i>=n){let t=Math.max(1,Math.floor(i/n));return this.lastEmitTime=e,this.emittedParticlesAmount+t>this.particlesAmount&&(this.emittedParticlesAmount=0),this.emittedParticlesAmount+=t,t}return 0}checkIfAllParticlesAreDead(){return this.lastEmitTime+this.system.data.life+1<this.globalTime}reset(){this.hasBeenReset=!0,this.lastEmitTime=0,this.emittedParticlesAmount=0,this.gpuCompute&&this.init(k(this.system.data))}startEmitting(e){this.isEmitting=!0,this.hasBeenReset=!1,this.lastEmitTime=e}stopEmitting(){this.isEmitting=!1}},j=class extends o{constructor(e,t,i){super(e,t),this.type="ParticleSystem",this.isParticleSystem=!0,this.geometry=new C,this.actualTime=0,this.currentLoopTime=0,this.started=!1,this.stopped=!1,this.timeoutId=void 0,this.isFrozen=!1,this.isIdle=!0,this.emitter=null,this.colliderEntities=[],this.renderer=null,this.isPreWarm=!1,this._hasOnAfterRenderBeenCalled=!1,this.onAfterRender=e=>{e.warmupInFlight||this._hasOnAfterRenderBeenCalled||(this._hasOnAfterRenderBeenCalled=!0,this.init(e))},this.context=i,this.data={...t,...k(t)},this.geometry.setAttribute("position",new _([],3)),this.material=new A({colorWrite:!1}),this.frustumCulled=!1}init(e){this.renderer=e,this.emitter=new q(e,this),this.add(this.emitter),this.updateParticleState(this.data)}update(e){if(!this.isReady||!this.started||this.isFrozen||this.isIdle)return;this.actualTime+=e,this.stopped||(this.currentLoopTime+=e);let t="one_time"===this.data.emitTimeCycle;if(("loop"===this.data.emitTimeCycle||t)&&this.currentLoopTime>1e3*this.data.emitTimeDuration&&(this.stopped||(this.stop(),t||this.start(1e3*this.data.emitTimeDelay))),this.emitter&&this.started){let t=this.actualTime/1e3;this.emitter.update(t,e)}this.scale.set(1,1,1),this.updateMatrix()}isReady(){return!!this.emitter}hasCollider(e){return this.colliderEntities.some(t=>t.identity===e)}getColliderData(e){let t=this.colliderEntities.find(t=>t.identity===e);return t?t.data:null}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),r(e.path,["renderMaterial"])&&this.updateParticleState({renderMaterial:{...this.data.renderMaterial,...c.drop(e,1).props}}),r(e.path,["shape"])&&this.updateParticleState({shape:{...this.data.shape,...c.drop(e,1).props}})}updateState(e,t){super.updateState(e,t),this.updateParticleState(e)}updateParticleState(e){if(this.emitter){if(void 0!==e.colliderEntityId&&null!==e.colliderEntityId){let t=this.context.scene.find(e.colliderEntityId);this.colliderEntities=t?[t]:[]}null===e.colliderEntityId&&(this.colliderEntities=[]),this.emitter.updateState(e),e.emitTimeCycle&&this.started&&this.start()}}updateFromColliderEntity(e){!this.emitter||(this.emitter.updateForceFieldParameters(e),this.stop(),this.start())}start(e=0){this.currentLoopTime=0,e?this.timeoutId=window.setTimeout(()=>{this.start(0)},e):(this.started=!0,this.stopped=!1,this.isFrozen=!1,this.emitter?.startEmitting(this.actualTime/1e3),this._requestRender())}froze(){this.isFrozen=!0,this._requestRender()}unFroze(){this.isFrozen=!1,this._requestRender()}stop(){this.stopped=!0,this.currentLoopTime=0,this.emitter?.stopEmitting(),clearTimeout(this.timeoutId),this._requestRender()}reset(){this.started=!1,this.stopped=!1,this.emitter?.reset(),this._requestRender()}_requestRender(){this.context.shared.requestRender()}wakeUp(){this.isIdle=!1}sleep(){this.isIdle=!0,this.reset()}},X=class{constructor(e,t,i,n){this.data=e,this.page=t,this.shared=i,this.condition=n,this.delay=0,this.emission=e.emission,void 0!==e.delay&&(this.delay=e.delay),this.particleSystem=this.page.scene.find(this.data.emitterObjectId)}toggleEmitting(){this.particleSystem.started&&!this.particleSystem.stopped?this.stop(this.delay):this.start(this.delay)}toggleFroze(){this.particleSystem.started&&!this.particleSystem.isFrozen?this.freeze(this.delay):this.unFreeze(this.delay)}start(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.start(0),this.clearDelay()},e):this.particleSystem.start()}stop(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.stop(0),this.clearDelay()},e):this.particleSystem.stop()}freeze(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.freeze(0),this.clearDelay()},e):this.particleSystem.froze()}unFreeze(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.unFreeze(0),this.clearDelay()},e):this.particleSystem.unFroze()}reset(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.reset(0),this.clearDelay()},e):this.particleSystem.reset()}reverseFromCurrent(){switch(this.emission){case"emitToggle":this.toggleEmitting();break;case"pauseToggle":this.toggleFroze()}}dispatchBasic(){if(!1===s(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"emitToggle":this.toggleEmitting();break;case"pause":this.freeze(this.delay);break;case"pauseToggle":this.toggleFroze();break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchConditional(){if(!1===s(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchGameControl(e){if(!1===s(this.shared,this.condition)||!this.particleSystem)return!1;"start"===e?this.start(this.delay):this.stop(this.delay)}dispose(){!this.particleSystem||(this.particleSystem.reset(),this.clearDelay())}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}};l("Particle",(e,t,i)=>new j(e,t,i)),n("Particles",({data:e,page:t,shared:i,actionCondition:n})=>new X(e,t,i,n)),a("particles");
|
|
1
|
+
import{b as e,d as t,e as i}from"./runtime-chunk-GFTBNL2W.js";import{b as n,e as s}from"./runtime-chunk-NEOF7SBZ.js";import{b as r,v as o}from"./runtime-chunk-LHPN54CL.js";import"./runtime-chunk-RTLL6WIB.js";import"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a,d as l}from"./runtime-chunk-TZCHGFVF.js";import{S as u,k as c}from"./runtime-chunk-JBTA64YE.js";import{Aa as d,Cc as h,Dc as m,Ec as p,Ed as v,Fc as f,Gd as y,Ic as S,Ja as g,Jc as x,Pc as z,Rc as b,Vd as T,Wc as E,Wd as P,Xd as R,bd as _,dd as C,kd as A,ld as D,nd as w,pd as F,qd as I,te as V}from"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var N=new E,U=new f,O=new m,L=new m,M=new m,B=class{constructor(e){this.geometry=e.geometry,this.randomFunction=Math.random,this.indexAttribute=this.geometry.index,this.positionAttribute=this.geometry.getAttribute("position"),this.normalAttribute=this.geometry.getAttribute("normal"),this.colorAttribute=this.geometry.getAttribute("color"),this.uvAttribute=this.geometry.getAttribute("uv"),this.weightAttribute=null,this.distribution=null}setWeightAttribute(e){return this.weightAttribute=e?this.geometry.getAttribute(e):null,this}build(){let e=this.indexAttribute,t=this.positionAttribute,i=this.weightAttribute,n=e?e.count/3:t.count/3,s=new Float32Array(n);for(let r=0;r<n;r++){let n=1,o=3*r,a=3*r+1,l=3*r+2;e&&(o=e.getX(o),a=e.getX(a),l=e.getX(l)),i&&(n=i.getX(o)+i.getX(a)+i.getX(l)),N.a.fromBufferAttribute(t,o),N.b.fromBufferAttribute(t,a),N.c.fromBufferAttribute(t,l),n*=N.getArea(),s[r]=n}let r=new Float32Array(n),o=0;for(let e=0;e<n;e++)o+=s[e],r[e]=o;return this.distribution=r,this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t,i,n){let s=this._sampleFaceIndex();return this._sampleFace(s,e,t,i,n)}_sampleFaceIndex(){let e=this.distribution[this.distribution.length-1];return this._binarySearch(this.randomFunction()*e)}_binarySearch(e){let t=this.distribution,i=0,n=t.length-1,s=-1;for(;i<=n;){let r=Math.ceil((i+n)/2);if(0===r||t[r-1]<=e&&t[r]>e){s=r;break}e<t[r]?n=r-1:i=r+1}return s}_sampleFace(e,t,i,n,s){let r=this.randomFunction(),o=this.randomFunction();r+o>1&&(r=1-r,o=1-o);let a=this.indexAttribute,l=3*e,u=3*e+1,c=3*e+2;return a&&(l=a.getX(l),u=a.getX(u),c=a.getX(c)),N.a.fromBufferAttribute(this.positionAttribute,l),N.b.fromBufferAttribute(this.positionAttribute,u),N.c.fromBufferAttribute(this.positionAttribute,c),t.set(0,0,0).addScaledVector(N.a,r).addScaledVector(N.b,o).addScaledVector(N.c,1-(r+o)),void 0!==i&&(void 0!==this.normalAttribute?(N.a.fromBufferAttribute(this.normalAttribute,l),N.b.fromBufferAttribute(this.normalAttribute,u),N.c.fromBufferAttribute(this.normalAttribute,c),i.set(0,0,0).addScaledVector(N.a,r).addScaledVector(N.b,o).addScaledVector(N.c,1-(r+o)).normalize()):N.getNormal(i)),void 0!==n&&void 0!==this.colorAttribute&&(N.a.fromBufferAttribute(this.colorAttribute,l),N.b.fromBufferAttribute(this.colorAttribute,u),N.c.fromBufferAttribute(this.colorAttribute,c),U.set(0,0,0).addScaledVector(N.a,r).addScaledVector(N.b,o).addScaledVector(N.c,1-(r+o)),n.r=U.x,n.g=U.y,n.b=U.z),void 0!==s&&void 0!==this.uvAttribute&&(O.fromBufferAttribute(this.uvAttribute,l),L.fromBufferAttribute(this.uvAttribute,u),M.fromBufferAttribute(this.uvAttribute,c),s.set(0,0).addScaledVector(O,r).addScaledVector(L,o).addScaledVector(M,1-(r+o))),this}};function Q(e,t){let i=e,n=new Float32Array(4*t*t);for(let e=0;e<t*t;e++)n[4*e]=i[3*e],n[4*e+1]=i[3*e+1],n[4*e+2]=i[3*e+2],n[4*e+3]=0;let s=new w(n,t,t,g,d);return s.needsUpdate=!0,s}var W=class{constructor(e,t,i,n){this.type="SphereEmitterShape",this.targetMesh=void 0,this.size=e,this.type=i,this.textureSize=function(e){let t=Math.ceil(Math.sqrt(e));return Math.max(t,1)}(t),this.targetMesh="BufferGeometry"===n?.geometry.type||"Mesh"===n?.type&&n&&n.geometry.hasAttribute("position")&&n.geometry.hasAttribute("normal")?n:this.getMesh(i,1);let{positions:s,dataTexture:r,dataTextureNormals:o}=this.createPositions(this.textureSize,this.targetMesh??this.getMesh(i,1));this.positionsTexture=r,this.positionsAttribute=s,this.directionsTexture=o}createPositions(e,t){let{positions:i,normals:n}=function(e,t){let i=new D(e.geometry,e.material),n=[],s=[],r=new f,o=new f;null!==i.geometry.index&&(i.geometry=i.geometry.toNonIndexed());let a=new B(i).build();for(let e=0;e<t;e++)a.sample(r,o),n.push(r.x,r.y,r.z),s.push(o.x,o.y,o.z);return{positions:new Float32Array(n),normals:new Float32Array(s)}}(t,e*e);return{dataTexture:Q(i,e),positions:i,dataTextureNormals:Q(n,e)}}getMesh(e,t){let i=null;switch(e){case"SphereEmitterShape":i=new P(.5*t,32,32);break;case"TorusEmitterShape":i=new R(.5*t,.3,15,40);break;case"ConeEmitterShape":i=new y(t,t,15);break;case"BoxEmitterShape":i=new v(t,t,t);break;case"PlaneEmitterShape":i=new T(t,t),i.rotateX(-Math.PI/2);break;default:i=new P(t,32,32)}return new D(i,new A({color:16711680}))}applyToShader(e,t){this.size=(new f).fromArray(t.size.map(e=>"number"==typeof e?e:1)),e.uEmitterSize.value=this.size}dispose(){this.positionsTexture.dispose(),this.directionsTexture.dispose(),this.positionsAttribute=new Float32Array}};function k(e){let t={...e},i=u.defaultData;t.forceFieldObjectId&&(t.colliderEntityId=t.forceFieldObjectId);let n={...i.shape,...t.shape},s={...i.renderMaterial,...t.renderMaterial};return{...i,...t,shape:n,renderMaterial:s}}var q=class extends b{constructor(n,s){super(),this.type="ParticleEmitter",this.debugMode=!1,this.worldSpace=!0,this.rootObject=null,this.gpuCompute=null,this.positionSimRT=null,this.velocitySimRT=null,this.emissionRateSimRT=null,this.emitterShape=void 0,this.isEmitting=!1,this.hasBeenReset=!1,this.emittedParticlesAmount=0,this.lastEmitTime=0,this.globalTime=0,this.targetFPS=60,this.previousRatio=1,this.lerpFactor=.4,this.particlesAmount=0,this.noiseStrength=0,this.noiseScale=0,this.isBillboardBased=!0,this.simFeaturesDefinition={USE_COLLIDER:!1,USE_ATTRACTOR:!1,USE_VORTEX:!1,USE_SPHERE_COLLIDER:!1,USE_BOX_COLLIDER:!1,USE_FORCE_LOCAL_SPACE:!1,USE_NORMALS:!1,USE_CURL_NOISE:!0,USE_SIMPLEX_NOISE:!1,USE_FBM_NOISE:!1},this.textureLoader=new V,this.textureRequestId=0,this.currentWorldPosition=new f,this.systemQuaternion=new p,this.worldGravity=new f(0,0,0),this.directionAxis=new f(0,0,0),this.colliderV3=new f(0,0,0),this.colliderQuaternion=new p(0,0,0,1),this.matrixAutoUpdate=!0,this.renderer=n,this.system=s,this.shared=s.context.shared;let r=s.data;this.material=i(n)?e()?.createMaterial(r.renderMaterial,s.context)??t().createMaterial(r.renderMaterial,s.context):t().createMaterial(r.renderMaterial,s.context),this.material.uniforms={uSize:{value:0},uSizeEnd:{value:0},uColor:{value:r.renderMaterial.color},uColor2:{value:r.renderMaterial.color2},uPosition:{value:new f(0,0,0)},uEmissionData:{value:new f(0,0,0)},uTexture:{value:this.defaultTexture},uWorldOffset:{value:new f(0,0,0)},uWorldQuaternion:{value:new x(0,0,0,1)},uRandScaleFactor:{value:r.randomScale??0},uRandRotationFactor:{value:r.randomRotation??0},uRotation:{value:r.renderMaterial.spriteRotation[0]??0},uRotationEnd:{value:r.renderMaterial.spriteRotation[1]??0}},this.setTexture(this.material.uniforms,r.renderMaterial.texture),this.init(r)}setTexture(e,t){let i=t.data,n=++this.textureRequestId;if("string"==typeof t){let i=this.shared.image(t),s=()=>{if(n!==this.textureRequestId)return;let t=new S(i.img);t.needsUpdate=!0,e.uTexture.value=t};return void(i.loaded?s():i.loadPromise.then(s))}if("string"!=typeof i){let t=new Image;t.onload=()=>{if(n!==this.textureRequestId)return;let i=new S(t);i.needsUpdate=!0,e.uTexture.value=i};let s=new Blob([i],{type:"image/*"}),r=URL.createObjectURL(s);t.src=r}}updateGeometryAttributes(e,t){let n=function(e){let t=new Float32Array(e*e*2);for(let i=0;i<e;i++)for(let n=0;n<e;n++){let s=i*e+n;t[2*s+0]=i/(e-1),t[2*s+1]=n/(e-1)}return t}(t);if(!this.emitterShape?.positionsAttribute)return;let s=new F(n,2);e.geometry.setAttribute("ref",s),i(this.renderer)&&e.geometry.setAttribute("particleRef",s)}applyWorldSpace(){if(!(this.system.started&&this.worldSpace&&this.positionSimRT&&this.velocitySimRT))return;let e=this.system;e.getWorldQuaternion(this.systemQuaternion),this.systemQuaternion.invert(),e.getWorldPosition(this.currentWorldPosition),this.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.positionSimRT.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.systemQuaternion.invert(),this.positionSimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.velocitySimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize())}update(e,t){if(!this.gpuCompute||!this.positionSimRT||!this.velocitySimRT||!this.emissionRateSimRT||this.hasBeenReset)return;if(this.checkIfAllParticlesAreDead()&&!this.hasBeenReset)return void this.reset();this.applyWorldSpace(),this.globalTime=e,this.positionSimRT.material.uniforms.uTime.value=e,this.emissionRateSimRT.material.uniforms.uTime.value=e;let i=1e3/t,n=this.targetFPS/i,s=this.previousRatio+(n-this.previousRatio)*this.lerpFactor;this.positionSimRT.material.uniforms.uFPSRatio.value=s,this.previousRatio=s;let r=this.isEmitting?this.GoEmitSomeParticles(e,this.system.data.birthRatePerSec):0;this.emissionRateSimRT.material.uniforms.uLastIndexEmitted.value=this.emittedParticlesAmount,this.emissionRateSimRT.material.uniforms.uParticlesToEmit.value=r,this.material.uniforms.uPosition.value=this.gpuCompute.getCurrentRenderTarget(this.positionSimRT)?.texture,this.system.colliderEntities.length>0&&this.renderColliders(),this.gpuCompute.compute()}renderColliders(){if(!this.velocitySimRT)return;let e=this.system.colliderEntities[0],t=this.simFeaturesDefinition.USE_COLLIDER||this.simFeaturesDefinition.USE_ATTRACTOR||this.simFeaturesDefinition.USE_VORTEX;if(e.destroyedInAction&&t&&this.init(k({...this.system.data,colliderEntityId:null})),!e||e.destroyedInAction)return;e.getWorldPosition(this.colliderV3),0===this.colliderV3.y&&(this.colliderV3.y=1e-4),this.velocitySimRT.material.uniforms.uColliderPos.value.copy(this.colliderV3);let i=e.data.size;this.colliderV3.fromArray(i),this.velocitySimRT.material.uniforms.uColliderSize.value.copy(this.simFeaturesDefinition.USE_SPHERE_COLLIDER?this.colliderV3.multiplyScalar(.5):this.colliderV3),e.getWorldQuaternion(this.colliderQuaternion),this.velocitySimRT.material.uniforms.uColliderQuaternion.value.copy(this.colliderQuaternion.normalize()),this.velocitySimRT.material.uniforms.uColliderQuaternionInvert.value.copy(this.colliderQuaternion.normalize().invert())}updateState(e){!this.velocitySimRT||!this.positionSimRT||(e.renderMaterial&&this.updateMaterialState(e.renderMaterial),this.updateParticleState(e))}updateVariableState(e,t){if(!this.velocitySimRT||!this.positionSimRT)return;"size"===t[2]&&this.material.updateState({size:[e,this.material.uniforms.uSizeEnd.value]}),"sizeEnd"===t[2]&&this.material.updateState({size:[this.material.uniforms.uSize.value,e]});let i=(e,t)=>{let i=[...this.system.data.shape.size];i[e]=t,this.updateParticleState({shape:{...this.system.data.shape,size:i}})};"shape_size_0"===t[2]&&i(0,e),"shape_size_1"===t[2]&&i(1,e),"shape_size_2"===t[2]&&i(2,e),"speed"===t[2]&&(this.velocitySimRT.material.uniforms.uSpeed.value=e/10),"gravity"===t[2]&&this.worldGravity.set(0,e/100,0),"noiseStrength"===t[2]&&(this.noiseStrength=e,this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),"noiseScale"===t[2]&&(this.noiseScale=e,this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),"direction_x"===t[2]&&(this.directionAxis=this.getDirectionAxis([Number(e),this.system.data.direction[1],this.system.data.direction[2]])),"direction_y"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],Number(e),this.system.data.direction[2]])),"direction_z"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],this.system.data.direction[1],Number(e)]))}updateMaterialState(e){this.material.updateState({...e,size:e.size?[Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","size"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","sizeEnd"]))]:[0,0]}),e.texture&&(this.setTexture(this.material.uniforms,e.texture),this.material.needsUpdate=!0)}updateParticleState(e){if(this.positionSimRT&&this.velocitySimRT){if(this.shouldReInitGPUCompute(e)&&this.init(k(this.system.data)),void 0!==e.life&&(this.positionSimRT.material.uniforms.uMaxLifeTime.value=e.life),void 0!==e.speed&&(this.velocitySimRT.material.uniforms.uSpeed.value=Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10),void 0!==e.collisionBounce&&(this.velocitySimRT.material.uniforms.uBounce.value=e.collisionBounce),void 0!==e.noiseStrength&&(this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),void 0!==e.noiseScale&&(this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"])),this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),void 0!==e.noiseSeed&&(this.velocitySimRT.material.uniforms.uNoiseSeed.value=e.noiseSeed),void 0!==e.randomMass&&(this.velocitySimRT.material.uniforms.uRandomMassFactor.value=e.randomMass),void 0!==e.renderMaterial?.size){let t=this.shared.getVariable(e.renderMaterial.size[0],[this.uuid,"particles","size"]);this.velocitySimRT.material.uniforms.particleSize.value=Number(t)}if(void 0!==e.renderMaterial?.spriteRotation&&(this.material.uniforms.uRotation.value=e.renderMaterial.spriteRotation[0],this.material.uniforms.uRotationEnd.value=e.renderMaterial.spriteRotation[1]),void 0!==e.shape){let t=e.shape.size??this.system.data.shape.size,i=[Number(this.shared.getVariable(t[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(t[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(t[2],[this.uuid,"particles","shape_size_2"]))],n={...k(this.system.data).shape,size:i};this.emitterShape?.applyToShader(this.positionSimRT.material.uniforms,n)}if(void 0!==e.gravity&&(this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.velocitySimRT.material.uniforms.uGravity={value:this.worldGravity}),void 0!==e.direction){let t=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(t),this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis}void 0!==e.randomRotation&&(this.material.uniforms.uRandRotationFactor.value=e.randomRotation),void 0!==e.randomScale&&(this.material.uniforms.uRandScaleFactor.value=e.randomScale)}}updateForceFieldParameters(e){!this.velocitySimRT||(void 0!==e.forceIntensity&&(this.velocitySimRT.material.uniforms.uForceIntensity.value=e.forceIntensity),void 0!==e.forceDambing&&(this.velocitySimRT.material.uniforms.uForceDamping.value=e.forceDambing))}getDirectionAxis(e){let t=[Number(e[0])*h.DEG2RAD,Number(e[1])*h.DEG2RAD,Number(e[2])*h.DEG2RAD],i=new z(t[0],t[1],t[2],"XYZ");return this.directionAxis.set(0,1,0).applyEuler(i).normalize(),this.velocitySimRT&&(this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis),this.directionAxis}shouldReInitGPUCompute(e){let{birthRatePerSec:t,rootObjectType:i,colliderEntityId:n,shape:s,emitTimeDuration:r,emitTimeCycle:o,life:a,directionMode:l,noiseType:u}=e;return void 0!==t||void 0!==i||n||null===n||void 0!==o||void 0!==s||void 0!==a||void 0!==r||void 0!==l||void 0!==u}init(n){this.dispose(),this.particlesAmount=this.getMaxParticlesAmount({birthRatePerSecond:n.birthRatePerSec,particleMaxLifeTime:n.life,loopDuration:"infinity"===n.emitTimeCycle?0:n.emitTimeDuration}),this.particlesAmount>1e5&&(console.warn("The maximum number of particles is limited to 100000."),this.particlesAmount=1e5),this.emitterShape=this.createShape(n.shape,this.particlesAmount);let s=setInterval(()=>{if(!this.emitterShape)return;let e=this.emitterShape.positionsTexture.source.data.data;e&&!isNaN(e[0])?clearInterval(s):this.init(n)},100);if(!this.emitterShape)return;let r=this.updateSimulationDefinition(n),o=i(this.renderer)?e().createComputation(this.emitterShape.textureSize,this.emitterShape.textureSize,this.renderer,this.simFeaturesDefinition):t().createComputation(this.emitterShape.textureSize,this.emitterShape.textureSize,this.renderer),a=o.addVariable("uCurrentPosition",r+"\n\n\n\nuniform sampler2D uOriginalPosition;\nuniform float uTime;\nuniform float uSpeed; \nuniform vec3 uWorldOffset; \nuniform vec4 uWorldQuaternion;\nuniform float uMaxLifeTime;\nuniform vec3 uEmitterSize;\nuniform float uFPSRatio; \n\nfloat random (vec2 st) {\n return fract(sin(dot(st.xy,\n vec2(12.9898,78.233)))*\n 43758.5453123);\n}\nvec3 applyQuaternionToVector( vec4 q, vec3 v ){\n return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\n}\n\nvec3 applyForce(vec3 force, float mass) {\n vec3 acceleration = force / mass;\n \n return acceleration;\n }\n \n\nvoid main() {\n vec2 vUv = gl_FragCoord.xy / resolution.xy;\n vec3 position = texture2D( uCurrentPosition, vUv ).xyz;\n float currentLife = texture2D( uCurrentPosition, vUv ).w; \n float isSpawning = texture2D( uCurrentEmissionRate, vUv ).r; \n float isActive = texture2D( uCurrentEmissionRate, vUv ).g; \n float timeStart = texture2D( uCurrentEmissionRate, vUv ).b; \n vec3 originalPosition = ((texture2D( uOriginalPosition, vUv ).xyz) * uEmitterSize);\n vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz;\n float collisionFlag = texture2D( uCurrentVelocity, vUv ).w; \n float lifeTime = uMaxLifeTime;\n\n \n \n float isColliding = step(0.5, collisionFlag); \n float bounceOffset = 3.0 * isColliding; \n vec3 collisionAdjustedVelocity = velocity * (1.0 + bounceOffset);\n\n \n vec3 fpsVelocity = velocity * min(uFPSRatio, 5.0);\n position += mix(fpsVelocity, collisionAdjustedVelocity, isColliding);\n\n \n \n \n vec3 newPosition = applyQuaternionToVector(uWorldQuaternion, originalPosition) + uWorldOffset;\n originalPosition = mix(originalPosition, newPosition, isSpawning);\n position = mix(position, originalPosition, isSpawning);;\n timeStart = mix(timeStart, uTime, isSpawning);\n\n \n float timeLeft = max(lifeTime - (uTime - timeStart), 0.0);\n float life_Normalize = timeLeft / lifeTime;\n\n \n vec4 activeColor = vec4(position, life_Normalize);\n \n gl_FragColor = mix(vec4(0.0), activeColor, isActive);\n\n}\n",this.emitterShape.positionsTexture),l=o.addVariable("uCurrentVelocity",r+"\n\n\n\nuniform sampler2D uOriginalPosition;\nuniform sampler2D uDirections; \nuniform vec3 uDirectionsAxis;\nuniform vec4 uWorldQuaternion;\nuniform vec3 uGravity; \nuniform float uNoiseStrength; \nuniform float uNoiseScale; \nuniform float uNoiseSeed; \nuniform float particleSize;\nuniform float uSpeed; \nuniform float uRandomMassFactor;\n\n\nuniform vec3 uColliderPos; \nuniform vec3 uColliderSize; \nuniform vec4 uColliderQuaternion; \nuniform vec4 uColliderQuaternionInvert; \nuniform float uBounce; \nuniform float uForceDamping;\nuniform float uForceIntensity;\n\n\n\n\n vec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n }\n \n vec4 mod289(vec4 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n }\n \n vec4 permute(vec4 x) {\n return mod289(((x*34.0)+1.0)*x);\n }\n \n vec4 taylorInvSqrt(vec4 r)\n {\n return 1.79284291400159 - 0.85373472095314 * r;\n }\n \n vec3 fade(vec3 t) {\n return t*t*t*(t*(t*6.0-15.0)+10.0);\n}\n\n float snoise(vec3 v)\n {\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy; \n vec3 x3 = x0 - D.yyy; \n \n \n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n \n \n \n float n_ = 0.142857142857; \n vec3 ns = n_ * D.wyz - D.xzx;\n \n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); \n \n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); \n \n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n \n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n \n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n \n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n \n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n \n \n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n \n \n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n }\n \n vec3 snoiseVec3( vec3 x ){\n \n float s = snoise(vec3( x ));\n float s1 = snoise(vec3( x.y - 19.1 , x.z + 33.4 , x.x + 47.2 ));\n float s2 = snoise(vec3( x.z + 74.2 , x.x - 124.5 , x.y + 99.4 ));\n vec3 c = vec3( s , s1 , s2 );\n return c;\n \n }\n \n \n vec3 curlNoise( vec3 p, float seed){\n p += seed;\n const float e = .1;\n vec3 dx = vec3( e , 0.0 , 0.0 );\n vec3 dy = vec3( 0.0 , e , 0.0 );\n vec3 dz = vec3( 0.0 , 0.0 , e );\n \n vec3 p_x0 = snoiseVec3( p - dx );\n vec3 p_x1 = snoiseVec3( p + dx );\n vec3 p_y0 = snoiseVec3( p - dy );\n vec3 p_y1 = snoiseVec3( p + dy );\n vec3 p_z0 = snoiseVec3( p - dz );\n vec3 p_z1 = snoiseVec3( p + dz );\n \n float x = p_y1.z - p_y0.z - p_z1.y + p_z0.y;\n float y = p_z1.x - p_z0.x - p_x1.z + p_x0.z;\n float z = p_x1.y - p_x0.y - p_y1.x + p_y0.x;\n \n const float divisor = 1.0 / ( 2.0 * e );\n return normalize( vec3( x , y , z ) * divisor );\n \n }\n\n\n\nfloat cnoise(vec3 P)\n{\n vec3 Pi0 = floor(P); \n vec3 Pi1 = Pi0 + vec3(1.0); \n Pi0 = mod289(Pi0);\n Pi1 = mod289(Pi1);\n vec3 Pf0 = fract(P); \n vec3 Pf1 = Pf0 - vec3(1.0); \n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n\n vec4 gx0 = ixy0 * (1.0 / 7.0);\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n\n vec4 gx1 = ixy1 * (1.0 / 7.0);\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n\n vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\n vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\n vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\n vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\n vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\n vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\n vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\n vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\n\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); \n return 2.2 * n_xyz;\n}\n\n\nvec3 fbm_vec3(vec3 p, float frequency, float offset)\n{\n return vec3(\n cnoise((p+vec3(offset))*frequency),\n cnoise((p+vec3(offset+20.0))*frequency),\n cnoise((p+vec3(offset-30.0))*frequency)\n );\n}\n\n\nfloat rand(vec2 co){\n return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);\n}\nvec3 applyQuaternionToVector( vec4 q, vec3 v ){\n return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\n } \nvec3 applyForce(vec3 force, float mass) {\n vec3 acceleration = force / mass;\n \n return acceleration;\n}\n\nvec4 conjugate(vec4 q) {\n return vec4(q.w, -q.x, -q.y, -q.z);\n}\n\n\nvec3 ellipsoidNormal(vec3 p, vec3 radii) {\n return normalize(p / (radii * radii));\n}\n\nfloat friction = .3;\n\nvoid main() {\n vec2 vUv = gl_FragCoord.xy / resolution.xy;\n vec3 position = texture2D( uCurrentPosition, vUv ).xyz;\n vec3 originalPosition = texture2D( uOriginalPosition, vUv ).xyz;\n float timeLeft = texture2D( uCurrentPosition, vUv ).w;\n vec3 directions = texture2D( uDirections, vUv ).xyz; \n vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz;\n float mass = rand(originalPosition.xy) * 0.5 + 0.5;\n float isSpawning = texture2D( uCurrentEmissionRate, vUv ).x; \n float isActive = texture2D( uCurrentEmissionRate, vUv ).y; \n float collisionFlag =texture2D( uCurrentVelocity, vUv ).w; \n\n \n mass = (1.0 - (uRandomMassFactor * mass));\n \n if (isActive == 1.0) {\n \n \n \n #ifdef USE_CURL_NOISE\n if (uNoiseScale > 0.0 ) {\n velocity = curlNoise(position * uNoiseScale * .002, uNoiseSeed) * ( uNoiseStrength + 1.0) * .05 * uSpeed;\n }\n \n if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) {\n velocity += curlNoise( position, uNoiseSeed) * uNoiseStrength * 0.05 * uSpeed;\n }\n #endif\n \n #ifdef USE_SIMPLEX_NOISE\n if (uNoiseScale > 0.0 ) {\n velocity = vec3(snoise(position * uNoiseScale * .001) * ( uNoiseStrength + 1.0) * .1);\n velocity *= uSpeed;\n }\n \n if (uNoiseStrength > 0.0 && uNoiseScale == 0.0) {\n velocity += vec3(snoise(position * uNoiseStrength * .001) * .05 * uSpeed);\n }\n #endif\n \n #ifdef USE_FBM_NOISE\n if (uNoiseScale > 0.0 ) {\n velocity = fbm_vec3(position * uNoiseScale * .001, ( uNoiseStrength + 1.0), uNoiseSeed);\n velocity *= uSpeed;\n }\n \n if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) { \n velocity += fbm_vec3(position * uNoiseStrength * .001, ( uNoiseStrength + 1.0), uNoiseSeed) * .1 * uSpeed;\n }\n #endif\n\n \n \n #ifdef USE_COLLIDER\n float restitution = max(uBounce * 2., .01); \n \n \n #ifdef USE_SPHERE_COLLIDER \n \n vec3 radii = uColliderSize;\n \n vec3 relPos = position - uColliderPos;\n \n relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); \n \n vec3 scaledPos = relPos / radii;\n \n float dist = length(scaledPos); \n \n \n if (dist <= 1. + particleSize / length(radii) && collisionFlag == 0.0) {\n \n vec3 adjustedPos = scaledPos * (1.0 + particleSize / length(radii)); \n \n vec3 normal = ellipsoidNormal(adjustedPos, radii);\n \n normal = applyQuaternionToVector(uColliderQuaternion, normal);\n \n velocity = reflect(velocity, normal) * restitution;\n\n collisionFlag = 1.0;\n } else {\n collisionFlag = 0.0;\n }\n #endif\n\n \n \n #ifdef USE_BOX_COLLIDER\n \n vec3 boxHalfSize = uColliderSize / 2.0;\n \n vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); \n \n vec3 localDistance = abs(localPos) - boxHalfSize;\n float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); \n\n \n if (distToSurface <= particleSize * 0.5 && collisionFlag == 0.0) { \n \n vec3 normal;\n if (localDistance.x > localDistance.y && localDistance.x > localDistance.z) {\n normal = vec3(sign(localPos.x), 0.0, 0.0);\n } else if (localDistance.y > localDistance.z) {\n normal = vec3(0.0, sign(localPos.y), 0.0);\n } else {\n normal = vec3(0.0, 0.0, sign(localPos.z));\n } \n \n normal = applyQuaternionToVector(uColliderQuaternion, normal); \n \n velocity = reflect(velocity, normal) * restitution;\n \n collisionFlag = 1.0;\n } else {\n collisionFlag = 0.0;\n }\n #endif \n #endif \n \n\n \n \n #ifdef USE_ATTRACTOR\n\n #ifdef USE_SPHERE_COLLIDER \n \n vec3 radii = uColliderSize;\n \n vec3 relPos = position - uColliderPos;\n \n relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); \n \n vec3 scaledPos = relPos / radii;\n \n float distToSurface = length(scaledPos); \n float insideCheck = 1.0;\n\n #endif\n\n\n #ifdef USE_BOX_COLLIDER\n \n vec3 boxHalfSize = uColliderSize / 2.0;\n \n vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); \n vec3 localDistance = abs(localPos) - boxHalfSize;\n float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z));\n float insideCheck = particleSize;\n #endif \n \n \n #ifdef USE_FORCE_LOCAL_SPACE\n if (distToSurface <= insideCheck ) { \n \n #ifdef USE_SPHERE_COLLIDER \n float attractorStrength = (1.0 - distToSurface ) * uForceIntensity; \n #endif\n\n #ifdef USE_BOX_COLLIDER\n float attractorStrength = max((1.0 - insideCheck / distToSurface), 0.) * uForceIntensity; \n #endif\n\n float attractorDamping = uForceDamping; \n \n \n vec3 attractorRadii = uColliderSize;\n \n vec3 relPos = position - uColliderPos;\n \n relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); \n \n vec3 scaledPos = relPos / attractorRadii;\n\n \n float attractorRadius = length(scaledPos);\n \n vec3 relativePosition = position - uColliderPos;\n \n vec3 attractorForce = normalize(relativePosition) * attractorStrength;\n \n velocity -= attractorForce;\n \n velocity *= attractorDamping;\n }\n #else \n \n vec3 relativePosition = position - uColliderPos;\n \n vec3 attractorForce = normalize(relativePosition) * uForceIntensity;\n \n velocity -= attractorForce;\n \n velocity *= uForceDamping;\n #endif \n #endif \n \n \n \n #ifdef USE_VORTEX\n \n vec3 boxHalfSize = uColliderSize / 2.0;\n \n vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); \n vec3 localDistance = abs(localPos) - boxHalfSize;\n float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z));\n\n \n if (distToSurface <= particleSize) {\n float vortexStrength = uForceIntensity;\n vec3 localTopCenter = vec3(0.0, 0., 0.0);\n\n \n vec3 vortexCenter = uColliderPos + applyQuaternionToVector(uColliderQuaternion, localTopCenter);\n \n vec3 vortexVector = vortexCenter - position;\n\n \n \n vec3 upVector = vec3(0.0, 1.0, 0.01);\n vec3 rotationAxis = cross(upVector, applyQuaternionToVector(uColliderQuaternion, vortexVector));\n rotationAxis = normalize(rotationAxis);\n\n \n float rotationSpeed = length(vortexVector * vortexStrength * 3.0) ; \n\n vec3 rotationVelocity = rotationAxis * rotationSpeed;\n \n velocity = rotationVelocity * 0.005 ;\n\n \n \n \n vec3 originDirection = applyQuaternionToVector(uWorldQuaternion, directions);\n velocity += applyForce( originDirection * uSpeed * (1. - uForceDamping) , mass * .5);\n }\n #endif \n\n } \n \n\n \n \n \n #ifdef USE_NORMALS\n velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, directions) * uSpeed, isSpawning);\n #else\n velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, uDirectionsAxis) * uSpeed, isSpawning); \n #endif\n \n \n velocity += applyForce(uGravity, mass * .5) * (1.0 - collisionFlag);\n\n gl_FragColor = vec4(velocity, collisionFlag);\n}\n",this.emitterShape.directionsTexture),u=o.addVariable("uCurrentEmissionRate","\n\n\n\n\nuniform sampler2D uIndex; \nuniform float uLastIndexEmitted; \nuniform float uParticlesToEmit; \nuniform float uTime;\n\nvoid main() {\n vec2 vUv = gl_FragCoord.xy / resolution.xy;\n float particleIndex = texture(uIndex, vUv).x;\n float timeLeft = texture2D( uCurrentPosition, vUv ).w;\n float isActive = texture2D( uCurrentEmissionRate, vUv ).g; \n float timeStart = texture2D( uCurrentEmissionRate, vUv ).b;\n\n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n float emitLowerBound = step(uLastIndexEmitted, particleIndex);\n float emitUpperBound = step(particleIndex, uLastIndexEmitted + uParticlesToEmit - 1.0);\n float emitParticle = emitLowerBound * emitUpperBound; \n\n \n timeStart = mix(timeStart, uTime, emitParticle);\n gl_FragColor = vec4(emitParticle, mix(isActive, 1.0, emitParticle), timeStart, 1.0);\n\n\n}\n",function(e){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=0,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new w(t,e,e,g,d);return i.needsUpdate=!0,i}(this.emitterShape.textureSize));o.setVariableDependencies(a,[a,l,u]),o.setVariableDependencies(l,[a,l,u]),o.setVariableDependencies(u,[a,l,u]);let c=function({size:e}){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=i,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new w(t,e,e,g,d);return i.needsUpdate=!0,i}({size:this.emitterShape.textureSize}),h={uOriginalPosition:{value:this.emitterShape.positionsTexture},uWorldOffset:{value:new f(0,0,0)},uWorldQuaternion:{value:new x(0,0,0,1)},uTime:{value:0},uFPSRatio:{value:1},uMaxLifeTime:{value:n.life},uEmitterSize:{value:new f(Number(this.shared.getVariable(n.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(n.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(n.shape.size[2],[this.uuid,"particles","shape_size_2"])))},particleSize:{value:0}};a.material.uniforms=h;let m=this.getDirectionFromVariable(n.direction);this.directionAxis=this.getDirectionAxis(m),this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.noiseStrength=Number(this.shared.getVariable(n.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.noiseScale=Number(this.shared.getVariable(n.noiseScale,[this.uuid,"particles","noiseScale"]));let p=n.colliderEntityId&&this.system.getColliderData(n.colliderEntityId),v={uOriginalPosition:{value:this.emitterShape.positionsTexture},uDirections:{value:this.emitterShape.directionsTexture},uDirectionsAxis:{value:this.directionAxis},uWorldQuaternion:{value:new x(0,0,0,1)},uColliderPos:{value:new f(0,0,0)},uColliderSize:{value:new f(0,0,0)},uForceIntensity:{value:p?p.forceIntensity:0},uForceDamping:{value:p?p.forceDambing:0},uColliderQuaternion:{value:new x(0,0,0,1)},uColliderQuaternionInvert:{value:new x(0,0,0,1)},particleSize:{value:0},uGravity:{value:this.worldGravity},uNoiseStrength:{value:this.noiseStrength},uNoiseScale:{value:this.noiseScale},uNoiseSeed:{value:n.noiseSeed},uRandomMassFactor:{value:n.randomMass},uBounce:{value:n.collisionBounce},uSpeed:{value:Number(this.shared.getVariable(n.speed,[this.uuid,"particles","speed"]))/10}};l.material.uniforms=v;let y={uIndex:{value:c},uTime:{value:0},uLastIndexEmitted:{value:0},uParticlesToEmit:{value:0}};u.material.uniforms=y;let S=[Number(this.shared.getVariable(n.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(n.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(n.shape.size[2],[this.uuid,"particles","shape_size_2"]))],z={...k(this.system.data).shape,size:S};this.emitterShape.applyToShader(a.material.uniforms,z),o.init(),this.gpuCompute=o,this.positionSimRT=a,this.velocitySimRT=l,this.emissionRateSimRT=u,this.material.uniforms.uPosition.value=o.getCurrentRenderTarget(a)?.texture,this.rootObject=this.createPrimaryEmitter(this.emitterShape.textureSize),this.add(this.rootObject),this.material.needsUpdate=!0}getDirectionFromVariable(e){return[Number(this.shared.getVariable(e[0],[this.uuid,"particles","direction_x"])),Number(this.shared.getVariable(e[1],[this.uuid,"particles","direction_y"])),Number(this.shared.getVariable(e[2],[this.uuid,"particles","direction_z"]))]}updateSimulationDefinition(e){if(this.simFeaturesDefinition.USE_COLLIDER=!1,this.simFeaturesDefinition.USE_ATTRACTOR=!1,this.simFeaturesDefinition.USE_VORTEX=!1,this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!1,this.simFeaturesDefinition.USE_BOX_COLLIDER=!1,this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!1,this.simFeaturesDefinition.USE_NORMALS=!1,this.simFeaturesDefinition.USE_CURL_NOISE=!1,this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!1,this.simFeaturesDefinition.USE_FBM_NOISE=!1,e.colliderEntityId&&this.system.colliderEntities.length>0){let t=this.system.getColliderData(e.colliderEntityId);switch(t?.forceType){case"attractor":this.simFeaturesDefinition.USE_ATTRACTOR=!0;break;case"collider":this.simFeaturesDefinition.USE_COLLIDER=!0;break;case"vortex":this.simFeaturesDefinition.USE_VORTEX=!0}let i=t?.colliderType;"sphere"===i&&(this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!0),"box"===i&&(this.simFeaturesDefinition.USE_BOX_COLLIDER=!0),"helper"===t?.forceRange&&(this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!0)}"normals"===e.directionMode&&(this.simFeaturesDefinition.USE_NORMALS=!0),"curl"===e.noiseType&&(this.simFeaturesDefinition.USE_CURL_NOISE=!0),"simplex"===e.noiseType&&(this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!0),"fbm"===e.noiseType&&(this.simFeaturesDefinition.USE_FBM_NOISE=!0);let t="";for(let[e,i]of Object.entries(this.simFeaturesDefinition))i&&(t+=`#define ${e}\n`);return t}createShape(e,t){this.emitterShape&&this.emitterShape.dispose();let i=new f(Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.size[2],[this.uuid,"particles","shape_size_2"])));if("MeshEmitterShape"===e.type){let n=null;return this.system.context.scene.traverseEntity(t=>{t.uuid===e.fromMeshId&&(n=t)}),n?new W(i,t,e.type,n):new W(i,t,"SphereEmitterShape")}return new W(i,t,e.type)}createPrimaryEmitter(e){let t=e*e,i=new I(new T(1,1,1),this.material,t);return i.renderOrder=1,this.updateGeometryAttributes(i,e),this.material.needsUpdate=!0,i.onBeforeRender=()=>{this.applyWorldSpace()},i}getMaxParticlesAmount({birthRatePerSecond:e,particleMaxLifeTime:t,loopDuration:i=0}){return Math.ceil(e*(t+i))}dispose(){!this.gpuCompute||(this.rootObject?.parent?.remove(this.rootObject),this.gpuCompute.dispose(),this.material.nodeMaterialDispose(),this.emitterShape?.dispose())}GoEmitSomeParticles(e,t){let i=e-this.lastEmitTime,n=1/t;if(i>=n){let t=Math.max(1,Math.floor(i/n));return this.lastEmitTime=e,this.emittedParticlesAmount+t>this.particlesAmount&&(this.emittedParticlesAmount=0),this.emittedParticlesAmount+=t,t}return 0}checkIfAllParticlesAreDead(){return this.lastEmitTime+this.system.data.life+1<this.globalTime}reset(){this.hasBeenReset=!0,this.lastEmitTime=0,this.emittedParticlesAmount=0,this.gpuCompute&&this.init(k(this.system.data))}startEmitting(e){this.isEmitting=!0,this.hasBeenReset=!1,this.lastEmitTime=e}stopEmitting(){this.isEmitting=!1}},j=class extends o{constructor(e,t,i){super(e,t),this.type="ParticleSystem",this.isParticleSystem=!0,this.geometry=new C,this.actualTime=0,this.currentLoopTime=0,this.started=!1,this.stopped=!1,this.timeoutId=void 0,this.isFrozen=!1,this.isIdle=!0,this.emitter=null,this.colliderEntities=[],this.renderer=null,this.isPreWarm=!1,this._hasOnAfterRenderBeenCalled=!1,this.onAfterRender=e=>{e.warmupInFlight||this._hasOnAfterRenderBeenCalled||(this._hasOnAfterRenderBeenCalled=!0,this.init(e))},this.context=i,this.data={...t,...k(t)},this.geometry.setAttribute("position",new _([],3)),this.material=new A({colorWrite:!1}),this.frustumCulled=!1}init(e){this.renderer=e,this.emitter=new q(e,this),this.add(this.emitter),this.updateParticleState(this.data)}update(e){if(!this.isReady||!this.started||this.isFrozen||this.isIdle)return;this.actualTime+=e,this.stopped||(this.currentLoopTime+=e);let t="one_time"===this.data.emitTimeCycle;if(("loop"===this.data.emitTimeCycle||t)&&this.currentLoopTime>1e3*this.data.emitTimeDuration&&(this.stopped||(this.stop(),t||this.start(1e3*this.data.emitTimeDelay))),this.emitter&&this.started){let t=this.actualTime/1e3;this.emitter.update(t,e)}this.scale.set(1,1,1),this.updateMatrix()}isReady(){return!!this.emitter}hasCollider(e){return this.colliderEntities.some(t=>t.identity===e)}getColliderData(e){let t=this.colliderEntities.find(t=>t.identity===e);return t?t.data:null}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),r(e.path,["renderMaterial"])&&this.updateParticleState({renderMaterial:{...this.data.renderMaterial,...c.drop(e,1).props}}),r(e.path,["shape"])&&this.updateParticleState({shape:{...this.data.shape,...c.drop(e,1).props}})}updateState(e,t){super.updateState(e,t),this.updateParticleState(e)}updateParticleState(e){if(this.emitter){if(void 0!==e.colliderEntityId&&null!==e.colliderEntityId){let t=this.context.scene.find(e.colliderEntityId);this.colliderEntities=t?[t]:[]}null===e.colliderEntityId&&(this.colliderEntities=[]),this.emitter.updateState(e),e.emitTimeCycle&&this.started&&this.start()}}updateFromColliderEntity(e){!this.emitter||(this.emitter.updateForceFieldParameters(e),this.stop(),this.start())}start(e=0){this.currentLoopTime=0,e?this.timeoutId=window.setTimeout(()=>{this.start(0)},e):(this.started=!0,this.stopped=!1,this.isFrozen=!1,this.emitter?.startEmitting(this.actualTime/1e3),this._requestRender())}froze(){this.isFrozen=!0,this._requestRender()}unFroze(){this.isFrozen=!1,this._requestRender()}stop(){this.stopped=!0,this.currentLoopTime=0,this.emitter?.stopEmitting(),clearTimeout(this.timeoutId),this._requestRender()}reset(){this.started=!1,this.stopped=!1,this.emitter?.reset(),this._requestRender()}_requestRender(){this.context.shared.requestRender()}wakeUp(){this.isIdle=!1}sleep(){this.isIdle=!0,this.reset()}},X=class{constructor(e,t,i,n){this.data=e,this.page=t,this.shared=i,this.condition=n,this.delay=0,this.emission=e.emission,void 0!==e.delay&&(this.delay=e.delay),this.particleSystem=this.page.scene.find(this.data.emitterObjectId)}toggleEmitting(){this.particleSystem.started&&!this.particleSystem.stopped?this.stop(this.delay):this.start(this.delay)}toggleFroze(){this.particleSystem.started&&!this.particleSystem.isFrozen?this.freeze(this.delay):this.unFreeze(this.delay)}start(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.start(0),this.clearDelay()},e):this.particleSystem.start()}stop(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.stop(0),this.clearDelay()},e):this.particleSystem.stop()}freeze(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.freeze(0),this.clearDelay()},e):this.particleSystem.froze()}unFreeze(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.unFreeze(0),this.clearDelay()},e):this.particleSystem.unFroze()}reset(e=0){e?this.delayTimerId=window.setTimeout(()=>{this.reset(0),this.clearDelay()},e):this.particleSystem.reset()}reverseFromCurrent(){switch(this.emission){case"emitToggle":this.toggleEmitting();break;case"pauseToggle":this.toggleFroze()}}dispatchBasic(){if(!1===s(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"emitToggle":this.toggleEmitting();break;case"pause":this.freeze(this.delay);break;case"pauseToggle":this.toggleFroze();break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchConditional(){if(!1===s(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchGameControl(e){if(!1===s(this.shared,this.condition)||!this.particleSystem)return!1;"start"===e?this.start(this.delay):this.stop(this.delay)}dispose(){!this.particleSystem||(this.particleSystem.reset(),this.clearDelay())}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}};l("Particle",(e,t,i)=>new j(e,t,i)),n("Particles",({data:e,page:t,shared:i,actionCondition:n})=>new X(e,t,i,n)),a("particles");
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,B as t,C as s,D as i,E as n,F as a,ja as r,r as o,s as l,t as h,u,v as p,w as c,x as d}from"./runtime-chunk-Q5T3KCHG.js";import"./runtime-chunk-4YV3EXSU.js";import"./runtime-chunk-NSD7DU3P.js";import{g as m,u as g}from"./runtime-chunk-YKHSGLFC.js";import"./runtime-chunk-RTLL6WIB.js";import"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a as f,f as v,h as y}from"./runtime-chunk-TZCHGFVF.js";import{ia as w,ja as S,ka as x}from"./runtime-chunk-JBTA64YE.js";import{Cc as _,Dc as C,Fc as b,Oc as P,Zc as D,dd as M}from"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var I=class extends r{constructor(e,t,s){super(e,t,s),this.isPathObject=!0,this._shapeId=null,this._lastShapeParams=null,this._lastShape=null,this._context=s}get profileShape(){return this._lastShape??void 0}updateState(e,t){super.updateState(e,t),this.updateShape(),this.refreshAttachedCloners(t)}updateShape(){let e,t={...this.data.geometry.extrusion.shape};for(let e in t)"string"==typeof t[e]&&(t[e]=this._context.shared.getVariable(t[e],[this.uuid,"geometry","extrusion","shape",e]));if("Custom"===t.type){let s=t.shapeId;if(s!==this._shapeId&&this.detachShape(),s){this._shapeId=s;let t=this._context.scene.find(s);t?.data&&(t.attachedPaths.add(this),e=t.geometry.userData?.shape),e||this._context.scene.addPendingCommand(()=>this.updateShape())}}else if(null!==this._lastShape&&this._sameShapeParams(t))e=this._lastShape;else{let r;switch(t.type){case"Rectangle":r=n;break;case"Ellipse":r=s;break;case"Polygon":r=i;break;case"Star":r=a;break;default:throw new Error(`Unknown shape type: ${t.type}`)}e=r.create({parameters:t}).userData.shape,this._lastShapeParams=t,this._lastShape=e??null}let r=this.geometry;if(e&&r.inputs){if(this._lastShape=e,"Custom"===t.type&&(this._lastShapeParams=null),r.inputs.shapeData===e)return;r.inputs.shapeData=e,r.build()}}_sameShapeParams(e){let t=this._lastShapeParams;if(null===t)return!1;for(let s in e)if(!Object.is(e[s],t[s]))return!1;for(let s in t)if(!(s in e))return!1;return!0}detachShape(){null!==this._shapeId&&this._context.scene.find(this._shapeId)?.attachedPaths.delete(this)}supportsInPlaceGeometryUpdate(){return!1}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.updateShape(),this.refreshAttachedPaths(e)}updateTransformState(e,t){return super.updateTransformState(e,t)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.updateShape()}updateEntityBoxSize(e,t){let s=this.geometry.getAttribute("position");void 0!==s&&s.count>0?g(s,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:s.count,e,t):super.updateEntityBoxSize(e,t)}},k=new P,A=new P,T=(new P).makeScale(1,1,-1),E=new b,O=new b,R=new b,j=new b,z=new b,B=new b,F=new b,G=new WeakMap,U=new WeakMap;function V(e){e.setIndex(null),e.setAttribute("position",new D(new Float32Array(0),3)),e.setAttribute("normal",new D(new Float32Array(0),3)),e.setAttribute("uv",new D(new Float32Array(0),2)),e.setDrawRange(0,0)}var H=class extends M{constructor(e){super(),this.type="PathExtrusionGeometry",this.inputs=e,this.build()}_isGeometryClosed(){return this.inputs.path.isClosed&&1===this.inputs.parameters.extrusion.depth}_isOpenEnded(){let e=this.inputs.parameters.extrusion;return!(this.inputs.path.isClosed&&1===e.depth&&function(e){let t=2*Math.PI;return(e%t+t)%t===(0%t+t)%t}(e.twist)&&e.startScale===e.endScale)}build(){let{points:s,matrices:i}=this._getSampledPath();if(s.length<2)return void V(this);let{depth:n,offset:a}=this.inputs.parameters.extrusion;n=Math.max(0,Math.min(n,1)),a=Math.max(0,Math.min(a,1));let r=this.inputs.path.isClosed?s.length:s.length-1,o=Math.floor(a*r),l=this.inputs.path.isClosed?Math.ceil((n+a)*r):Math.ceil(Math.min(1,n+a)*r),h=Math.min(Math.max(2,l-o+1),r+2),u=[],p=[];for(let e=0;e<h;e++){let t=this.inputs.path.isClosed?(e+o)%s.length:Math.min(e+o,s.length-1);u.push(s[t].clone()),p.push(i[t].clone())}let c=(e,t,s)=>{u[e]=u[e].clone().lerp(u[t],s),p[e]=function(e,t,s){let i=[new b,new b,new b],n=[new b,new b,new b];return e.extractBasis(i[0],i[1],i[2]),t.extractBasis(n[0],n[1],n[2]),i.forEach((e,t)=>{let i=n[t],a=_.lerp(e.length(),i.length(),s);e.lerp(i,s).setLength(a)}),(new P).makeBasis(i[0],i[1],i[2])}(p[e],p[t],s)},m=0,g=a*r%1;(!this.inputs.path.isClosed||n<=1)&&(g||0===a)&&(m=g,c(0,1,m));let f=0,v=(a+n)*r%1;if((this.inputs.path.isClosed&&n<=1||!this.inputs.path.isClosed&&a+n<1)&&v&&(f=v,c(u.length-1,u.length-2,1-f)),0===n){let e=u.length-1;u[e].copy(u[0]),p[e].copy(p[0])}this._applyPathModifiers(p,m,f);let{bevel:y,bevelSides:w}=this.inputs.parameters.extrusion,S=5;"Custom"===this.inputs.parameters.extrusion.shape.type&&(S="low"===this.inputs.parameters.extrusion.shape.shapeQuality?5:12);let{regions:x,infos:C,vertices:M}=this._getShapePoints(S),I=y>0?this.inputs.parameters.extrusion.capType:"flat",A="round"===I?t(this.inputs.shapeData,y,w,S,this.inputs.ownerId):void 0,E=void 0!==A&&1===this.inputs.parameters.extrusionVersion?d(A):A,O="round"===I&&void 0===E?"flat":I,R=void 0!==E?E.positions.length/3:0,j=0,z=0;C.sort((e,t)=>e.start-t.start),C.forEach(e=>{e.verticesStart=j,e.verticesCount=e.continuous.reduce((e,t,s)=>e+(0!==s&&t?1:2),0),z+=e.verticesCount,j=z});let B,F=z*h,G=0;this._isOpenEnded()&&"flat"===O&&(B=this._getSurfaceTesselation(x),G=B.vertexCount);let U=F+2*G+2*R,H=F+2*G,N={positions:new Float32Array(3*U),normals:new Float32Array(3*U),uvs:new Float32Array(2*U)},q=0;C.forEach(e=>{q+=e.count});let L=q*(h-1)*6+(B?2*B.elementCount*3:0)+(void 0!==E?2*E.indices.length:0),Y=new Uint32Array(L),Z=0;if(C.forEach(e=>{Z=this._extrudeRegion(e,M,p,u,N,Y,Z,this._isGeometryClosed()&&!this._isOpenEnded())}),B&&(Z=this._closeEnd(B,F,Y,Z,N,p[0],u[0],!1),Z=this._closeEnd(B,F+G,Y,Z,N,p[p.length-1],u[u.length-1],!0)),void 0!==E){let t={positions:N.positions,normals:N.normals,uvs:N.uvs,indices:Y};e(E,t,H,Z,k.copy(p[0]).setPosition(u[0]).multiply(T),(e,t,s)=>[s,1e-4]),Z+=E.indices.length,H+=R,e(E,t,H,Z,k.copy(p[p.length-1]).setPosition(u[u.length-1]),(e,t,s)=>[s,1]),Z+=E.indices.length}this.setAttribute("position",new D(N.positions,3)),this.setAttribute("normal",new D(N.normals,3)),this.setAttribute("uv",new D(N.uvs,2)),this._setIndexFromUint32(Y)}_setIndexFromUint32(e){let t=!1;for(let s=e.length-1;s>=0;--s)if(e[s]>=65535){t=!0;break}this.setIndex(new D(t?e:new Uint16Array(e),1))}_getSampledPath(){let e=this.inputs.path,t=m(e),s=G.get(t);if(void 0===s||s.subdivisions!==e.subdivisions||s.subdivisionMode!==e.subdivisionMode){let i=this._extractPathPoints(t),n=i.length<2?[]:this._computeBasisMatrices(i);s={subdivisions:e.subdivisions,subdivisionMode:e.subdivisionMode,points:i,matrices:n},G.set(t,s)}return s}_extractPathPoints(e){let t=this.inputs.path.subdivisions,s="uniform"===this.inputs.path.subdivisionMode?e.getSpacedPoints(4*t):e.getPoints(t);if(s.length<2)return[];let i=[s[0]];return s.forEach(e=>{i[i.length-1].distanceToSquared(e)>.001&&i.push(e)}),this.inputs.path.isClosed&&i[i.length-1].distanceTo(i[0])<.001&&i.pop(),i}_computeBasisMatrices(e){let t=[],s=e.length,i=this.inputs.path.isClosed,n=new b,a=new b,r=new b,o=new b,l=new b(0,1,0);for(let h=0;h<s;h++){let u,p,c=e[h];u=0===h?i?e[s-1]:E.copy(c).multiplyScalar(2).sub(e[1]):e[h-1],p=h===s-1?i?e[0]:E.copy(c).multiplyScalar(2).sub(e[h-1]):e[h+1],O.subVectors(c,u).normalize(),R.subVectors(p,c).normalize();let d=j.addVectors(O,R);d.lengthSq()<1e-10&&(d.copy(R),d.dot(r)<0&&d.negate()),d.normalize(),r.copy(d),0===h&&(d.equals(l)||z.copy(d).negate().equals(l))&&l.set(0,0,1);let m=B.crossVectors(l,d).normalize(),g=F.crossVectors(d,m).normalize();l.copy(g),o.copy(m),0===h&&(n.copy(g),a.copy(d));let f=(new P).makeBasis(m,g,d);t.push(f)}let h=i?a:r,u=i?n:new b(0,1,0),p=h.clone().cross(o).normalize(),c=Math.acos(u.dot(p));if(isNaN(c))return t;let d=u.clone().cross(p);h.dot(d)>0&&(c*=-1);for(let e=1;e<t.length;e++)t[e].multiply(A.makeRotationZ(c*e/t.length));return t}_applyPathModifiers(e,t,s){let i=e.length,{angle:n,twist:a,startScale:r,endScale:o}=this.inputs.parameters.extrusion,l=new P,h=new P;return e.forEach((e,u)=>{let p=0===u?0:u===i-1?1:(u-t)/(i-(0===s?0:1)-(t+(1-s)));l.makeRotationZ(_.lerp(n,n+a,p)*_.DEG2RAD);let c=_.lerp(r,o,p);h.makeScale(c,c,c),e.multiply(l).multiply(h)}),e}_getShapePoints(e,t=o.ODD){let s=this.inputs.shapeData,i=U.get(s);return(void 0===i||i.curveSegments!==e||i.windingRule!==t)&&(i={curveSegments:e,windingRule:t,shapePoints:this._computeShapePoints(e,t)},U.set(s,i)),i.shapePoints}_getSurfaceTesselation(e){let t,s=U.get(this.inputs.shapeData);if(void 0!==s?.surfaceTesselation)return s.surfaceTesselation;try{t=h({windingRule:o.ODD,elementType:l.POLYGONS,polySize:3,vertexSize:2,strict:!0,contours:e})}catch{t=c}return void 0!==s&&(s.surfaceTesselation=t),t}_computeShapePoints(e=12,t=o.ODD){let s,i,n=this.inputs.shapeData,a=n.extractShapePointsToFlatArray([],e),r=n.shapeHoles.map(t=>{let s=t.extractShapePointsToFlatArray([],e),i=[];for(let e=s.length-1;e>=1;e-=2){let t=s[e-1],n=s[e-0];i.push(t,n)}return i});try{s=h({windingRule:t,elementType:l.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[a]})}catch{s=u}try{i=h({windingRule:o.ODD,elementType:l.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...r]})}catch{i=p}if(!s)throw new Error("error generating geometry");let c=s.elementCount;if(i){s.elementCount+=i.elementCount;for(let e=0;e<i.elements.length;e++){let t=i.elements[e],n=e%2==0?s.vertexCount:0;s.elements.push(t+n)}for(let e=0;e<i.vertexIndices.length;e++){let t=i.vertexIndices[e],n=s.vertexCount;s.vertexIndices.push(t+n)}for(let e=0;e<i.vertices.length;e++){let t=i.vertices[e];s.vertices.push(t)}}let d=1/0,m=-1/0,g=1/0,f=-1/0;for(let e=0,t=s.vertexCount;e<t;e++){let t=2*e,i=s.vertices[t+0],n=s.vertices[t+1];i<d&&(d=i),i>m&&(m=i),n<g&&(g=n),n>f&&(f=n)}let v=[];for(let e=s.elementCount-1;e>=0;e--){let t=e>=c,i=2*e,a=s.elements[i+0],r=s.elements[i+1],o=a+r,l={start:a,count:r,normals:[],isHole:t,continuous:[],verticesStart:0,verticesCount:0};v.push(l);let h=a,u=o-1,p=a+1,d=n.roundedCurves.length;do{let e=h-a,i=s.vertices[2*u+0],c=s.vertices[2*u+1],m=s.vertices[2*h+0],g=s.vertices[2*h+1],f=s.vertices[2*p+0],v=s.vertices[2*p+1],y=m-i,w=g-c,S=Math.sqrt(y*y+w*w);y/=S,w/=S;let x=m-f,_=g-v,C=Math.sqrt(x*x+_*_);x/=C,_/=C,l.normals[2*e+0]=-_,l.normals[2*e+1]=x;let b=s.vertexIndices[h];if(Array.isArray(b))l.continuous[e]=!1;else{let[t,s]=n.getCurveIndexFromVertexId(b-1,!0);if(s>0&&s<1)l.continuous[e]=!0;else{let i=1===s?t+1:t-1;i=(i+d)%d;let a=1===s?0:1,r=n.roundedCurves[t].getTangent(s),o=n.roundedCurves[i].getTangent(a);l.continuous[e]=r.dot(o)>.95}}t&&(l.normals[2*e+0]*=-1,l.normals[2*e+1]*=-1),[u,h,p]=[h,p,p+1],p>=o&&(p-=r)}while(p!==a+1)}return{regions:[a,...r],infos:v,vertices:s.vertices}}_insertVertex(e,t,s,i,n){let a=2*t,r=3*t;e.positions[r+0]=s.x,e.positions[r+1]=s.y,e.positions[r+2]=s.z,e.normals[r+0]=i.x,e.normals[r+1]=i.y,e.normals[r+2]=i.z,e.uvs[a+0]=n.x,e.uvs[a+1]=n.y}_extrudeRegion(e,t,s,i,n,a,r,o){let l=e.wallTemplate;if(void 0===l){l=[];for(let s=0;s<e.count;s++){let i,n,a=2*(e.start+s),r=t[a+0],o=t[a+1];if(e.continuous[s])i=e.normals[2*s+0],n=e.normals[2*s+1];else{let l=0===s?2*(e.start+e.count-1):a-2,h=r-t[l+0];i=-(o-t[l+1]),n=h,e.isHole||(i=-i,n=-n)}let h=0===s?1:s/e.count;if(l.push(r,o,i,n,h,0),!e.continuous[s]||0===s)if(0===s)l.push(r,o,e.normals[0],e.normals[1],0,1);else{let u=s===e.count-1?2*e.start:a+2,p=t[u+0]-r;i=-(t[u+1]-o),n=p,e.isHole||(i=-i,n=-n),l.push(r,o,i,n,h,1)}}e.wallTemplate=l}let h=s.length,u=l.length,p=n.positions,c=n.normals,d=n.uvs;for(let t=0;t<h;t++){let n=s[t].elements,a=n[0],r=n[1],o=n[2],m=n[4],g=n[5],f=n[6],v=n[12],y=n[13],w=n[14],S=i[t],x=t/(h-1),_=0,C=0,b=0,P=e.verticesStart*h+e.verticesCount*t;for(let e=0;e<u;e+=6){if(0===l[e+5]){let t=l[e+0],s=l[e+1];_=a*t+m*s+v+S.x,C=r*t+g*s+y+S.y,b=o*t+f*s+w+S.z}let t=l[e+2],s=l[e+3],i=a*t+m*s+v,n=r*t+g*s+y,h=o*t+f*s+w,u=1/(Math.sqrt(i*i+n*n+h*h)||1);i*=u,n*=u,h*=u;let D=2*P,M=3*P;p[M+0]=_,p[M+1]=C,p[M+2]=b,c[M+0]=i,c[M+1]=n,c[M+2]=h,d[D+0]=l[e+4],d[D+1]=x,P++}}let m=e.wallQuadPattern;if(void 0===m){m=[];let t=0;for(let s=0;s<e.count;s++)(!e.continuous[s]||0===s)&&t++,m.push(t,s===e.count-1?0:t+1),t++;e.wallQuadPattern=m}let g=h-1,f=m.length,v=e.isHole;for(let t=0;t<g;t++){let s=e.verticesStart*h+e.verticesCount*t,i=s+e.verticesCount;for(let e=0;e<f;e+=2){let t=s+m[e],n=s+m[e+1],o=i+m[e+1],l=i+m[e];v?(a[r++]=t,a[r++]=o,a[r++]=n,a[r++]=t,a[r++]=l,a[r++]=o):(a[r++]=t,a[r++]=n,a[r++]=o,a[r++]=t,a[r++]=o,a[r++]=l)}}return r}_closeEnd(e,t,s,i,n,a,r,o){let l=e.vertexCount,h=new b(0,0,o?-1:1).applyMatrix4(a),u=new b,p=new C;for(let s=0;s<l;s++){let i=2*s;u.set(e.vertices[i+0],e.vertices[i+1],0).applyMatrix4(a).add(r),this._insertVertex(n,t+s,u,h,p)}let c=e.elements;for(let n=0;n<e.elementCount;n++){let e=3*n;s[i++]=c[e+0]+t,s[i++]=c[e+(o?1:2)]+t,s[i++]=c[e+(o?2:1)]+t}return i}};v("PathGeometry",(e,t,s)=>new I(e,t,s)),y("PathGeometry",class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,height:100,depth:1,subdivisions:12,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters),n=Math.abs(i.width),a=Math.abs(i.height??i.width),r=Math.abs(i.depth??0),o=e.shapeData??t?.shapeData??s.create({parameters:{...S,width:"number"==typeof S.width?S.width:100,height:"number"==typeof S.height?S.height:100}}).userData.shape;return{ownerId:e.ownerId??t?.ownerId,path:e.path??w.defaultData(),parameters:Object.assign(i,{width:n,height:a,depth:r,extrusion:{...x,...i.extrusion}}),shapeData:o}}static build(e){if(e.path.points.length>=2){let t=new H(e);return Object.assign(t,{userData:{...e,type:"PathGeometry"}})}{let t=new M;return V(t),Object.assign(t,{userData:{...e,type:"PathGeometry"}})}}}),f("3d-paths");
|
|
1
|
+
import{A as e,B as t,C as s,D as i,E as n,F as a,ja as r,r as o,s as l,t as h,u,v as p,w as c,x as d}from"./runtime-chunk-EAUIIPGL.js";import"./runtime-chunk-4YV3EXSU.js";import"./runtime-chunk-NSD7DU3P.js";import{g as m,u as g}from"./runtime-chunk-LHPN54CL.js";import"./runtime-chunk-RTLL6WIB.js";import"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a as f,f as v,h as y}from"./runtime-chunk-TZCHGFVF.js";import{ia as w,ja as S,ka as x}from"./runtime-chunk-JBTA64YE.js";import{Cc as _,Dc as P,Fc as b,Oc as C,Zc as D,dd as M}from"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var I=class extends r{constructor(e,t,s){super(e,t,s),this.isPathObject=!0,this._shapeId=null,this._lastShapeParams=null,this._lastShape=null,this._context=s}get profileShape(){return this._lastShape??void 0}updateState(e,t){super.updateState(e,t),this.updateShape(),this.refreshAttachedCloners(t)}updateShape(){let e,t={...this.data.geometry.extrusion.shape};for(let e in t)"string"==typeof t[e]&&(t[e]=this._context.shared.getVariable(t[e],[this.uuid,"geometry","extrusion","shape",e]));if("Custom"===t.type){let s=t.shapeId;if(s!==this._shapeId&&this.detachShape(),s){this._shapeId=s;let t=this._context.scene.find(s);t?.data&&(t.attachedPaths.add(this),e=t.geometry.userData?.shape),e||this._context.scene.addPendingCommand(()=>this.updateShape())}}else if(null!==this._lastShape&&this._sameShapeParams(t))e=this._lastShape;else{let r;switch(t.type){case"Rectangle":r=n;break;case"Ellipse":r=s;break;case"Polygon":r=i;break;case"Star":r=a;break;default:throw new Error(`Unknown shape type: ${t.type}`)}e=r.create({parameters:t}).userData.shape,this._lastShapeParams=t,this._lastShape=e??null}let r=this.geometry;if(e&&r.inputs){if(this._lastShape=e,"Custom"===t.type&&(this._lastShapeParams=null),r.inputs.shapeData===e)return;r.inputs.shapeData=e,r.build()}}_sameShapeParams(e){let t=this._lastShapeParams;if(null===t)return!1;for(let s in e)if(!Object.is(e[s],t[s]))return!1;for(let s in t)if(!(s in e))return!1;return!0}detachShape(){null!==this._shapeId&&this._context.scene.find(this._shapeId)?.attachedPaths.delete(this)}supportsInPlaceGeometryUpdate(){return!1}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.updateShape(),this.refreshAttachedPaths(e)}updateTransformState(e,t){return super.updateTransformState(e,t)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.updateShape()}updateEntityBoxSize(e,t){let s=this.geometry.getAttribute("position");void 0!==s&&s.count>0?g(s,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:s.count,e,t):super.updateEntityBoxSize(e,t)}},A=new C,k=new C,T=(new C).makeScale(1,1,-1),E=new b,O=new b,R=new b,j=new b,z=new b,B=new b,F=new b,G=new WeakMap,U=new WeakMap;function V(e){e.setIndex(null),e.setAttribute("position",new D(new Float32Array(0),3)),e.setAttribute("normal",new D(new Float32Array(0),3)),e.setAttribute("uv",new D(new Float32Array(0),2)),e.setDrawRange(0,0)}var H=class extends M{constructor(e){super(),this.type="PathExtrusionGeometry",this.inputs=e,this.build()}_isGeometryClosed(){return this.inputs.path.isClosed&&1===this.inputs.parameters.extrusion.depth}_isOpenEnded(){let e=this.inputs.parameters.extrusion;return!(this.inputs.path.isClosed&&1===e.depth&&function(e){let t=2*Math.PI;return(e%t+t)%t===(0%t+t)%t}(e.twist)&&e.startScale===e.endScale)}build(){let{points:s,matrices:i}=this._getSampledPath();if(s.length<2)return void V(this);let{depth:n,offset:a}=this.inputs.parameters.extrusion;n=Math.max(0,Math.min(n,1)),a=Math.max(0,Math.min(a,1));let r=this.inputs.path.isClosed?s.length:s.length-1,o=Math.floor(a*r),l=this.inputs.path.isClosed?Math.ceil((n+a)*r):Math.ceil(Math.min(1,n+a)*r),h=Math.min(Math.max(2,l-o+1),r+2),u=[],p=[];for(let e=0;e<h;e++){let t=this.inputs.path.isClosed?(e+o)%s.length:Math.min(e+o,s.length-1);u.push(s[t].clone()),p.push(i[t].clone())}let c=(e,t,s)=>{u[e]=u[e].clone().lerp(u[t],s),p[e]=function(e,t,s){let i=[new b,new b,new b],n=[new b,new b,new b];return e.extractBasis(i[0],i[1],i[2]),t.extractBasis(n[0],n[1],n[2]),i.forEach((e,t)=>{let i=n[t],a=_.lerp(e.length(),i.length(),s);e.lerp(i,s).setLength(a)}),(new C).makeBasis(i[0],i[1],i[2])}(p[e],p[t],s)},m=0,g=a*r%1;(!this.inputs.path.isClosed||n<=1)&&(g||0===a)&&(m=g,c(0,1,m));let f=0,v=(a+n)*r%1;if((this.inputs.path.isClosed&&n<=1||!this.inputs.path.isClosed&&a+n<1)&&v&&(f=v,c(u.length-1,u.length-2,1-f)),0===n){let e=u.length-1;u[e].copy(u[0]),p[e].copy(p[0])}this._applyPathModifiers(p,m,f);let{bevel:y,bevelSides:w}=this.inputs.parameters.extrusion,S=5;"Custom"===this.inputs.parameters.extrusion.shape.type&&(S="low"===this.inputs.parameters.extrusion.shape.shapeQuality?5:12);let{regions:x,infos:P,vertices:M}=this._getShapePoints(S),I=y>0?this.inputs.parameters.extrusion.capType:"flat",k="round"===I?t(this.inputs.shapeData,y,w,S,this.inputs.ownerId):void 0,E=void 0!==k&&1===this.inputs.parameters.extrusionVersion?d(k):k,O="round"===I&&void 0===E?"flat":I,R=void 0!==E?E.positions.length/3:0,j=0,z=0;P.sort((e,t)=>e.start-t.start),P.forEach(e=>{e.verticesStart=j,e.verticesCount=e.continuous.reduce((e,t,s)=>e+(0!==s&&t?1:2),0),z+=e.verticesCount,j=z});let B,F=z*h,G=0;this._isOpenEnded()&&"flat"===O&&(B=this._getSurfaceTesselation(x),G=B.vertexCount);let U=F+2*G+2*R,H=F+2*G,L={positions:new Float32Array(3*U),normals:new Float32Array(3*U),uvs:new Float32Array(2*U)},N=0;P.forEach(e=>{N+=e.count});let q=N*(h-1)*6+(B?2*B.elementCount*3:0)+(void 0!==E?2*E.indices.length:0),Z=new Uint32Array(q),Y=0;if(P.forEach(e=>{Y=this._extrudeRegion(e,M,p,u,L,Z,Y,this._isGeometryClosed()&&!this._isOpenEnded())}),B&&(Y=this._closeEnd(B,F,Z,Y,L,p[0],u[0],!1),Y=this._closeEnd(B,F+G,Z,Y,L,p[p.length-1],u[u.length-1],!0)),void 0!==E){let t={positions:L.positions,normals:L.normals,uvs:L.uvs,indices:Z};e(E,t,H,Y,A.copy(p[0]).setPosition(u[0]).multiply(T),(e,t,s)=>[s,1e-4]),Y+=E.indices.length,H+=R,e(E,t,H,Y,A.copy(p[p.length-1]).setPosition(u[u.length-1]),(e,t,s)=>[s,1]),Y+=E.indices.length}this.setAttribute("position",new D(L.positions,3)),this.setAttribute("normal",new D(L.normals,3)),this.setAttribute("uv",new D(L.uvs,2)),this._setIndexFromUint32(Z)}_setIndexFromUint32(e){let t=!1;for(let s=e.length-1;s>=0;--s)if(e[s]>=65535){t=!0;break}this.setIndex(new D(t?e:new Uint16Array(e),1))}_getSampledPath(){let e=this.inputs.path,t=m(e),s=G.get(t);if(void 0===s||s.subdivisions!==e.subdivisions||s.subdivisionMode!==e.subdivisionMode){let i=this._extractPathPoints(t),n=i.length<2?[]:this._computeBasisMatrices(i);s={subdivisions:e.subdivisions,subdivisionMode:e.subdivisionMode,points:i,matrices:n},G.set(t,s)}return s}_extractPathPoints(e){let t=this.inputs.path.subdivisions,s="uniform"===this.inputs.path.subdivisionMode?e.getSpacedPoints(4*t):e.getPoints(t);if(s.length<2)return[];let i=[s[0]];return s.forEach(e=>{i[i.length-1].distanceToSquared(e)>.001&&i.push(e)}),this.inputs.path.isClosed&&i[i.length-1].distanceTo(i[0])<.001&&i.pop(),i}_computeBasisMatrices(e){let t=[],s=e.length,i=this.inputs.path.isClosed,n=new b,a=new b,r=new b,o=new b,l=new b(0,1,0);for(let h=0;h<s;h++){let u,p,c=e[h];u=0===h?i?e[s-1]:E.copy(c).multiplyScalar(2).sub(e[1]):e[h-1],p=h===s-1?i?e[0]:E.copy(c).multiplyScalar(2).sub(e[h-1]):e[h+1],O.subVectors(c,u).normalize(),R.subVectors(p,c).normalize();let d=j.addVectors(O,R);d.lengthSq()<1e-10&&(d.copy(R),d.dot(r)<0&&d.negate()),d.normalize(),r.copy(d),0===h&&(d.equals(l)||z.copy(d).negate().equals(l))&&l.set(0,0,1);let m=B.crossVectors(l,d).normalize(),g=F.crossVectors(d,m).normalize();l.copy(g),o.copy(m),0===h&&(n.copy(g),a.copy(d));let f=(new C).makeBasis(m,g,d);t.push(f)}let h=i?a:r,u=i?n:new b(0,1,0),p=h.clone().cross(o).normalize(),c=Math.acos(u.dot(p));if(isNaN(c))return t;let d=u.clone().cross(p);h.dot(d)>0&&(c*=-1);for(let e=1;e<t.length;e++)t[e].multiply(k.makeRotationZ(c*e/t.length));return t}_applyPathModifiers(e,t,s){let i=e.length,{angle:n,twist:a,startScale:r,endScale:o}=this.inputs.parameters.extrusion,l=new C,h=new C;return e.forEach((e,u)=>{let p=0===u?0:u===i-1?1:(u-t)/(i-(0===s?0:1)-(t+(1-s)));l.makeRotationZ(_.lerp(n,n+a,p)*_.DEG2RAD);let c=_.lerp(r,o,p);h.makeScale(c,c,c),e.multiply(l).multiply(h)}),e}_getShapePoints(e,t=o.ODD){let s=this.inputs.shapeData,i=U.get(s);return(void 0===i||i.curveSegments!==e||i.windingRule!==t)&&(i={curveSegments:e,windingRule:t,shapePoints:this._computeShapePoints(e,t)},U.set(s,i)),i.shapePoints}_getSurfaceTesselation(e){let t,s=U.get(this.inputs.shapeData);if(void 0!==s?.surfaceTesselation)return s.surfaceTesselation;try{t=h({windingRule:o.ODD,elementType:l.POLYGONS,polySize:3,vertexSize:2,strict:!0,contours:e})}catch{t=c}return void 0!==s&&(s.surfaceTesselation=t),t}_computeShapePoints(e=12,t=o.ODD){let s,i,n=this.inputs.shapeData,a=n.extractShapePointsToFlatArray([],e),r=n.shapeHoles.map(t=>{let s=t.extractShapePointsToFlatArray([],e),i=[];for(let e=s.length-1;e>=1;e-=2){let t=s[e-1],n=s[e-0];i.push(t,n)}return i});try{s=h({windingRule:t,elementType:l.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[a]})}catch{s=u}try{i=h({windingRule:o.ODD,elementType:l.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...r]})}catch{i=p}if(!s)throw new Error("error generating geometry");let c=s.elementCount;if(i){s.elementCount+=i.elementCount;for(let e=0;e<i.elements.length;e++){let t=i.elements[e],n=e%2==0?s.vertexCount:0;s.elements.push(t+n)}for(let e=0;e<i.vertexIndices.length;e++){let t=i.vertexIndices[e],n=s.vertexCount;s.vertexIndices.push(t+n)}for(let e=0;e<i.vertices.length;e++){let t=i.vertices[e];s.vertices.push(t)}}let d=1/0,m=-1/0,g=1/0,f=-1/0;for(let e=0,t=s.vertexCount;e<t;e++){let t=2*e,i=s.vertices[t+0],n=s.vertices[t+1];i<d&&(d=i),i>m&&(m=i),n<g&&(g=n),n>f&&(f=n)}let v=[];for(let e=s.elementCount-1;e>=0;e--){let t=e>=c,i=2*e,a=s.elements[i+0],r=s.elements[i+1],o=a+r,l={start:a,count:r,normals:[],isHole:t,continuous:[],verticesStart:0,verticesCount:0};v.push(l);let h=a,u=o-1,p=a+1,d=n.roundedCurves.length;do{let e=h-a,i=s.vertices[2*u+0],c=s.vertices[2*u+1],m=s.vertices[2*h+0],g=s.vertices[2*h+1],f=s.vertices[2*p+0],v=s.vertices[2*p+1],y=m-i,w=g-c,S=Math.sqrt(y*y+w*w);y/=S,w/=S;let x=m-f,_=g-v,P=Math.sqrt(x*x+_*_);x/=P,_/=P,l.normals[2*e+0]=-_,l.normals[2*e+1]=x;let b=s.vertexIndices[h];if(Array.isArray(b))l.continuous[e]=!1;else{let[t,s]=n.getCurveIndexFromVertexId(b-1,!0);if(s>0&&s<1)l.continuous[e]=!0;else{let i=1===s?t+1:t-1;i=(i+d)%d;let a=1===s?0:1,r=n.roundedCurves[t].getTangent(s),o=n.roundedCurves[i].getTangent(a);l.continuous[e]=r.dot(o)>.95}}t&&(l.normals[2*e+0]*=-1,l.normals[2*e+1]*=-1),[u,h,p]=[h,p,p+1],p>=o&&(p-=r)}while(p!==a+1)}return{regions:[a,...r],infos:v,vertices:s.vertices}}_insertVertex(e,t,s,i,n){let a=2*t,r=3*t;e.positions[r+0]=s.x,e.positions[r+1]=s.y,e.positions[r+2]=s.z,e.normals[r+0]=i.x,e.normals[r+1]=i.y,e.normals[r+2]=i.z,e.uvs[a+0]=n.x,e.uvs[a+1]=n.y}_extrudeRegion(e,t,s,i,n,a,r,o){let l=e.wallTemplate;if(void 0===l){l=[];for(let s=0;s<e.count;s++){let i,n,a=2*(e.start+s),r=t[a+0],o=t[a+1];if(e.continuous[s])i=e.normals[2*s+0],n=e.normals[2*s+1];else{let l=0===s?2*(e.start+e.count-1):a-2,h=r-t[l+0];i=-(o-t[l+1]),n=h,e.isHole||(i=-i,n=-n)}let h=0===s?1:s/e.count;if(l.push(r,o,i,n,h,0),!e.continuous[s]||0===s)if(0===s)l.push(r,o,e.normals[0],e.normals[1],0,1);else{let u=s===e.count-1?2*e.start:a+2,p=t[u+0]-r;i=-(t[u+1]-o),n=p,e.isHole||(i=-i,n=-n),l.push(r,o,i,n,h,1)}}e.wallTemplate=l}let h=s.length,u=l.length,p=n.positions,c=n.normals,d=n.uvs;for(let t=0;t<h;t++){let n=s[t].elements,a=n[0],r=n[1],o=n[2],m=n[4],g=n[5],f=n[6],v=n[12],y=n[13],w=n[14],S=i[t],x=t/(h-1),_=0,P=0,b=0,C=e.verticesStart*h+e.verticesCount*t;for(let e=0;e<u;e+=6){if(0===l[e+5]){let t=l[e+0],s=l[e+1];_=a*t+m*s+v+S.x,P=r*t+g*s+y+S.y,b=o*t+f*s+w+S.z}let t=l[e+2],s=l[e+3],i=a*t+m*s+v,n=r*t+g*s+y,h=o*t+f*s+w,u=1/(Math.sqrt(i*i+n*n+h*h)||1);i*=u,n*=u,h*=u;let D=2*C,M=3*C;p[M+0]=_,p[M+1]=P,p[M+2]=b,c[M+0]=i,c[M+1]=n,c[M+2]=h,d[D+0]=l[e+4],d[D+1]=x,C++}}let m=e.wallQuadPattern;if(void 0===m){m=[];let t=0;for(let s=0;s<e.count;s++)(!e.continuous[s]||0===s)&&t++,m.push(t,s===e.count-1?0:t+1),t++;e.wallQuadPattern=m}let g=h-1,f=m.length,v=e.isHole;for(let t=0;t<g;t++){let s=e.verticesStart*h+e.verticesCount*t,i=s+e.verticesCount;for(let e=0;e<f;e+=2){let t=s+m[e],n=s+m[e+1],o=i+m[e+1],l=i+m[e];v?(a[r++]=t,a[r++]=o,a[r++]=n,a[r++]=t,a[r++]=l,a[r++]=o):(a[r++]=t,a[r++]=n,a[r++]=o,a[r++]=t,a[r++]=o,a[r++]=l)}}return r}_closeEnd(e,t,s,i,n,a,r,o){let l=e.vertexCount,h=new b(0,0,o?-1:1).applyMatrix4(a),u=new b,p=new P;for(let s=0;s<l;s++){let i=2*s;u.set(e.vertices[i+0],e.vertices[i+1],0).applyMatrix4(a).add(r),this._insertVertex(n,t+s,u,h,p)}let c=e.elements;for(let n=0;n<e.elementCount;n++){let e=3*n;s[i++]=c[e+0]+t,s[i++]=c[e+(o?1:2)]+t,s[i++]=c[e+(o?2:1)]+t}return i}};v("PathGeometry",(e,t,s)=>new I(e,t,s)),y("PathGeometry",class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,height:100,depth:1,subdivisions:12,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters),n=Math.abs(i.width),a=Math.abs(i.height??i.width),r=Math.abs(i.depth??0),o=e.shapeData??t?.shapeData??s.create({parameters:{...S,width:"number"==typeof S.width?S.width:100,height:"number"==typeof S.height?S.height:100}}).userData.shape;return{ownerId:e.ownerId??t?.ownerId,path:e.path??w.defaultData(),parameters:Object.assign(i,{width:n,height:a,depth:r,extrusion:{...x,...i.extrusion}}),shapeData:o}}static build(e){if(e.path.points.length>=2){let t=new H(e);return Object.assign(t,{userData:{...e,type:"PathGeometry"}})}{let t=new M;return V(t),Object.assign(t,{userData:{...e,type:"PathGeometry"}})}}}),f("3d-paths");
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./runtime-chunk-
|
|
1
|
+
import{a as t}from"./runtime-chunk-FLOULQFC.js";import"./runtime-chunk-BZZJZWYB.js";import{a as n}from"./runtime-chunk-UIRA2CWJ.js";import"./runtime-chunk-J26PDWXZ.js";import{Bc as e,Db as r,Dc as a,Fc as i,Le as o,Oc as c,Tc as y,Vc as s,we as l}from"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";new l,new y,new Float32Array([255/256/256**3,255/256/65536,255/256/256,255/256]);var u=new Map([[0,null],[1,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x+y,1.0)*opacity+x*(1.0-opacity);}"],[2,"vec3 blend(const in vec3 x,const in vec3 y,const in float opacity){return y*opacity+x*(1.0-opacity);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){float a=min(y.a,opacity);return vec4(blend(x.rgb,y.rgb,a),max(x.a,a));}"],[3,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y)*0.5*opacity+x*(1.0-opacity);}"],[4,"float blend(const in float x,const in float y){return(y==0.0)?y:max(1.0-(1.0-x)/y,0.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[5,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[6,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x,y)*opacity+x*(1.0-opacity);}"],[7,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return abs(x-y)*opacity+x*(1.0-opacity);}"],[8,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y-2.0*x*y)*opacity+x*(1.0-opacity);}"],[9,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x,y)*opacity+x*(1.0-opacity);}"],[10,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return x*y*opacity+x*(1.0-opacity);}"],[11,"float blend(const in float x,const in float y){return(y>0.0)?min(x/y,1.0):1.0;}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[12,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-abs(1.0-x-y))*opacity+x*(1.0-opacity);}"],[13,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return y*opacity+x*(1.0-opacity);}"],[14,"float blend(const in float x,const in float y){return(x<0.5)?(2.0*x*y):(1.0-2.0*(1.0-x)*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[15,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x*x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[16,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-(1.0-x)*(1.0-y))*opacity+x*(1.0-opacity);}"],[17,"float blend(const in float x,const in float y){return(y<0.5)?(2.0*x*y+x*x*(1.0-2.0*y)):(sqrt(x)*(2.0*y-1.0)+2.0*x*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[18,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x+y-1.0,0.0)*opacity+x*(1.0-opacity);}"]]),d=class extends e{constructor(t,n=1){super(),this.f=t,this.opacity=new o(n)}getOpacity(){return this.opacity.value}setOpacity(t){this.opacity.value=t}get blendFunction(){return this.f}set blendFunction(t){this.f=t,this.dispatchEvent({type:"change"})}getBlendFunction(){return this.blendFunction}setBlendFunction(t){this.blendFunction=t}getShaderCode(){return u.get(this.blendFunction)}},x=class extends e{constructor(t,n,{attributes:e=0,blendFunction:r=16,defines:a=new Map,uniforms:i=new Map,extensions:o=null,vertexShader:c=null}={}){super(),this.name=t,this.renderer=null,this.attributes=e,this.fragmentShader=n,this.vertexShader=c,this.defines=a,this.uniforms=i,this.extensions=o,this.blendMode=new d(r),this.blendMode.addEventListener("change",t=>this.setChanged())}getName(){return this.name}setRenderer(t){this.renderer=t}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(t){this.attributes=t,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(t){this.fragmentShader=t,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(t){this.vertexShader=t,this.setChanged()}setChanged(){this.dispatchEvent({type:"change"})}setDepthTexture(t,n=r){}update(t,n,e){}setSize(t,n){}initialize(t,n,e){}dispose(){for(let t of Object.keys(this)){let n=this[t];if(null!==n&&"object"==typeof n&&"function"==typeof n.dispose){if(n instanceof s||n===this.renderer)continue;this[t].dispose()}}}},w=(new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10]),new i,new c,new y,class extends x{constructor(t=30){super("PixelationEffect","uniform bool active;uniform vec2 d;void mainUv(inout vec2 uv){if(active){uv=vec2(d.x*(floor(uv.x/d.x)+0.5),d.y*(floor(uv.y/d.y)+0.5));}}",{uniforms:new Map([["active",new o(!1)],["d",new o(new a)]])}),this.resolution=new a,this.d=0,this.granularity=t}get granularity(){return this.d}set granularity(t){let n=Math.floor(t);n%2>0&&(n+=1),this.d=n,this.uniforms.get("active").value=n>0,this.setSize(this.resolution.width,this.resolution.height)}getGranularity(){return this.granularity}setGranularity(t){this.granularity=t}setSize(t,n){this.resolution.set(t,n),this.uniforms.get("d").value.setScalar(this.d).divide(this.resolution)}});function v(t,n,e){return t+(n-t)*e}function A(t,n,e,r){let a=v(t,n,.75),i=v(e,r,.75);return v(a,i,.875)}Math.PI,new i,new i,new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array(2),new Float32Array(2),new Float32Array([0,-.25,.25,-.125,.125,-.375,.375]),new Float32Array([0,0]),new Float32Array([.25,-.25]),new Float32Array([-.25,.25]),new Float32Array([.125,-.125]),new Float32Array([-.125,.125]),new Uint8Array([0,0]),new Uint8Array([3,0]),new Uint8Array([0,3]),new Uint8Array([3,3]),new Uint8Array([1,0]),new Uint8Array([4,0]),new Uint8Array([1,3]),new Uint8Array([4,3]),new Uint8Array([0,1]),new Uint8Array([3,1]),new Uint8Array([0,4]),new Uint8Array([3,4]),new Uint8Array([1,1]),new Uint8Array([4,1]),new Uint8Array([1,4]),new Uint8Array([4,4]),new Uint8Array([0,0]),new Uint8Array([1,0]),new Uint8Array([0,2]),new Uint8Array([1,2]),new Uint8Array([2,0]),new Uint8Array([3,0]),new Uint8Array([2,2]),new Uint8Array([3,2]),new Uint8Array([0,1]),new Uint8Array([1,1]),new Uint8Array([0,3]),new Uint8Array([1,3]),new Uint8Array([2,1]),new Uint8Array([3,1]),new Uint8Array([2,3]),new Uint8Array([3,3]),new Map([[A(0,0,0,0),new Float32Array([0,0,0,0])],[A(0,0,0,1),new Float32Array([0,0,0,1])],[A(0,0,1,0),new Float32Array([0,0,1,0])],[A(0,0,1,1),new Float32Array([0,0,1,1])],[A(0,1,0,0),new Float32Array([0,1,0,0])],[A(0,1,0,1),new Float32Array([0,1,0,1])],[A(0,1,1,0),new Float32Array([0,1,1,0])],[A(0,1,1,1),new Float32Array([0,1,1,1])],[A(1,0,0,0),new Float32Array([1,0,0,0])],[A(1,0,0,1),new Float32Array([1,0,0,1])],[A(1,0,1,0),new Float32Array([1,0,1,0])],[A(1,0,1,1),new Float32Array([1,0,1,1])],[A(1,1,0,0),new Float32Array([1,1,0,0])],[A(1,1,0,1),new Float32Array([1,1,0,1])],[A(1,1,1,0),new Float32Array([1,1,1,0])],[A(1,1,1,1),new Float32Array([1,1,1,1])]]);var h=class extends t{constructor(){super(w)}get granularity(){return this.effect.getGranularity()}set granularity(t){this.effect.setGranularity(t)}};n("pixelation",()=>new h);
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as t}from"./runtime-chunk-
|
|
1
|
+
import{h as t}from"./runtime-chunk-5H6VPLTB.js";import"./runtime-chunk-AKDBKOG2.js";import"./runtime-chunk-UM3BOFRB.js";import"./runtime-chunk-TU4KDRKR.js";import{a as i,b as s}from"./runtime-chunk-DZNU62CT.js";import"./runtime-chunk-JPD7WF7H.js";import"./runtime-chunk-J4DLIJUZ.js";import"./runtime-chunk-IAV77RF7.js";import"./runtime-chunk-EAUIIPGL.js";import"./runtime-chunk-4YV3EXSU.js";import"./runtime-chunk-NSD7DU3P.js";import{f as e,g as a}from"./runtime-chunk-NEOF7SBZ.js";import"./runtime-chunk-LHPN54CL.js";import"./runtime-chunk-RTLL6WIB.js";import{f as n}from"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a as r}from"./runtime-chunk-TZCHGFVF.js";import{u as o}from"./runtime-chunk-JBTA64YE.js";import"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var c=class{constructor(t,i,s,a,n,r,o,c){this.eventId=t,this.id=i,this.data=s,this.dataEvent=a,this.object=n,this.stage=!1,this.actions=e(a,s.actions,r,o,c,n,"Toggle")}disconnect(){a(this.actions)}dispatchIn(){this.actions.Audio.forEach(t=>t.dispatchBasic()),this.actions.Particles.forEach(t=>t.dispatchBasic()),this.actions.Video.forEach(t=>t.dispatchBasic()),this.actions.Create.forEach(t=>t.dispatch()),this.actions.Destroy.forEach(t=>t.dispatch()),this.actions.Reset.forEach(t=>t.dispatch()),this.actions.Link.forEach(t=>t.dispatch()),this.actions.Transition.forEach(t=>{t.object.currentTransitionEvent!==this&&(t.object.currentTransitionEvent=this,t.init())}),this.actions.Transition.forEach(t=>t.play()),this.actions.Animation.forEach(t=>t.play()),this.actions.SwitchCamera.forEach(t=>t.play()),this.actions.SceneTransition.forEach(t=>t.dispatch()),this.actions.SetVariable.forEach(t=>t.checkConditions()),this.actions.SetVariable.forEach(t=>t.dispatch()),this.actions.DynamicVariablePlay.forEach(t=>t.dispatch()),this.actions.ClearLocalStorage.forEach(t=>t.dispatch()),this.actions.UserAPI.forEach(t=>t.dispatch())}dispatchOut(){this.actions.Transition.forEach(t=>t.play())}},h=class extends i{constructor(t,i){super(t),this.eventManager=i,this.breakpoints=[],this.resize=(t,i)=>{this.breakpoints.forEach(s=>{let e,a=o.deviceToSize(s.data.size),n="horizontal"===s.dataEvent.orientation?t:i;switch(s.data.operator){case"<":e=n<a[0];break;case">":e=n>a[0];break;case"<>":e=n>a[0]&&n<a[1]}s.stage!==e&&(s.stage=e,s.stage?s.dispatchIn():s.dispatchOut())})},this.onResizeObserver=new ResizeObserver(t=>{for(let i of t){let{width:t,height:s}=i.contentRect;this.resize(t,s)}})}connect(){let{page:i,sharedAssets:s,domElement:e}=this.eventContext;this.onResizeObserver.observe(e);let a=t=>{if(t.visible&&t.data?.events.length)for(let{data:e,id:a}of t.data.events)e.disabled||"Resize"===e.type&&e.breakpoints.forEach(({data:n,id:r})=>{try{let o=new c(a,r,n,e,t,i,s,this.eventManager);this.breakpoints.push(o)}catch(t){}})};i.traverseEntity(i=>{(n(i)||i instanceof t)&&i.frame?.traverse(t=>{a(t)}),a(i)})}disconnect(){this.onResizeObserver.disconnect(),this.breakpoints.forEach(t=>{t.disconnect()}),this.breakpoints=[]}};s("Resize",({eventContext:t,eventManager:i})=>new h(t,i)),r("resize");
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./runtime-chunk-
|
|
1
|
+
import{a as t}from"./runtime-chunk-AIAGSHYQ.js";import"./runtime-chunk-5H6VPLTB.js";import"./runtime-chunk-AKDBKOG2.js";import"./runtime-chunk-UM3BOFRB.js";import"./runtime-chunk-TU4KDRKR.js";import"./runtime-chunk-JPD7WF7H.js";import"./runtime-chunk-J4DLIJUZ.js";import"./runtime-chunk-IAV77RF7.js";import"./runtime-chunk-EAUIIPGL.js";import"./runtime-chunk-4YV3EXSU.js";import"./runtime-chunk-NSD7DU3P.js";import{b as e,e as i}from"./runtime-chunk-NEOF7SBZ.js";import"./runtime-chunk-LHPN54CL.js";import"./runtime-chunk-RTLL6WIB.js";import"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a}from"./runtime-chunk-TZCHGFVF.js";import"./runtime-chunk-JBTA64YE.js";import"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var n=class{constructor(t,e,i,a,n){this.data=t,this.page=e,this.eventManager=i,this.shared=a,this.condition=n,this.timeOutId=-1,this.scene=e.scene}dispatch(){if(!1===i(this.shared,this.condition))return!1;this.data.target!==this.page.uuid&&(window.clearTimeout(this.timeOutId),this.timeOutId=window.setTimeout(()=>{this.play()},1e3*this.data.delay))}dispose(){window.clearTimeout(this.timeOutId)}play(){if(this.scene.children.every(t=>t.uuid!==this.data.target||t.data.uiScene))return;"fade"===this.data.transition&&this.data.duration>0&&this.eventManager.eventContext.renderer.renderFromSceneForSceneTransitionPass(this.scene,this.scene.activeCamera,1e3*this.data.duration),this.eventManager.deactivate(),this.eventManager.controlsManager.deactivate();let e=this.scene.activeCamera;this.scene.updatePage(this.data.target),this.scene.traverseVisibleEntity(t=>{"ParticleSystem"===t.type&&(t.sleep(),t.wakeUp(),t.data.autoPlay?t.start():t.stop())}),this.scene.activePage.switchToPlayCamera(),this.scene.activeCamera.copyViewPlaneSize(e),t(this.scene.activePage,this.shared),this.eventManager.activate(),this.eventManager.controlsManager.activate(this.eventManager)}};e("SceneTransition",({data:t,page:e,eventManager:i,shared:a,actionCondition:s})=>new n(t,e,i,a,s)),a("scene-transition");
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./runtime-chunk-GGSUJEGZ.js";import{a as e}from"./runtime-chunk-NBYTQLIB.js";import{h as i}from"./runtime-chunk-
|
|
1
|
+
import{a as t}from"./runtime-chunk-GGSUJEGZ.js";import{a as e}from"./runtime-chunk-NBYTQLIB.js";import{h as i}from"./runtime-chunk-5H6VPLTB.js";import"./runtime-chunk-AKDBKOG2.js";import"./runtime-chunk-UM3BOFRB.js";import"./runtime-chunk-TU4KDRKR.js";import{a as s,b as r}from"./runtime-chunk-DZNU62CT.js";import"./runtime-chunk-JPD7WF7H.js";import"./runtime-chunk-J4DLIJUZ.js";import"./runtime-chunk-IAV77RF7.js";import"./runtime-chunk-EAUIIPGL.js";import"./runtime-chunk-4YV3EXSU.js";import"./runtime-chunk-NSD7DU3P.js";import{f as n,g as o}from"./runtime-chunk-NEOF7SBZ.js";import"./runtime-chunk-LHPN54CL.js";import"./runtime-chunk-RTLL6WIB.js";import{f as h}from"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a}from"./runtime-chunk-TZCHGFVF.js";import"./runtime-chunk-JBTA64YE.js";import"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var c=class{constructor(t,e,i,s,r,o){this.id=t,this.data=e,this.object=i,this.scrollCounter=0,this.actions=n(e,e.actions,s,r,o,i)}connect(){this.scrollCounter=0,this.actions.TimelineAnimation.forEach(t=>t.seek(0))}disconnect(){o(this.actions)}dispatch(t){this.actions.Transition.forEach(t=>{t.object.currentTransitionEvent!==this&&(t.object.currentTransitionEvent=this,t.init())});let e=t>0?1:-1;this.scrollCounter+=e,this.scrollCounter=Math.min(Math.max(this.scrollCounter,0),this.data.steps);let i=this.scrollCounter/this.data.steps;this.actions.Transition.forEach(t=>t.seek(i)),this.actions.Animation.forEach(t=>t.seek(e)),this.actions.TimelineAnimation.forEach(t=>t.seek(i)),this.actions.Create.forEach(t=>t.dispatchThrottled()),this.actions.SetVariable.forEach(t=>t.checkConditions()),this.actions.SetVariable.forEach(t=>t.dispatch()),this.actions.DynamicVariablePlay.forEach(t=>t.dispatch()),this.actions.ClearLocalStorage.forEach(t=>t.dispatch()),this.actions.UserAPI.forEach(t=>t.dispatch())}dispatchUserEvent(t){this.actions.Transition.forEach(t=>{t.object.currentTransitionEvent!==this&&(t.object.currentTransitionEvent=this,t.init())}),t?(this.actions.Transition.forEach(t=>t.reverseFromCurrent()),this.actions.Animation.forEach(t=>t.reverseFromCurrent()),this.actions.TimelineAnimation.forEach(t=>t.reverseFromCurrent())):(this.actions.Transition.forEach(t=>{t.playFromCurrent()}),this.actions.Animation.forEach(t=>{t.playFromCurrent()}),this.actions.TimelineAnimation.forEach(t=>{t.playFromCurrent()})),this.actions.Create.forEach(t=>t.dispatchThrottled()),this.actions.SetVariable.forEach(t=>t.checkConditions()),this.actions.SetVariable.forEach(t=>t.dispatch()),this.actions.DynamicVariablePlay.forEach(t=>t.dispatch()),this.actions.ClearLocalStorage.forEach(t=>t.dispatch()),this.actions.UserAPI.forEach(t=>t.dispatch())}},l=class{constructor(t,e,i,s,r,o,h){this.id=t,this.data=e,this.object=i,this.domElement=o,this.eventManager=h,this.scrollStart=0,this.scrollEnd=0,this.deferred=new Set,this.settleDriver={update:()=>this.settleDeferred()},this.actions=n(e,e.actions,s,r,h,i)}getStickyParentElement(){let t=this.domElement;for(;t;){if("sticky"===window.getComputedStyle(t).position)return t;t=t.parentElement}return null}computeScrollBounds(){let t=this.getStickyParentElement(),e=t?.parentElement,i=this.domElement.getBoundingClientRect(),s={top:i.top,bottom:i.bottom,left:i.left,right:i.right,width:i.width,height:i.height};if(e){let r=e.getBoundingClientRect(),n=window.getComputedStyle(t),o=parseFloat(n.marginTop)+parseFloat(n.marginBottom),h=parseFloat(n.top),a=parseFloat(n.bottom),c=r.height-o;if(isNaN(h)){if(!isNaN(a)){let t=document.body.clientHeight??window.innerHeight,e=window.innerWidth-(document.documentElement.clientWidth??window.innerWidth);i.bottom===t-a?(s.top+=r.top-i.height+a+e,s.bottom+=r.top-i.height+a+e):i.bottom<t-a&&(s.top-=c-i.height,s.bottom-=c-i.height)}}else i.top===h?(s.top+=r.top-h,s.bottom+=r.top-h):i.top<0&&(s.top-=c-i.height,s.bottom-=c-i.height)}let r=document.body,n=document.documentElement,o=window.pageYOffset||n.scrollTop||r.scrollTop,h=n.clientTop||r.clientTop||0,a=Math.round(s.top+o-h);if("enter"===this.data.startFrom){let t=window.innerHeight,e=s.height,i=this.data.enterAnchor,r="top"===i?t:"bottom"===i?t-e:t-.5*e;this.scrollStart=a-r}else this.scrollStart=0;this.scrollStart+=this.data.startOffset??0,this.scrollEnd=this.scrollStart+(this.data.endAfter??400),this.box=s}connect(){this.computeScrollBounds(),this.settle()}disconnect(){t.remove(this.settleDriver),this.deferred.clear(),o(this.actions)}handleResize(){this.computeScrollBounds(),this.settle()}settle(){this.computeScroll({x:window.scrollX,y:window.scrollY},{settle:!0})}settleDeferred(){let e=[...this.deferred].filter(t=>!t.contested);e.length&&(e.forEach(t=>this.deferred.delete(t)),this.seekTransitions(e,this.scaleAt(window.scrollY))),0===this.deferred.size&&t.remove(this.settleDriver)}scaleAt(t){let e=this.scrollEnd-this.scrollStart;return Math.min(1,Math.max(0,(t-this.scrollStart)/e))}seekTransitions(t,e){t.forEach(t=>{t.object.currentTransitionEvent!==this&&(t.object.currentTransitionEvent=this,t.init())}),t.forEach(t=>t.seek(e))}get isInvalidBox(){return void 0===this.box||0===this.box.width&&0===this.box.height&&0===this.box.top&&0===this.box.bottom}computeScroll({x:e,y:i},{settle:s=!1}={}){let r=this.actions.Transition;s?(r=r.filter(t=>!t.contested||(this.deferred.add(t),!1)),this.deferred.size&&t.add(this.settleDriver)):(this.deferred.clear(),t.remove(this.settleDriver));let n=this.scaleAt(i);this.seekTransitions(r,n),this.actions.Animation.forEach(t=>t.seek(n)),this.actions.TimelineAnimation.forEach(t=>t.seek(n)),this.actions.Create.forEach(t=>t.dispatchThrottled()),this.actions.SetVariable.forEach(t=>t.checkConditions()),this.actions.SetVariable.forEach(t=>t.dispatch()),this.actions.DynamicVariablePlay.forEach(t=>t.dispatch()),this.actions.ClearLocalStorage.forEach(t=>t.dispatch()),this.actions.UserAPI.forEach(t=>t.dispatch())}dispatch(t){this.isInvalidBox&&this.computeScrollBounds(),this.computeScroll(t)}dispatchUserEvent(t){this.actions.Transition.forEach(t=>{t.object.currentTransitionEvent!==this&&(t.object.currentTransitionEvent=this,t.init())}),t?(this.actions.Transition.forEach(t=>t.reverseFromCurrent()),this.actions.Animation.forEach(t=>t.reverseFromCurrent()),this.actions.TimelineAnimation.forEach(t=>t.reverseFromCurrent())):(this.actions.Transition.forEach(t=>{t.playFromCurrent()}),this.actions.Animation.forEach(t=>{t.playFromCurrent()}),this.actions.TimelineAnimation.forEach(t=>{t.playFromCurrent()})),this.actions.Create.forEach(t=>t.dispatchThrottled()),this.actions.SetVariable.forEach(t=>t.checkConditions()),this.actions.SetVariable.forEach(t=>t.dispatch()),this.actions.DynamicVariablePlay.forEach(t=>t.dispatch()),this.actions.ClearLocalStorage.forEach(t=>t.dispatch()),this.actions.UserAPI.forEach(t=>t.dispatch())}},d=class extends s{constructor(t,i){super(t),this.managers=i,this.wheelEventsPerObject=new Map,this.scrollEventsPerObject=new Map,this.isInview=!0,this.handleResize=()=>{[...this.scrollEventsPerObject.entries()].forEach(([t,e])=>{e.forEach(t=>t.handleResize())})},this.onScroll=t=>{if(!this.isInview)return;let e={y:window.scrollY,x:window.scrollX};[...this.scrollEventsPerObject.entries()].forEach(([t,i])=>{t.dispatchEvent({type:"beginEvent",eventName:"Scroll",scroll:e}),i.forEach(t=>t.dispatch(e))})},this.onWheel=t=>{!this.isInview||t.ctrlKey||[...this.wheelEventsPerObject.entries()].forEach(([e,i])=>{e.dispatchEvent({type:"beginEvent",eventName:"Scroll",deltaY:t.deltaY}),i.forEach(e=>e.dispatch(t.deltaY))})},this.onUserEvent=({eventName:t,target:i,reverse:s})=>{if(!t||!i)return;let r=e(t);r&&"Scroll"===r&&(i.dispatchEvent({type:"beginEvent",eventName:"Scroll"}),this.wheelEventsPerObject.get(i)?.forEach(t=>{t.dispatchUserEvent(s)}))}}connect(){let{page:t,sharedAssets:e,domElement:s,isExport:r}=this.eventContext,n=i=>{if(i.data?.events.length)for(let{id:n,data:o}of i.data.events)if(!o.disabled&&"Scroll"===o.type)if("load"!==o.trigger&&r){let r=new l(n,o,i,t,e,s,this.managers);this.scrollEventsPerObject.has(i)?this.scrollEventsPerObject.get(i)?.push(r):this.scrollEventsPerObject.set(i,[r])}else{let s=new c(n,o,i,t,e,this.managers);this.wheelEventsPerObject.has(i)?this.wheelEventsPerObject.get(i)?.push(s):this.wheelEventsPerObject.set(i,[s])}};t.traverseEntity(t=>{(h(t)||t instanceof i)&&t.frame?.traverse(t=>{n(t)}),n(t)}),this.intersectionObserver=new IntersectionObserver(t=>{let e=t[0];e&&(this.isInview=e.isIntersecting)},{root:null}),this.intersectionObserver.observe(this.eventContext.domElement),[...this.wheelEventsPerObject.entries()].forEach(([t,e])=>{e.forEach(t=>t.connect()),t.addEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([t,e])=>{e.forEach(t=>t.connect()),t.addEventListener("userEvent",this.onUserEvent)}),[...this.wheelEventsPerObject.values()].some(t=>t.length)&&(this.domEventsNeeded.add("wheel"),window.addEventListener("wheel",this.onWheel)),[...this.scrollEventsPerObject.values()].some(t=>t.length)&&(this.domEventsNeeded.add("scroll"),window.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.handleResize))}disconnect(){window.removeEventListener("wheel",this.onWheel),window.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.handleResize),this.intersectionObserver.unobserve(this.eventContext.domElement),this.domEventsNeeded.clear(),[...this.wheelEventsPerObject.entries()].forEach(([t,e])=>{e.forEach(t=>t.disconnect()),t.removeEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([t,e])=>{e.forEach(t=>t.disconnect()),t.removeEventListener("userEvent",this.onUserEvent)})}};r("Scroll",({eventContext:t,eventManager:e})=>new d(t,e)),a("scroll");
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as m}from"./runtime-chunk-TLKSQZIK.js";import"./runtime-chunk-R4S4M2CX.js";import"./runtime-chunk-N4IYKCD4.js";import"./runtime-chunk-QIDW3BF7.js";import"./runtime-chunk-VUGCWL55.js";import"./runtime-chunk-J4DLIJUZ.js";import"./runtime-chunk-67XYII4R.js";import"./runtime-chunk-IAV77RF7.js";import"./runtime-chunk-EAUIIPGL.js";import"./runtime-chunk-4YV3EXSU.js";import"./runtime-chunk-NSD7DU3P.js";import"./runtime-chunk-LHPN54CL.js";import"./runtime-chunk-RTLL6WIB.js";import"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a as n,f as r}from"./runtime-chunk-TZCHGFVF.js";import"./runtime-chunk-JBTA64YE.js";import"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";r("ShapeBlendGeometry",(n,r,t)=>new m(n,r,t)),n("shape-blends");
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./runtime-chunk-YCVDVV27.js";import{a as e,b as r}from"./runtime-chunk-T53JMQSH.js";import{G as i,o as n}from"./runtime-chunk-Q5T3KCHG.js";import"./runtime-chunk-4YV3EXSU.js";import"./runtime-chunk-NSD7DU3P.js";import"./runtime-chunk-YKHSGLFC.js";import"./runtime-chunk-RTLL6WIB.js";import"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a as s,f as a,h as o}from"./runtime-chunk-TZCHGFVF.js";import"./runtime-chunk-JBTA64YE.js";import{Dc as h,Jd as l,Ld as u,Nd as c,Qd as f,Qe as d,Rd as p,Sd as g,Tc as y}from"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var m=class{constructor(){this.type="ShapePath",this.color=new y,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new f,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath?.lineTo(t,e),this}quadraticCurveTo(t,e,r,i){return this.currentPath?.quadraticCurveTo(t,e,r,i),this}bezierCurveTo(t,e,r,i,n,s){return this.currentPath?.bezierCurveTo(t,e,r,i,n,s),this}splineThru(t){return this.currentPath?.splineThru(t),this}toShapes(){let t={loc:0,t:0};function e(e,i,n,s){let a=e.x,o=i.x,h=n.x,l=s.x,u=e.y,c=i.y,f=n.y,d=s.y,p=(l-h)*(u-f)-(d-f)*(a-h),g=(d-f)*(o-a)-(l-h)*(c-u),y=p/g,m=((o-a)*(u-f)-(c-u)*(a-h))/g;if(0===g&&0!==p||y<=0||y>=1||m<0||m>1)return null;if(0===p&&0===g){for(let h=0;h<2;h++){if(r(0===h?n:s,e,i),0===t.loc){let e=0===h?n:s;return{x:e.x,y:e.y,t:t.t}}if(2===t.loc)return{x:+(a+t.t*(o-a)).toPrecision(10),y:+(u+t.t*(c-u)).toPrecision(10),t:t.t}}return null}for(let a=0;a<2;a++)if(r(0===a?n:s,e,i),0===t.loc){let e=0===a?n:s;return{x:e.x,y:e.y,t:t.t}}return{x:+(a+y*(o-a)).toPrecision(10),y:+(u+y*(c-u)).toPrecision(10),t:y}}function r(e,r,i){let n,s=i.x-r.x,a=i.y-r.y,o=e.x-r.x,h=e.y-r.y,l=s*h-o*a;return e.x===r.x&&e.y===r.y?(t.loc=0,void(t.t=0)):e.x===i.x&&e.y===i.y?(t.loc=1,void(t.t=1)):void(l<-Number.EPSILON?t.loc=3:l>Number.EPSILON?t.loc=4:s*o<0||a*h<0?t.loc=5:Math.sqrt(s*s+a*a)<Math.sqrt(o*o+h*h)?t.loc=6:(n=0!==s?o/s:h/a,t.loc=2,t.t=n))}let i=0,n=999999999,s=-999999999,a=[];this.subPaths.forEach(t=>{let e=t.getPoints(),r=-999999999,o=999999999,l=-999999999,u=999999999;for(let t=0;t<e.length;t++){let i=e[t];i.y>r&&(r=i.y),i.y<o&&(o=i.y),i.x>l&&(l=i.x),i.x<u&&(u=i.x)}s<=l&&(s=l+1),n>=u&&(n=u-1),e.length&&a.push({curves:t.curves,points:e,isCW:g.isClockWise(e),identifier:i++,boundingBox:new d(new h(u,o),new h(l,r))})});let o=a.map(t=>function(t,r,i,n,s){(null==s||""===s)&&(s="nonzero");let a=new h;t.boundingBox.getCenter(a);let o=function(t,r,i){let n=new h;r.getCenter(n);let s=[];return i.forEach(r=>{r.boundingBox.containsPoint(n)&&function(t,r){let i=[],n=[];for(let s=1;s<t.length;s++){let a=t[s-1],o=t[s];for(let t=1;t<r.length;t++){let s=e(a,o,r[t-1],r[t]);null!==s&&void 0===i.find(t=>t.t<=s.t+Number.EPSILON&&t.t>=s.t-Number.EPSILON)&&(i.push(s),n.push(new h(s.x,s.y)))}}return n}(t,r.points).forEach(t=>{s.push({identifier:r.identifier,isCW:r.isCW,point:t})})}),s.sort((t,e)=>t.point.x-e.point.x),s}([new h(i,a.y),new h(n,a.y)],t.boundingBox,r);o.sort((t,e)=>t.point.x-e.point.x);let l=[],u=[];o.forEach(e=>{e.identifier===t.identifier?l.push(e):u.push(e)});let c=l[0].point.x,f=[],d=0;for(;d<u.length&&u[d].point.x<c;)f.length>0&&f[f.length-1]===u[d].identifier?f.pop():f.push(u[d].identifier),d++;if(f.push(t.identifier),"evenodd"===s){let e=f.length%2==0,r=f[f.length-2];return{identifier:t.identifier,isHole:e,for:r}}if("nonzero"===s){let e=!0,i=null,n=null;for(let t=0;t<f.length;t++){let s=f[t];r[s]&&(e?(n=r[s].isCW,e=!1,i=s):n!==r[s].isCW&&(n=r[s].isCW,e=!0))}return{identifier:t.identifier,isHole:e,for:i}}console.warn('fill-rule: "'+s+'" is currently not implemented.')}(t,a,n,s,this.userData?.style.fillRule)),l=[];return a.forEach(t=>{let e=o[t.identifier];if(e&&!e.isHole){let e=new p;e.curves=t.curves,o.filter(e=>e?.isHole&&e.for===t.identifier).forEach(t=>{if(t){let r=a[t.identifier],i=new f;i.curves=r.curves,e.holes.push(i)}}),l.push(e)}}),l}},x=new class{async load(t,e,i=()=>{}){let{load:n}=await r;n(t,(t,r)=>{t||!r?i(t??"Something went wrong"):e(r)})}async parse(t){let{parse:e,Bidi:i}=await r;try{let r=e(t),n=new i,s=t=>r.charToGlyphIndex(t.char);return n.registerModifier("glyphIndex",null,s),n.applyFeatures(r,r.defaultRenderOptions.features),{font:r,bidi:n}}catch(t){console.error(t)}}};function w(t,e){return e.state.glyphIndex===t||e.state.fina===t||e.state.medi===t||e.state.init===t}a("TextGeometry",(e,r,i)=>new t(e,r,i));var b={create:(t,e)=>new i(t,e)};o("TextGeometry",b),o("InputGeometry",b),n(class{constructor(t){this._arrayBuffer=new ArrayBuffer(1),this._isLoaded=!1,this._intercepted=!1,this._layoutErrorWarned=!1,this._isUserFont=t.isUserFont??!1,this._loadingPromise=this.load(t)}update(t){this._isLoaded=!1,this._isUserFont=t.isUserFont??!1,this._loadingPromise=this.load(t)}async load(t){try{this._layoutErrorWarned=!1;let r=await async function(t){let r,i,n=!1;if(t.url?(r=await async function(t){let e;try{e=await fetch(t)}catch(e){throw new Error(`could not fetch the font at ${t}: ${e}`)}if(!e.ok)throw new Error(`${e.status} ${e.statusText} fetching the font at ${t}`);return await e.arrayBuffer()}(t.url),i=t.url,n=t.url.startsWith("/")):t.data&&(r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)),r){if(!e)return{font:void 0,url:i,intercepted:n,arr:r,bidi:null};{let t=await x.parse(r);if(t)return{font:t.font,url:i,intercepted:n,arr:r,bidi:t.bidi}}}}(t);r&&(this._arrayBuffer=r.arr,this._url=r.url,this.font=r.font,this._intercepted=r.intercepted,this._isLoaded=!0,this._bidi=r.bidi)}catch(e){console.warn(`Could not load the font "${t.url??"(inline data)"}"`,e)}}warnLayoutError(t){this._layoutErrorWarned||(this._layoutErrorWarned=!0,console.warn(`Text layout failed for the font "${this._url??"(inline data)"}"`,t))}get url(){return this._url}get intercepted(){return this._intercepted}get isLoaded(){return this._isLoaded}get loadingPromise(){return this._loadingPromise}reverseLigaturesTable(t,e,r){if(!this._bidi)return[];let i=this._bidi;i.getTextGlyphs(e);let n=i.tokenizer.tokens,s=[],a=0,o=r.length===n.length;for(let i=0;i<r.length;i++){let h=r[i].index,l=String.fromCharCode(r[i].unicode),u=n[a];if(w(h,u)||o)s.push({char:l,index:h,replacements:[u.state.glyphIndex],replacementChars:[u.char]}),a++;else{let r=u.char,i="",n=[u.state.glyphIndex],o=[],c=!1;for(;!c;)a++,i=e.charAt(a),r+=i,n.push(t.charToGlyphIndex(i)),o=t.stringToGlyphs(r),1===o.length&&o[0].index===h&&(c=!0),a>e.length&&(c=!0);s.push({char:l,index:h,replacements:n,replacementChars:Array.from(r)}),a++}}return s}generateShapes(t,e,r){if(!this._isLoaded)return;let i=this.font,n=e.fontSize/this.unitsPerEm,s=e.fontSize*e.lineHeight,a=t.map(t=>this.getTextWidth(t,e)),o="string"==typeof e.width?Number(r.getVariable(e.width)):e.width,h="string"==typeof e.height?Number(r.getVariable(e.height)):e.height,l=this.getCharWidth("\n",e),u=1===e.horizontalAlign?l:0,c=this.getLineInitialOffsetX(a[0],o,e.horizontalAlign,t[0],l),f=this.getLineInitialOffsetY(s,t.length,h,n,e.verticalAlign),d=[],p=t.map(()=>[]),g=t.map(()=>[]);for(let h=0;h<t.length;h++){let y=t[h],m={features:{liga:!0},letterSpacing:e.letterSpacing},x=[];try{x=i.stringToGlyphs(y,m)}catch(t){this.warnLayoutError(t)}c=this.getLineInitialOffsetX(a[h],o,e.horizontalAlign,y,l);let w=[];try{w=this.reverseLigaturesTable(i,y,x)}catch(t){this.warnLayoutError(t)}let b=this.computeSpaceWidthForLine(t,h,e,r),P=0,S=x[0];S&&2===e.horizontalAlign&&void 0!==S.leftSideBearing&&(c-=S.leftSideBearing*n);try{this.font?.forEachGlyph(y,c,f,e.fontSize,m,(t,r,s,a,o)=>{let l=0===t.index?"\n":t.unicode?String.fromCharCode(t.unicode):void 0,c=w[P],f=0;if("\n"===l)f=u;else if(" "===l)f=b;else{let i=this.createPath(t,n,r,s,e);i&&(f=i.offsetX,d.push(i.path))}if(c&&1!==c.replacements.length){let t=c.replacements.map(t=>(i.glyphs.get(t).advanceWidth??0)*n),e=t.reduce((t,e)=>t+e,0),a=t.map(t=>t/e),o=r;for(let t=0;t<a.length;t++){let e=f*a[t];g[h].push([o,s]),p[h].push(e),o+=e}}else g[h].push([r,s]),p[h].push(f);P++})}catch(t){this.warnLayoutError(t)}f-=s}let y=[];for(let t=0,e=d.length;t<e;t++)y.push(...d[t].toShapes());return{shapes:y,charWidths:p,lineWidths:a,charCoords:g}}get isUserFont(){return this._isUserFont}get arrayBuffer(){return this._arrayBuffer}get ascender(){return this.font?.ascender??0}get descender(){return this.font?.descender??0}get familyName(){return this.font?.names.fontFamily??""}get subfamilyName(){return this.font?.names.fontSubfamily??""}get unitsPerEm(){return this.font?.unitsPerEm??1}getLineInitialOffsetX(t,e,r,i,n){return(3===r||2===r)&&i.indexOf("\n")>=0&&(t-=n),3===r?.5*e-.5*t:2===r?e-t:0}getLineInitialOffsetY(t,e,r,i,n){let s=e*t,a=t-Math.abs(this.ascender-this.descender)*i,o=-this.ascender*i-a/2;return 3===n?-(r-s-o):2===n?-(.5*r-.5*s-o):o}createPath(t,e,r,i,n){let s=t.getPath(r,-i,n.fontSize,{kerning:!1,letterSpacing:n.letterSpacing});if(!s)return void console.error('THREE.Font: character "'+t+'" does not exists in font family '+this.familyName+".");let a=new m,o=(t.advanceWidth??1)*e;if(t)for(let t of s.commands){let e=a.currentPath?.currentPoint;if(!e||"Z"===t.type||e.x!==t.x||-e.y!==t.y)switch(t.type){case"M":a.moveTo(t.x,-t.y);break;case"L":a.lineTo(t.x,-t.y);break;case"Q":a.quadraticCurveTo(t.x1,-t.y1,t.x,-t.y);break;case"C":a.bezierCurveTo(t.x1,-t.y1,t.x2,-t.y2,t.x,-t.y)}}return a.subPaths.forEach(t=>{let e=function(t){if(t.length){let e=t[0];if(e instanceof u)return e.v1;if(e instanceof l||e instanceof c)return e.v0}}(t.curves);void 0!==e&&t.currentPoint.distanceTo(e)>0&&t.lineTo(e.x,e.y)}),{offsetX:o,path:a}}getCharWidth(t,e){try{return this.font?.getAdvanceWidth(t,e.fontSize,{kerning:!0,letterSpacing:e.letterSpacing})??0}catch(t){return this.warnLayoutError(t),0}}getTextWidth(t,e){try{return this.font?.getAdvanceWidth(t,e.fontSize,{kerning:!0,letterSpacing:e.letterSpacing})??0}catch(t){return this.warnLayoutError(t),0}}computeSpaceWidthForLine(t,e,r,i){let n=this.getCharWidth(" ",r),s=t[e];if(s){let a=this.countSpaces(s.trimEnd());if(4===r.horizontalAlign&&e<t.length-1&&a)return(("string"==typeof r.width?Number(i.getVariable(r.width)):r.width)-(this.getTextWidth(s,r)-a*n))/a}return n}countSpaces(t){return(t.match(/ /g)||[]).length}}),s("text");
|
|
1
|
+
import{a as t}from"./runtime-chunk-N4IYKCD4.js";import{a as e,b as r}from"./runtime-chunk-T53JMQSH.js";import{G as i,o as n}from"./runtime-chunk-EAUIIPGL.js";import"./runtime-chunk-4YV3EXSU.js";import"./runtime-chunk-NSD7DU3P.js";import"./runtime-chunk-LHPN54CL.js";import"./runtime-chunk-RTLL6WIB.js";import"./runtime-chunk-2PT2WH66.js";import"./runtime-chunk-HUXCP2PU.js";import{a as s,f as a,h as o}from"./runtime-chunk-TZCHGFVF.js";import"./runtime-chunk-JBTA64YE.js";import{Dc as h,Jd as l,Ld as u,Nd as c,Qd as f,Qe as d,Rd as p,Sd as g,Tc as y}from"./runtime-chunk-BVVSZMXD.js";import"./runtime-chunk-ML3Z74BL.js";var m=class{constructor(){this.type="ShapePath",this.color=new y,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new f,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath?.lineTo(t,e),this}quadraticCurveTo(t,e,r,i){return this.currentPath?.quadraticCurveTo(t,e,r,i),this}bezierCurveTo(t,e,r,i,n,s){return this.currentPath?.bezierCurveTo(t,e,r,i,n,s),this}splineThru(t){return this.currentPath?.splineThru(t),this}toShapes(){let t={loc:0,t:0};function e(e,i,n,s){let a=e.x,o=i.x,h=n.x,l=s.x,u=e.y,c=i.y,f=n.y,d=s.y,p=(l-h)*(u-f)-(d-f)*(a-h),g=(d-f)*(o-a)-(l-h)*(c-u),y=p/g,m=((o-a)*(u-f)-(c-u)*(a-h))/g;if(0===g&&0!==p||y<=0||y>=1||m<0||m>1)return null;if(0===p&&0===g){for(let h=0;h<2;h++){if(r(0===h?n:s,e,i),0===t.loc){let e=0===h?n:s;return{x:e.x,y:e.y,t:t.t}}if(2===t.loc)return{x:+(a+t.t*(o-a)).toPrecision(10),y:+(u+t.t*(c-u)).toPrecision(10),t:t.t}}return null}for(let a=0;a<2;a++)if(r(0===a?n:s,e,i),0===t.loc){let e=0===a?n:s;return{x:e.x,y:e.y,t:t.t}}return{x:+(a+y*(o-a)).toPrecision(10),y:+(u+y*(c-u)).toPrecision(10),t:y}}function r(e,r,i){let n,s=i.x-r.x,a=i.y-r.y,o=e.x-r.x,h=e.y-r.y,l=s*h-o*a;return e.x===r.x&&e.y===r.y?(t.loc=0,void(t.t=0)):e.x===i.x&&e.y===i.y?(t.loc=1,void(t.t=1)):void(l<-Number.EPSILON?t.loc=3:l>Number.EPSILON?t.loc=4:s*o<0||a*h<0?t.loc=5:Math.sqrt(s*s+a*a)<Math.sqrt(o*o+h*h)?t.loc=6:(n=0!==s?o/s:h/a,t.loc=2,t.t=n))}let i=0,n=999999999,s=-999999999,a=[];this.subPaths.forEach(t=>{let e=t.getPoints(),r=-999999999,o=999999999,l=-999999999,u=999999999;for(let t=0;t<e.length;t++){let i=e[t];i.y>r&&(r=i.y),i.y<o&&(o=i.y),i.x>l&&(l=i.x),i.x<u&&(u=i.x)}s<=l&&(s=l+1),n>=u&&(n=u-1),e.length&&a.push({curves:t.curves,points:e,isCW:g.isClockWise(e),identifier:i++,boundingBox:new d(new h(u,o),new h(l,r))})});let o=a.map(t=>function(t,r,i,n,s){(null==s||""===s)&&(s="nonzero");let a=new h;t.boundingBox.getCenter(a);let o=function(t,r,i){let n=new h;r.getCenter(n);let s=[];return i.forEach(r=>{r.boundingBox.containsPoint(n)&&function(t,r){let i=[],n=[];for(let s=1;s<t.length;s++){let a=t[s-1],o=t[s];for(let t=1;t<r.length;t++){let s=e(a,o,r[t-1],r[t]);null!==s&&void 0===i.find(t=>t.t<=s.t+Number.EPSILON&&t.t>=s.t-Number.EPSILON)&&(i.push(s),n.push(new h(s.x,s.y)))}}return n}(t,r.points).forEach(t=>{s.push({identifier:r.identifier,isCW:r.isCW,point:t})})}),s.sort((t,e)=>t.point.x-e.point.x),s}([new h(i,a.y),new h(n,a.y)],t.boundingBox,r);o.sort((t,e)=>t.point.x-e.point.x);let l=[],u=[];o.forEach(e=>{e.identifier===t.identifier?l.push(e):u.push(e)});let c=l[0].point.x,f=[],d=0;for(;d<u.length&&u[d].point.x<c;)f.length>0&&f[f.length-1]===u[d].identifier?f.pop():f.push(u[d].identifier),d++;if(f.push(t.identifier),"evenodd"===s){let e=f.length%2==0,r=f[f.length-2];return{identifier:t.identifier,isHole:e,for:r}}if("nonzero"===s){let e=!0,i=null,n=null;for(let t=0;t<f.length;t++){let s=f[t];r[s]&&(e?(n=r[s].isCW,e=!1,i=s):n!==r[s].isCW&&(n=r[s].isCW,e=!0))}return{identifier:t.identifier,isHole:e,for:i}}console.warn('fill-rule: "'+s+'" is currently not implemented.')}(t,a,n,s,this.userData?.style.fillRule)),l=[];return a.forEach(t=>{let e=o[t.identifier];if(e&&!e.isHole){let e=new p;e.curves=t.curves,o.filter(e=>e?.isHole&&e.for===t.identifier).forEach(t=>{if(t){let r=a[t.identifier],i=new f;i.curves=r.curves,e.holes.push(i)}}),l.push(e)}}),l}},x=new class{async load(t,e,i=()=>{}){let{load:n}=await r;n(t,(t,r)=>{t||!r?i(t??"Something went wrong"):e(r)})}async parse(t){let{parse:e,Bidi:i}=await r;try{let r=e(t),n=new i,s=t=>r.charToGlyphIndex(t.char);return n.registerModifier("glyphIndex",null,s),n.applyFeatures(r,r.defaultRenderOptions.features),{font:r,bidi:n}}catch(t){console.error(t)}}};function w(t,e){return e.state.glyphIndex===t||e.state.fina===t||e.state.medi===t||e.state.init===t}a("TextGeometry",(e,r,i)=>new t(e,r,i));var b={create:(t,e)=>new i(t,e)};o("TextGeometry",b),o("InputGeometry",b),n(class{constructor(t){this._arrayBuffer=new ArrayBuffer(1),this._isLoaded=!1,this._intercepted=!1,this._layoutErrorWarned=!1,this._isUserFont=t.isUserFont??!1,this._loadingPromise=this.load(t)}update(t){this._isLoaded=!1,this._isUserFont=t.isUserFont??!1,this._loadingPromise=this.load(t)}async load(t){try{this._layoutErrorWarned=!1;let r=await async function(t){let r,i,n=!1;if(t.url?(r=await async function(t){let e;try{e=await fetch(t)}catch(e){throw new Error(`could not fetch the font at ${t}: ${e}`)}if(!e.ok)throw new Error(`${e.status} ${e.statusText} fetching the font at ${t}`);return await e.arrayBuffer()}(t.url),i=t.url,n=t.url.startsWith("/")):t.data&&(r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)),r){if(!e)return{font:void 0,url:i,intercepted:n,arr:r,bidi:null};{let t=await x.parse(r);if(t)return{font:t.font,url:i,intercepted:n,arr:r,bidi:t.bidi}}}}(t);r&&(this._arrayBuffer=r.arr,this._url=r.url,this.font=r.font,this._intercepted=r.intercepted,this._isLoaded=!0,this._bidi=r.bidi)}catch(e){console.warn(`Could not load the font "${t.url??"(inline data)"}"`,e)}}warnLayoutError(t){this._layoutErrorWarned||(this._layoutErrorWarned=!0,console.warn(`Text layout failed for the font "${this._url??"(inline data)"}"`,t))}get url(){return this._url}get intercepted(){return this._intercepted}get isLoaded(){return this._isLoaded}get loadingPromise(){return this._loadingPromise}reverseLigaturesTable(t,e,r){if(!this._bidi)return[];let i=this._bidi;i.getTextGlyphs(e);let n=i.tokenizer.tokens,s=[],a=0,o=r.length===n.length;for(let i=0;i<r.length;i++){let h=r[i].index,l=String.fromCharCode(r[i].unicode),u=n[a];if(w(h,u)||o)s.push({char:l,index:h,replacements:[u.state.glyphIndex],replacementChars:[u.char]}),a++;else{let r=u.char,i="",n=[u.state.glyphIndex],o=[],c=!1;for(;!c;)a++,i=e.charAt(a),r+=i,n.push(t.charToGlyphIndex(i)),o=t.stringToGlyphs(r),1===o.length&&o[0].index===h&&(c=!0),a>e.length&&(c=!0);s.push({char:l,index:h,replacements:n,replacementChars:Array.from(r)}),a++}}return s}generateShapes(t,e,r){if(!this._isLoaded)return;let i=this.font,n=e.fontSize/this.unitsPerEm,s=e.fontSize*e.lineHeight,a=t.map(t=>this.getTextWidth(t,e)),o="string"==typeof e.width?Number(r.getVariable(e.width)):e.width,h="string"==typeof e.height?Number(r.getVariable(e.height)):e.height,l=this.getCharWidth("\n",e),u=1===e.horizontalAlign?l:0,c=this.getLineInitialOffsetX(a[0],o,e.horizontalAlign,t[0],l),f=this.getLineInitialOffsetY(s,t.length,h,n,e.verticalAlign),d=[],p=t.map(()=>[]),g=t.map(()=>[]);for(let h=0;h<t.length;h++){let y=t[h],m={features:{liga:!0},letterSpacing:e.letterSpacing},x=[];try{x=i.stringToGlyphs(y,m)}catch(t){this.warnLayoutError(t)}c=this.getLineInitialOffsetX(a[h],o,e.horizontalAlign,y,l);let w=[];try{w=this.reverseLigaturesTable(i,y,x)}catch(t){this.warnLayoutError(t)}let b=this.computeSpaceWidthForLine(t,h,e,r),P=0,v=x[0];v&&2===e.horizontalAlign&&void 0!==v.leftSideBearing&&(c-=v.leftSideBearing*n);try{this.font?.forEachGlyph(y,c,f,e.fontSize,m,(t,r,s,a,o)=>{let l=0===t.index?"\n":t.unicode?String.fromCharCode(t.unicode):void 0,c=w[P],f=0;if("\n"===l)f=u;else if(" "===l)f=b;else{let i=this.createPath(t,n,r,s,e);i&&(f=i.offsetX,d.push(i.path))}if(c&&1!==c.replacements.length){let t=c.replacements.map(t=>(i.glyphs.get(t).advanceWidth??0)*n),e=t.reduce((t,e)=>t+e,0),a=t.map(t=>t/e),o=r;for(let t=0;t<a.length;t++){let e=f*a[t];g[h].push([o,s]),p[h].push(e),o+=e}}else g[h].push([r,s]),p[h].push(f);P++})}catch(t){this.warnLayoutError(t)}f-=s}let y=[];for(let t=0,e=d.length;t<e;t++)y.push(...d[t].toShapes());return{shapes:y,charWidths:p,lineWidths:a,charCoords:g}}get isUserFont(){return this._isUserFont}get arrayBuffer(){return this._arrayBuffer}get ascender(){return this.font?.ascender??0}get descender(){return this.font?.descender??0}get familyName(){return this.font?.names.fontFamily??""}get subfamilyName(){return this.font?.names.fontSubfamily??""}get unitsPerEm(){return this.font?.unitsPerEm??1}getLineInitialOffsetX(t,e,r,i,n){return(3===r||2===r)&&i.indexOf("\n")>=0&&(t-=n),3===r?.5*e-.5*t:2===r?e-t:0}getLineInitialOffsetY(t,e,r,i,n){let s=e*t,a=t-Math.abs(this.ascender-this.descender)*i,o=-this.ascender*i-a/2;return 3===n?-(r-s-o):2===n?-(.5*r-.5*s-o):o}createPath(t,e,r,i,n){let s=t.getPath(r,-i,n.fontSize,{kerning:!1,letterSpacing:n.letterSpacing});if(!s)return void console.error('THREE.Font: character "'+t+'" does not exists in font family '+this.familyName+".");let a=new m,o=(t.advanceWidth??1)*e;if(t)for(let t of s.commands){let e=a.currentPath?.currentPoint;if(!e||"Z"===t.type||e.x!==t.x||-e.y!==t.y)switch(t.type){case"M":a.moveTo(t.x,-t.y);break;case"L":a.lineTo(t.x,-t.y);break;case"Q":a.quadraticCurveTo(t.x1,-t.y1,t.x,-t.y);break;case"C":a.bezierCurveTo(t.x1,-t.y1,t.x2,-t.y2,t.x,-t.y)}}return a.subPaths.forEach(t=>{let e=function(t){if(t.length){let e=t[0];if(e instanceof u)return e.v1;if(e instanceof l||e instanceof c)return e.v0}}(t.curves);void 0!==e&&t.currentPoint.distanceTo(e)>0&&t.lineTo(e.x,e.y)}),{offsetX:o,path:a}}getCharWidth(t,e){try{return this.font?.getAdvanceWidth(t,e.fontSize,{kerning:!0,letterSpacing:e.letterSpacing})??0}catch(t){return this.warnLayoutError(t),0}}getTextWidth(t,e){try{return this.font?.getAdvanceWidth(t,e.fontSize,{kerning:!0,letterSpacing:e.letterSpacing})??0}catch(t){return this.warnLayoutError(t),0}}computeSpaceWidthForLine(t,e,r,i){let n=this.getCharWidth(" ",r),s=t[e];if(s){let a=this.countSpaces(s.trimEnd());if(4===r.horizontalAlign&&e<t.length-1&&a)return(("string"==typeof r.width?Number(i.getVariable(r.width)):r.width)-(this.getTextWidth(s,r)-a*n))/a}return n}countSpaces(t){return(t.match(/ /g)||[]).length}}),s("text");
|
|
Binary file
|
|
Binary file
|