sim

package
v0.12.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 10, 2025 License: GPL-3.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PTStateApproaching = iota
	PTStateTurningOutbound
	PTStateFlyingOutbound
	PTStateTurningInbound
	PTStateFlyingInbound // parallel entry only
)
View Source
const (
	PT45StateApproaching = iota
	PT45StateTurningOutbound
	PT45StateFlyingOutbound
	PT45StateTurningAway
	PT45StateFlyingAway
	PT45StateTurningIn
	PT45StateFlyingIn
	PT45StateTurningToIntercept
)
View Source
const (
	LaunchAutomatic int32 = iota
	LaunchManual
)
View Source
const MaxIAS = 290
View Source
const MaximumRate = 100000
View Source
const StandardTurnRate = 3
View Source
const UnsetSTARSListIndex = 0

Variables

View Source
var (
	ErrAircraftAlreadyReleased         = errors.New("Aircraft already released")
	ErrBeaconMismatch                  = errors.New("Beacon code mismatch")
	ErrControllerAlreadySignedIn       = errors.New("Controller with that callsign already signed in")
	ErrClearedForUnexpectedApproach    = errors.New("Cleared for unexpected approach")
	ErrDuplicateACID                   = errors.New("Duplicate ACID")
	ErrDuplicateBeacon                 = errors.New("Duplicate beacon code")
	ErrFixIsTooFarAway                 = errors.New("Fix is too far away")
	ErrFixNotInRoute                   = errors.New("Fix not in aircraft's route")
	ErrIllegalACID                     = errors.New("Illegal ACID")
	ErrIllegalACType                   = errors.New("Illegal aircraft type")
	ErrIllegalBeaconCode               = errors.New("Illegal beacon code")
	ErrIllegalFunction                 = errors.New("Illegal function")
	ErrIllegalScratchpad               = errors.New("Illegal scratchpad")
	ErrInvalidAbbreviatedFP            = errors.New("Invalid abbreviated flight plan")
	ErrInvalidApproach                 = errors.New("Invalid approach")
	ErrInvalidDepartureController      = errors.New("Invalid departure controller")
	ErrInvalidFix                      = errors.New("Invalid fix")
	ErrInvalidRestrictionAreaIndex     = errors.New("Invalid restriction area index")
	ErrNoMatchingFlight                = errors.New("No matching flight")
	ErrNoMatchingFlightPlan            = errors.New("No matching flight plan")
	ErrNoVFRAircraftForFlightFollowing = errors.New("No VFR aircraft available for flight following")
	ErrNotClearedForApproach           = errors.New("Aircraft has not been cleared for an approach")
	ErrNotFlyingRoute                  = errors.New("Aircraft is not currently flying its assigned route")
	ErrNotLaunchController             = errors.New("Not signed in as the launch controller")
	ErrTooManyRestrictionAreas         = errors.New("Too many restriction areas specified")
	ErrTrackIsActive                   = errors.New("Track is already active")
	ErrTrackIsBeingHandedOff           = errors.New("Track is currently being handed off")
	ErrTrackIsNotActive                = errors.New("Track is not active")
	ErrUnableCommand                   = errors.New("Unable")
	ErrUnknownAircraftType             = errors.New("Unknown aircraft type")
	ErrUnknownApproach                 = errors.New("Unknown approach")
	ErrUnknownController               = errors.New("Unknown controller")
	ErrUnknownControllerFacility       = errors.New("Unknown controller facility")
	ErrVFRSimTookTooLong               = errors.New("VFR simulation took too long")
	ErrViolatedAirspace                = errors.New("Violated B/C airspace")
)

Functions

func CheckVideoMapManifest added in v0.12.0

func CheckVideoMapManifest(filename string, e *util.ErrorLogger)

func IsValidACID added in v0.12.0

func IsValidACID(acid string) bool

func PlausibleFinalAltitude added in v0.12.1

func PlausibleFinalAltitude(fp av.FlightPlan, perf av.AircraftPerformance, nmPerLongitude float32, magneticVariation float32,
	r *rand.Rand) int

func PrintVideoMaps added in v0.12.0

func PrintVideoMaps(path string, e *util.ErrorLogger)

func TurnAngle added in v0.12.1

func TurnAngle(from, to float32, turn TurnMethod) float32

Types

type ACID

type ACID string

type Aircraft added in v0.12.0

type Aircraft struct {
	// This is ADS-B callsign of the aircraft. Just because different the
	// callsign in the flight plan can be different across multiple STARS
	// facilities, so two different facilities can show different
	// callsigns; however, the ADS-B callsign is transmitted from the
	// aircraft and would be the same to all facilities.
	ADSBCallsign av.ADSBCallsign

	Squawk av.Squawk
	Mode   av.TransponderMode

	IdentStartTime, IdentEndTime time.Time

	FlightPlan   av.FlightPlan
	TypeOfFlight av.TypeOfFlight

	Strip av.FlightStrip

	// State related to navigation.
	Nav Nav

	// Arrival-related state
	STAR                string
	STARRunwayWaypoints map[string]av.WaypointArray
	GotContactTower     bool

	STARSFlightPlan *STARSFlightPlan

	HoldForRelease    bool
	Released          bool // only used for hold for release
	ReleaseTime       time.Time
	WaitingForLaunch  bool // for departures
	MissingFlightPlan bool

	GoAroundDistance *float32

	// Departure related state
	DepartureContactAltitude float32

	// The controller who gave approach clearance
	ApproachController string

	// Who had control when the fp disassociated due to an arrival filter.
	PreArrivalDropController string

	InDepartureFilter bool

	FirstSeen time.Time

	RequestedFlightFollowing bool

	Voice speech.Voice
}

func (*Aircraft) ATPAVolume added in v0.12.1

func (ac *Aircraft) ATPAVolume() *av.ATPAVolume

func (*Aircraft) AircraftPerformance added in v0.12.1

func (ac *Aircraft) AircraftPerformance() av.AircraftPerformance

func (*Aircraft) Altitude added in v0.12.1

func (ac *Aircraft) Altitude() float32

func (*Aircraft) AltitudeOurDiscretion added in v0.12.1

func (ac *Aircraft) AltitudeOurDiscretion() *speech.RadioTransmission

func (*Aircraft) ArrivalAirportElevation added in v0.12.1

func (ac *Aircraft) ArrivalAirportElevation() float32

func (*Aircraft) ArrivalAirportLocation added in v0.12.1

func (ac *Aircraft) ArrivalAirportLocation() math.Point2LL

func (*Aircraft) AssignAltitude added in v0.12.1

func (ac *Aircraft) AssignAltitude(altitude int, afterSpeed bool) *speech.RadioTransmission

func (*Aircraft) AssignHeading added in v0.12.1

func (ac *Aircraft) AssignHeading(heading int, turn TurnMethod) *speech.RadioTransmission

func (*Aircraft) AssignSpeed added in v0.12.1

func (ac *Aircraft) AssignSpeed(speed int, afterAltitude bool) *speech.RadioTransmission

func (*Aircraft) AssignedApproach added in v0.12.1

func (ac *Aircraft) AssignedApproach() string

func (*Aircraft) AssociateFlightPlan added in v0.12.0

func (ac *Aircraft) AssociateFlightPlan(fp *STARSFlightPlan)

func (*Aircraft) AtFixCleared added in v0.12.1

func (ac *Aircraft) AtFixCleared(fix, approach string) *speech.RadioTransmission

func (*Aircraft) CWT added in v0.12.1

func (ac *Aircraft) CWT() string

func (*Aircraft) CancelApproachClearance added in v0.12.1

func (ac *Aircraft) CancelApproachClearance() *speech.RadioTransmission

func (*Aircraft) Check added in v0.12.1

func (ac *Aircraft) Check(lg *log.Logger)

func (*Aircraft) ClearedApproach added in v0.12.1

func (ac *Aircraft) ClearedApproach(id string, lg *log.Logger) (*speech.RadioTransmission, error)

func (*Aircraft) ClearedStraightInApproach added in v0.12.1

func (ac *Aircraft) ClearedStraightInApproach(id string, lg *log.Logger) (*speech.RadioTransmission, error)

func (*Aircraft) ClimbViaSID added in v0.12.1

func (ac *Aircraft) ClimbViaSID() *speech.RadioTransmission

func (*Aircraft) ContactMessage added in v0.12.1

func (ac *Aircraft) ContactMessage(reportingPoints []av.ReportingPoint) *speech.RadioTransmission

func (*Aircraft) ContactTower added in v0.12.1

func (ac *Aircraft) ContactTower(lg *log.Logger) *speech.RadioTransmission

func (*Aircraft) CrossFixAt added in v0.12.1

func (ac *Aircraft) CrossFixAt(fix string, ar *av.AltitudeRestriction, speed int) *speech.RadioTransmission

func (*Aircraft) DepartFixDirect added in v0.12.1

func (ac *Aircraft) DepartFixDirect(fixa, fixb string) *speech.RadioTransmission

func (*Aircraft) DepartFixHeading added in v0.12.1

func (ac *Aircraft) DepartFixHeading(fix string, hdg int) *speech.RadioTransmission

func (*Aircraft) DepartOnCourse added in v0.12.1

func (ac *Aircraft) DepartOnCourse(lg *log.Logger)

func (*Aircraft) DepartureAirportElevation added in v0.12.1

func (ac *Aircraft) DepartureAirportElevation() float32

func (*Aircraft) DepartureAirportLocation added in v0.12.1

func (ac *Aircraft) DepartureAirportLocation() math.Point2LL

func (*Aircraft) DescendViaSTAR added in v0.12.1

