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(); } }
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(); }
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(); } }
internal void housekeeping() { TimedLight?.housekeeping(); // removes unused step lights }
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()); }