예제 #1
0
        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;
        }
예제 #2
0
        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;
                }
            }
        }
예제 #3
0
        public void AddWaypoint(Waypoint wp)
        {
            Waypoints.Add(wp);

            RouteType = Waypoints.First() == Waypoints.Last() ? RouteTypes.Circular : RouteTypes.Direct;
        }
예제 #4
0
        public void RemoveWaypoint(Waypoint wp)
        {
            Waypoints.Remove(wp);

            RouteType = Waypoints.First() == Waypoints.Last() ? RouteTypes.Circular : RouteTypes.Direct;
        }