func (ac *Aircraft) DescendViaSTAR() *speech.RadioTransmission

func (*Aircraft) DirectFix added in v0.12.1

func (ac *Aircraft) DirectFix(fix string) *speech.RadioTransmission

func (*Aircraft) DisassociateFlightPlan added in v0.12.0

func (ac *Aircraft) DisassociateFlightPlan() *STARSFlightPlan

func (*Aircraft) DistanceAlongRoute added in v0.12.1

func (ac *Aircraft) DistanceAlongRoute(fix string) (float32, error)

func (*Aircraft) DistanceToEndOfApproach added in v0.12.1

func (ac *Aircraft) DistanceToEndOfApproach() (float32, error)

func (*Aircraft) ExpectApproach added in v0.12.1

func (ac *Aircraft) ExpectApproach(id string, ap *av.Airport, lg *log.Logger) *speech.RadioTransmission

func (*Aircraft) ExpediteClimb added in v0.12.1

func (ac *Aircraft) ExpediteClimb() *speech.RadioTransmission

func (*Aircraft) ExpediteDescent added in v0.12.1

func (ac *Aircraft) ExpediteDescent() *speech.RadioTransmission

func (*Aircraft) FlyPresentHeading added in v0.12.1

func (ac *Aircraft) FlyPresentHeading() *speech.RadioTransmission

func (*Aircraft) GS added in v0.12.1

func (ac *Aircraft) GS() float32

func (*Aircraft) GetRadarTrack added in v0.12.1

func (ac *Aircraft) GetRadarTrack(now time.Time) av.RadarTrack

func (*Aircraft) GoAround added in v0.12.1

func (ac *Aircraft) GoAround() *speech.RadioTransmission

func (*Aircraft) Heading added in v0.12.1

func (ac *Aircraft) Heading() float32

func (*Aircraft) IAS added in v0.12.1

func (ac *Aircraft) IAS() float32

func (*Aircraft) Ident added in v0.12.1

func (ac *Aircraft) Ident(now time.Time) *speech.RadioTransmission

func (*Aircraft) InitializeArrival added in v0.12.1

func (ac *Aircraft) InitializeArrival(ap *av.Airport, arr *av.Arrival, nmPerLongitude float32, magneticVariation float32,
	wind av.WindModel, now time.Time, lg *log.Logger) error

func (*Aircraft) InitializeDeparture added in v0.12.1

func (ac *Aircraft) InitializeDeparture(ap *av.Airport, departureAirport string, dep *av.Departure,
	runway string, exitRoute av.ExitRoute, nmPerLongitude float32, magneticVariation float32,
	wind av.WindModel, now time.Time, lg *log.Logger) error

func (*Aircraft) InitializeFlightPlan added in v0.12.1

func (ac *Aircraft) InitializeFlightPlan(r av.FlightRules, acType, dep, arr string)

func (*Aircraft) InitializeOverflight added in v0.12.1

func (ac *Aircraft) InitializeOverflight(of *av.Overflight, nmPerLongitude float32,
	magneticVariation float32, wind av.WindModel, now time.Time, lg *log.Logger) error

func (*Aircraft) InitializeVFRDeparture added in v0.12.1

func (ac *Aircraft) InitializeVFRDeparture(ap *av.Airport, wps av.WaypointArray,
	randomizeAltitudeRange bool, nmPerLongitude float32, magneticVariation float32, wind av.WindModel,
	lg *log.Logger) error

func (*Aircraft) InterceptApproach added in v0.12.1

func (ac *Aircraft) InterceptApproach(lg *log.Logger) *speech.RadioTransmission

func (*Aircraft) IsAirborne added in v0.12.1

func (ac *Aircraft) IsAirborne() bool

func (*Aircraft) IsArrival added in v0.12.1

func (ac *Aircraft) IsArrival() bool

func (*Aircraft) IsAssociated added in v0.12.0

func (ac *Aircraft) IsAssociated() bool

func (*Aircraft) IsDeparture added in v0.12.1

func (ac *Aircraft) IsDeparture() bool

func (*Aircraft) IsOverflight added in v0.12.1

func (ac *Aircraft) IsOverflight() bool

func (*Aircraft) IsUnassociated added in v0.12.0

func (ac *Aircraft) IsUnassociated() bool

func (*Aircraft) MVAsApply added in v0.12.1

func (ac *Aircraft) MVAsApply() bool

func (*Aircraft) MagneticVariation added in v0.12.1

func (ac *Aircraft) MagneticVariation() float32

func (*Aircraft) MaintainMaximumForward added in v0.12.1

func (ac *Aircraft) MaintainMaximumForward() *speech.RadioTransmission

func (*Aircraft) MaintainSlowestPractical added in v0.12.1

func (ac *Aircraft) MaintainSlowestPractical() *speech.RadioTransmission

func (*Aircraft) NavSummary added in v0.12.1

func (ac *Aircraft) NavSummary(lg *log.Logger) string

func (*Aircraft) NmPerLongitude added in v0.12.1

func (ac *Aircraft) NmPerLongitude() float32

func (*Aircraft) OnApproach added in v0.12.1

func (ac *Aircraft) OnApproach(checkAltitude bool) bool

func (*Aircraft) OnExtendedCenterline added in v0.12.1

func (ac *Aircraft) OnExtendedCenterline(maxNmDeviation float32) bool

func (*Aircraft) Position added in v0.12.1

func (ac *Aircraft) Position() math.Point2LL

func (*Aircraft) ResumeOwnNavigation added in v0.12.1

func (ac *Aircraft) ResumeOwnNavigation() *speech.RadioTransmission

func (*Aircraft) RouteIncludesFix added in v0.12.1

func (ac *Aircraft) RouteIncludesFix(fix string) bool

func (*Aircraft) SayAltitude added in v0.12.1

func (ac *Aircraft) SayAltitude() *speech.RadioTransmission

func (*Aircraft) SayHeading added in v0.12.1

func (ac *Aircraft) SayHeading() *speech.RadioTransmission

func (*Aircraft) SaySpeed added in v0.12.1

func (ac *Aircraft) SaySpeed() *speech.RadioTransmission

func (*Aircraft) TAS added in v0.12.1

func (ac *Aircraft) TAS() float32

func (*Aircraft) TurnLeft added in v0.12.1

func (ac *Aircraft) TurnLeft(deg int) *speech.RadioTransmission

func (*Aircraft) TurnRight added in v0.12.1

func (ac *Aircraft) TurnRight(deg int) *speech.RadioTransmission

func (*Aircraft) Update added in v0.12.1

func (ac *Aircraft) Update(wind av.WindModel, bravo *av.AirspaceGrid, lg *log.Logger) *av.Waypoint

func (*Aircraft) Waypoints added in v0.12.1

func (ac *Aircraft) Waypoints() []av.Waypoint

func (*Aircraft) WillDoAirwork added in v0.12.1

func (ac *Aircraft) WillDoAirwork() bool

type AircraftDisplayState added in v0.12.0

type AircraftDisplayState struct {
	Spew        string // for debugging
	FlightState string // for display when paused
}

type AirspaceAwareness

type AirspaceAwareness struct {
	Fix                 []string `json:"fixes"`
	AltitudeRange       [2]int   `json:"altitude_range"`
	ReceivingController string   `json:"receiving_controller"`
	AircraftType        []string `json:"aircraft_type"`
}

type ArrivalRunway added in v0.11.9

type ArrivalRunway struct {
	Airport string `json:"airport"`
	Runway  string `json:"runway"`
}

type CoordinationList added in v0.11.5

type CoordinationList struct {
	Name          string   `json:"name"`
	Id            string   `json:"id"`
	Airports      []string `json:"airports"`
	YellowEntries bool     `json:"yellow_entries"`
	Format        string   `json:"format"`
}

type DeferredNavHeading added in v0.12.1

type DeferredNavHeading struct {
	// Time is just plain old wallclock time; it should be sim time, but a
	// lot of replumbing would be required to have that available where
	// needed. The downsides are minor: 1. On quit and resume, any pending
	// assignments will generally be followed immediately, and 2. if the
	// sim rate is increased, the delay will end up being longer than
	// intended.
	Time    time.Time
	Heading *float32
	Turn    *TurnMethod
	// For direct fix, this will be the updated set of waypoints.
	Waypoints []av.Waypoint
}

DeferredNavHeading stores a heading assignment from the controller and the time at which to start executing it; this time is set to be a few seconds after the controller issues it in order to model the delay before pilots start to follow assignments.

type DepartureAircraft added in v0.11.5

type DepartureAircraft struct {
	ADSBCallsign  av.ADSBCallsign
	MinSeparation time.Duration // How long after takeoff it will be at ~6000' and airborne
	SpawnTime     time.Time     // when it was first spawned
	LaunchTime    time.Time     // when it was actually launched; used for wake turbulence separation, etc.

	// When they're ready to leave the gate
	ReadyDepartGateTime time.Time

	// HFR-only.
	ReleaseRequested   bool
	ReleaseDelay       time.Duration // minimum wait after release before the takeoff roll
	RequestReleaseTime time.Time
}

DepartureAircraft represents a departing aircraft, either still on the ground or recently-launched.

type DepartureRunway added in v0.11.9

type DepartureRunway struct {
	Airport     string `json:"airport"`
	Runway      string `json:"runway"`
	Category    string `json:"category,omitempty"`
	DefaultRate int    `json:"rate"`
}

type ERAMComputer

type ERAMComputer struct {
	SquawkCodePool *av.EnrouteSquawkCodePool
	Identifier     string
	Adaptation     av.ERAMAdaptation
}

