@principal-ai/file-city-react 0.5.11 → 0.5.13
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileCity3D.d.ts","sourceRoot":"","sources":["../../../src/components/FileCity3D/FileCity3D.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAMjF,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EAEb,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,QAAQ,OAAO,CAAC;IAErB,UAAU,GAAG,CAAC;QAEZ,UAAU,iBAAkB,SAAQ,aAAa;SAAG;KACrD;CACF;AAGD,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,gDAAgD;AAChD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,aAAa,GACb,UAAU,GACV,MAAM,CAAC;AAGX,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;AA24BrD,wBAAgB,WAAW,SAE1B;
|
|
1
|
+
{"version":3,"file":"FileCity3D.d.ts","sourceRoot":"","sources":["../../../src/components/FileCity3D/FileCity3D.tsx"],"names":[],"mappings":"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"}
|
|
@@ -569,7 +569,8 @@ function AnimatedCamera({ citySize, isFlat, focusTarget }) {
|
|
|
569
569
|
const { camera } = useThree();
|
|
570
570
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
571
571
|
const controlsRef = useRef(null);
|
|
572
|
-
const
|
|
572
|
+
const prevTargetRef = useRef(null);
|
|
573
|
+
const isAnimatingRef = useRef(false);
|
|
573
574
|
// Animated camera position and target
|
|
574
575
|
const targetPos = useMemo(() => {
|
|
575
576
|
if (focusTarget) {
|
|
@@ -597,6 +598,8 @@ function AnimatedCamera({ citySize, isFlat, focusTarget }) {
|
|
|
597
598
|
targetZ: 0,
|
|
598
599
|
};
|
|
599
600
|
}, [focusTarget, isFlat, citySize]);
|
|
601
|
+
// Create a stable key to detect when target actually changes
|
|
602
|
+
const targetKey = `${targetPos.x},${targetPos.y},${targetPos.z},${targetPos.targetX},${targetPos.targetZ}`;
|
|
600
603
|
// Spring animation for camera movement
|
|
601
604
|
const { camX, camY, camZ, lookX, lookY, lookZ } = useSpring({
|
|
602
605
|
camX: targetPos.x,
|
|
@@ -606,6 +609,7 @@ function AnimatedCamera({ citySize, isFlat, focusTarget }) {
|
|
|
606
609
|
lookY: targetPos.targetY,
|
|
607
610
|
lookZ: targetPos.targetZ,
|
|
608
611
|
config: { tension: 60, friction: 20 },
|
|
612
|
+
immediate: prevTargetRef.current === null, // Skip animation on first render
|
|
609
613
|
onStart: () => {
|
|
610
614
|
isAnimatingRef.current = true;
|
|
611
615
|
},
|
|
@@ -613,14 +617,20 @@ function AnimatedCamera({ citySize, isFlat, focusTarget }) {
|
|
|
613
617
|
isAnimatingRef.current = false;
|
|
614
618
|
},
|
|
615
619
|
});
|
|
616
|
-
//
|
|
617
|
-
|
|
620
|
+
// Track target changes
|
|
621
|
+
useEffect(() => {
|
|
622
|
+
prevTargetRef.current = targetKey;
|
|
623
|
+
}, [targetKey]);
|
|
624
|
+
// Update camera each frame while animating or on first frame
|
|
618
625
|
useFrame(() => {
|
|
619
|
-
if (!controlsRef.current
|
|
626
|
+
if (!controlsRef.current)
|
|
620
627
|
return;
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
628
|
+
// On first frame or while animating, update camera from spring values
|
|
629
|
+
if (prevTargetRef.current === null || isAnimatingRef.current) {
|
|
630
|
+
camera.position.set(camX.get(), camY.get(), camZ.get());
|
|
631
|
+
controlsRef.current.target.set(lookX.get(), lookY.get(), lookZ.get());
|
|
632
|
+
controlsRef.current.update();
|
|
633
|
+
}
|
|
624
634
|
});
|
|
625
635
|
const resetToInitial = useCallback(() => {
|
|
626
636
|
const targetHeight = isFlat ? citySize * 1.5 : citySize * 1.1;
|
package/package.json
CHANGED
|
@@ -996,7 +996,8 @@ function AnimatedCamera({ citySize, isFlat, focusTarget }: AnimatedCameraProps)
|
|
|
996
996
|
const { camera } = useThree();
|
|
997
997
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
998
998
|
const controlsRef = useRef<any>(null);
|
|
999
|
-
const
|
|
999
|
+
const prevTargetRef = useRef<string | null>(null);
|
|
1000
|
+
const isAnimatingRef = useRef(false);
|
|
1000
1001
|
|
|
1001
1002
|
// Animated camera position and target
|
|
1002
1003
|
const targetPos = useMemo(() => {
|
|
@@ -1026,6 +1027,9 @@ function AnimatedCamera({ citySize, isFlat, focusTarget }: AnimatedCameraProps)
|
|
|
1026
1027
|
};
|
|
1027
1028
|
}, [focusTarget, isFlat, citySize]);
|
|
1028
1029
|
|
|
1030
|
+
// Create a stable key to detect when target actually changes
|
|
1031
|
+
const targetKey = `${targetPos.x},${targetPos.y},${targetPos.z},${targetPos.targetX},${targetPos.targetZ}`;
|
|
1032
|
+
|
|
1029
1033
|
// Spring animation for camera movement
|
|
1030
1034
|
const { camX, camY, camZ, lookX, lookY, lookZ } = useSpring({
|
|
1031
1035
|
camX: targetPos.x,
|
|
@@ -1035,6 +1039,7 @@ function AnimatedCamera({ citySize, isFlat, focusTarget }: AnimatedCameraProps)
|
|
|
1035
1039
|
lookY: targetPos.targetY,
|
|
1036
1040
|
lookZ: targetPos.targetZ,
|
|
1037
1041
|
config: { tension: 60, friction: 20 },
|
|
1042
|
+
immediate: prevTargetRef.current === null, // Skip animation on first render
|
|
1038
1043
|
onStart: () => {
|
|
1039
1044
|
isAnimatingRef.current = true;
|
|
1040
1045
|
},
|
|
@@ -1043,14 +1048,21 @@ function AnimatedCamera({ citySize, isFlat, focusTarget }: AnimatedCameraProps)
|
|
|
1043
1048
|
},
|
|
1044
1049
|
});
|
|
1045
1050
|
|
|
1046
|
-
//
|
|
1047
|
-
|
|
1051
|
+
// Track target changes
|
|
1052
|
+
useEffect(() => {
|
|
1053
|
+
prevTargetRef.current = targetKey;
|
|
1054
|
+
}, [targetKey]);
|
|
1055
|
+
|
|
1056
|
+
// Update camera each frame while animating or on first frame
|
|
1048
1057
|
useFrame(() => {
|
|
1049
|
-
if (!controlsRef.current
|
|
1058
|
+
if (!controlsRef.current) return;
|
|
1050
1059
|
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1060
|
+
// On first frame or while animating, update camera from spring values
|
|
1061
|
+
if (prevTargetRef.current === null || isAnimatingRef.current) {
|
|
1062
|
+
camera.position.set(camX.get(), camY.get(), camZ.get());
|
|
1063
|
+
controlsRef.current.target.set(lookX.get(), lookY.get(), lookZ.get());
|
|
1064
|
+
controlsRef.current.update();
|
|
1065
|
+
}
|
|
1054
1066
|
});
|
|
1055
1067
|
|
|
1056
1068
|
const resetToInitial = useCallback(() => {
|