animate and fix electricienne
🔍 Lint / 🪄 Check lint (push) Has been cancelled
🔍 Lint / 🎨 Check format (push) Has been cancelled
🔍 Lint / 🔎 Typecheck (push) Has been cancelled
📊 Quality / 🔒 Security Audit (push) Has been cancelled
📊 Quality / 📋 Dependency Freshness (push) Has been cancelled
📊 Quality / 📦 Bundle Size (push) Has been cancelled
🔍 Lint / 🏗 Build (push) Has been cancelled

This commit is contained in:
math-pixel
2026-06-02 22:53:34 +02:00
parent eb5d4076d1
commit 0a3966a339
10 changed files with 339 additions and 55 deletions
@@ -21,15 +21,20 @@ const PYLON_MODEL_PATH = "/models/pylone/model.glb";
export function PylonDownedPylon(): React.JSX.Element | null {
const mainState = useGameStore((state) => state.mainState);
const step = useGameStore((state) => state.pylon.currentStep);
const setMissionStep = useGameStore((state) => state.setMissionStep);
const setCanMove = useGameStore((state) => state.setCanMove);
const [isStraightening, setIsStraightening] = useState(false);
// Keeps the pylon upright after the animation completes while
// PylonFarmerNPC plays the post-raise audio sequence.
const [isRaised, setIsRaised] = useState(false);
const groupRef = useRef<THREE.Group>(null);
const straightenStartRef = useRef<number | null>(null);
const hasPlayedFirstAudioRef = useRef(false);
useEffect(() => {
if (step === "arrived") hasPlayedFirstAudioRef.current = false;
if (step === "arrived") {
hasPlayedFirstAudioRef.current = false;
setIsRaised(false);
}
}, [step]);
const { scene } = useGLTF(PYLON_MODEL_PATH);
@@ -56,6 +61,7 @@ export function PylonDownedPylon(): React.JSX.Element | null {
});
const showUpright =
isRaised ||
mainState !== "pylon" ||
step === "waiting" ||
step === "inspected" ||
@@ -71,6 +77,7 @@ export function PylonDownedPylon(): React.JSX.Element | null {
const beginStraighten = (): void => {
setIsStraightening(true);
pylonStraighteningSignal.started = true;
pylonStraighteningSignal.completed = false;
straightenStartRef.current = performance.now();
setCanMove(false);
if (groupRef.current) {
@@ -79,8 +86,11 @@ export function PylonDownedPylon(): React.JSX.Element | null {
window.setTimeout(() => {
setIsStraightening(false);
pylonStraighteningSignal.started = false;
// Keep pylon upright while PylonFarmerNPC plays the audio sequence.
// PylonFarmerNPC will call setMissionStep("pylon", "inspected") once done.
setIsRaised(true);
setCanMove(true);
setMissionStep("pylon", "inspected");
pylonStraighteningSignal.completed = true;
}, PYLON_STRAIGHTEN_ANIMATION_DURATION_MS);
};