Aircraft Detection - automatyczna detekcja typów samolotów
2025-12-06
​
Problem do rozwiązania
Każdy typ samolotu w MSFS potrzebuje innego zestawu poleceń do kontroli radia i autopilota. Stock aircraft (Cessna, Boeing) używają standardowych SimEvents, ale addon aircraft takie jak PMDG lub Fenix używają lokalnych zmiennych (L-Vars). Potrzebowałem elastycznego systemu, który automatycznie rozpozna typ samolotu i wyśle odpowiednie komendy.
Architektura rozwiązania
System oparty jest na fabryce mapperów (Factory Pattern). Najpierw detektor analizuje dane z symulatora, aby określić typ samolotu, a następnie fabryka tworzy odpowiedni mapper, który wie jak komunikować się z tym konkretnym typem.
Obsługiwane typy
- Stock MSFS - Cessna, Boeing, Airbus - w pełni wspierane poprzez SimEvents
- PMDG 737/777/747 - aktualnie fallback do stock, czeka na implementację L-Vars
- Fenix A320 - aktualnie fallback do stock, czeka na implementację L-Vars
- TBM 930 - w pełni wspierane
- QualityWings 787, Aerosoft CRJ - zaplanowane
Wyzwania
1. Detekcja typu samolotu
Istnieje wiele parametrów, które mogą wskazywać na typ samolotu - numer boczny, typ silnika, typ avioniki (G1000 vs modern glass cockpit), czy konfiguracja z pliku panel.cfg. Musiałem stworzyć heurystykę, która z rozsądnym stopniem pewności określi typ samolotu.
2. L-Vars - Problem bez rozwiązania
Addon aircraft takie jak PMDG czy Fenix przechowują swój stan w lokalnych zmiennych (L-Vars), do których SimConnect nie ma dostępu. Aby w pełni wspierać te samoloty, potrzebowałbym albo:
- Modułu WASM napisanego w C++
- Integracji z FSUIPC
- Dostępu do dokumentacji od producenta
Aktualnie jest to największe ograniczenie projektu.
3. Elastyczność systemu
Każdy nowy samolot wymaga nowego mappera. System musiał być zaprojektowany w taki sposób, aby dodawanie nowych typów było proste i nie wymagało zmiany istniejącego kodu.
Wynik
Wdrożyłem system oparty na interfejsach i polimorfizmie, który pozwala na łatwoe dodawanie nowych typów samolotów. Stock aircraft są w pełni wspierane, a addon aircraft działają w ograniczonym trybie do czasu, aż rozwiążę problem L-Vars.
✈️