private void RebuildList()
        {
            AdrAzimuthEditorLineNeighbor[] currentLines = m_uiHelperNeighbors.Self.GetComponentsInChildren <AdrAzimuthEditorLineNeighbor>();
            int stopsCount = AdrNeighborhoodExtension.GetStopsCount();

            if (stopsCount == 0)
            {
                stopsCount = 1;
            }

            m_borderCities = new List <AdrAzimuthEditorLineNeighbor>();
            int count = 0;

            for (int i = 0; i < stopsCount; i++, count++)
            {
                if (i < currentLines.Length)
                {
                    currentLines[i].SetLegendInfo(GetColorForNumber(i), i + 1);
                    m_borderCities.Add(currentLines[i]);
                }
                else
                {
                    AdrAzimuthEditorLineNeighbor line = KlyteMonoUtils.CreateElement <AdrAzimuthEditorLineNeighbor>(m_uiHelperNeighbors.Self.transform);
                    line.SetLegendInfo(GetColorForNumber(i), i + 1);
                    line.OnValueChange += ValidateAngleStr;
                    m_borderCities.Add(line);
                }
            }
            for (int i = count; i < currentLines.Length; i++)
            {
                GameObject.Destroy(currentLines[i].gameObject);
            }
            ReordenateFields();
        }
        private void ReordenateFields()
        {
            uint[] values  = new uint[m_borderCities.Count];
            bool   invalid = false;

            for (int i = 0; i < m_borderCities.Count; i++)
            {
                AdrAzimuthEditorLineNeighbor textField = m_borderCities[i];
                if (!uint.TryParse(textField.GetCurrentVal(), out uint res) || res < 0 || res > 360)
                {
                    textField.SetTextColor(Color.red);
                    values[i] = 1000;
                    invalid   = true;
                }
                else
                {
                    textField.SetTextColor(Color.white);
                    values[i] = res;
                }
            }
            if (!invalid)
            {
                List <uint> sortedValues = new List <uint>(values);
                sortedValues.Sort();
                List <Tuple <int, int, Color, AdrAzimuthEditorLineNeighbor> > updateInfo = new List <Tuple <int, int, Color, AdrAzimuthEditorLineNeighbor> >();
                for (int i = 0; i < m_borderCities.Count; i++)
                {
                    int zOrder = sortedValues.IndexOf(values[i]);
                    updateInfo.Add(Tuple.New(zOrder, (int)values[i], GetColorForNumber(i), m_borderCities[i]));
                }
                updateInfo.Sort((x, y) => x.First - y.First);
                for (int i = 0; i < updateInfo.Count; i++)
                {
                    float start = updateInfo[i].Second;
                    float end   = updateInfo[(i + 1) % updateInfo.Count].Second;
                    if (end < start)
                    {
                        end += 360;
                    }

                    float angle = (start + end) / 2f;
                    updateInfo[i].Fourth.SetData();
                }
                m_borderChart.SetValues(updateInfo.Select(x => Tuple.New(x.Second, x.Third)).ToList());
            }
            SegmentUtils.UpdateSegmentNamesView();
        }
        private void RebuildList()
        {
            m_isLoading = true;
            AdrAzimuthEditorLineNeighbor[] currentLines = m_neighborsList?.GetComponentsInChildren <AdrAzimuthEditorLineNeighbor>();
            if (currentLines is null)
            {
                return;
            }

            int stopsCount = AdrNeighborhoodExtension.GetStopsCount();

            if (stopsCount == 0)
            {
                stopsCount = 1;
            }

            m_borderCities = new List <AdrAzimuthEditorLineNeighbor>();
            int count = 0;

            for (int i = 0; i < stopsCount; i++, count++)
            {
                if (i < currentLines.Length)
                {
                    currentLines[i].SetLegendInfo(GetColorForNumber(i), i + 1);
                    m_borderCities.Add(currentLines[i]);
                }
                else
                {
                    KlyteMonoUtils.CreateUIElement(out UIPanel newEntry, m_neighborsList.transform, "NeighborhoodEntry");
                    AdrAzimuthEditorLineNeighbor line = newEntry.gameObject.AddComponent <AdrAzimuthEditorLineNeighbor>();
                    line.SetLegendInfo(GetColorForNumber(i), i + 1);
                    line.OnValueChange     += ValidateAngleStr;
                    line.OnFixedNameChange += SetFixedName;
                    m_borderCities.Add(line);
                }
            }
            for (int i = count; i < currentLines.Length; i++)
            {
                GameObject.Destroy(currentLines[i].gameObject);
            }
            m_isLoading = false;
            ReordenateFields();
        }