func (*ERAMComputer) CreateSquawk

func (ec *ERAMComputer) CreateSquawk() (av.Squawk, error)

func (*ERAMComputer) ReturnSquawk added in v0.11.9

func (ec *ERAMComputer) ReturnSquawk(code av.Squawk) error

func (*ERAMComputer) Update

func (ec *ERAMComputer) Update(s *Sim)

type Event

type Event struct {
	Type                  EventType
	ADSBCallsign          av.ADSBCallsign
	ACID                  ACID
	FromController        string
	ToController          string // For radio transmissions, the controlling controller.
	WrittenText           string
	SpokenText            string
	RadioTransmissionType speech.RadioTransmissionType   // For radio transmissions only
	LeaderLineDirection   *math.CardinalOrdinalDirection // SetGlobalLeaderLineEvent
}

func (Event) LogValue

func (e Event) LogValue() slog.Value

func (*Event) String

func (e *Event) String() string

type EventStream

type EventStream struct {
	// contains filtered or unexported fields
}

EventStream provides a basic pub/sub event interface that allows any part of the system to post an event to the stream and other parts to subscribe and receive messages from the stream. It is the backbone for communicating events, world updates, and user actions across the various parts of the system.

func NewEventStream

func NewEventStream(lg *log.Logger) *EventStream

func (*EventStream) LogValue

func (e *EventStream) LogValue() slog.Value

implements slog.LogValuer

func (*EventStream) Post

func (e *EventStream) Post(event Event)

Post adds an event to the event stream. The type used to encode the event is arbitrary; it's up to the EventStream users to establish conventions.

func (*EventStream) Subscribe

func (e *EventStream) Subscribe() *EventsSubscription

Subscribe registers a new subscriber to the stream and returns an EventSubscriberId for the subscriber that can then be passed to other EventStream methods.

type EventSubscriberId

type EventSubscriberId int

type EventType

type EventType int
const (
	PushedFlightStripEvent EventType = iota
	PointOutEvent
	OfferedHandoffEvent
	AcceptedHandoffEvent
	AcceptedRedirectedHandoffEvent
	CanceledHandoffEvent
	RejectedHandoffEvent
	RadioTransmissionEvent
	StatusMessageEvent
	ServerBroadcastMessageEvent
	GlobalMessageEvent
	AcknowledgedPointOutEvent
	RejectedPointOutEvent
	HandoffControlEvent
	SetGlobalLeaderLineEvent
	ForceQLEvent
	TransferAcceptedEvent
	TransferRejectedEvent
	RecalledPointOutEvent
	FlightPlanAssociatedEvent
	NumEventTypes
)

func (EventType) String

func (t EventType) String() string

type EventsSubscription

type EventsSubscription struct {
	// contains filtered or unexported fields
}

func (*EventsSubscription) Get

func (e *EventsSubscription) Get() []Event

Get returns all of the events from the stream since the last time Get was called with the given id. Note that events before an id was created with Subscribe are never reported for that id.

func (*EventsSubscription) LogValue

func (e *EventsSubscription) LogValue() slog.Value

func (*EventsSubscription) PostEvent

func (e *EventsSubscription) PostEvent(event Event)

func (*EventsSubscription) Unsubscribe

func (e *EventsSubscription) Unsubscribe()

Unsubscribe removes a subscriber from the subscriber list

type FilterRegion added in v0.12.0

type FilterRegion struct {
	av.AirspaceVolume
	InvertTest bool
}

func (FilterRegion) Inside added in v0.12.0

func (r FilterRegion) Inside(p math.Point2LL, alt int) bool

type FilterRegions added in v0.12.0

type FilterRegions []FilterRegion

func (FilterRegions) HaveId added in v0.12.0

func (r FilterRegions) HaveId(s string) bool

func (FilterRegions) Inside added in v0.12.0

func (r FilterRegions) Inside(p math.Point2LL, alt int) bool

type FlightState added in v0.12.1

type FlightState struct {
	InitialDepartureClimb     bool
	DepartureAirportLocation  math.Point2LL
	DepartureAirportElevation float32
	ArrivalAirport            av.Waypoint
	ArrivalAirportLocation    math.Point2LL
	ArrivalAirportElevation   float32

	MagneticVariation float32
	NmPerLongitude    float32

	Position     math.Point2LL
	Heading      float32
	Altitude     float32
	PrevAltitude float32
	IAS, GS      float32 // speeds...
	BankAngle    float32 // degrees
	AltitudeRate float32 // + -> climb, - -> descent
}

func (FlightState) LogValue added in v0.12.1

func (fs FlightState) LogValue() slog.Value

func (*FlightState) Summary added in v0.12.1

func (fs *FlightState) Summary() string

type FlyRacetrackPT added in v0.12.1

type FlyRacetrackPT struct {
	ProcedureTurn      *av.ProcedureTurn
	Fix                string
	FixLocation        math.Point2LL
	Entry              av.RacetrackPTEntry
	InboundHeading     float32
	OutboundHeading    float32
	OutboundTurnRate   float32
	OutboundTurnMethod TurnMethod
	OutboundLegLength  float32
	State              int
}

func MakeFlyRacetrackPT added in v0.12.1

func MakeFlyRacetrackPT(nav *Nav, wp []av.Waypoint) *FlyRacetrackPT

func (*FlyRacetrackPT) GetAltitude added in v0.12.1

func (fp *FlyRacetrackPT) GetAltitude(nav *Nav) (float32, bool)

func (*FlyRacetrackPT) GetHeading added in v0.12.1

func (fp *FlyRacetrackPT) GetHeading(nav *Nav, wind av.WindModel, lg *log.Logger) (float32, TurnMethod, float32)

type FlyStandard45PT added in v0.12.1

type FlyStandard45PT struct {
	ProcedureTurn    *av.ProcedureTurn
	Fix              string
	FixLocation      math.Point2LL
	InboundHeading   float32 // fix->airport
	AwayHeading      float32 // outbound + 45 offset
	State            int
	SecondsRemaining int
}

func MakeFlyStandard45PT added in v0.12.1

func MakeFlyStandard45PT(nav *Nav, wp []av.Waypoint) *FlyStandard45PT

func (*FlyStandard45PT) GetHeading added in v0.12.1

func (fp *FlyStandard45PT) GetHeading(nav *Nav, wind av.WindModel, lg *log.Logger) (float32, TurnMethod, float32)

type FutureChangeSquawk added in v0.11.8

type FutureChangeSquawk struct {
	ADSBCallsign av.ADSBCallsign
	Code         av.Squawk
	Mode         av.TransponderMode
	Time         time.Time
}

type FutureControllerContact added in v0.11.7

type FutureControllerContact struct {
	ADSBCallsign av.ADSBCallsign
	TCP          string
	Time         time.Time
}

type FutureOnCourse added in v0.11.7

type FutureOnCourse struct {
	ADSBCallsign av.ADSBCallsign
	Time         time.Time
}

type GlobalMessage

type GlobalMessage struct {
	Message        string
	FromController string
}

type Handoff

type Handoff struct {
	AutoAcceptTime    time.Time
	ReceivingFacility string // only for auto accept
}

type HeadingArgs

type HeadingArgs struct {
	TCP          string
	ADSBCallsign av.ADSBCallsign
	Heading      int
	Present      bool
	LeftDegrees  int
	RightDegrees int
	Turn         TurnMethod
}

type InterceptState added in v0.12.1

type InterceptState int
const (
	NotIntercepting InterceptState = iota
	InitialHeading
	TurningToJoin
	OnApproachCourse
)

type LaunchConfig

type LaunchConfig struct {
	// Controller is the controller in charge of the launch settings; if empty then
	// launch control may be taken by any signed in controller.
	Controller string
	// LaunchManual or LaunchAutomatic
	Mode int32

	GoAroundRate float32
	// airport -> runway -> category -> rate
	DepartureRates     map[string]map[string]map[string]float32
	DepartureRateScale float32

	VFRDepartureRateScale   float32
	VFRAirportRates         map[string]int // name -> VFRRateSum()
	VFFRequestRate          int32
	HaveVFRReportingRegions bool

	// inbound flow -> airport / "overflights" -> rate
	InboundFlowRates            map[string]map[string]float32
	InboundFlowRateScale        float32
	ArrivalPushes               bool
	ArrivalPushFrequencyMinutes int
	ArrivalPushLengthMinutes    int
}

LaunchConfig collects settings related to launching aircraft in the sim; it's passed back and forth between client and server: server provides them so client can draw the UI for what's available, then client returns one back when launching.

func MakeLaunchConfig

func MakeLaunchConfig(dep []DepartureRunway, vfrRateScale float32, vfrAirports map[string]*av.Airport,
	inbound map[string]map[string]int, haveVFRReportingRegions bool) LaunchConfig

func (*LaunchConfig) CheckRateLimits added in v0.12.1

func (lc *LaunchConfig) CheckRateLimits(limit float32) bool

CheckRateLimits returns true if both total departure rates and total inbound flow rates sum to less than the provided limit (aircraft per hour)

func (*LaunchConfig) ClampRates added in v0.12.1

func (lc *LaunchConfig) ClampRates(limit float32)

ClampRates adjusts the rate scale variables to ensure the total launch rate does not exceed the given limit (aircraft per hour)

func (*LaunchConfig) TotalArrivalRate added in v0.12.1

func (lc *LaunchConfig) TotalArrivalRate() float32

TotalArrivalRate returns the total arrival rate (aircraft per hour) excluding overflights

func (*LaunchConfig) TotalDepartureRate added in v0.12.1

