public DummyClient() { CanStart = false; Waypoints.Add(new Waypoint(WaypointType.Waypoint, "ZeeRo", 0, 0, 0)); Waypoints.Add(new Waypoint(WaypointType.Waypoint, "Québec", 46.8073, -71.2072, 65, null, "CY", "CYQB")); filteredWaypoints = new ReadOnlyObservableCollection <Waypoint>(Waypoints); waypointSubscription = this.WhenAnyValue(x => x.Waypoint).Subscribe(x => { EHSI.WorkingWaypoint = Waypoint != null; if (EHSI.WorkingWaypoint) { EHSI.WaypointLatitude = x.Latitude; EHSI.WaypointLongitude = x.Longitude; EHSI.WaypointMeanAltitude = x.Altitude; if (x.Bearing.HasValue) { EHSI.Bearing = x.Bearing.Value; } } else { EHSI.Distance = 0; } }); Waypoint = Waypoints.First(); EHSI.PropertyChanged += EHSI_PropertyChanged; }
public void Move(Duration time) { var speed = MaxSpeed; if (Waypoints?.Any() == true) { var delta = Waypoints.First().Position - Position; Velocity = new Velocity(speed, delta); } else { Velocity = null; return; } var target = Waypoints.First().Position; var distanceToTarget = target.DistanceTo(Position); var distanceCovered = speed * time; if (distanceToTarget > distanceCovered) { var pct = distanceCovered / distanceToTarget; var targetDelta = target - Position; var moveDelta = targetDelta * pct; Position += moveDelta; } else { Position = target; Waypoints.RemoveAt(0); if (Waypoints.Any() == false) { Waypoints = null; } } }
public void AddWaypoint(Waypoint wp) { Waypoints.Add(wp); RouteType = Waypoints.First() == Waypoints.Last() ? RouteTypes.Circular : RouteTypes.Direct; }
public void RemoveWaypoint(Waypoint wp) { Waypoints.Remove(wp); RouteType = Waypoints.First() == Waypoints.Last() ? RouteTypes.Circular : RouteTypes.Direct; }