cat 2025-12-07-MFD-interface.md

MFD Interface - Canvas-based Multi-Function Display


2025-12-07

Problem do rozwiązania

MFD musiał działać jak prawdziwy multi-function display w kabinie samolotu - wyświetlać rzeczywiste dane lotu w czasie rzeczywistym, reagować na kliknięcia przycisków OSB (Option Select Buttons) i obsługiwać wprowadzanie danych poprzez keypad. Wszystko musiało działać sprawnie z 60 FPS.

Architektura MFD

Stworzyłem system wieloekranowy, gdzie każdy ekran odpowiada za inną funkcjonalność: autopilot, radio, PFD, radar, plan lotu i systemy. Użytkownik może przełączać się między ekranami za pomocą menu.

Obsługiwane ekrany

  • AUTOPILOT - wyświetla i pozwala kontrolować heading, altitude i speed bugi
  • RADIO - pełna kontrola COM1/COM2/NAV1/NAV2/XPDR z możliwością wpisywania częstotliwości
  • PFD - tradycyjny primary flight display ze wskaźnikami pitch, bank, altitude, vertical speed
  • RADAR - wyświetla pobliski ruch w zadanym zakresie
  • FPL - planowanie lotów z wyświetlaniem waypoints
  • SYSTEMS - parametry systemu: RPM, zużycie paliwa, temperatura

Wyzwania

1. Wydajność - 60 FPS

Canvas miał służyć do efektywnego renderowania. Zwyczajne przerysowywanie całego ekranu co klatkę szybko prowadzi do spadku FPS. Musiałem zaimplementować caching wyrenderowanych elementów, batch rendering updateów i używać RequestAnimationFrame zamiast setInterval.

2. Interaktywność z Canvas

Canvas to bitmap, nie ma wbudowanej obsługi interaktywnych elementów. Musiałem ręcznie mapować kliknięcia myszy na pozycje przycisków OSB. Kliknięcia na lewej krawędzi ekranu to przyciski 1-5, na prawej to 6-10.

3. Real-time data updates

MFD musiał być zawsze zsynchronizowany z rzeczywistymi danymi z symulatora. Zaimplementowałem polling co sekundę, co jest optymalnym balansem między świeżością danych a obciążeniem sieci.

Wynik

Uzyskałem płynny, responsywny interfejs MFD, który odwzorowuje rzeczywiste multi-function displayy. System jest modularny - każdy ekran jest niezależnym komponentem, co ułatwia dodawanie nowych funkcji.

🖥️