func (lc *LaunchConfig) TotalDepartureRate() float32

TotalDepartureRate returns the total departure rate (aircraft per hour) for all airports and runways

func (*LaunchConfig) TotalInboundFlowRate added in v0.12.1

func (lc *LaunchConfig) TotalInboundFlowRate() float32

TotalInboundFlowRate returns the total inbound flow rate (aircraft per hour) for all flows

func (*LaunchConfig) TotalOverflightRate added in v0.12.1

func (lc *LaunchConfig) TotalOverflightRate() float32

TotalOverflightRate returns the total overflight rate (aircraft per hour)

type Nav struct {
	FlightState FlightState
	Perf        av.AircraftPerformance
	Altitude    NavAltitude
	Speed       NavSpeed
	Heading     NavHeading
	Approach    NavApproach
	Airwork     *NavAirwork

	FixAssignments map[string]NavFixAssignment

	// DeferredNavHeading stores a heading/direct fix assignment from the
	// controller that the pilot has not yet started to follow.  Note that
	// only a single such assignment is stored; for example, if the
	// controller issues a first heading and then a second shortly
	// afterward, before the first has been followed, it's fine for the
	// second to override it.
	DeferredNavHeading *DeferredNavHeading

	FinalAltitude float32
	Waypoints     av.WaypointArray

	Rand *rand.Rand
}

State related to navigation. Pointers are used for optional values; nil -> unset/unspecified.

func MakeArrivalNav added in v0.12.1

func MakeArrivalNav(callsign av.ADSBCallsign, arr *av.Arrival, fp av.FlightPlan, perf av.AircraftPerformance,
	nmPerLongitude float32, magneticVariation float32, wind av.WindModel, lg *log.Logger) *Nav

func MakeDepartureNav added in v0.12.1

func MakeDepartureNav(callsign av.ADSBCallsign, fp av.FlightPlan, perf av.AircraftPerformance,
	assignedAlt, clearedAlt, speedRestriction int, wp []av.Waypoint, randomizeAltitudeRange bool,
	nmPerLongitude float32, magneticVariation float32, wind av.WindModel, lg *log.Logger) *Nav

func MakeOverflightNav added in v0.12.1

func MakeOverflightNav(callsign av.ADSBCallsign, of *av.Overflight, fp av.FlightPlan, perf av.AircraftPerformance,
	nmPerLongitude float32, magneticVariation float32, wind av.WindModel, lg *log.Logger) *Nav
func (nav *Nav) AltitudeOurDiscretion() *speech.RadioTransmission
func (nav *Nav) ApproachHeading(wind av.WindModel, lg *log.Logger) (heading float32, turn TurnMethod)
func (nav *Nav) AssignAltitude(alt float32, afterSpeed bool) *speech.RadioTransmission
func (nav *Nav) AssignHeading(hdg float32, turn TurnMethod) *speech.RadioTransmission
func (nav *Nav) AssignSpeed(speed float32, afterAltitude bool) *speech.RadioTransmission
func (nav *Nav) AssignedHeading() (float32, bool)

AssignedHeading returns the aircraft's current heading assignment, if any, regardless of whether the pilot has yet started following it.

func (nav *Nav) AssignedWaypoints() []av.Waypoint

AssignedWaypoints returns the route that should be flown following a controller instruction. If an instruction has been issued but the delay hasn't passed, these are different than the waypoints currently being used for navigation.

func (nav *Nav) AtFixCleared(fix, id string) *speech.RadioTransmission
func (nav *Nav) CancelApproachClearance() *speech.RadioTransmission
func (nav *Nav) Check(lg *log.Logger)
func (nav *Nav) ClimbViaSID() *speech.RadioTransmission
func (nav *Nav) ContactMessage(reportingPoints []av.ReportingPoint, star string) *speech.RadioTransmission
func (nav *Nav) CrossFixAt(fix string, ar *av.AltitudeRestriction, speed int) *speech.RadioTransmission
func (nav *Nav) DepartFixDirect(fixa string, fixb string) *speech.RadioTransmission
func (nav *Nav) DepartFixHeading(fix string, hdg float32) *speech.RadioTransmission
func (nav *Nav) DepartOnCourse(alt float32, exit string)
func (nav *Nav) DepartureMessage() *speech.RadioTransmission
func (nav *Nav) DescendViaSTAR() *speech.RadioTransmission
func (nav *Nav) DirectFix(fix string) *speech.RadioTransmission
func (nav *Nav) DistanceAlongRoute(fix string) (float32, error)
func (nav *Nav) EnqueueDirectFix(wps []av.Waypoint)
func (nav *Nav) EnqueueHeading(hdg float32, turn TurnMethod)

EnqueueHeading enqueues the given heading assignment to be followed a few seconds in the future. It should only be called for heading changes due to controller instructions to the pilot and never in cases where the autopilot is changing the heading assignment.

func (nav *Nav) EnqueueOnCourse()
func (nav *Nav) ExpectApproach(airport *av.Airport, id string, runwayWaypoints map[string]av.WaypointArray,
	lg *log.Logger) *speech.RadioTransmission
func (nav *Nav) ExpediteClimb() *speech.RadioTransmission
func (nav *Nav) ExpediteDescent() *speech.RadioTransmission
func (nav *Nav) FlyPresentHeading() *speech.RadioTransmission
func (nav *Nav) GoAround() *speech.RadioTransmission
func (nav *Nav) InterceptApproach(airport string, lg *log.Logger) *speech.RadioTransmission
func (nav *Nav) InterceptedButNotCleared() bool
func (nav *Nav) IsAirborne() bool
func (nav *Nav) MaintainMaximumForward() *speech.RadioTransmission
func (nav *Nav) MaintainSlowestPractical() *speech.RadioTransmission
func (nav *Nav) OnApproach(checkAltitude bool) bool
func (nav *Nav) OnExtendedCenterline(maxNmDeviation float32) bool

OnExtendedCenterline checks if the flight position is less than maxNmDeviation from the infinite line defined by the assigned approach localizer

func (nav *Nav) ResumeOwnNavigation() *speech.RadioTransmission
func (nav *Nav) SayAltitude() *speech.RadioTransmission
func (nav *Nav) SayHeading() *speech.RadioTransmission
func (nav *Nav) SaySpeed() *speech.RadioTransmission
func (nav *Nav) Summary(fp av.FlightPlan, lg *log.Logger) string

Full human-readable summary of nav state for use when paused and mouse hover on the scope

func (nav *Nav) TAS() float32
func (nav *Nav) TargetAltitude(lg *log.Logger) (float32, float32)
func (nav *Nav) TargetHeading(wind av.WindModel, lg *log.Logger) (heading float32, turn TurnMethod, rate float32)
func (nav *Nav) TargetSpeed(targetAltitude float32, fp *av.FlightPlan, bravo *av.AirspaceGrid, lg *log.Logger) (float32, float32)
func (nav *Nav) Update(wind av.WindModel, fp *av.FlightPlan, bravo *av.AirspaceGrid, lg *log.Logger) *av.Waypoint

returns passed waypoint if any

type NavAirwork struct {
	Radius   float32
	Center   math.Point2LL
	AltRange [2]float32

	RemainingSteps  int
	NextMoveCounter int
	Heading         float32
	TurnRate        float32
	TurnDirection   TurnMethod
	IAS             float32
	Altitude        float32
	Dive            bool
	ToCenter        bool
}

func StartAirwork added in v0.12.1

func StartAirwork(wp av.Waypoint, nav Nav) *NavAirwork
func (aw *NavAirwork) Start360(nav Nav)
func (aw *NavAirwork) TargetAltitude() (float32, float32)
func (aw *NavAirwork) TargetHeading() (heading float32, turn TurnMethod, rate float32)
func (aw *NavAirwork) TargetSpeed() (float32, float32, bool)
func (aw *NavAirwork) Update(nav *Nav) bool
type NavAltitude struct {
	Assigned           *float32 // controller assigned
	Cleared            *float32 // from initial clearance
	AfterSpeed         *float32
	AfterSpeedSpeed    *float32
	Expedite           bool
	ExpediteAfterSpeed bool

	// Carried after passing a waypoint if we were unable to meet the
	// restriction at the way point; we keep trying until we get there (or
	// are given another instruction..)
	Restriction *av.AltitudeRestriction
}
type NavApproach struct {
	Assigned          *av.Approach
	AssignedId        string
	ATPAVolume        *av.ATPAVolume
	Cleared           bool
	InterceptState    InterceptState
	PassedApproachFix bool // have we passed a fix on the approach yet?
	PassedFAF         bool
	NoPT              bool
	AtFixClearedRoute []av.Waypoint
}
type NavFixAssignment struct {
	Arrive struct {
		Altitude *av.AltitudeRestriction
		Speed    *float32
	}
	Depart struct {
		Fix     *av.Waypoint
		Heading *float32
	}
}
type NavHeading struct {
	Assigned     *float32
	Turn         *TurnMethod
	Arc          *av.DMEArc
	JoiningArc   bool
	RacetrackPT  *FlyRacetrackPT
	Standard45PT *FlyStandard45PT
}
type NavSpeed struct {
	Assigned                 *float32
	AfterAltitude            *float32
	AfterAltitudeAltitude    *float32
	MaintainSlowestPractical bool
	MaintainMaximumForward   bool
	// Carried after passing a waypoint
	Restriction *float32
}

type NewSimConfiguration

