Example #1
0
 private void ApplyFlags()
 {
     for (uint laneId = 0; laneId < NetManager.MAX_LANE_COUNT; ++laneId)
     {
         Flags.ApplyLaneArrowFlags(laneId);
     }
 }
        public static void Prefix(RoadBaseAI __instance, ushort segmentID, ref NetSegment data)
        {
            // TODO check if this is required *START*
            uint curLaneId = data.m_lanes;
            int  numLanes  = data.Info.m_lanes.Length;
            uint laneIndex = 0;

            while (laneIndex < numLanes && curLaneId != 0u)
            {
                Flags.ApplyLaneArrowFlags(curLaneId);

                laneIndex++;
                curLaneId = Singleton <NetManager> .instance.m_lanes.m_buffer[curLaneId].m_nextLane;
            }

            // ↑↑↑↑
            // TODO check if this is required *END*
#if BENCHMARK
            using (Benchmark.MaybeCreateBenchmark(null, "Traffic-measurement")) {
#endif
            if (segmentID < lastSimulatedSegmentId)
            {
                // segment simulation restart
                ++trafficMeasurementMod;
                if (trafficMeasurementMod >= 4)
                {
                    trafficMeasurementMod = 0;
                }
            }

            lastSimulatedSegmentId = segmentID;

            bool doTrafficMeasurement = true;
            if (Options.simulationAccuracy == SimulationAccuracy.High ||
                Options.simulationAccuracy == SimulationAccuracy.Medium)
            {
                doTrafficMeasurement = (segmentID & 1) == trafficMeasurementMod;
            }
            else if (Options.simulationAccuracy <= SimulationAccuracy.Low)
            {
                doTrafficMeasurement = (segmentID & 3) == trafficMeasurementMod;
            }

            if (doTrafficMeasurement)
            {
                Constants.ManagerFactory.TrafficMeasurementManager.OnBeforeSimulationStep(
                    segmentID,
                    ref data);
            }
#if BENCHMARK
        }
#endif
        }
Example #3
0
        /// <summary>
        /// Apply user lane arrows.
        /// </summary>
        private static void Forced(ushort segmentId)
        {
            uint laneId = segmentId.ToSegment().m_lanes;

            while (laneId != 0)
            {
                if (!Flags.ApplyLaneArrowFlags(laneId))
                {
                    Flags.RemoveLaneArrowFlags(laneId);
                }

                laneId = laneId.ToLane().m_nextLane;
            }
        }
Example #4
0
        public static void Postfix(ushort segmentID, ref NetSegment data, bool loading)
        {
            NetManager netManager = Singleton <NetManager> .instance;
            uint       laneId     = netManager.m_segments.m_buffer[segmentID].m_lanes;

            while (laneId != 0)
            {
                if (!Flags.ApplyLaneArrowFlags(laneId))
                {
                    Flags.RemoveLaneArrowFlags(laneId);
                }

                laneId = netManager.m_lanes.m_buffer[laneId].m_nextLane;
            }
        }
