private void updateNearLines(UIPanel parent, bool force = false) { if (parent != null) { Transform linesPanelObj = parent.transform.Find("TLMLinesNear"); if (!linesPanelObj) { linesPanelObj = initPanelNearLinesOnWorldInfoPanel(parent); } var prop = typeof(WorldInfoPanel).GetField("m_InstanceID", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); ushort buildingId = ((InstanceID)(prop.GetValue(parent.gameObject.GetComponent <WorldInfoPanel>()))).Building; if (lastBuildingSelected == buildingId && !force) { return; } else { lastBuildingSelected = buildingId; } Building b = Singleton <BuildingManager> .instance.m_buildings.m_buffer[buildingId]; List <ushort> nearLines = new List <ushort>(); TLMLineUtils.GetNearLines(b.CalculateSidewalkPosition(), 120f, ref nearLines); bool showPanel = nearLines.Count > 0; // DebugOutputPanel.AddMessage (PluginManager.MessageType.Warning, "nearLines.Count = " + nearLines.Count); if (showPanel) { foreach (Transform t in linesPanelObj) { if (t.GetComponent <UILabel>() == null) { GameObject.Destroy(t.gameObject); } } Dictionary <string, ushort> lines = TLMLineUtils.SortLines(nearLines); TLMLineUtils.PrintIntersections("", "", "", "", linesPanelObj.GetComponent <UIPanel>(), lines, scale, perLine); } linesPanelObj.GetComponent <UIPanel>().isVisible = showPanel; } else { var go = GameObject.Find("TLMLinesNear"); if (!go) { return; } Transform linesPanelObj = go.transform; linesPanelObj.GetComponent <UIPanel>().isVisible = false; } }
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); } }
private float addStationToLinearMap(string stationPrefix, string stationName, Vector3 location, float offsetX, List <ushort> intersections, string airport, string harbor, string taxi, string regionalTrainStation, ushort stationNodeId, ItemClass.SubService ss, bool simple = false)//, out float intersectionPanelHeight) { ushort lineID = lineInfoPanel.lineIdSelecionado.TransportLine; TransportLine t = lineInfoPanel.controller.tm.m_lines.m_buffer[(int)lineID]; TransportManager tm = Singleton <TransportManager> .instance; UIButton stationButton = null; TLMUtils.createUIElement <UIButton>(ref stationButton, lineStationsPanel.transform); stationButton.relativePosition = new Vector3(offsetX, 15f); stationButton.width = 20; stationButton.height = 20; stationButton.name = "Station [" + stationName + "]"; TLMUtils.initButton(stationButton, true, "IconPolicyBaseCircle"); UITextField stationLabel = null; TLMUtils.createUIElement <UITextField>(ref 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 = TLMUtils.getStationName(stationNodeId, lineID, ss); }; stationLabel.eventTextSubmitted += (x, y) => { TLMUtils.setStopName(y, stationNodeId, lineID, () => { stationLabel.text = TLMUtils.getFullStationName(stationNodeId, lineID, ss); m_autoName = TLMUtils.calculateAutoName(lineID); lineInfoPanel.autoNameLabel.text = autoName; }); }; stationButton.gameObject.transform.localPosition = new Vector3(0, 0, 0); stationButton.gameObject.transform.localEulerAngles = new Vector3(0, 0, 45); stationButton.eventClick += (component, eventParam) => { lineInfoPanel.cameraController.SetTarget(lineInfoPanel.lineIdSelecionado, location, false); lineInfoPanel.cameraController.ClearTarget(); }; if (!simple) { stationOffsetX.Add(stationNodeId, offsetX); if (showIntersections) { var otherLinesIntersections = TLMLineUtils.SortLines(intersections, t); int intersectionCount = otherLinesIntersections.Count + (airport != string.Empty ? 1 : 0) + (taxi != string.Empty ? 1 : 0) + (harbor != string.Empty ? 1 : 0) + (regionalTrainStation != string.Empty ? 1 : 0); if (intersectionCount > 0) { UIPanel intersectionsPanel = null; TLMUtils.createUIElement <UIPanel>(ref 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, intersectionsPanel, otherLinesIntersections); intersectionsPanel.autoLayout = true; intersectionsPanel.wrapLayout = true; intersectionsPanel.width = 55; // return(42f); } else { return(25f); } } else if (showExtraStopInfo) { float normalWidth = 42.5f; NetNode stopNode = Singleton <NetManager> .instance.m_nodes.m_buffer[(int)stationNodeId]; int residents, tourists; TLMLineUtils.GetQuantityPassengerWaiting(stationNodeId, out residents, out tourists); UIPanel stationInfoStatsPanel = null; TLMUtils.createUIElement <UIPanel>(ref 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; UILabel residentsWaiting = null; TLMUtils.createUIElement <UILabel>(ref 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; UILabel touristsWaiting = null; TLMUtils.createUIElement <UILabel>(ref 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; // return(normalWidth); } else { return(25f); } } else { return(30f); } }