public static void ToggleTrafficLight(ushort nodeId)
        {
            ToggleTrafficLightsTool toggleTool =
                ModUI.GetTrafficManagerTool()?.GetSubTool(ToolMode.ToggleTrafficLight) as ToggleTrafficLightsTool;

            toggleTool?.ToggleTrafficLight(nodeId, ref nodeId.ToNode(), false);
        }
        public static void DeserializeData(IEnumerable <byte> data)
        {
            var nm    = Singleton <NetManager> .instance;
            var nodes = nm.m_nodes;

            int i = 0;

            foreach (var hasLights in data.Select(Convert.ToBoolean))
            {
                var node = nodes.m_buffer[i];
                if (hasLights)
                {
                    //this if is utterly unnecessary...
                    if (!ToggleTrafficLightsTool.HasTrafficLights(node.m_flags))
                    {
                        node.m_flags |= NetNode.Flags.TrafficLights;
                    }
                }
                else //(!hasLights)
                {
                    //"
                    if (ToggleTrafficLightsTool.HasTrafficLights(node.m_flags))
                    {
                        node.m_flags &= ~NetNode.Flags.TrafficLights;
                    }
                }

                nodes.m_buffer[i] = node;

                i++;
            }
        }
Exemple #3
0
        public void CustomClickNodeButton(ushort nodeId, ref NetNode data, int index)
        {
            if ((data.m_flags & NetNode.Flags.Junction) == NetNode.Flags.None ||
                Singleton <InfoManager> .instance.CurrentMode != InfoManager.InfoMode.TrafficRoutes ||
                Singleton <InfoManager> .instance.CurrentSubMode !=
                InfoManager.SubInfoMode.WaterPower)
            {
                return;
            }

            if (index == -1)
            {
                /*data.m_flags ^= NetNode.Flags.TrafficLights;
                 *  data.m_flags |= NetNode.Flags.CustomTrafficLights;*/

                // NON-STOCK CODE START
                ToggleTrafficLightsTool toggleTool = (ToggleTrafficLightsTool)ModUI
                                                     .GetTrafficManagerTool(true)
                                                     .GetSubTool(ToolMode.SwitchTrafficLight);
                toggleTool.ToggleTrafficLight(nodeId, ref data, false);

                // NON-STOCK CODE END
                UpdateNodeFlags(nodeId, ref data);
                Singleton <NetManager> .instance.m_yieldLights.Disable();
            }
            else if (index >= 1 &&
                     index <= 8 &&
                     (data.m_flags & (NetNode.Flags.TrafficLights
                                      | NetNode.Flags.OneWayIn)) == NetNode.Flags.None)
            {
                ushort segmentId = data.GetSegment(index - 1);
                if (segmentId == 0)
                {
                    return;
                }

                NetManager netManager = Singleton <NetManager> .instance;
                NetInfo    info       = netManager.m_segments.m_buffer[segmentId].Info;
                if ((info.m_vehicleTypes & (VehicleInfo.VehicleType.Car | VehicleInfo.VehicleType.Tram)) ==
                    VehicleInfo.VehicleType.None)
                {
                    return;
                }

                bool             flag  = netManager.m_segments.m_buffer[segmentId].m_startNode == nodeId;
                NetSegment.Flags flags = (!flag) ? NetSegment.Flags.YieldEnd : NetSegment.Flags.YieldStart;
                netManager.m_segments.m_buffer[segmentId].m_flags ^= flags;
                netManager.m_segments.m_buffer[segmentId].UpdateLanes(segmentId, true);
                Singleton <NetManager> .instance.m_yieldLights.Disable();
            }
        }
 public static IEnumerable <byte> SerializeData()
 {
     return(Singleton <NetManager> .instance.m_nodes.m_buffer
            .Select(n => ToggleTrafficLightsTool.HasTrafficLights(n.m_flags))
            .Select(Convert.ToByte));
 }