/// <summary> /// Distance to the next stop line /// </summary> /// <param name="simVehicleState"></param> /// <returns></returns> public double?DistanceToNextStop(SimVehicleState simVehicleState) { if (this.RoadNetwork == null) { return(null); } else { IAreaSubtypeId iasi = this.GetAreaId(simVehicleState); if (iasi == null) { return(null); } else if (iasi is ArbiterPerimeterId) { return(null); } else { ArbiterLaneId ali = (ArbiterLaneId)iasi; // get closest ArbiterLanePartition alp = this.RoadNetwork.ArbiterSegments[ali.SegmentId].Lanes[ali].GetClosestPartition(simVehicleState.Position); ArbiterWaypoint waypoint; double distance; RoadNetworkTools.NextStop(alp.Lane, alp, simVehicleState.Position, out waypoint, out distance); if (waypoint == null) { return(null); } else { return(distance); } } } }
/// <summary> /// Gets area id of a vehicle's integer area id /// </summary> /// <param name="vehicleState"></param> /// <returns></returns> public IAreaSubtypeId GetAreaId(SimVehicleState vehicleState) { return(RoadNetworkTools.GetClosest(this.RoadNetwork, vehicleState.Position)); }