type NewSimConfiguration struct {
	TRACON      string
	Description string

	Airports           map[string]*av.Airport
	PrimaryAirport     string
	DepartureRunways   []DepartureRunway
	ArrivalRunways     []ArrivalRunway
	InboundFlows       map[string]*av.InboundFlow
	LaunchConfig       LaunchConfig
	Fixes              map[string]math.Point2LL
	VFRReportingPoints []av.VFRReportingPoint

	ControlPositions   map[string]*av.Controller
	PrimaryController  string
	ControllerAirspace map[string][]string
	VirtualControllers []string
	MultiControllers   av.SplitConfiguration
	SignOnPositions    map[string]*av.Controller

	TFRs                    []av.TFR
	LiveWeather             bool
	Wind                    av.Wind
	STARSFacilityAdaptation STARSFacilityAdaptation
	IsLocal                 bool

	EnforceUniqueCallsignSuffix bool

	ReportingPoints   []av.ReportingPoint
	MagneticVariation float32
	NmPerLongitude    float32
	Center            math.Point2LL
	Range             float32
	DefaultMaps       []string
	Airspace          av.Airspace
}

NewSimConfiguration collects all of the information required to create a new Sim

type PilotSpeech added in v0.12.1

type PilotSpeech struct {
	Callsign av.ADSBCallsign
	Type     speech.RadioTransmissionType
	Text     string
	MP3      []byte
}

type PointOut

type PointOut struct {
	FromController string
	ToController   string
	AcceptTime     time.Time
}

type RedirectedHandoff added in v0.12.0

type RedirectedHandoff struct {
	OriginalOwner string   // Controller callsign
	Redirector    []string // Controller callsign
	RedirectedTo  string   // Controller callsign
}

func (*RedirectedHandoff) AddRedirector added in v0.12.0

func (rd *RedirectedHandoff) AddRedirector(ctrl *av.Controller)

func (*RedirectedHandoff) GetLastRedirector added in v0.12.0

func (rd *RedirectedHandoff) GetLastRedirector() string

func (*RedirectedHandoff) ShouldFallbackToHandoff added in v0.12.0

func (rd *RedirectedHandoff) ShouldFallbackToHandoff(ctrl, octrl string) bool

func (*RedirectedHandoff) ShowRDIndicator added in v0.12.0

func (rd *RedirectedHandoff) ShowRDIndicator(callsign string, RDIndicatorEnd time.Time) bool

type ReleaseDeparture added in v0.12.0

type ReleaseDeparture struct {
	ADSBCallsign        av.ADSBCallsign
	DepartureAirport    string
	DepartureController string
	Released            bool
	Squawk              av.Squawk
	ListIndex           int
	AircraftType        string
	Exit                string
}

type RunwayLaunchState added in v0.11.9

type RunwayLaunchState struct {
	IFRSpawnRate float32
	VFRSpawnRate float32

	// For each runway, when to create the next departing aircraft, based
	// on the runway departure rate. The actual time an aircraft is
	// launched may be later, e.g. if we need longer for wake turbulence
	// separation, etc.
	NextIFRSpawn time.Time
	NextVFRSpawn time.Time

	// At the gate, flight plan filed (if IFR), not yet ready to go
	Gate []DepartureAircraft
	// Ready to go, in hold for release purgatory.
	Held []DepartureAircraft
	// Ready to go.
	ReleasedIFR []DepartureAircraft
	ReleasedVFR []DepartureAircraft
	// Sequenced departures, pulled from Released. These are launched in-order.
	Sequenced []DepartureAircraft

	LastDeparture          *DepartureAircraft
	LastArrivalLandingTime time.Time      // when the last arrival landed on this runway
	LastArrivalFlightRules av.FlightRules // flight rules of the last arrival that landed

	VFRAttempts  int
	VFRSuccesses int
}

func (RunwayLaunchState) Dump added in v0.12.0

func (rls RunwayLaunchState) Dump(airport string, runway string, now time.Time)

type STARSComputer

type STARSComputer struct {
	Identifier       string
	FlightPlans      []*STARSFlightPlan
	HoldForRelease   []*Aircraft
	AvailableIndices []int
}

func (*STARSComputer) AddHeldDeparture added in v0.11.5

func (sc *STARSComputer) AddHeldDeparture(ac *Aircraft)

func (*STARSComputer) CreateFlightPlan added in v0.12.0

func (sc *STARSComputer) CreateFlightPlan(fp STARSFlightPlan) (STARSFlightPlan, error)

func (*STARSComputer) GetReleaseDepartures added in v0.11.5

func (sc *STARSComputer) GetReleaseDepartures() []*Aircraft

func (*STARSComputer) ReleaseDeparture added in v0.11.5

func (sc *STARSComputer) ReleaseDeparture(callsign av.ADSBCallsign) error

func (*STARSComputer) Update

func (sc *STARSComputer) Update(s *Sim)

type STARSControllerConfig

type STARSControllerConfig struct {
	VideoMapNames                   []string      `json:"video_maps"`
	DefaultMaps                     []string      `json:"default_maps"`
	Center                          math.Point2LL `json:"-"`
	CenterString                    string        `json:"center"`
	Range                           float32       `json:"range"`
	MonitoredBeaconCodeBlocksString *string       `json:"beacon_code_blocks"`
	MonitoredBeaconCodeBlocks       []av.Squawk
	FlightFollowingAirspace         []av.AirspaceVolume `json:"flight_following_airspace"`
}

type STARSFacilityAdaptation

type STARSFacilityAdaptation struct {
	AirspaceAwareness   []AirspaceAwareness               `json:"airspace_awareness"`
	ForceQLToSelf       bool                              `json:"force_ql_self"`
	AllowLongScratchpad bool                              `json:"allow_long_scratchpad"`
	VideoMapNames       []string                          `json:"stars_maps"`
	VideoMapLabels      map[string]string                 `json:"map_labels"`
	ControllerConfigs   map[string]*STARSControllerConfig `json:"controller_configs"`
	RadarSites          map[string]*av.RadarSite          `json:"radar_sites"`
	Center              math.Point2LL                     `json:"-"`
	CenterString        string                            `json:"center"`
	Range               float32                           `json:"range"`
	Scratchpads         map[string]string                 `json:"scratchpads"`
	SignificantPoints   map[string]SignificantPoint       `json:"significant_points"`
	Altimeters          []string                          `json:"altimeters"`

	// Airpsace filters
	Filters struct {
		ArrivalAcquisition   FilterRegions `json:"arrival_acquisition"`
		ArrivalDrop          FilterRegions `json:"arrival_drop"`
		DepartureAcquisition FilterRegions `json:"departure_acquisition"`
		InhibitCA            FilterRegions `json:"inhibit_ca"`
		InhibitMSAW          FilterRegions `json:"inhibit_msaw"`
		Quicklook            FilterRegions `json:"quicklook"`
		SecondaryDrop        FilterRegions `json:"secondary_drop"`
		SurfaceTracking      FilterRegions `json:"surface_tracking"`
		VFRInhibit           FilterRegions `json:"vfr_inhibit"`
	} `json:"filters"`

	MonitoredBeaconCodeBlocksString  *string
	MonitoredBeaconCodeBlocks        []av.Squawk
	UntrackedPositionSymbolOverrides struct {
		CodeRangesString string         `json:"beacon_codes"`
		CodeRanges       [][2]av.Squawk // inclusive
		Symbol           string         `json:"symbol"`
	} `json:"untracked_position_symbol_overrides"`

	VideoMapFile      string                        `json:"video_map_file"`
	CoordinationFixes map[string]av.AdaptationFixes `json:"coordination_fixes"`
	SingleCharAIDs    map[string]string             `json:"single_char_aids"` // Char to airport
	KeepLDB           bool                          `json:"keep_ldb"`
	FullLDBSeconds    int                           `json:"full_ldb_seconds"`

	SSRCodes av.LocalSquawkCodePoolSpecifier `json:"ssr_codes"`

	HandoffAcceptFlashDuration int  `json:"handoff_acceptance_flash_duration"`
	DisplayHOFacilityOnly      bool `json:"display_handoff_facility_only"`
	HOSectorDisplayDuration    int  `json:"handoff_sector_display_duration"`

	FlightPlan struct {
		QuickACID          string            `json:"quick_acid"`
		ACIDExpansions     map[string]string `json:"acid_expansions"`
		ModifyAfterDisplay bool              `json:"modify_after_display"`
	} `json:"flight_plan"`

	PDB struct {
		ShowScratchpad2   bool `json:"show_scratchpad2"`
		HideGroundspeed   bool `json:"hide_gs"`
		ShowAircraftType  bool `json:"show_aircraft_type"`
		SplitGSAndCWT     bool `json:"split_gs_and_cwt"`
		DisplayCustomSPCs bool `json:"display_custom_spcs"`
	} `json:"pdb"`

	FDB struct {
		DisplayRequestedAltitude bool `json:"display_requested_altitude"`
		Scratchpad2OnLine3       bool `json:"scratchpad2_on_line3"`
	} `json:"fdb"`

	Scratchpad1 struct {
		DisplayExitFix     bool `json:"display_exit_fix"`
		DisplayExitFix1    bool `json:"display_exit_fix_1"`
		DisplayExitGate    bool `json:"display_exit_gate"`
		DisplayAltExitGate bool `json:"display_alternate_exit_gate"`
	} `json:"scratchpad1"`

	CustomSPCs []string `json:"custom_spcs"`

	CoordinationLists []CoordinationList `json:"coordination_lists"`
	VFRList           struct {
		Format string `json:"format"`
	} `json:"vfr_list"`
	TABList struct {
		Format string `json:"format"`
	} `json:"tab_list"`
	CoastSuspendList struct {
		Format string `json:"format"`
	} `json:"coast_suspend_list"`
	MCISuppressionList struct {
		Format string `json:"format"`
	} `json:"mci_suppression_list"`
	TowerList struct {
		Format string `json:"format"`
	} `json:"tower_list"`
	RestrictionAreas []av.RestrictionArea `json:"restriction_areas"`
	UseLegacyFont    bool                 `json:"use_legacy_font"`
}

