public NetInfoPointSource(Enter enter, DriveLane leftLane, DriveLane rightLane, MarkupPoint.LocationType location) { Enter = enter; LeftLane = leftLane; RightLane = rightLane; Location = location; }
public NetInfoPointSource(Enter enter, DriveLane leftLane, DriveLane rightLane, MarkupPoint.LocationType location) { Enter = enter; LeftLane = leftLane; RightLane = rightLane; Location = location; NetworkType = (LeftLane == null ? NetworkType.None : leftLane.NetworkType) | (RightLane == null ? NetworkType.None : RightLane.NetworkType); }
public static IEnumerable <NetInfoPointSource> GetSource(Enter enter, DriveLane leftLane, DriveLane rightLane) { if (GetIsEdge(leftLane, rightLane)) { yield return(new NetInfoPointSource(enter, leftLane, rightLane, rightLane == null ? MarkupPoint.LocationType.RightEdge : MarkupPoint.LocationType.LeftEdge)); } else if (GetSideDelta(leftLane, rightLane) >= (leftLane.HalfWidth + rightLane.HalfWidth) / 2) { yield return(new NetInfoPointSource(enter, leftLane, rightLane, MarkupPoint.LocationType.RightEdge)); yield return(new NetInfoPointSource(enter, leftLane, rightLane, MarkupPoint.LocationType.LeftEdge)); } else { yield return(new NetInfoPointSource(enter, leftLane, rightLane, MarkupPoint.LocationType.Between)); } }
public static float GetCenterDelte(DriveLane leftLane, DriveLane rightLane) => GetIsEdge(leftLane, rightLane) ? 0f : Mathf.Abs(rightLane.Position - leftLane.Position);
public static float GetSideDelta(DriveLane leftLane, DriveLane rightLane) => GetIsEdge(leftLane, rightLane) ? 0f : Mathf.Abs(rightLane.LeftSidePos - leftLane.RightSidePos);
public static bool GetIsEdge(DriveLane leftLane, DriveLane rightLane) => rightLane == null ^ leftLane == null;