private void DrawSpline(DrawMode mode, SplineComponent s)
        {
            int  length   = (int)(s.TotalLength() / SegmentLength);
            bool selected = (mode & DrawMode.Selected) != 0;

            if ((mode & DrawMode.Line) != 0)
            {
                for (int i = 0; i <= length - 1; i++)
                {
                    bool isEven     = i % 2 == 0;
                    var  startPoint = (Vector3)s.Point((float)i / length);
                    var  endPoint   = (Vector3)s.Point((float)(i + 1) / length);
                    var  color      = (selected
                            ? (isEven ? Color.red : Color.green)
                            : Color.white);
                    if ((mode & DrawMode.Darker) != 0)
                    {
                        color *= 0.75f;
                    }
                    Gizmos.color = color;
                    Gizmos.DrawLine(startPoint + OffsetZ,
                                    endPoint + OffsetZ);
                }
            }

            if ((mode & DrawMode.Arrow) != 0)
            {
                Gizmos.color = selected ? Color.cyan : Color.white;
                var center  = s.Point(0.5f);
                var forward = s.Tangent(0.5f);

                Mesh coneMesh = null;
                if (transform.parent.GetComponent <RoadSetup>() != null)
                {
                    coneMesh = transform.parent.GetComponent <RoadSetup>().ConeMesh;
                }

                if (transform.parent.GetComponent <RoadPiece>() != null)
                {
                    coneMesh = transform.parent.GetComponent <RoadPiece>().ConeMesh;
                }

                if (coneMesh != null)
                {
                    Gizmos.DrawMesh(coneMesh, center, Quaternion.LookRotation(forward),
                                    new Vector3(1f, 1f, 2f));
                }
            }
        }