public static void UpdateLaneMarkers(ushort segmentId) { NetManager netManager = NetManager.instance; NetSegment segment = netManager.m_segments.m_buffer[segmentId]; LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance; ushort startLeftSegment = segment.m_startLeftSegment; ushort startRightSegment = segment.m_startRightSegment; ushort endLeftSegment = segment.m_endLeftSegment; ushort endRightSegment = segment.m_endRightSegment; if (!pathManager.laneChangerSegments[segmentId].PermittedConnectionTo(startLeftSegment)) { UpdateLaneMarker(NetLane.Flags.Left, NetInfo.Direction.Backward, segment); } if (!pathManager.laneChangerSegments[segmentId].PermittedConnectionTo(startRightSegment)) { UpdateLaneMarker(NetLane.Flags.Right, NetInfo.Direction.Backward, segment); } if (!pathManager.laneChangerSegments[segmentId].PermittedConnectionTo(endLeftSegment)) { UpdateLaneMarker(NetLane.Flags.Left, NetInfo.Direction.Forward, segment); } if (!pathManager.laneChangerSegments[segmentId].PermittedConnectionTo(endRightSegment)) { UpdateLaneMarker(NetLane.Flags.Right, NetInfo.Direction.Forward, segment); } }
void AddNodeConnections(NetNode node) { LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance; for (int i = 0; i < node.CountSegments(); i++) { ushort seg = node.GetSegment(i); if (seg != this.segmentId) { pathManager.laneChangerSegments[segmentId].AddPermittedConnection(seg); } } }
public override void OnCreated(ILoading loading) { FieldInfo pathManagerInstance = typeof(ColossalFramework.Singleton <PathManager>).GetField("sInstance", BindingFlags.Static | BindingFlags.NonPublic); PathManager stockPathManager = PathManager.instance; LaneChangerPathManager lcPathManager = stockPathManager.gameObject.AddComponent <LaneChangerPathManager>(); lcPathManager.UpdateWithPathManagerValues(stockPathManager); pathManagerInstance.SetValue(null, lcPathManager); FastList <ISimulationManager> managers = typeof(SimulationManager).GetField("m_managers", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null) as FastList <ISimulationManager>; managers.Remove(stockPathManager); managers.Add(lcPathManager); GameObject.Destroy(stockPathManager, 10f); }
public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) { if (currentSegment != 0) { NetTool.RenderOverlay(RenderManager.instance.CurrentCameraInfo, ref NetManager.instance.m_segments.m_buffer[currentSegment], new Color(0.0f, 0.0f, 0.5f, 0.6f), new Color(0f, 0.0f, 0.5f, 0.9f)); LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance; NetManager netManager = NetManager.instance; if (pathManager.laneChangerSegments[currentSegment] != null) { RenderOverlayForSegments(cameraInfo, netManager.m_nodes.m_buffer[netManager.m_segments.m_buffer[currentSegment].m_startNode]); RenderOverlayForSegments(cameraInfo, netManager.m_nodes.m_buffer[netManager.m_segments.m_buffer[currentSegment].m_endNode]); } } base.RenderOverlay(cameraInfo); }
private void DrawSegmentInfoBox() { NetManager netManager = Singleton <NetManager> .instance; LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance; this.width = 250f; this.height = 60f; this.transformPosition = calculateBoxPosition(); //ushort startNodeID = currentSegment.m_startNode; //ushort endNodeID = currentSegment.m_endNode; //NetNode startNode = netManager.m_nodes.m_buffer[startNodeID]; //NetNode endNode = netManager.m_nodes.m_buffer[endNodeID]; UILabel boxLabel = this.AddUIComponent <UILabel>(); boxLabel.relativePosition = new Vector3(1f, 1f); boxLabel.text = "Segment #" + this.segmentId; DrawEnableButton(); }
void ToggleLaneControl(UIComponent component, UIMouseEventParameter eventParam) { LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance; UIButton button = (UIButton)component; if (pathManager.laneChangerSegments[segmentId] == null) { pathManager.laneChangerSegments[segmentId] = new LaneChangerSegment(); AddNodeConnections(NetManager.instance.m_nodes.m_buffer[currentSegment.m_startNode]); AddNodeConnections(NetManager.instance.m_nodes.m_buffer[currentSegment.m_endNode]); button.text = "Disable Lane Control"; } else { pathManager.laneChangerSegments[segmentId] = null; NetManager.instance.UpdateSegment(segmentId); button.text = "Enable Lane Control"; } }
void RenderOverlayForSegments(RenderManager.CameraInfo cameraInfo, NetNode node) { LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance; for (int i = 0; i < node.CountSegments(); i++) { ushort segId = node.GetSegment(i); if (segId != currentSegment) { if (pathManager.laneChangerSegments[currentSegment].PermittedConnectionTo(segId)) { NetTool.RenderOverlay(RenderManager.instance.CurrentCameraInfo, ref NetManager.instance.m_segments.m_buffer[segId], new Color(0.0f, 1f, 0.0f, 0.6f), new Color(0f, 1f, 0f, 0.9f)); } else { NetTool.RenderOverlay(RenderManager.instance.CurrentCameraInfo, ref NetManager.instance.m_segments.m_buffer[segId], new Color(1f, 0.0f, 0.0f, 0.6f), new Color(1f, 0f, 0f, 0.9f)); } } } }
private void DrawEnableButton() { UIButton enableToggle = this.AddUIComponent <UIButton>(); enableToggle.relativePosition = new Vector3(5f, 15f); enableToggle.width = 150f; enableToggle.height = 30f; enableToggle.normalBgSprite = "ButtonMenu"; enableToggle.disabledBgSprite = "ButtonMenuDisabled"; enableToggle.hoveredBgSprite = "ButtonMenuHovered"; enableToggle.pressedBgSprite = "ButtonMenuPressed"; LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance; if (pathManager.laneChangerSegments[segmentId] == null) { enableToggle.text = "Enable Lane Control"; } else { enableToggle.text = "Disable Lane Control"; } enableToggle.eventClick += ToggleLaneControl; }
override protected void OnToolUpdate() { base.OnToolUpdate(); // Cast ray, find segment // Display lane info if (Input.GetMouseButtonDown(0) && !this.m_toolController.IsInsideUI) { ushort segmentId = GetSegmentAtCursor(); LaneChangerPathManager pathManager = (LaneChangerPathManager)PathManager.instance; if (segmentId != 0) { if (currentSegment == 0) { if (box == null) { UIView v = UIView.GetAView(); box = (LaneUIPanel)v.AddUIComponent(typeof(LaneUIPanel)); } NetSegment segment = NetManager.instance.m_segments.m_buffer[segmentId]; box.changeSegment(segment, segmentId); currentSegment = segmentId; } else if (pathManager.laneChangerSegments[currentSegment] != null && IsSegmentConnected(currentSegment, segmentId)) { if (pathManager.laneChangerSegments[currentSegment].PermittedConnectionTo(segmentId)) { pathManager.laneChangerSegments[currentSegment].RemovePermittedConnection(segmentId); } else { pathManager.laneChangerSegments[currentSegment].AddPermittedConnection(segmentId); } UpdateSegmentLaneMarkers(); } else { Object.Destroy(box); UIView v = UIView.GetAView(); box = (LaneUIPanel)v.AddUIComponent(typeof(LaneUIPanel)); NetSegment segment = NetManager.instance.m_segments.m_buffer[segmentId]; box.changeSegment(segment, segmentId); currentSegment = segmentId; } } } else if (Input.GetMouseButtonDown(1) && !this.m_toolController.IsInsideUI) { Object.Destroy(box); currentSegment = 0; } //if (box == null && Input.GetMouseButtonDown(0)) //{ // ushort segmentId = GetSegmentAtCursor(); // if (segmentId != 0) // { // NetSegment segment = Singleton<NetManager>.instance.m_segments.m_buffer[segmentId]; // if (box != null) // { // Object.Destroy(box); // } // UIView v = UIView.GetAView(); // box = (LaneUIPanel)v.AddUIComponent(typeof(LaneUIPanel)); // box.changeSegment(segment, segmentId); // } //} }