Пример #1
0
        internal void housekeeping()
        {
#if TRACE
            Singleton <CodeProfiler> .instance.Start("TrafficLightSimulation.housekeeping");
#endif
            TimedLight?.StepHousekeeping();             // removes unused step lights
#if TRACE
            Singleton <CodeProfiler> .instance.Stop("TrafficLightSimulation.housekeeping");
#endif
        }
        public void Update()
        {
            Log._Debug($"TrafficLightSimulation.Update(): called for node {NodeId}");

            if (IsTimedLight())
            {
                TimedLight.OnGeometryUpdate();
                TimedLight.Housekeeping();
            }
        }
Пример #3
0
        public void OnUpdate(NodeGeometry nodeGeometry)
        {
#if DEBUG
            Log._Debug($"TrafficLightSimulation: OnUpdate @ node {NodeId} ({nodeGeometry.NodeId})");
#endif

            if (!Flags.mayHaveTrafficLight(NodeId))
            {
                Log.Warning($"Housekeeping: Node {NodeId} has traffic light simulation but must not have a traffic light!");
                TrafficLightSimulationManager.Instance().RemoveNodeFromSimulation(NodeId, false, true);
            }

            if (!IsManualLight() && !IsTimedLight())
            {
                return;
            }

            if (!nodeGeometry.IsValid())
            {
                // node has become invalid. Remove manual/timed traffic light and destroy custom lights
                TrafficLightSimulationManager.Instance().RemoveNodeFromSimulation(NodeId, false, false);
                return;
            }

            CustomTrafficLightsManager customTrafficLightsManager = CustomTrafficLightsManager.Instance();

            for (var s = 0; s < 8; s++)
            {
                var segmentId = Singleton <NetManager> .instance.m_nodes.m_buffer[NodeId].GetSegment(s);

                if (segmentId == 0)
                {
                    continue;
                }

#if DEBUG
                Log._Debug($"TrafficLightSimulation: OnUpdate @ node {NodeId}: Adding live traffic lights to segment {segmentId}");
#endif

                // add custom lights
                if (!customTrafficLightsManager.IsSegmentLight(NodeId, segmentId))
                {
                    customTrafficLightsManager.AddSegmentLights(NodeId, segmentId);
                }

                // housekeep timed light
                customTrafficLightsManager.GetSegmentLights(NodeId, segmentId).housekeeping(true);
            }

            // ensure there is a physical traffic light
            Flags.setNodeTrafficLight(NodeId, true);

            TimedLight?.handleNewSegments();
            TimedLight?.housekeeping();
        }
Пример #4
0
        public void OnUpdate(NodeGeometry nodeGeometry)
        {
#if DEBUG
            Log._Debug($"TrafficLightSimulation: OnUpdate @ node {NodeId} ({nodeGeometry.NodeId})");
#endif

            if (!IsManualLight() && !IsTimedLight())
            {
                return;
            }

            if (!nodeGeometry.IsValid())
            {
                // node has become invalid. Remove manual/timed traffic light and destroy custom lights
                TrafficLightSimulationManager.Instance.RemoveNodeFromSimulation(NodeId, false, false);
                return;
            }

            if (!Flags.mayHaveTrafficLight(NodeId))
            {
                Log._Debug($"Housekeeping: Node {NodeId} has traffic light simulation but must not have a traffic light!");
                TrafficLightSimulationManager.Instance.RemoveNodeFromSimulation(NodeId, false, true);
                return;
            }

            CustomSegmentLightsManager customTrafficLightsManager = CustomSegmentLightsManager.Instance;

            foreach (SegmentEndGeometry end in nodeGeometry.SegmentEndGeometries)
            {
                if (end == null)
                {
                    continue;
                }

#if DEBUG
                Log._Debug($"TrafficLightSimulation: OnUpdate @ node {NodeId}: Adding live traffic lights to segment {end.SegmentId}");
#endif

                // add custom lights

                /*if (!customTrafficLightsManager.IsSegmentLight(end.SegmentId, end.StartNode)) {
                 *      customTrafficLightsManager.AddSegmentLights(end.SegmentId, end.StartNode);
                 * }*/

                // housekeep timed light
                customTrafficLightsManager.GetSegmentLights(end.SegmentId, end.StartNode).housekeeping(true, true);
            }

            // ensure there is a physical traffic light
            TrafficLightManager.Instance.AddTrafficLight(NodeId);

            TimedLight?.handleNewSegments();
            TimedLight?.housekeeping();
        }
        public void SimulationStep()
        {
            if (!HasSimulation())
            {
                return;
            }

            if (IsTimedLightRunning())
            {
                TimedLight.SimulationStep();
            }
        }