func (STARSFacilityAdaptation) CheckScratchpad added in v0.12.0

func (fa STARSFacilityAdaptation) CheckScratchpad(sp string) bool

func (*STARSFacilityAdaptation) PostDeserialize

func (fa *STARSFacilityAdaptation) PostDeserialize(loc av.Locator, controlledAirports []string, allAirports []string, e *util.ErrorLogger)

type STARSFlightPlan

type STARSFlightPlan struct {
	ACID                  ACID
	EntryFix              string
	ExitFix               string
	ExitFixIsIntermediate bool
	Rules                 av.FlightRules
	CoordinationTime      time.Time
	PlanType              STARSFlightPlanType

	AssignedSquawk av.Squawk

	TrackingController     string // Who has the radar track
	ControllingController  string // Who has control; not necessarily the same as TrackingController
	HandoffTrackController string // Handoff offered but not yet accepted
	LastLocalController    string // (May be the current controller.)

	AircraftCount   int
	AircraftType    string
	EquipmentSuffix string

	TypeOfFlight av.TypeOfFlight

	AssignedAltitude      int
	RequestedAltitude     int
	PilotReportedAltitude int

	Scratchpad          string
	SecondaryScratchpad string

	PriorScratchpad          string
	PriorSecondaryScratchpad string

	RNAV bool

	Location math.Point2LL

	PointOutHistory             []string
	InhibitModeCAltitudeDisplay bool
	SPCOverride                 string
	DisableMSAW                 bool
	DisableCA                   bool
	MCISuppressedCode           av.Squawk
	GlobalLeaderLineDirection   *math.CardinalOrdinalDirection
	QuickFlightPlan             bool
	HoldState                   bool
	Suspended                   bool
	CoastSuspendIndex           int

	// FIXME: the following are all used internally by NAS code. It's
	// convenient to have them here but this stuff should just be managed
	// internally there.
	ListIndex int

	// First controller in the local facility to get the track: used both
	// for /ho and for departures
	InboundHandoffController string

	CoordinationFix     string
	ContainedFacilities []string
	RedirectedHandoff   RedirectedHandoff

	InhibitACTypeDisplay      bool
	ForceACTypeDisplayEndTime time.Time
	CWTCategory               string

	// After fps are dropped, we hold on to them for a bit before they're
	// actually deleted.
	DeleteTime time.Time

	// Used so that such FPs can associate regardless of acquisition filters.
	ManuallyCreated bool
}

func (*STARSFlightPlan) Update added in v0.12.0

func (fp *STARSFlightPlan) Update(spec STARSFlightPlanSpecifier, localPool *av.LocalSquawkCodePool,
	nasPool *av.EnrouteSquawkCodePool) (err error)

type STARSFlightPlanSpecifier added in v0.12.0

type STARSFlightPlanSpecifier struct {
	ACID                  util.Optional[ACID]
	EntryFix              util.Optional[string]
	ExitFix               util.Optional[string]
	ExitFixIsIntermediate util.Optional[bool]
	Rules                 util.Optional[av.FlightRules]
	CoordinationTime      util.Optional[time.Time]
	PlanType              util.Optional[STARSFlightPlanType]

	SquawkAssignment         util.Optional[string]
	ImplicitSquawkAssignment util.Optional[av.Squawk] // only used when taking the track's current code

	TrackingController util.Optional[string]

	AircraftCount   util.Optional[int]
	AircraftType    util.Optional[string]
	EquipmentSuffix util.Optional[string]

	TypeOfFlight util.Optional[av.TypeOfFlight]

	AssignedAltitude      util.Optional[int]
	RequestedAltitude     util.Optional[int]
	PilotReportedAltitude util.Optional[int]

	Scratchpad          util.Optional[string]
	SecondaryScratchpad util.Optional[string]

	RNAV       util.Optional[bool]
	RNAVToggle util.Optional[bool]

	Location util.Optional[math.Point2LL]

	PointOutHistory             util.Optional[[]string]
	InhibitModeCAltitudeDisplay util.Optional[bool]
	SPCOverride                 util.Optional[string]
	DisableMSAW                 util.Optional[bool]
	DisableCA                   util.Optional[bool]
	MCISuppressedCode           util.Optional[av.Squawk]
	GlobalLeaderLineDirection   util.Optional[*math.CardinalOrdinalDirection]
	QuickFlightPlan             util.Optional[bool]
	HoldState                   util.Optional[bool]
	Suspended                   util.Optional[bool]
	CoastSuspendIndex           util.Optional[int]

	InhibitACTypeDisplay      util.Optional[bool]
	ForceACTypeDisplayEndTime util.Optional[time.Time]
}

func (STARSFlightPlanSpecifier) GetFlightPlan added in v0.12.0

type STARSFlightPlanType added in v0.12.0

type STARSFlightPlanType int
const (
	UnknownFlightPlanType STARSFlightPlanType = iota

	// Flight plan received from a NAS ARTCC.  This is a flight plan that
	// has been sent over by an overlying ERAM facility.
	RemoteEnroute

	// Flight plan received from an adjacent terminal facility This is a
	// flight plan that has been sent over by another STARS facility.
	RemoteNonEnroute

	// VFR interfacility flight plan entered locally for which the NAS
	// ARTCC has not returned a flight plan This is a flight plan that is
	// made by a STARS facility that gets a NAS code.
	LocalEnroute

	// Flight plan entered by TCW or flight plan from an adjacent terminal
	// that has been handed off to this STARS facility This is a flight
	// plan that is made at a STARS facility and gets a local code.
	LocalNonEnroute
)

Flight plan types (STARS)

type SignificantPoint added in v0.11.5

type SignificantPoint struct {
	Name         string        // JSON comes in as a map from name to SignificantPoint; we set this.
	ShortName    string        `json:"short_name"`
	Abbreviation string        `json:"abbreviation"`
	Description  string        `json:"description"`
	Location     math.Point2LL `json:"location"`
}

type Sim

type Sim struct {
	State *State

	Aircraft map[av.ADSBCallsign]*Aircraft

	SignOnPositions map[string]*av.Controller

	STARSComputer *STARSComputer
	ERAMComputer  *ERAMComputer

	LocalCodePool *av.LocalSquawkCodePool

	GenerationIndex int // for sequencing StateUpdates

	VFRReportingPoints []av.VFRReportingPoint

	// Airport -> runway -> state
	DepartureState map[string]map[string]*RunwayLaunchState
	// Key is inbound flow group name
	NextInboundSpawn map[string]time.Time
	NextVFFRequest   time.Time

	Handoffs  map[ACID]Handoff
	PointOuts map[ACID]PointOut

	ReportingPoints []av.ReportingPoint

	EnforceUniqueCallsignSuffix bool

	FutureControllerContacts []FutureControllerContact
	FutureOnCourse           []FutureOnCourse
	FutureSquawkChanges      []FutureChangeSquawk

	NextPushStart time.Time // both w.r.t. sim time
	PushEnd       time.Time

	Instructors map[string]bool

	Rand *rand.Rand
	// contains filtered or unexported fields
}

func NewSim

func NewSim(config NewSimConfiguration, manifest *VideoMapManifest, lg *log.Logger) *Sim

func (*Sim) AcceptHandoff

func (s *Sim) AcceptHandoff(tcp string, acid ACID) error

func (*Sim) AcceptRedirectedHandoff

func (s *Sim) AcceptRedirectedHandoff(tcp string, acid ACID) error

func (*Sim) AcknowledgePointOut

func (s *Sim) AcknowledgePointOut(tcp string, acid ACID) error

func (*Sim) Activate

func (s *Sim) Activate(lg *log.Logger)

func (*Sim) ActivateFlightPlan added in v0.12.0

func (s *Sim) ActivateFlightPlan(tcp string, callsign av.ADSBCallsign, acid ACID,
	spec *STARSFlightPlanSpecifier) error

Flight plan for acid must already exist; spec gives optional amendments.

func (*Sim) ActiveControllers added in v0.11.9

func (s *Sim) ActiveControllers() []string

func (*Sim) AltitudeOurDiscretion added in v0.12.0

func (s *Sim) AltitudeOurDiscretion(tcp string, callsign av.ADSBCallsign) error

func (*Sim) AssignAltitude

func (s *Sim) AssignAltitude(tcp string, callsign av.ADSBCallsign, altitude int, afterSpeed bool) error

func (*Sim) AssignHeading

func (s *Sim) AssignHeading(hdg *HeadingArgs) error

func (*Sim) AssignSpeed

func (s *Sim) AssignSpeed(tcp string, callsign av.ADSBCallsign, speed int, afterAltitude bool) error

func (*Sim) AssociateFlightPlan added in v0.12.0

func (s *Sim) AssociateFlightPlan(callsign av.ADSBCallsign, spec STARSFlightPlanSpecifier) error

Associate the specified flight plan with the track. Flight plan for ACID must not already exist.

func (*Sim) AtFixCleared

func (s *Sim) AtFixCleared(tcp string, callsign av.ADSBCallsign, fix, approach string) error

func (*Sim) CallsignForACID added in v0.12.0

func (s *Sim) CallsignForACID(acid ACID) (av.ADSBCallsign, bool)

func (*Sim) CancelApproachClearance

func (s *Sim) CancelApproachClearance(tcp string, callsign av.ADSBCallsign) error

