added DME, fixed sync and bugs. Rewrote setDisplay logic

This commit is contained in:
PxlLoewe
2025-05-19 22:23:15 -07:00
parent 46c58ae127
commit 61e7caf6c8
23 changed files with 776 additions and 242 deletions

View File

@@ -1,66 +1,53 @@
"use client";
import { usePilotConnectionStore } from "_store/pilot/connectionStore";
import { useMrtStore } from "_store/pilot/MrtStore";
import { editConnectedAircraftAPI } from "querys/aircrafts";
import { useEffect, useRef } from "react";
const MRTstatusSound = new Audio("/sounds/MRT-status.mp3");
const MrtMessageReceivedSound = new Audio("/sounds/MRT-message-received.mp3");
export const useSounds = () => {
const mrtState = useMrtStore((state) => state);
const { connectedAircraft, selectedStation } = usePilotConnectionStore(
(state) => state,
);
const fmsStatus = connectedAircraft?.fmsStatus || "NaN";
const previousFmsStatus = useRef(fmsStatus || "6");
const timeout = useRef<NodeJS.Timeout>(null);
const setPage = useMrtStore((state) => state.setPage);
const MRTstatusSoundRef = useRef<HTMLAudioElement>(null);
const MrtMessageReceivedSoundRef = useRef<HTMLAudioElement>(null);
useEffect(() => {
const handleSoundEnd = () => {
mrtState.setPage("home");
};
if (typeof window !== "undefined") {
MRTstatusSoundRef.current = new Audio("/sounds/MRT-status.mp3");
MrtMessageReceivedSoundRef.current = new Audio(
"/sounds/MRT-message-received.mp3",
);
MRTstatusSoundRef.current.onended = () => {
if (!selectedStation || !connectedAircraft?.fmsStatus) return;
setPage({
page: "home",
station: selectedStation,
fmsStatus: connectedAircraft?.fmsStatus,
});
};
MrtMessageReceivedSoundRef.current.onended = () => {
if (!selectedStation || !connectedAircraft?.fmsStatus) return;
setPage({
page: "home",
station: selectedStation,
fmsStatus: connectedAircraft?.fmsStatus,
});
};
}
}, [connectedAircraft?.fmsStatus, selectedStation, setPage]);
const playSound = (sound: HTMLAudioElement) => {
sound.play();
sound.addEventListener("ended", handleSoundEnd);
};
const fmsStatus = connectedAircraft?.fmsStatus || "NaN";
useEffect(() => {
if (!connectedAircraft) return;
if (mrtState.page === "new-status") {
if (fmsStatus === "J") {
playSound(MrtMessageReceivedSound);
timeout.current = setTimeout(() => {
editConnectedAircraftAPI(connectedAircraft.id, {
fmsStatus: previousFmsStatus.current,
});
}, 5000);
} else if (previousFmsStatus.current !== fmsStatus) {
playSound(MRTstatusSound);
if (fmsStatus === "J" || fmsStatus === "c") {
MrtMessageReceivedSoundRef.current?.play();
} else {
handleSoundEnd();
}
if (!timeout.current) {
previousFmsStatus.current = fmsStatus || "6";
MRTstatusSoundRef.current?.play();
}
}
return () => {
if (timeout.current) clearTimeout(timeout.current);
[MRTstatusSound, MrtMessageReceivedSound].forEach((sound) => {
sound.removeEventListener("ended", handleSoundEnd);
sound.pause();
sound.currentTime = 0;
});
};
}, [
mrtState,
fmsStatus,
connectedAircraft,
selectedStation,
previousFmsStatus,
timeout,
]);
}, [mrtState, fmsStatus, connectedAircraft, selectedStation]);
};