public void setLineNumberCircle(ushort lineID)
 {
     TLMLineUtils.setLineNumberCircleOnRef(lineID, linearMapLineNumber);
     try
     {
         m_autoName = TLMLineUtils.calculateAutoName(lineID);
         linearMapLineNumber.tooltip = m_autoName;
     }
     catch { }
 }
        private float addStationToLinearMap(string stationPrefix, string stationName, Vector3 location, float offsetX, List <ushort> intersections,
                                            string airport, string harbor, string taxi, string regionalTrainStation, string cableCarStation,
                                            ushort stationNodeId, ItemClass.SubService ss, Color lineColor, bool simple)//, out float intersectionPanelHeight)
        {
            ushort           lineID = parent.CurrentSelectedId;
            TransportLine    t      = TLMController.instance.tm.m_lines.m_buffer[(int)lineID];
            TransportManager tm     = Singleton <TransportManager> .instance;

            if (stationName == null)
            {
                stationName = "???";
            }

            TLMUtils.createUIElement(out UIButton stationButton, lineStationsPanel.transform);
            stationButton.relativePosition = new Vector3(offsetX - 13, 15f);
            stationButton.width            = 20;
            stationButton.height           = 20;
            stationButton.color            = lineColor;
            stationButton.name             = "Station [" + stationName + "]";
            stationButton.atlas            = TLMController.taLineNumber;
            stationButton.tooltip          = stationName + "(id:" + stationNodeId + ")";
            TLMUtils.initButton(stationButton, true, "LinearStation");

            TLMUtils.createUIElement(out DroppableStationInfo dsi, stationButton.transform);
            dsi.nodeId = stationNodeId;
            dsi.name   = "DSI Station [" + stationName + "] - " + stationNodeId;

            TLMUtils.createUIElement(out UITextField stationLabel, stationButton.transform);
            stationLabel.autoSize            = true;
            stationLabel.width               = 220;
            stationLabel.height              = 20;
            stationLabel.useOutline          = true;
            stationLabel.pivot               = UIPivotPoint.MiddleLeft;
            stationLabel.horizontalAlignment = UIHorizontalAlignment.Left;
            stationLabel.verticalAlignment   = UIVerticalAlignment.Middle;
            stationLabel.name             = "Station [" + stationName + "] Name";
            stationLabel.relativePosition = new Vector3(23f, -13f);
            stationLabel.text             = (!string.IsNullOrEmpty(stationPrefix) ? stationPrefix.Trim() + " " : "") + stationName.Trim();
            stationLabel.textScale        = Math.Max(0.5f, Math.Min(1, 24f / stationLabel.text.Length));

            TLMUtils.uiTextFieldDefaults(stationLabel);
            stationLabel.color           = new Color(0.3f, 0.3f, 0.3f, 1);
            stationLabel.textColor       = Color.white;
            stationLabel.cursorWidth     = 2;
            stationLabel.cursorBlinkTime = 100;
            stationLabel.eventGotFocus  += (x, y) =>
            {
                stationLabel.text = TLMLineUtils.getStationName(stationNodeId, lineID, ss);
            };
            stationLabel.eventTextSubmitted += (x, y) =>
            {
                TLMLineUtils.setStopName(y, stationNodeId, lineID, () =>
                {
                    stationLabel.text = TLMLineUtils.getFullStationName(stationNodeId, lineID, ss);
                    m_autoName        = TLMLineUtils.calculateAutoName(lineID, true);
                    parent.OnRenameStationAction(autoName);
                });
            };

            stationButton.gameObject.transform.localPosition    = new Vector3(0, 0, 0);
            stationButton.gameObject.transform.localEulerAngles = new Vector3(0, 0, 45);
            stationButton.eventClick += (component, eventParam) =>
            {
                GameObject gameObject = GameObject.FindGameObjectWithTag("MainCamera");
                if (gameObject != null)
                {
                    var        cameraController = gameObject.GetComponent <CameraController>();
                    InstanceID x = default(InstanceID);
                    x.TransportLine = parent.CurrentSelectedId;
                    cameraController.SetTarget(x, location, false);
                    cameraController.ClearTarget();
                }
            };
            if (!simple)
            {
                if (!stationOffsetX.ContainsKey(stationNodeId))
                {
                    stationOffsetX.Add(stationNodeId, offsetX);
                }
                if (showIntersections)
                {
                    var     otherLinesIntersections = TLMLineUtils.SortLines(intersections, t);
                    UILabel distance          = null;
                    int     intersectionCount = otherLinesIntersections.Count + (airport != string.Empty ? 1 : 0) + (taxi != string.Empty ? 1 : 0) + (harbor != string.Empty ? 1 : 0) + (regionalTrainStation != string.Empty ? 1 : 0) + (cableCarStation != string.Empty ? 1 : 0);

                    if ((TLMSingleton.showDistanceInLinearMap || parent.ForceShowStopsDistances) && offsetX > 0)
                    {
                        NetSegment seg = Singleton <NetManager> .instance.m_segments.m_buffer[Singleton <NetManager> .instance.m_nodes.m_buffer[stationNodeId].m_segment0];
                        if (seg.m_endNode != stationNodeId)
                        {
                            seg = Singleton <NetManager> .instance.m_segments.m_buffer[Singleton <NetManager> .instance.m_nodes.m_buffer[stationNodeId].m_segment1];
                        }
                        if (seg.m_endNode != stationNodeId)
                        {
                            seg = Singleton <NetManager> .instance.m_segments.m_buffer[Singleton <NetManager> .instance.m_nodes.m_buffer[stationNodeId].m_segment2];
                        }
                        if (seg.m_endNode != stationNodeId)
                        {
                            seg = Singleton <NetManager> .instance.m_segments.m_buffer[Singleton <NetManager> .instance.m_nodes.m_buffer[stationNodeId].m_segment3];
                        }
                        if (seg.m_endNode != stationNodeId)
                        {
                            seg = Singleton <NetManager> .instance.m_segments.m_buffer[Singleton <NetManager> .instance.m_nodes.m_buffer[stationNodeId].m_segment4];
                        }
                        if (seg.m_endNode != stationNodeId)
                        {
                            seg = Singleton <NetManager> .instance.m_segments.m_buffer[Singleton <NetManager> .instance.m_nodes.m_buffer[stationNodeId].m_segment5];
                        }
                        if (seg.m_endNode != stationNodeId)
                        {
                            seg = Singleton <NetManager> .instance.m_segments.m_buffer[Singleton <NetManager> .instance.m_nodes.m_buffer[stationNodeId].m_segment6];
                        }
                        if (seg.m_endNode != stationNodeId)
                        {
                            seg = Singleton <NetManager> .instance.m_segments.m_buffer[Singleton <NetManager> .instance.m_nodes.m_buffer[stationNodeId].m_segment7];
                        }
                        if (seg.m_endNode != stationNodeId)
                        {
                            seg = default(NetSegment);
                        }
                        TLMUtils.createUIElement(out UIPanel distContainer, stationButton.transform);
                        distContainer.size             = new Vector2(0, 0);
                        distContainer.relativePosition = new Vector3(0, 0, 0);
                        TLMUtils.createUIElement(out distance, distContainer.transform);
                        distance.autoSize   = false;
                        distance.useOutline = true;
                        if (seg.Equals(default(NetSegment)))
                        {
                            distance.text  = "???";
                            distance.color = Color.red;
                        }
                        else
                        {
                            distance.text = (int)seg.m_averageLength + "m";
                        }
                        distance.textScale         = 0.7f;
                        distance.textAlignment     = UIHorizontalAlignment.Center;
                        distance.verticalAlignment = UIVerticalAlignment.Middle;
                        distance.name                       = "dist.";
                        distance.font                       = UIHelperExtension.defaultFontCheckbox;
                        distance.width                      = 50f;
                        distance.height                     = 50;
                        distance.relativePosition           = new Vector3(-42, 0);
                        distance.transform.localEulerAngles = new Vector3(0, 0, 45);
                        distance.isInteractive              = false;
                    }

                    if (intersectionCount > 0)
                    {
                        TLMUtils.createUIElement(out UIPanel intersectionsPanel, stationButton.transform);
                        intersectionsPanel.autoSize                  = false;
                        intersectionsPanel.autoLayout                = false;
                        intersectionsPanel.autoLayoutStart           = LayoutStart.TopLeft;
                        intersectionsPanel.autoLayoutDirection       = LayoutDirection.Horizontal;
                        intersectionsPanel.relativePosition          = new Vector3(-20, 10);
                        intersectionsPanel.wrapLayout                = false;
                        intersectionsPanel.autoFitChildrenVertically = true;

                        TLMLineUtils.PrintIntersections(airport, harbor, taxi, regionalTrainStation, cableCarStation, intersectionsPanel, otherLinesIntersections);
                        intersectionsPanel.autoLayout = true;
                        intersectionsPanel.wrapLayout = true;
                        intersectionsPanel.width      = 55;
                        //
                        return(42f);
                    }
                    else
                    {
                        TLMUtils.initButton(stationButton, true, "LinearHalfStation");
                        if (offsetX == 0)
                        {
                            stationButton.relativePosition = new Vector3(offsetX - 13, 15f);
                            return(31f);
                        }
                        else if (distance == null)
                        {
                            stationButton.relativePosition = new Vector3(offsetX - 23, 15f);
                            return(21f);
                        }
                        else
                        {
                            return(42f);
                        }
                    }
                }
                else if (showExtraStopInfo)
                {
                    float normalWidth = 42.5f;

                    NetNode stopNode = Singleton <NetManager> .instance.m_nodes.m_buffer[(int)stationNodeId];

                    TLMLineUtils.GetQuantityPassengerWaiting(stationNodeId, out int residents, out int tourists, out int ttb);

                    TLMUtils.createUIElement(out UIPanel stationInfoStatsPanel, stationButton.transform);
                    stationInfoStatsPanel.autoSize   = false;
                    stationInfoStatsPanel.autoLayout = false;
                    stationInfoStatsPanel.autoFitChildrenVertically = true;
                    stationInfoStatsPanel.autoLayoutStart           = LayoutStart.TopLeft;
                    stationInfoStatsPanel.autoLayoutDirection       = LayoutDirection.Horizontal;
                    stationInfoStatsPanel.relativePosition          = new Vector3(-20, 10);
                    stationInfoStatsPanel.autoLayout = true;
                    stationInfoStatsPanel.wrapLayout = true;
                    stationInfoStatsPanel.width      = normalWidth;

                    TLMUtils.createUIElement(out UILabel residentsWaiting, stationInfoStatsPanel.transform);
                    residentsWaiting.autoSize         = false;
                    residentsWaiting.useOutline       = true;
                    residentsWaiting.text             = residents.ToString();
                    residentsWaiting.tooltipLocaleID  = "TLM_RESIDENTS_WAITING";
                    residentsWaiting.backgroundSprite = "EmptySprite";
                    residentsWaiting.color            = new Color32(0x12, 0x68, 0x34, 255);
                    residentsWaiting.width            = normalWidth;
                    residentsWaiting.padding          = new RectOffset(0, 0, 4, 2);
                    residentsWaiting.height           = 20;
                    residentsWaiting.textScale        = 0.7f;
                    residentsWaiting.textAlignment    = UIHorizontalAlignment.Center;
                    residentCounters[stationNodeId]   = residentsWaiting;

                    TLMUtils.createUIElement(out UILabel touristsWaiting, stationInfoStatsPanel.transform);
                    touristsWaiting.autoSize         = false;
                    touristsWaiting.text             = tourists.ToString();
                    touristsWaiting.tooltipLocaleID  = "TLM_TOURISTS_WAITING";
                    touristsWaiting.useOutline       = true;
                    touristsWaiting.width            = normalWidth;
                    touristsWaiting.height           = 20;
                    touristsWaiting.padding          = new RectOffset(0, 0, 4, 2);
                    touristsWaiting.textScale        = 0.7f;
                    touristsWaiting.backgroundSprite = "EmptySprite";
                    touristsWaiting.color            = new Color32(0x1f, 0x25, 0x68, 255);
                    touristsWaiting.textAlignment    = UIHorizontalAlignment.Center;
                    touristCounters[stationNodeId]   = touristsWaiting;

                    TLMUtils.createUIElement(out UILabel timeTilBored, stationInfoStatsPanel.transform);
                    timeTilBored.autoSize         = false;
                    timeTilBored.text             = tourists.ToString();
                    timeTilBored.tooltipLocaleID  = "TLM_TIME_TIL_BORED";
                    timeTilBored.useOutline       = true;
                    timeTilBored.width            = normalWidth;
                    timeTilBored.height           = 20;
                    timeTilBored.padding          = new RectOffset(0, 0, 4, 2);
                    timeTilBored.textScale        = 0.7f;
                    timeTilBored.backgroundSprite = "EmptySprite";
                    timeTilBored.color            = new Color32(0x1f, 0x25, 0x68, 255);
                    timeTilBored.textAlignment    = UIHorizontalAlignment.Center;
                    ttbTimers[stationNodeId]      = timeTilBored;
                    //
                    return(normalWidth);
                }
                else
                {
                    return(30f);
                }
            }
            else
            {
                return(30f);
            }
        }
        public void redrawLine()
        {
            ushort        lineID       = parent.CurrentSelectedId;
            TransportLine t            = TLMController.instance.tm.m_lines.m_buffer[(int)lineID];
            int           stopsCount   = t.CountStops(lineID);
            int           vehicleCount = t.CountVehicles(lineID);
            Color         lineColor    = TLMController.instance.tm.GetLineColor(lineID);

            setLinearMapColor(lineColor);
            clearStations();
            updateSubIconLayer();
            setLineNumberCircle(lineID);
            if (lineID == 0)
            {
                var tsd = TransportSystemDefinition.from(parent.CurrentTransportInfo);
                if (tsd != default(TransportSystemDefinition))
                {
                    linearMapLineNumberFormat.backgroundSprite = TLMLineUtils.GetIconForIndex(tsd.toConfigIndex());
                }
                lineStationsPanel.width = 0;
                return;
            }

            ItemClass.SubService ss = TLMCW.getDefinitionForLine(lineID).subService;
            linearMapLineNumberFormat.backgroundSprite = TLMLineUtils.getIconForLine(lineID);
            m_autoName = TLMLineUtils.calculateAutoName(lineID, true);
            linearMapLineNumber.tooltip = m_autoName;
            string  stationName;
            Vector3 local;
            string  airport, taxi, harbor, regionalStation, cableCarStation;
            string  namePrefix;
            bool    isComplete = (Singleton <TransportManager> .instance.m_lines.m_buffer[TLMController.instance.CurrentSelectedId].m_flags & TransportLine.Flags.Complete) != TransportLine.Flags.None;
            bool    simmetric  = TLMLineUtils.CalculateSimmetry(ss, stopsCount, t, out int middle);
            float   addedWidth = 0;

            lineStationsPanel.width = 0;
            if (t.Info.m_transportType != TransportInfo.TransportType.Bus && t.Info.m_transportType != TransportInfo.TransportType.Tram && simmetric && !showExtraStopInfo)
            {
                int maxIt = middle + stopsCount / 2;
                for (int j = middle; j <= maxIt; j++)
                {
                    ushort stationId = t.GetStop(j);
                    local      = getStation(lineID, stationId, ss, out stationName, out List <ushort> intersections, out airport, out harbor, out taxi, out regionalStation, out cableCarStation, out namePrefix);
                    addedWidth = addStationToLinearMap(namePrefix, stationName, local, lineStationsPanel.width, intersections, airport, harbor, taxi, regionalStation, cableCarStation, stationId, ss, lineColor, false) + (j == middle + stopsCount / 2 ? 5 : 0);
                    lineStationsPanel.width += addedWidth;
                }
            }
            else
            {
                int minI = 0, maxI = stopsCount;
                if (simmetric)
                {
                    minI = middle + 1;
                    maxI = stopsCount + middle + 1;
                }
                if (showExtraStopInfo)
                {
                    int    j         = (minI - 1 + stopsCount) % stopsCount;
                    ushort stationId = t.GetStop(j);
                    local = getStation(lineID, stationId, ss, out stationName, out List <ushort> intersections, out airport, out harbor, out taxi, out regionalStation, out cableCarStation, out namePrefix);
                    lineStationsPanel.width += addStationToLinearMap(namePrefix, stationName, local, lineStationsPanel.width, intersections, airport, harbor, taxi, regionalStation, cableCarStation, stationId, ss, lineColor, true);
                }
                else if (TLMSingleton.showDistanceInLinearMap || parent.ForceShowStopsDistances)
                {
                    minI--;
                }
                for (int i = minI; i < maxI; i++)
                {
                    int    j         = (i + stopsCount) % stopsCount;
                    ushort stationId = t.GetStop(j);
                    local      = getStation(lineID, stationId, ss, out stationName, out List <ushort> intersections, out airport, out harbor, out taxi, out regionalStation, out cableCarStation, out namePrefix);
                    addedWidth = addStationToLinearMap(namePrefix, stationName, local, lineStationsPanel.width, intersections, airport, harbor, taxi, regionalStation, cableCarStation, stationId, ss, lineColor, false);
                    lineStationsPanel.width += addedWidth;
                }
            }
            lineStationsPanel.width -= addedWidth;
            if (showExtraStopInfo)
            {
                vehiclesOnStation.Clear();
                for (int v = 0; v < vehicleCount; v++)
                {
                    ushort vehicleId = t.GetVehicle(v);

                    AddVehicleToLinearMap(lineColor, vehicleId);
                }
            }
        }
 public void AutoName(ushort m_LineID)
 {
     TLMLineUtils.setLineName(m_LineID, TLMLineUtils.calculateAutoName(m_LineID));
 }