feat: add first person view (FPV) functionality and HUD (#9)

* feat: add first person view (FPV) functionality and HUD

- Updated FlightCard component to include FPV toggle button and state management.
- Introduced FpvHud component for displaying flight data in FPV mode.
- Enhanced useFlights hook to support FPV bounding box logic for fetching flights.
- Added keyboard shortcuts for toggling FPV mode.
- Updated settings to include FPV-related configurations (pitch, chase distance).
- Implemented major airports caching for improved performance.
- Added fetchFlightByIcao24 function for single aircraft state retrieval.

* Refactor CameraController and ControlPanel components; enhance flight search functionality

- Simplified CameraController by removing unused refs and effects, and centralized map interaction management.
- Updated ControlPanel to support flight lookup with new props and integrated flight search results.
- Enhanced SearchContent to include flight matching logic and improved user feedback for flight searches.
- Introduced caching for flight callsign lookups in OpenSky API integration to optimize performance.
- Removed unnecessary settings related to FPV pitch and free camera mode from use-settings hook.

* feat: enhance FPV functionality and improve flight data handling

- Added `projectLngLatElevationPixelDelta` function to calculate pixel deltas based on longitude, latitude, and elevation.
- Updated `CameraController` to utilize new FPV parameters and improve camera behavior during flight.
- Enhanced flight data handling in `FlightLayers` to ensure proper tracking and display of flight information.
- Improved UI components for better user experience, including adjustments to the FPV HUD and flight card.
- Added error handling for image loading in the control panel.
- Refactored altitude and speed calculations to ensure they handle non-finite values gracefully.
- Adjusted map attribution behavior for better responsiveness on different screen sizes.
This commit is contained in:
kew
2026-02-21 12:31:17 +05:30
committed by GitHub
parent e262bd730d
commit a08f1c7250
17 changed files with 2358 additions and 247 deletions

View File

@ -11,18 +11,17 @@ type MapAttributionProps = {
const SM_BREAKPOINT = 640;
function getInitialExpanded(): boolean {
if (typeof window === "undefined") return true;
return window.innerWidth >= SM_BREAKPOINT;
}
export function MapAttribution({ styleId }: MapAttributionProps) {
const [expanded, setExpanded] = useState(getInitialExpanded);
const [expanded, setExpanded] = useState(false);
const attributions = getAttributions(styleId);
const containerRef = useRef<HTMLDivElement>(null);
const toggle = useCallback(() => setExpanded((prev) => !prev), []);
useEffect(() => {
setExpanded(window.innerWidth >= SM_BREAKPOINT);
}, []);
// Close on outside click for small screens
useEffect(() => {
if (!expanded) return;