Пример #6
0
 internal void housekeeping()
 {
     TimedLight?.housekeeping();             // removes unused step lights
 }
Пример #7
0
 public bool IsTimedLightActive()
 {
     return(IsTimedLight() && TimedLight.IsStarted());
 }
 public void Housekeeping()           // TODO improve & remove
 {
     TimedLight?.Housekeeping();      // removes unused step lights
 }
        public void OnUpdate(NodeGeometry nodeGeometry)
        {
#if DEBUG
            Log._Debug($"TrafficLightSimulation: OnUpdate @ node {NodeId} ({nodeGeometry.NodeId})");
#endif

            if (!IsManualLight() && !IsTimedLight())
            {
                return;
            }

            if (!nodeGeometry.IsValid())
            {
                // node has become invalid. Remove manual/timed traffic light and destroy custom lights
                Constants.ManagerFactory.TrafficLightSimulationManager.RemoveNodeFromSimulation(NodeId, false, false);
                return;
            }

            if (!Flags.mayHaveTrafficLight(NodeId))
            {
                Log._Debug($"Housekeeping: Node {NodeId} has traffic light simulation but must not have a traffic light!");
                Constants.ManagerFactory.TrafficLightSimulationManager.RemoveNodeFromSimulation(NodeId, false, true);
                return;
            }

            ICustomSegmentLightsManager customTrafficLightsManager = Constants.ManagerFactory.CustomSegmentLightsManager;

            foreach (SegmentEndGeometry end in nodeGeometry.SegmentEndGeometries)
            {
                if (end == null)
                {
                    continue;
                }

#if DEBUG
                Log._Debug($"TrafficLightSimulation: OnUpdate @ node {NodeId}: Adding live traffic lights to segment {end.SegmentId}");
#endif

                // add custom lights

                /*if (!customTrafficLightsManager.IsSegmentLight(end.SegmentId, end.StartNode)) {
                 *      customTrafficLightsManager.AddSegmentLights(end.SegmentId, end.StartNode);
                 * }*/

                // housekeep timed light
                ICustomSegmentLights lights = customTrafficLightsManager.GetSegmentLights(end.SegmentId, end.StartNode);
                if (lights == null)
                {
                    Log.Warning($"TrafficLightSimulation.OnUpdate() @ node {NodeId}: Could not retrieve live segment lights for segment {end.SegmentId} @ start {end.StartNode}.");
                    continue;
                }
                lights.Housekeeping(true, true);
            }

            // ensure there is a physical traffic light
            Constants.ServiceFactory.NetService.ProcessNode(NodeId, delegate(ushort nodeId, ref NetNode node) {
                Constants.ManagerFactory.TrafficLightManager.AddTrafficLight(NodeId, ref node);
                return(true);
            });

            TimedLight?.OnGeometryUpdate();
            TimedLight?.Housekeeping();
        }
 public bool IsTimedLightActive()
 {
     return(IsTimedLight() && (TimedLight.IsStarted() || TimedLight.IsInTestMode()));
 }
 public bool IsTimedLightRunning()
 {
     return(IsTimedLight() && TimedLight.IsStarted());
 }