sa2kit 1.0.3 → 1.0.5
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/dist/mmd/index.js +139 -19
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +139 -19
- package/dist/mmd/index.mjs.map +1 -1
- package/package.json +20 -18
package/dist/mmd/index.js
CHANGED
|
@@ -516,7 +516,7 @@ var MMDPlayerEnhanced = ({
|
|
|
516
516
|
};
|
|
517
517
|
}, [stage]);
|
|
518
518
|
const clearOldResources = () => {
|
|
519
|
-
console.log("\u{1F9F9} [MMDPlayerEnhanced] \u5F00\u59CB\u6E05\u9664\u65E7\u8D44\u6E90");
|
|
519
|
+
console.log("\u{1F9F9} [MMDPlayerEnhanced] \u5F00\u59CB\u6E05\u9664\u65E7\u8D44\u6E90\uFF08\u589E\u5F3A\u6E05\u7406\uFF09");
|
|
520
520
|
if (!sceneRef.current) return;
|
|
521
521
|
if (isPlayingRef.current) {
|
|
522
522
|
isPlayingRef.current = false;
|
|
@@ -525,11 +525,31 @@ var MMDPlayerEnhanced = ({
|
|
|
525
525
|
if (audioRef.current) {
|
|
526
526
|
audioRef.current.pause();
|
|
527
527
|
audioRef.current.currentTime = 0;
|
|
528
|
+
audioRef.current.onended = null;
|
|
528
529
|
audioRef.current = null;
|
|
529
530
|
}
|
|
530
531
|
if (helperRef.current) {
|
|
532
|
+
try {
|
|
533
|
+
const helperObjects = helperRef.current.objects;
|
|
534
|
+
if (helperObjects && Array.isArray(helperObjects)) {
|
|
535
|
+
console.log(`\u{1F9F9} \u6E05\u9664 helper \u4E2D\u7684 ${helperObjects.length} \u4E2A\u5BF9\u8C61`);
|
|
536
|
+
helperObjects.length = 0;
|
|
537
|
+
}
|
|
538
|
+
} catch (error2) {
|
|
539
|
+
console.warn("\u26A0\uFE0F \u65E0\u6CD5\u8BBF\u95EE helper.objects\uFF0C\u521B\u5EFA\u65B0\u7684 helper:", error2);
|
|
540
|
+
}
|
|
531
541
|
helperRef.current = null;
|
|
532
542
|
}
|
|
543
|
+
if (sceneRef.current.background && sceneRef.current.background.isTexture) {
|
|
544
|
+
console.log("\u{1F9F9} \u6E05\u9664\u573A\u666F\u80CC\u666F\u8D34\u56FE");
|
|
545
|
+
sceneRef.current.background.dispose();
|
|
546
|
+
sceneRef.current.background = null;
|
|
547
|
+
}
|
|
548
|
+
if (sceneRef.current.environment && sceneRef.current.environment.isTexture) {
|
|
549
|
+
console.log("\u{1F9F9} \u6E05\u9664\u573A\u666F\u73AF\u5883\u8D34\u56FE");
|
|
550
|
+
sceneRef.current.environment.dispose();
|
|
551
|
+
sceneRef.current.environment = null;
|
|
552
|
+
}
|
|
533
553
|
const objectsToRemove = [];
|
|
534
554
|
sceneRef.current.traverse((child) => {
|
|
535
555
|
if (child.type === "SkinnedMesh" || child.isSkinnedMesh) {
|
|
@@ -547,16 +567,34 @@ var MMDPlayerEnhanced = ({
|
|
|
547
567
|
obj.geometry.dispose();
|
|
548
568
|
}
|
|
549
569
|
if (obj.material) {
|
|
550
|
-
|
|
551
|
-
|
|
570
|
+
const material = obj.material;
|
|
571
|
+
const disposeMaterial = (m) => {
|
|
572
|
+
if (m.map) m.map.dispose();
|
|
573
|
+
if (m.emissiveMap) m.emissiveMap.dispose();
|
|
574
|
+
if (m.normalMap) m.normalMap.dispose();
|
|
575
|
+
if (m.bumpMap) m.bumpMap.dispose();
|
|
576
|
+
if (m.specularMap) m.specularMap.dispose();
|
|
577
|
+
if (m.envMap) m.envMap.dispose();
|
|
578
|
+
if (m.lightMap) m.lightMap.dispose();
|
|
579
|
+
if (m.aoMap) m.aoMap.dispose();
|
|
580
|
+
if (m.alphaMap) m.alphaMap.dispose();
|
|
581
|
+
m.dispose();
|
|
582
|
+
};
|
|
583
|
+
if (Array.isArray(material)) {
|
|
584
|
+
material.forEach(disposeMaterial);
|
|
552
585
|
} else {
|
|
553
|
-
|
|
586
|
+
disposeMaterial(material);
|
|
554
587
|
}
|
|
555
588
|
}
|
|
589
|
+
if (obj.skeleton) {
|
|
590
|
+
console.log("\u{1F9F9} \u6E05\u7406\u9AA8\u9ABC\u6570\u636E");
|
|
591
|
+
obj.skeleton = null;
|
|
592
|
+
}
|
|
556
593
|
});
|
|
557
594
|
clockRef.current = new THREE2__namespace.Clock();
|
|
558
595
|
vmdDataRef.current = null;
|
|
559
|
-
|
|
596
|
+
setNeedReset(false);
|
|
597
|
+
console.log(`\u2705 [MMDPlayerEnhanced] \u5DF2\u6E05\u9664 ${objectsToRemove.length} \u4E2A\u5BF9\u8C61\uFF08\u589E\u5F3A\u6E05\u7406\u5B8C\u6210\uFF09`);
|
|
560
598
|
};
|
|
561
599
|
React2.useEffect(() => {
|
|
562
600
|
console.log("\u{1F4E6} [MMDPlayerEnhanced] \u8D44\u6E90\u52A0\u8F7D useEffect \u89E6\u53D1");
|
|
@@ -617,22 +655,30 @@ var MMDPlayerEnhanced = ({
|
|
|
617
655
|
const helper = new threeStdlib.MMDAnimationHelper();
|
|
618
656
|
helperRef.current = helper;
|
|
619
657
|
setLoadingProgress(20);
|
|
658
|
+
const modelStartTime = performance.now();
|
|
620
659
|
console.log("\u{1F3AD} \u5F00\u59CB\u52A0\u8F7D\u6A21\u578B:", currentResources.modelPath);
|
|
660
|
+
console.log("\u{1F4CA} [\u6027\u80FD] \u6A21\u578B\u52A0\u8F7D\u5F00\u59CB\u65F6\u95F4:", (/* @__PURE__ */ new Date()).toISOString());
|
|
621
661
|
const mesh = await new Promise((resolve, reject) => {
|
|
622
662
|
loader.load(
|
|
623
663
|
currentResources.modelPath,
|
|
624
664
|
(object) => {
|
|
625
|
-
|
|
665
|
+
const modelEndTime = performance.now();
|
|
666
|
+
const modelLoadTime = ((modelEndTime - modelStartTime) / 1e3).toFixed(2);
|
|
667
|
+
console.log(`\u2705 \u6A21\u578B\u52A0\u8F7D\u6210\u529F (\u8017\u65F6: ${modelLoadTime}\u79D2)`);
|
|
668
|
+
console.log(`\u{1F4CA} [\u6027\u80FD] \u6A21\u578B\u5927\u5C0F: ${object.geometry ? (object.geometry.attributes.position.count * 3 * 4 / 1024 / 1024).toFixed(2) : "N/A"} MB`);
|
|
626
669
|
resolve(object);
|
|
627
670
|
},
|
|
628
671
|
(progress) => {
|
|
629
672
|
if (progress.total > 0) {
|
|
630
673
|
const percent = progress.loaded / progress.total * 30 + 20;
|
|
631
674
|
setLoadingProgress(Math.min(percent, 50));
|
|
675
|
+
console.log(`\u{1F4E5} \u6A21\u578B\u52A0\u8F7D\u8FDB\u5EA6: ${(progress.loaded / progress.total * 100).toFixed(1)}% (${(progress.loaded / 1024 / 1024).toFixed(2)}MB / ${(progress.total / 1024 / 1024).toFixed(2)}MB)`);
|
|
632
676
|
}
|
|
633
677
|
},
|
|
634
678
|
(error2) => {
|
|
635
|
-
|
|
679
|
+
const modelEndTime = performance.now();
|
|
680
|
+
const modelLoadTime = ((modelEndTime - modelStartTime) / 1e3).toFixed(2);
|
|
681
|
+
console.error(`\u274C \u6A21\u578B\u52A0\u8F7D\u5931\u8D25 (\u8017\u65F6: ${modelLoadTime}\u79D2):`, error2);
|
|
636
682
|
reject(error2);
|
|
637
683
|
}
|
|
638
684
|
);
|
|
@@ -660,14 +706,25 @@ var MMDPlayerEnhanced = ({
|
|
|
660
706
|
sceneRef.current.add(stageMesh);
|
|
661
707
|
}
|
|
662
708
|
if (currentResources.backgroundPath && sceneRef.current) {
|
|
709
|
+
const bgStartTime = performance.now();
|
|
663
710
|
console.log("\u{1F5BC}\uFE0F \u5F00\u59CB\u52A0\u8F7D\u80CC\u666F\u56FE\u7247:", currentResources.backgroundPath);
|
|
664
711
|
const textureLoader = new THREE2__namespace.TextureLoader();
|
|
665
712
|
const backgroundTexture = await new Promise((resolve, reject) => {
|
|
666
713
|
textureLoader.load(
|
|
667
714
|
currentResources.backgroundPath,
|
|
668
|
-
(texture) =>
|
|
715
|
+
(texture) => {
|
|
716
|
+
const bgEndTime = performance.now();
|
|
717
|
+
const bgLoadTime = ((bgEndTime - bgStartTime) / 1e3).toFixed(2);
|
|
718
|
+
console.log(`\u2705 \u80CC\u666F\u56FE\u7247\u52A0\u8F7D\u6210\u529F (\u8017\u65F6: ${bgLoadTime}\u79D2, \u5C3A\u5BF8: ${texture.image.width}x${texture.image.height})`);
|
|
719
|
+
resolve(texture);
|
|
720
|
+
},
|
|
669
721
|
void 0,
|
|
670
|
-
(err) =>
|
|
722
|
+
(err) => {
|
|
723
|
+
const bgEndTime = performance.now();
|
|
724
|
+
const bgLoadTime = ((bgEndTime - bgStartTime) / 1e3).toFixed(2);
|
|
725
|
+
console.error(`\u274C \u80CC\u666F\u56FE\u7247\u52A0\u8F7D\u5931\u8D25 (\u8017\u65F6: ${bgLoadTime}\u79D2):`, err);
|
|
726
|
+
reject(err);
|
|
727
|
+
}
|
|
671
728
|
);
|
|
672
729
|
});
|
|
673
730
|
backgroundTexture.colorSpace = THREE2__namespace.SRGBColorSpace;
|
|
@@ -680,29 +737,34 @@ var MMDPlayerEnhanced = ({
|
|
|
680
737
|
} else {
|
|
681
738
|
sceneRef.current.background = backgroundTexture;
|
|
682
739
|
}
|
|
683
|
-
console.log("\u2705 \u80CC\u666F\u56FE\u7247\u52A0\u8F7D\u6210\u529F");
|
|
684
740
|
}
|
|
685
741
|
let vmd = null;
|
|
686
742
|
let cameraVmd = null;
|
|
687
743
|
if (currentResources.motionPath) {
|
|
688
744
|
setLoadingProgress(60);
|
|
745
|
+
const motionStartTime = performance.now();
|
|
689
746
|
console.log("\u{1F483} \u5F00\u59CB\u52A0\u8F7D\u52A8\u4F5C:", currentResources.motionPath);
|
|
690
747
|
vmd = await new Promise((resolve, reject) => {
|
|
691
748
|
loader.loadAnimation(
|
|
692
749
|
currentResources.motionPath,
|
|
693
750
|
mesh,
|
|
694
751
|
(vmdObject) => {
|
|
695
|
-
|
|
752
|
+
const motionEndTime = performance.now();
|
|
753
|
+
const motionLoadTime = ((motionEndTime - motionStartTime) / 1e3).toFixed(2);
|
|
754
|
+
console.log(`\u2705 \u52A8\u4F5C\u52A0\u8F7D\u6210\u529F (\u8017\u65F6: ${motionLoadTime}\u79D2)`);
|
|
696
755
|
resolve(vmdObject);
|
|
697
756
|
},
|
|
698
757
|
(progress) => {
|
|
699
758
|
if (progress.total > 0) {
|
|
700
759
|
const percent = progress.loaded / progress.total * 20 + 60;
|
|
701
760
|
setLoadingProgress(Math.min(percent, 80));
|
|
761
|
+
console.log(`\u{1F4E5} \u52A8\u4F5C\u52A0\u8F7D\u8FDB\u5EA6: ${(progress.loaded / progress.total * 100).toFixed(1)}%`);
|
|
702
762
|
}
|
|
703
763
|
},
|
|
704
764
|
(error2) => {
|
|
705
|
-
|
|
765
|
+
const motionEndTime = performance.now();
|
|
766
|
+
const motionLoadTime = ((motionEndTime - motionStartTime) / 1e3).toFixed(2);
|
|
767
|
+
console.error(`\u274C \u52A8\u4F5C\u52A0\u8F7D\u5931\u8D25 (\u8017\u65F6: ${motionLoadTime}\u79D2):`, error2);
|
|
706
768
|
reject(error2);
|
|
707
769
|
}
|
|
708
770
|
);
|
|
@@ -753,12 +815,18 @@ var MMDPlayerEnhanced = ({
|
|
|
753
815
|
}
|
|
754
816
|
if (currentResources.audioPath) {
|
|
755
817
|
setLoadingProgress(90);
|
|
818
|
+
const audioStartTime = performance.now();
|
|
756
819
|
console.log("\u{1F3B5} \u5F00\u59CB\u52A0\u8F7D\u97F3\u9891:", currentResources.audioPath);
|
|
757
820
|
const audio = new Audio(currentResources.audioPath);
|
|
758
821
|
audio.volume = 0.5;
|
|
759
822
|
audio.loop = loop;
|
|
760
823
|
audioRef.current = audio;
|
|
761
824
|
hasAudioRef.current = true;
|
|
825
|
+
audio.onloadedmetadata = () => {
|
|
826
|
+
const audioEndTime = performance.now();
|
|
827
|
+
const audioLoadTime = ((audioEndTime - audioStartTime) / 1e3).toFixed(2);
|
|
828
|
+
console.log(`\u2705 \u97F3\u9891\u52A0\u8F7D\u6210\u529F (\u8017\u65F6: ${audioLoadTime}\u79D2, \u65F6\u957F: ${audio.duration.toFixed(2)}\u79D2)`);
|
|
829
|
+
};
|
|
762
830
|
audio.onended = () => {
|
|
763
831
|
if (!loop) {
|
|
764
832
|
setIsPlaying(false);
|
|
@@ -773,7 +841,6 @@ var MMDPlayerEnhanced = ({
|
|
|
773
841
|
}
|
|
774
842
|
onAudioEnded?.();
|
|
775
843
|
};
|
|
776
|
-
console.log("\u2705 \u97F3\u9891\u52A0\u8F7D\u6210\u529F");
|
|
777
844
|
}
|
|
778
845
|
setLoadingProgress(100);
|
|
779
846
|
setLoading(false);
|
|
@@ -802,32 +869,54 @@ var MMDPlayerEnhanced = ({
|
|
|
802
869
|
}, [currentResources, stage?.enablePhysics, autoPlay, loop, onLoad, onError, reloadTrigger]);
|
|
803
870
|
const play = () => {
|
|
804
871
|
console.log("\u{1F3AC} [play] \u51FD\u6570\u88AB\u8C03\u7528\uFF0CneedReset =", needReset);
|
|
805
|
-
if (!helperRef.current) return;
|
|
872
|
+
if (!helperRef.current && !needReset) return;
|
|
806
873
|
if (needReset && vmdDataRef.current && sceneRef.current && cameraRef.current) {
|
|
807
874
|
console.log("\u{1F504} \u68C0\u6D4B\u5230\u9700\u8981\u91CD\u7F6E\uFF0C\u91CD\u65B0\u521D\u59CB\u5316 helper\uFF08\u4FDD\u7559\u6A21\u578B\uFF09");
|
|
808
875
|
const { mesh, vmd, cameraVmd } = vmdDataRef.current;
|
|
876
|
+
if (helperRef.current) {
|
|
877
|
+
try {
|
|
878
|
+
const helperObjects = helperRef.current.objects;
|
|
879
|
+
if (helperObjects && Array.isArray(helperObjects)) {
|
|
880
|
+
helperObjects.length = 0;
|
|
881
|
+
console.log("\u{1F9F9} \u6E05\u7A7A\u4E86\u65E7 helper \u7684 objects \u6570\u7EC4");
|
|
882
|
+
}
|
|
883
|
+
} catch (error2) {
|
|
884
|
+
console.warn("\u26A0\uFE0F \u65E0\u6CD5\u6E05\u7A7A\u65E7 helper.objects:", error2);
|
|
885
|
+
}
|
|
886
|
+
}
|
|
809
887
|
const newHelper = new threeStdlib.MMDAnimationHelper();
|
|
810
888
|
helperRef.current = newHelper;
|
|
811
889
|
clockRef.current = new THREE2__namespace.Clock();
|
|
812
890
|
if (vmd && typeof vmd === "object") {
|
|
813
|
-
console.log("\u{1F4E6} \u91CD\u65B0\u6DFB\u52A0\u6A21\u578B\u52A8\u753B
|
|
891
|
+
console.log("\u{1F4E6} \u91CD\u65B0\u6DFB\u52A0\u6A21\u578B\u52A8\u753B");
|
|
814
892
|
try {
|
|
815
893
|
newHelper.add(mesh, {
|
|
816
894
|
animation: vmd,
|
|
817
895
|
physics: stage?.enablePhysics !== false
|
|
818
896
|
});
|
|
897
|
+
console.log("\u2705 \u6A21\u578B\u52A8\u753B\u6DFB\u52A0\u6210\u529F");
|
|
819
898
|
} catch (error2) {
|
|
820
899
|
console.error("\u274C \u91CD\u65B0\u6DFB\u52A0\u6A21\u578B\u52A8\u753B\u5931\u8D25:", error2);
|
|
821
|
-
|
|
822
|
-
|
|
900
|
+
try {
|
|
901
|
+
newHelper.add(mesh, { physics: stage?.enablePhysics !== false });
|
|
902
|
+
console.log("\u2705 \u4EC5\u6DFB\u52A0\u6A21\u578B\u548C\u7269\u7406\uFF08\u65E0\u52A8\u753B\uFF09");
|
|
903
|
+
} catch (innerError) {
|
|
904
|
+
console.error("\u274C \u6DFB\u52A0\u6A21\u578B\u4E5F\u5931\u8D25\u4E86:", innerError);
|
|
905
|
+
}
|
|
823
906
|
}
|
|
824
907
|
} else {
|
|
825
|
-
|
|
908
|
+
try {
|
|
909
|
+
newHelper.add(mesh, { physics: stage?.enablePhysics !== false });
|
|
910
|
+
console.log("\u2705 \u4EC5\u6DFB\u52A0\u6A21\u578B\u548C\u7269\u7406\uFF08\u65E0\u52A8\u753B\u6570\u636E\uFF09");
|
|
911
|
+
} catch (error2) {
|
|
912
|
+
console.error("\u274C \u6DFB\u52A0\u6A21\u578B\u5931\u8D25:", error2);
|
|
913
|
+
}
|
|
826
914
|
}
|
|
827
915
|
if (cameraVmd && typeof cameraVmd === "object") {
|
|
828
916
|
console.log("\u{1F4F7} \u91CD\u65B0\u6DFB\u52A0\u76F8\u673A\u52A8\u753B");
|
|
829
917
|
try {
|
|
830
918
|
newHelper.add(cameraRef.current, { animation: cameraVmd });
|
|
919
|
+
console.log("\u2705 \u76F8\u673A\u52A8\u753B\u6DFB\u52A0\u6210\u529F");
|
|
831
920
|
} catch (error2) {
|
|
832
921
|
console.error("\u274C \u91CD\u65B0\u6DFB\u52A0\u76F8\u673A\u52A8\u753B\u5931\u8D25:", error2);
|
|
833
922
|
}
|
|
@@ -838,6 +927,10 @@ var MMDPlayerEnhanced = ({
|
|
|
838
927
|
setNeedReset(false);
|
|
839
928
|
console.log("\u2705 Helper \u91CD\u65B0\u521D\u59CB\u5316\u5B8C\u6210\uFF0C\u51C6\u5907\u4ECE\u7B2C\u4E00\u5E27\u64AD\u653E");
|
|
840
929
|
}
|
|
930
|
+
if (!helperRef.current) {
|
|
931
|
+
console.error("\u274C [play] helper \u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u64AD\u653E");
|
|
932
|
+
return;
|
|
933
|
+
}
|
|
841
934
|
if (audioRef.current) {
|
|
842
935
|
audioRef.current.play();
|
|
843
936
|
}
|
|
@@ -1206,8 +1299,35 @@ var MMDPlaylist = ({
|
|
|
1206
1299
|
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, /* @__PURE__ */ React2__default.default.createElement("p", null, "\u64AD\u653E\u5217\u8868\u8282\u70B9\u7D22\u5F15\u65E0\u6548"));
|
|
1207
1300
|
}
|
|
1208
1301
|
console.log("\u{1F3AF} [MMDPlaylist] \u5F53\u524D\u8282\u70B9:", currentNode.name, "\u7D22\u5F15:", currentNodeIndex);
|
|
1302
|
+
const stopNode = (nodeIndex) => {
|
|
1303
|
+
const playerElement = playerRefsMap.current.get(nodeIndex);
|
|
1304
|
+
if (!playerElement) return;
|
|
1305
|
+
console.log(`\u23F9\uFE0F [MMDPlaylist] \u505C\u6B62\u8282\u70B9 ${nodeIndex}`);
|
|
1306
|
+
const audioElement = playerElement.querySelector("audio");
|
|
1307
|
+
if (audioElement) {
|
|
1308
|
+
audioElement.pause();
|
|
1309
|
+
audioElement.currentTime = 0;
|
|
1310
|
+
console.log(` \u{1F507} \u505C\u6B62\u97F3\u9891`);
|
|
1311
|
+
}
|
|
1312
|
+
const stopButton = playerElement.querySelector('button[title="\u505C\u6B62"]');
|
|
1313
|
+
if (stopButton) {
|
|
1314
|
+
stopButton.click();
|
|
1315
|
+
console.log(` \u23F9\uFE0F \u70B9\u51FB\u505C\u6B62\u6309\u94AE`);
|
|
1316
|
+
} else {
|
|
1317
|
+
const pauseButton = playerElement.querySelector('button[title="\u6682\u505C"]');
|
|
1318
|
+
if (pauseButton) {
|
|
1319
|
+
pauseButton.click();
|
|
1320
|
+
console.log(` \u23F8\uFE0F \u70B9\u51FB\u6682\u505C\u6309\u94AE`);
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
};
|
|
1209
1324
|
React2.useEffect(() => {
|
|
1210
1325
|
console.log(`\u{1F504} [MMDPlaylist] \u8282\u70B9\u5207\u6362: ${currentNodeIndex} - ${currentNode.name}`);
|
|
1326
|
+
editableNodes.forEach((_, index) => {
|
|
1327
|
+
if (index !== currentNodeIndex) {
|
|
1328
|
+
stopNode(index);
|
|
1329
|
+
}
|
|
1330
|
+
});
|
|
1211
1331
|
onNodeChange?.(currentNodeIndex, currentNode);
|
|
1212
1332
|
if (!isPreloading && (isAutoSwitchRef.current || playlist.autoPlay)) {
|
|
1213
1333
|
console.log(`\u25B6\uFE0F [MMDPlaylist] \u51C6\u5907\u64AD\u653E\u8282\u70B9 ${currentNodeIndex}`);
|
|
@@ -1230,7 +1350,7 @@ var MMDPlaylist = ({
|
|
|
1230
1350
|
}
|
|
1231
1351
|
});
|
|
1232
1352
|
}
|
|
1233
|
-
}, [currentNodeIndex, currentNode, onNodeChange, isPreloading, playlist.autoPlay, preloadedNodes]);
|
|
1353
|
+
}, [currentNodeIndex, currentNode, onNodeChange, isPreloading, playlist.autoPlay, preloadedNodes, editableNodes]);
|
|
1234
1354
|
const handleNodePreloaded = (nodeIndex) => {
|
|
1235
1355
|
console.log(`\u2705 [MMDPlaylist] \u8282\u70B9 ${nodeIndex} \u9884\u52A0\u8F7D\u5B8C\u6210`);
|
|
1236
1356
|
setPreloadedNodes((prev) => {
|