This library provides a customizable Primary Flight Display (PFD) built using Compose for Desktop. It features the following instruments:
- Altitude Indicator
- Bank Indicator
- Compass
- Artificial Horizon
- Speed Indicator
- Vertical Speed Indicator
@Composable
fun YourFlightScreen() {
PrimaryFlightDisplay(
roll = // roll angle in degrees,
pitch = // roll angle in degrees
heading = // heading in degrees
track = // track in degrees
course = // course over ground in degree
altitude = // altitude (unitless)
targetAltitude = // autopilot target altitude (unitless)
speed = // speed (unitless)
targetSpeed = // autopilot target speed (unitless)
verticalSpeed = // vertical speed (unitless)
)
}
You can customize the appearance and behavior of the PFD by passing in custom composables for each indicator:
PrimaryFlightDisplay(
// ...other parameters,
attitudeIndicator = { roll, pitch -> /* your custom composable */ },
compass = { heading, track, course -> /* your custom composable */ },
altitudeIndicator = { altitude, targetAltitude -> /* your custom composable */ },
speedIndicator = { speed, targetSpeed -> /* your custom composable */ },
verticalSpeedIndicator = { verticalSpeed -> /* your custom composable */ }
)
The PFD uses a custom theme that can be adjusted to fit your needs. The theme is divided into three main parts:
You can define a custom color scheme using the PfdColors
data class:
data class PfdColors(
val groundColor: Color,
val skyColor: Color,
val indicatorColor: Color,
val bgColor: Color,
val courseColor: Color,
val trackColor: Color
)
PrimaryFlightDisplay(
// ...other parameters,
colors = defaultPfdColorScheme(groundColor = Color(0xA52A2A))
)
Customize the dimensions of various elements using the PfdDimensions
data class:
data class PfdDimensions(
val indicatorStrokeWidth: Dp,
val indicatorSizeLong: Dp,
val indicatorSizeShort: Dp,
val spacingRegular: Dp,
val spacingLarge: Dp
)
PrimaryFlightDisplay(
// ...other parameters,
dimensions = defaultPfdDimensions(indicatorStrokeWidth = 1.dp)
)
Text styles can be customized using the PfdTypography
data class:
data class PfdTypography(
val small: TextStyle,
val regular: TextStyle,
val large: TextStyle
)
PrimaryFlightDisplay(
// ...other parameters,
typography = defaultPfdTypography(
regular = TextStyle(
color = Color.White,
fontFamily = FontFamily(Font(resource = "fonts/b612_mono_regular.ttf")),
fontSize = TextUnit(12f, TextUnitType.Sp)
)
)
)