Example #5
0
        public static void Prefix(RoadBaseAI __instance, ushort segmentID, ref NetSegment data)
        {
            // TODO check if this is required *START*
            uint curLaneId = data.m_lanes;
            int  numLanes  = data.Info.m_lanes.Length;
            uint laneIndex = 0;

            while (laneIndex < numLanes && curLaneId != 0u)
            {
                Flags.ApplyLaneArrowFlags(curLaneId);

                laneIndex++;
                curLaneId = Singleton <NetManager> .instance.m_lanes.m_buffer[curLaneId].m_nextLane;
            }

            // ↑↑↑↑
            // TODO check if this is required *END*
            Constants.ManagerFactory.TrafficMeasurementManager.OnBeforeSimulationStep(
                segmentID,
                ref data);
        }
        private void GuiLaneChangeWindow(int num)
        {
            NetSegment[]    segmentsBuffer = Singleton <NetManager> .instance.m_segments.m_buffer;
            IList <LanePos> laneList       = Constants.ServiceFactory.NetService.GetSortedLanes(
                SelectedSegmentId,
                ref segmentsBuffer[SelectedSegmentId],
                segmentsBuffer[SelectedSegmentId].m_startNode == SelectedNodeId,
                LaneArrowManager.LANE_TYPES,
                LaneArrowManager.VEHICLE_TYPES,
                true);

            bool?startNode = Constants.ServiceFactory.NetService.IsStartNode(SelectedSegmentId, SelectedNodeId);

            if (startNode == null)
            {
                Log.Error(
                    $"LaneArrowTool._guiLaneChangeWindow: Segment {SelectedSegmentId} " +
                    $"is not connected to node {SelectedNodeId}");
                return;
            }

            GUILayout.BeginHorizontal();

            for (var i = 0; i < laneList.Count; i++)
            {
                var flags = (NetLane.Flags)Singleton <NetManager>
                            .instance.m_lanes.m_buffer[laneList[i].laneId].m_flags;

                var style1 = new GUIStyle("button");
                var style2 = new GUIStyle("button")
                {
                    normal  = { textColor = new Color32(255, 0, 0, 255) },
                    hover   = { textColor = new Color32(255, 0, 0, 255) },
                    focused = { textColor = new Color32(255, 0, 0, 255) }
                };

                var laneStyle = new GUIStyle {
                    contentOffset = new Vector2(12f, 0f)
                };

                var laneTitleStyle = new GUIStyle {
                    contentOffset = new Vector2(36f, 2f),
                    normal        = { textColor = new Color(1f, 1f, 1f) }
                };

                GUILayout.BeginVertical(laneStyle);
                GUILayout.Label(Translation.GetString("Lane") + " " + (i + 1), laneTitleStyle);
                GUILayout.BeginVertical();
                GUILayout.BeginHorizontal();

                if (!Flags.ApplyLaneArrowFlags(laneList[i].laneId))
                {
                    Flags.RemoveLaneArrowFlags(laneList[i].laneId);
                }

                SetLaneArrowError res = SetLaneArrowError.Invalid;
                bool buttonClicked    = false;

                if (GUILayout.Button(
                        "←",
                        ((flags & NetLane.Flags.Left) == NetLane.Flags.Left ? style1 : style2),
                        GUILayout.Width(35),
                        GUILayout.Height(25)))
                {
                    buttonClicked = true;
                    LaneArrowManager.Instance.ToggleLaneArrows(
                        laneList[i].laneId,
                        (bool)startNode,
                        LaneArrows.Left,
                        out res);
                }

                if (GUILayout.Button(
                        "↑",
                        ((flags & NetLane.Flags.Forward) == NetLane.Flags.Forward ? style1 : style2),
                        GUILayout.Width(25),
                        GUILayout.Height(35)))
                {
                    buttonClicked = true;
                    LaneArrowManager.Instance.ToggleLaneArrows(
                        laneList[i].laneId,
                        (bool)startNode,
                        LaneArrows.Forward,
                        out res);
                }

                if (GUILayout.Button(
                        "→",
                        ((flags & NetLane.Flags.Right) == NetLane.Flags.Right ? style1 : style2),
                        GUILayout.Width(35),
                        GUILayout.Height(25)))
                {
                    buttonClicked = true;
                    LaneArrowManager.Instance.ToggleLaneArrows(
                        laneList[i].laneId,
                        (bool)startNode,
                        LaneArrows.Right,
                        out res);
                }

                if (buttonClicked)
                {
                    switch (res)
                    {
                    case SetLaneArrowError.HighwayArrows: {
                        MainTool.ShowTooltip(
                            Translation.GetString("Lane_Arrow_Changer_Disabled_Highway"));
                        break;
                    }

                    case SetLaneArrowError.LaneConnection: {
                        MainTool.ShowTooltip(
                            Translation.GetString("Lane_Arrow_Changer_Disabled_Connection"));
                        break;
                    }
                    }
                }

                GUILayout.EndHorizontal();
                GUILayout.EndVertical();
                GUILayout.EndVertical();
            }

            GUILayout.EndHorizontal();
        }