func (*Sim) CancelHandoff

func (s *Sim) CancelHandoff(tcp string, acid ACID) error

func (*Sim) ChangeControlPosition

func (s *Sim) ChangeControlPosition(fromTCP, toTCP string, keepTracks bool) error

func (*Sim) ChangeSquawk

func (s *Sim) ChangeSquawk(tcp string, callsign av.ADSBCallsign, sq av.Squawk) error

func (*Sim) ChangeTransponderMode added in v0.11.9

func (s *Sim) ChangeTransponderMode(tcp string, callsign av.ADSBCallsign, mode av.TransponderMode) error

func (*Sim) CheckLeaks added in v0.12.1

func (s *Sim) CheckLeaks()

Make sure we're not leaking beacon codes or list indices.

func (*Sim) ClearedApproach

func (s *Sim) ClearedApproach(tcp string, callsign av.ADSBCallsign, approach string, straightIn bool) error

func (*Sim) ClimbViaSID

func (s *Sim) ClimbViaSID(tcp string, callsign av.ADSBCallsign) error

func (*Sim) ContactController added in v0.12.0

func (s *Sim) ContactController(tcp string, acid ACID, toTCP string) error

func (*Sim) ContactTower

func (s *Sim) ContactTower(tcp string, callsign av.ADSBCallsign) error

func (*Sim) ContactTrackingController added in v0.12.0

func (s *Sim) ContactTrackingController(tcp string, acid ACID) error

func (*Sim) CreateArrival

func (s *Sim) CreateArrival(arrivalGroup string, arrivalAirport string) (*Aircraft, error)

func (*Sim) CreateFlightPlan added in v0.12.0

func (s *Sim) CreateFlightPlan(tcp string, spec STARSFlightPlanSpecifier) error

func (*Sim) CreateIFRDeparture added in v0.11.9

func (s *Sim) CreateIFRDeparture(departureAirport, runway, category string) (*Aircraft, error)

func (*Sim) CreateOverflight added in v0.11.2

func (s *Sim) CreateOverflight(group string) (*Aircraft, error)

func (*Sim) CreateRestrictionArea added in v0.11.6

func (s *Sim) CreateRestrictionArea(ra av.RestrictionArea) (int, error)

func (*Sim) CreateVFRDeparture added in v0.11.9

func (s *Sim) CreateVFRDeparture(departureAirport string) (*Aircraft, error)

Note that this may fail without an error if it's having trouble finding a route.

func (*Sim) CrossFixAt

func (s *Sim) CrossFixAt(tcp string, callsign av.ADSBCallsign, fix string, ar *av.AltitudeRestriction, speed int) error

func (*Sim) DeleteAircraft

func (s *Sim) DeleteAircraft(tcp string, callsign av.ADSBCallsign) error

func (*Sim) DeleteAircraftSlice added in v0.12.0

func (s *Sim) DeleteAircraftSlice(tcp string, aircraft []Aircraft) error

func (*Sim) DeleteAllAircraft

func (s *Sim) DeleteAllAircraft(tcp string) error

func (*Sim) DeleteFlightPlan added in v0.12.0

func (s *Sim) DeleteFlightPlan(tcp string, acid ACID) error

func (*Sim) DeleteRestrictionArea added in v0.11.6

func (s *Sim) DeleteRestrictionArea(idx int) error

func (*Sim) DepartFixDirect

func (s *Sim) DepartFixDirect(tcp string, callsign av.ADSBCallsign, fixa string, fixb string) error

func (*Sim) DepartFixHeading

func (s *Sim) DepartFixHeading(tcp string, callsign av.ADSBCallsign, fix string, heading int) error

func (*Sim) DescendViaSTAR

func (s *Sim) DescendViaSTAR(tcp string, callsign av.ADSBCallsign) error

func (*Sim) DirectFix

func (s *Sim) DirectFix(tcp string, callsign av.ADSBCallsign, fix string) error

func (*Sim) ExpectApproach

func (s *Sim) ExpectApproach(tcp string, callsign av.ADSBCallsign, approach string) error

func (*Sim) ExpediteClimb

func (s *Sim) ExpediteClimb(tcp string, callsign av.ADSBCallsign) error

func (*Sim) ExpediteDescent

func (s *Sim) ExpediteDescent(tcp string, callsign av.ADSBCallsign) error

func (*Sim) FastForward added in v0.12.0

func (s *Sim) FastForward(tcp string) error

func (*Sim) ForceQL

func (s *Sim) ForceQL(tcp string, acid ACID, controller string) error

func (*Sim) GetAircraftDisplayState added in v0.12.0

func (s *Sim) GetAircraftDisplayState(callsign av.ADSBCallsign) (AircraftDisplayState, error)

func (*Sim) GetAvailableCoveredPositions added in v0.11.9

func (s *Sim) GetAvailableCoveredPositions() (map[string]av.Controller, map[string]av.Controller)

func (*Sim) GetControllerSpeech added in v0.12.1

func (s *Sim) GetControllerSpeech(tcp string) []PilotSpeech

func (*Sim) GetFlightPlanForACID added in v0.12.0

func (s *Sim) GetFlightPlanForACID(acid ACID) (*STARSFlightPlan, bool)

bool indicates whether it's active

func (*Sim) GetSerializeSim added in v0.11.9

func (s *Sim) GetSerializeSim() Sim

func (*Sim) GetStateUpdate added in v0.12.0

func (s *Sim) GetStateUpdate(tcp string, update *StateUpdate)

func (*Sim) GlobalMessage

func (s *Sim) GlobalMessage(tcp, message string) error

func (*Sim) GoAround

func (s *Sim) GoAround(tcp string, callsign av.ADSBCallsign) error

func (*Sim) HandoffTrack

func (s *Sim) HandoffTrack(tcp string, acid ACID, toTCP string) error

func (*Sim) Ident

func (s *Sim) Ident(tcp string, callsign av.ADSBCallsign) error

func (*Sim) IdleTime

func (s *Sim) IdleTime() time.Duration

func (*Sim) InterceptLocalizer

func (s *Sim) InterceptLocalizer(tcp string, callsign av.ADSBCallsign) error

func (*Sim) LaunchAircraft

func (s *Sim) LaunchAircraft(ac Aircraft, departureRunway string)

func (*Sim) LogValue

func (s *Sim) LogValue() slog.Value

func (*Sim) MaintainMaximumForward

func (s *Sim) MaintainMaximumForward(tcp string, callsign av.ADSBCallsign) error

func (*Sim) MaintainSlowestPractical

func (s *Sim) MaintainSlowestPractical(tcp string, callsign av.ADSBCallsign) error

func (*Sim) ModifyFlightPlan added in v0.12.0

func (s *Sim) ModifyFlightPlan(tcp string, acid ACID, spec STARSFlightPlanSpecifier) error

func (*Sim) PointOut

func (s *Sim) PointOut(fromTCP string, acid ACID, toTCP string) error

func (*Sim) PostEvent

func (s *Sim) PostEvent(e Event)

func (*Sim) Prespawn added in v0.11.9

func (s *Sim) Prespawn()

func (*Sim) RadarServicesTerminated added in v0.12.0

func (s *Sim) RadarServicesTerminated(tcp string, callsign av.ADSBCallsign) error

func (*Sim) RecallPointOut added in v0.11.8

func (s *Sim) RecallPointOut(tcp string, acid ACID) error

func (*Sim) RedirectHandoff

func (s *Sim) RedirectHandoff(tcp string, acid ACID, controller string) error

func (*Sim) RejectPointOut

func (s *Sim) RejectPointOut(tcp string, acid ACID) error

func (*Sim) ReleaseDeparture added in v0.11.5

func (s *Sim) ReleaseDeparture(tcp string, callsign av.ADSBCallsign) error

func (*Sim) RepositionTrack added in v0.12.0

func (s *Sim) RepositionTrack(tcp string, acid ACID, callsign av.ADSBCallsign, p math.Point2LL) error

func (*Sim) RequestFlightFollowing added in v0.12.0

func (s *Sim) RequestFlightFollowing() error

func (*Sim) ResumeOwnNavigation added in v0.12.0

func (s *Sim) ResumeOwnNavigation(tcp string, callsign av.ADSBCallsign) error

func (*Sim) SayAltitude

func (s *Sim) SayAltitude(tcp string, callsign av.ADSBCallsign) error

func (*Sim) SayHeading

func (s *Sim) SayHeading(tcp string, callsign av.ADSBCallsign) error

func (*Sim) SaySpeed

func (s *Sim) SaySpeed(tcp string, callsign av.ADSBCallsign) error

func (*Sim) SetLaunchConfig

func (s *Sim) SetLaunchConfig(tcp string, lc LaunchConfig) error

func (*Sim) SetSimRate

func (s *Sim) SetSimRate(tcp string, rate float32) error

func (*Sim) SignOff

func (s *Sim) SignOff(tcp string) error

func (*Sim) SignOn

func (s *Sim) SignOn(tcp string, instructor bool, disableTextToSpeech bool) (*State, error)

func (*Sim) Step added in v0.12.1

func (s *Sim) Step(elapsed time.Duration)

Step advances the simulation by the given elapsed time duration. This method encapsulates the core simulation stepping logic that was previously inline in Update().

func (*Sim) TakeOrReturnLaunchControl

func (s *Sim) TakeOrReturnLaunchControl(tcp string) error

func (*Sim) TogglePause

func (s *Sim) TogglePause(tcp string) error

func (*Sim) Update

func (s *Sim) Update()

func (*Sim) UpdateRestrictionArea added in v0.11.6

