47 lines
1.7 KiB
Go
47 lines
1.7 KiB
Go
package engine
|
|
|
|
// MaxAltitude triggers when altitude rises above Limit (in metres).
|
|
// Used as the burst condition for ascent stages.
|
|
type MaxAltitude struct {
|
|
Limit float64
|
|
On Action
|
|
}
|
|
|
|
func (c MaxAltitude) Name() string { return "max_altitude" }
|
|
func (c MaxAltitude) Violated(_ float64, s State) bool { return s.Altitude >= c.Limit }
|
|
func (c MaxAltitude) Action() Action { return c.On }
|
|
|
|
// MinAltitude triggers when altitude falls at or below Limit (in metres).
|
|
// With Limit=0 this is the "sea level" terminator.
|
|
type MinAltitude struct {
|
|
Limit float64
|
|
On Action
|
|
}
|
|
|
|
func (c MinAltitude) Name() string { return "min_altitude" }
|
|
func (c MinAltitude) Violated(_ float64, s State) bool { return s.Altitude <= c.Limit }
|
|
func (c MinAltitude) Action() Action { return c.On }
|
|
|
|
// MaxTime triggers when t exceeds Limit (UNIX seconds). Used as a stop
|
|
// condition for float profiles.
|
|
type MaxTime struct {
|
|
Limit float64
|
|
On Action
|
|
}
|
|
|
|
func (c MaxTime) Name() string { return "max_time" }
|
|
func (c MaxTime) Violated(t float64, _ State) bool { return t > c.Limit }
|
|
func (c MaxTime) Action() Action { return c.On }
|
|
|
|
// TerrainContact triggers when altitude has dropped at or below ground level.
|
|
// Equivalent to Tawhiri's elevation termination.
|
|
type TerrainContact struct {
|
|
Provider TerrainProvider
|
|
On Action
|
|
}
|
|
|
|
func (c TerrainContact) Name() string { return "terrain_contact" }
|
|
func (c TerrainContact) Violated(_ float64, s State) bool {
|
|
return c.Provider.Elevation(s.Lat, s.Lng) > s.Altitude
|
|
}
|
|
func (c TerrainContact) Action() Action { return c.On }
|