func (s *Sim) UpdateRestrictionArea(idx int, ra av.RestrictionArea) error

type State

type State struct {
	Tracks map[av.ADSBCallsign]*Track

	// Unassociated ones, including unsupported DBs
	UnassociatedFlightPlans []*STARSFlightPlan

	ACFlightPlans map[av.ADSBCallsign]av.FlightPlan // needed for flight strips...

	Airports          map[string]*av.Airport
	DepartureAirports map[string]interface{}
	ArrivalAirports   map[string]interface{}
	Fixes             map[string]math.Point2LL
	VFRRunways        map[string]av.Runway // assume just one runway per airport
	ReleaseDepartures []ReleaseDeparture

	// Signed in human controllers + virtual controllers
	Controllers      map[string]*av.Controller
	HumanControllers []string

	PrimaryController string
	MultiControllers  av.SplitConfiguration
	UserTCP           string
	Airspace          map[string]map[string][]av.ControllerAirspaceVolume // ctrl id -> vol name -> definition

	GenerationIndex int

	DepartureRunways []DepartureRunway
	ArrivalRunways   []ArrivalRunway
	InboundFlows     map[string]*av.InboundFlow
	LaunchConfig     LaunchConfig

	Center                   math.Point2LL
	Range                    float32
	ScenarioDefaultVideoMaps []string
	UserRestrictionAreas     []av.RestrictionArea

	STARSFacilityAdaptation STARSFacilityAdaptation

	TRACON            string
	MagneticVariation float32
	NmPerLongitude    float32
	PrimaryAirport    string

	METAR map[string]*av.METAR
	Wind  av.Wind

	TotalIFR, TotalVFR int

	Paused         bool
	SimRate        float32
	SimDescription string
	SimTime        time.Time // this is our fake time--accounting for pauses & simRate..

	QuickFlightPlanIndex int // for auto ACIDs for quick ACID flight plan 5-145

	Instructors map[string]bool

	VideoMapLibraryHash []byte

	// Set in State returned by GetStateForController
	ControllerVideoMaps                 []string
	ControllerDefaultVideoMaps          []string
	ControllerMonitoredBeaconCodeBlocks []av.Squawk

	RadioTransmissions [][]byte
}

State serves two purposes: first, the Sim object holds one to organize assorted information about the world state that it updates as part of the simulation. Second, an instance of it is given to clients when they join a sim. As the sim runs, the client's State is updated roughly once a second. Clients can then use the State as a read-only reference for assorted information they may need (the state of aircraft in the sim, etc.)

func (*State) AreInstructorOrRPO added in v0.12.1

func (ss *State) AreInstructorOrRPO(tcp string) bool

func (*State) BeaconCodeInUse added in v0.12.0

func (ss *State) BeaconCodeInUse(sq av.Squawk) bool

func (*State) FacilityFromController

func (ss *State) FacilityFromController(callsign string) (string, bool)

func (*State) FindMatchingFlightPlan added in v0.12.0

func (ss *State) FindMatchingFlightPlan(s string) *STARSFlightPlan

func (*State) GetAllReleaseDepartures added in v0.11.6

func (ss *State) GetAllReleaseDepartures() []ReleaseDeparture

func (*State) GetConsolidatedPositions added in v0.11.7

func (ss *State) GetConsolidatedPositions(id string) []string

func (*State) GetFlightPlanForACID added in v0.12.0

func (ss *State) GetFlightPlanForACID(acid ACID) *STARSFlightPlan

FOOTGUN: this should not be called from server-side code, since Tracks isn't initialized there. FIXME FIXME FIXME

func (*State) GetInitialCenter

func (ss *State) GetInitialCenter() math.Point2LL

func (*State) GetInitialRange

func (ss *State) GetInitialRange() float32

func (*State) GetOurTrackByACID added in v0.12.0

func (ss *State) GetOurTrackByACID(acid ACID) (*Track, bool)

func (*State) GetOurTrackByCallsign added in v0.12.0

func (ss *State) GetOurTrackByCallsign(callsign av.ADSBCallsign) (*Track, bool)

func (*State) GetRegularReleaseDepartures added in v0.11.6

func (ss *State) GetRegularReleaseDepartures() []ReleaseDeparture

func (*State) GetSTARSReleaseDepartures added in v0.11.6

func (ss *State) GetSTARSReleaseDepartures() []ReleaseDeparture

func (*State) GetStateForController

func (ss *State) GetStateForController(tcp string) *State

func (*State) GetTrackByACID added in v0.12.0

func (ss *State) GetTrackByACID(acid ACID) (*Track, bool)

func (*State) GetTrackByCallsign added in v0.12.0

func (ss *State) GetTrackByCallsign(callsign av.ADSBCallsign) (*Track, bool)

func (*State) GetWindVector

func (ss *State) GetWindVector(p math.Point2LL, alt float32) [2]float32

func (*State) IsExternalController added in v0.12.0

func (ss *State) IsExternalController(tcp string) bool

func (*State) IsLocalController added in v0.12.0

func (ss *State) IsLocalController(tcp string) bool

func (*State) Locate

func (ss *State) Locate(s string) (math.Point2LL, bool)

func (*State) ResolveController added in v0.12.0

func (ss *State) ResolveController(tcp string) string

type StateUpdate added in v0.12.0

type StateUpdate struct {
	GenerationIndex         int
	Tracks                  map[av.ADSBCallsign]*Track
	UnassociatedFlightPlans []*STARSFlightPlan
	ACFlightPlans           map[av.ADSBCallsign]av.FlightPlan
	ReleaseDepartures       []ReleaseDeparture

	Controllers      map[string]*av.Controller
	HumanControllers []string

	Time time.Time

	LaunchConfig LaunchConfig

	UserRestrictionAreas []av.RestrictionArea

	SimIsPaused          bool
	SimRate              float32
	TotalIFR, TotalVFR   int
	Events               []Event
	QuickFlightPlanIndex int
}

func (*StateUpdate) Apply added in v0.12.0

func (su *StateUpdate) Apply(state *State, eventStream *EventStream)

type Track added in v0.12.0

type Track struct {
	av.RadarTrack

	FlightPlan *STARSFlightPlan

	// Sort of hacky to carry these along here but it's convenient...
	DepartureAirport          string
	DepartureAirportElevation float32
	DepartureAirportLocation  math.Point2LL
	ArrivalAirport            string
	ArrivalAirportElevation   float32
	ArrivalAirportLocation    math.Point2LL
	OnExtendedCenterline      bool
	OnApproach                bool
	ATPAVolume                *av.ATPAVolume
	MVAsApply                 bool
	HoldForRelease            bool
	MissingFlightPlan         bool
	Route                     []math.Point2LL
	IsTentative               bool // first 5 seconds after first contact
}

func (*Track) HandingOffTo added in v0.12.0

func (t *Track) HandingOffTo(tcp string) bool

func (*Track) IsArrival added in v0.12.0

func (t *Track) IsArrival() bool

func (*Track) IsAssociated added in v0.12.0

func (t *Track) IsAssociated() bool

func (*Track) IsDeparture added in v0.12.0

func (t *Track) IsDeparture() bool

func (*Track) IsOverflight added in v0.12.0

func (t *Track) IsOverflight() bool

func (*Track) IsUnassociated added in v0.12.0

func (t *Track) IsUnassociated() bool

func (*Track) IsUnsupportedDB added in v0.12.0

func (t *Track) IsUnsupportedDB() bool

type TurnMethod added in v0.12.1

type TurnMethod int
const (
	TurnClosest TurnMethod = iota // default
	TurnLeft
	TurnRight
)

func (TurnMethod) String added in v0.12.1

func (t TurnMethod) String() string

type VideoMap added in v0.12.0

type VideoMap struct {
	Label       string // for DCB
	Group       int    // 0 -> A, 1 -> B
	Name        string // For maps system list
	Id          int
	Category    int
	Restriction struct {
		Id        int
		Text      [2]string
		TextBlink bool
		HideText  bool
	}
	Color int
	Lines [][]math.Point2LL

	CommandBuffer renderer.CommandBuffer
}

Note: this should match ViceMapSpec/VideoMap in crc2vice/dat2vice. (crc2vice doesn't support all of these, though.)

type VideoMapLibrary added in v0.12.0

type VideoMapLibrary struct {
	Maps []VideoMap
}

This should match VideoMapLibrary in dat2vice

func HashCheckLoadVideoMap added in v0.12.0

func HashCheckLoadVideoMap(path string, wantHash []byte) (*VideoMapLibrary, error)

Loads the specified video map file, though only if its hash matches the provided hash. Returns an error otherwise.

func LoadVideoMapLibrary added in v0.12.0

func LoadVideoMapLibrary(path string) (*VideoMapLibrary, error)

type VideoMapManifest added in v0.12.0

type VideoMapManifest struct {
	// contains filtered or unexported fields
}

VideoMapManifest stores which maps are available in a video map file and is also able to provide the video map file's hash.

func LoadVideoMapManifest added in v0.12.0

func LoadVideoMapManifest(filename string) (*VideoMapManifest, error)

func (VideoMapManifest) HasMap added in v0.12.0

func (v VideoMapManifest) HasMap(s string) bool

func (VideoMapManifest) Hash added in v0.12.0

func (v VideoMapManifest) Hash() ([]byte, error)

Hash returns a hash of the underlying video map file (i.e., not the manifest!)

type WaypointCrossingConstraint added in v0.12.1

type WaypointCrossingConstraint struct {
	Altitude float32
	Fix      string  // where we're trying to readh Altitude
	ETA      float32 // seconds
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL