public void ChangeLightMain() { var invertedLight = LightMain == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; if (CurrentMode == Mode.Simple) { LightLeft = invertedLight; LightRight = invertedLight; LightPedestrian = !PedestrianEnabled ? LightMain : LightPedestrian; LightMain = invertedLight; } else if (CurrentMode == Mode.LeftForwardR) { LightRight = invertedLight; LightMain = invertedLight; } else if (CurrentMode == Mode.RightForwardL) { LightLeft = invertedLight; LightMain = invertedLight; } else { LightMain = invertedLight; } if (!PedestrianEnabled) { LightPedestrian = _checkPedestrianLight(); } UpdateVisuals(); }
public void ChangeLightMain() { var invertedLight = LightMain == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; if (CurrentMode == Mode.Simple) { LightLeft = invertedLight; LightRight = invertedLight; //LightPedestrian = !PedestrianEnabled ? LightMain : LightPedestrian; LightMain = invertedLight; } else if (CurrentMode == Mode.SingleLeft) { LightRight = invertedLight; LightMain = invertedLight; } else if (CurrentMode == Mode.SingleRight) { LightLeft = invertedLight; LightMain = invertedLight; } else { LightMain = invertedLight; } UpdateVisuals(); }
public void MakeRedOrGreen() { #if DEBUGTTL if (DebugSwitch.TimedTrafficLights.Get() && DebugSettings.NodeId == NodeId) { Log._Debug($"CustomSegmentLight.MakeRedOrGreen: called for segment {SegmentId} @ {NodeId}"); } #endif RoadBaseAI.TrafficLightState mainState = RoadBaseAI.TrafficLightState.Green; RoadBaseAI.TrafficLightState leftState = RoadBaseAI.TrafficLightState.Green; RoadBaseAI.TrafficLightState rightState = RoadBaseAI.TrafficLightState.Green; if (LightLeft != RoadBaseAI.TrafficLightState.Green) { leftState = RoadBaseAI.TrafficLightState.Red; } if (LightMain != RoadBaseAI.TrafficLightState.Green) { mainState = RoadBaseAI.TrafficLightState.Red; } if (LightRight != RoadBaseAI.TrafficLightState.Green) { rightState = RoadBaseAI.TrafficLightState.Red; } SetStates(mainState, leftState, rightState); }
public CustomSegmentLight(CustomSegmentLights lights, RoadBaseAI.TrafficLightState mainLight) { this.lights = lights; SetStates(mainLight, leftLight, rightLight); UpdateVisuals(); }
public void invert() { LightMain = InvertLight(LightMain); LightLeft = InvertLight(LightLeft); LightRight = InvertLight(LightRight); //LightPedestrian = invertLight(LightPedestrian); }
public void ChangeLightMain() { var invertedLight = lightMain == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; if (currentMode == Mode.Simple) { lightLeft = invertedLight; lightRight = invertedLight; lightPedestrian = !pedestrianEnabled ? lightMain : lightPedestrian; lightMain = invertedLight; } else if (currentMode == Mode.LeftForwardR) { lightRight = invertedLight; lightMain = invertedLight; } else if (currentMode == Mode.RightForwardL) { lightLeft = invertedLight; lightMain = invertedLight; } else { lightMain = invertedLight; } if (!pedestrianEnabled) { lightPedestrian = _checkPedestrianLight(); } UpdateVisuals(); }
/*public void invert() { * LightMain = InvertLight(LightMain); * LightLeft = InvertLight(LightLeft); * LightRight = InvertLight(LightRight); * }*/ public static RoadBaseAI.TrafficLightState GetPedestrianLightState(RoadBaseAI.TrafficLightState vehicleLightState) { #if TRACE Singleton <CodeProfiler> .instance.Start("CustomSegmentLight.GetPedestrianLightState"); #endif RoadBaseAI.TrafficLightState ret = RoadBaseAI.TrafficLightState.Green; switch (vehicleLightState) { case RoadBaseAI.TrafficLightState.Red: default: ret = RoadBaseAI.TrafficLightState.Green; break; case RoadBaseAI.TrafficLightState.Green: ret = RoadBaseAI.TrafficLightState.Red; break; case RoadBaseAI.TrafficLightState.RedToGreen: ret = RoadBaseAI.TrafficLightState.GreenToRed; break; case RoadBaseAI.TrafficLightState.GreenToRed: ret = RoadBaseAI.TrafficLightState.RedToGreen; break; } #if TRACE Singleton <CodeProfiler> .instance.Stop("CustomSegmentLight.GetPedestrianLightState"); #endif return(ret); }
public void MakeRedOrGreen() { #if DEBUGTTL if (GlobalConfig.Instance.Debug.Switches[7] && GlobalConfig.Instance.Debug.NodeId == NodeId) { Log._Debug($"CustomSegmentLight.MakeRedOrGreen: called for segment {SegmentId} @ {NodeId}"); } #endif RoadBaseAI.TrafficLightState mainState = RoadBaseAI.TrafficLightState.Green; RoadBaseAI.TrafficLightState leftState = RoadBaseAI.TrafficLightState.Green; RoadBaseAI.TrafficLightState rightState = RoadBaseAI.TrafficLightState.Green; if (LightLeft != RoadBaseAI.TrafficLightState.Green) { leftState = RoadBaseAI.TrafficLightState.Red; } if (LightMain != RoadBaseAI.TrafficLightState.Green) { mainState = RoadBaseAI.TrafficLightState.Red; } if (LightRight != RoadBaseAI.TrafficLightState.Green) { rightState = RoadBaseAI.TrafficLightState.Red; } SetStates(mainState, leftState, rightState); }
internal void MakeRedOrGreen() { if (LightLeft == RoadBaseAI.TrafficLightState.RedToGreen) { LightLeft = RoadBaseAI.TrafficLightState.Green; } else if (LightLeft == RoadBaseAI.TrafficLightState.GreenToRed) { LightLeft = RoadBaseAI.TrafficLightState.Red; } if (LightMain == RoadBaseAI.TrafficLightState.RedToGreen) { LightMain = RoadBaseAI.TrafficLightState.Green; } else if (LightMain == RoadBaseAI.TrafficLightState.GreenToRed) { LightMain = RoadBaseAI.TrafficLightState.Red; } if (LightRight == RoadBaseAI.TrafficLightState.RedToGreen) { LightRight = RoadBaseAI.TrafficLightState.Green; } else if (LightRight == RoadBaseAI.TrafficLightState.GreenToRed) { LightRight = RoadBaseAI.TrafficLightState.Red; } }
public void SetStates(RoadBaseAI.TrafficLightState?mainLight, RoadBaseAI.TrafficLightState?leftLight, RoadBaseAI.TrafficLightState?rightLight, bool calcAutoPedLight = true) { if ((mainLight == null || this.mainLight == mainLight) && (leftLight == null || this.leftLight == leftLight) && (rightLight == null || this.rightLight == rightLight)) { return; } if (mainLight != null) { this.mainLight = (RoadBaseAI.TrafficLightState)mainLight; } if (leftLight != null) { this.leftLight = (RoadBaseAI.TrafficLightState)leftLight; } if (rightLight != null) { this.rightLight = (RoadBaseAI.TrafficLightState)rightLight; } #if DEBUGTTL if (GlobalConfig.Instance.Debug.Switches[7] && GlobalConfig.Instance.Debug.NodeId == NodeId) { Log._Debug($"CustomSegmentLight.SetStates({mainLight}, {leftLight}, {rightLight}, {calcAutoPedLight}) for segment {SegmentId} @ {NodeId}: {this.mainLight} {this.leftLight} {this.rightLight}"); } #endif lights.OnChange(calcAutoPedLight); }
public void SetStates(RoadBaseAI.TrafficLightState?mainLight, RoadBaseAI.TrafficLightState?leftLight, RoadBaseAI.TrafficLightState?rightLight, bool calcAutoPedLight = true) { if ((mainLight == null || this.mainLight == mainLight) && (leftLight == null || this.leftLight == leftLight) && (rightLight == null || this.rightLight == rightLight)) { return; } if (mainLight != null) { this.mainLight = (RoadBaseAI.TrafficLightState)mainLight; } if (leftLight != null) { this.leftLight = (RoadBaseAI.TrafficLightState)leftLight; } if (rightLight != null) { this.rightLight = (RoadBaseAI.TrafficLightState)rightLight; } //Log._Debug($"SetStates for segment {SegmentId} @ {NodeId}: {this.mainLight} {this.leftLight} {this.rightLight}"); lights.OnChange(calcAutoPedLight); }
internal void MakeRedOrGreen() { #if TRACE Singleton <CodeProfiler> .instance.Start("CustomSegmentLight.MakeRedOrGreen"); #endif if (LightLeft == RoadBaseAI.TrafficLightState.RedToGreen) { LightLeft = RoadBaseAI.TrafficLightState.Green; } else if (LightLeft == RoadBaseAI.TrafficLightState.GreenToRed) { LightLeft = RoadBaseAI.TrafficLightState.Red; } if (LightMain == RoadBaseAI.TrafficLightState.RedToGreen) { LightMain = RoadBaseAI.TrafficLightState.Green; } else if (LightMain == RoadBaseAI.TrafficLightState.GreenToRed) { LightMain = RoadBaseAI.TrafficLightState.Red; } if (LightRight == RoadBaseAI.TrafficLightState.RedToGreen) { LightRight = RoadBaseAI.TrafficLightState.Green; } else if (LightRight == RoadBaseAI.TrafficLightState.GreenToRed) { LightRight = RoadBaseAI.TrafficLightState.Red; } #if TRACE Singleton <CodeProfiler> .instance.Stop("CustomSegmentLight.MakeRedOrGreen"); #endif }
internal void SetLights(RoadBaseAI.TrafficLightState lightState) { foreach (KeyValuePair <ExtVehicleType, CustomSegmentLight> e in CustomLights) { e.Value.SetStates(lightState, lightState, lightState, false); } CalculateAutoPedestrianLightState(); }
public void ChangeMode() { SegmentGeometry geometry = SegmentGeometry.Get(SegmentId); //geometry.Recalculate(true, true); bool startNode = geometry.StartNodeId() == NodeId; var hasLeftSegment = geometry.HasOutgoingLeftSegment(startNode); var hasForwardSegment = geometry.HasOutgoingStraightSegment(startNode); var hasRightSegment = geometry.HasOutgoingRightSegment(startNode); #if DEBUG Log._Debug($"ChangeMode. segment {SegmentId} @ node {NodeId}, hasOutgoingLeft={hasLeftSegment}, hasOutgoingStraight={hasForwardSegment}, hasOutgoingRight={hasRightSegment}"); #endif if (CurrentMode == Mode.Simple) { if (!hasLeftSegment) { CurrentMode = Mode.SingleRight; } else { CurrentMode = Mode.SingleLeft; } } else if (CurrentMode == Mode.SingleLeft) { if (!hasForwardSegment || !hasRightSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.SingleRight; } } else if (CurrentMode == Mode.SingleRight) { if (!hasLeftSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.All; } } else { CurrentMode = Mode.Simple; } if (CurrentMode == Mode.Simple) { LightLeft = LightMain; LightRight = LightMain; //LightPedestrian = _checkPedestrianLight(); } }
public CustomSegmentLights(ushort nodeId, ushort segmentId, RoadBaseAI.TrafficLightState mainState, RoadBaseAI.TrafficLightState leftState, RoadBaseAI.TrafficLightState rightState, RoadBaseAI.TrafficLightState pedState) { this.nodeId = nodeId; this.segmentId = segmentId; PedestrianLightState = null; OnChange(); housekeeping(false, mainState, leftState, rightState, pedState); }
public void ChangeMode() { SegmentGeometry geometry = CustomRoadAI.GetSegmentGeometry(SegmentId); geometry.Recalculate(true, true); var hasLeftSegment = geometry.HasOutgoingLeftSegment(NodeId); var hasForwardSegment = geometry.HasOutgoingStraightSegment(NodeId); var hasRightSegment = geometry.HasOutgoingRightSegment(NodeId); Log._Debug($"ChangeMode. segment {SegmentId} @ node {NodeId}, hasOutgoingLeft={hasLeftSegment}, hasOutgoingStraight={hasForwardSegment}, hasOutgoingRight={hasRightSegment}"); if (CurrentMode == Mode.Simple) { if (!hasLeftSegment) { CurrentMode = Mode.SingleRight; } else { CurrentMode = Mode.SingleLeft; } } else if (CurrentMode == Mode.SingleLeft) { if (!hasForwardSegment || !hasRightSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.SingleRight; } } else if (CurrentMode == Mode.SingleRight) { if (!hasLeftSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.All; } } else { CurrentMode = Mode.Simple; } if (CurrentMode == Mode.Simple) { LightLeft = LightMain; LightRight = LightMain; //LightPedestrian = _checkPedestrianLight(); } }
public void ChangeLightRight() { var invertedLight = LightRight == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; LightRight = invertedLight; UpdateVisuals(); }
AddSegmentLights(ushort segmentId, bool startNode, RoadBaseAI.TrafficLightState lightState = RoadBaseAI.TrafficLightState.Red) { #if DEBUG Log._Trace($"CustomTrafficLights.AddSegmentLights: Adding segment light: {segmentId} @ startNode={startNode}"); #endif if (!Services.NetService.IsSegmentValid(segmentId)) { return(null); } CustomSegment customSegment = customSegments_[segmentId]; if (customSegment == null) { customSegment = new CustomSegment(); customSegments_[segmentId] = customSegment; } else { ICustomSegmentLights existingLights = startNode ? customSegment.StartNodeLights : customSegment.EndNodeLights; if (existingLights != null) { existingLights.SetLights(lightState); return(existingLights); } } if (startNode) { customSegment.StartNodeLights = new CustomSegmentLights( this, segmentId, startNode, false); customSegment.StartNodeLights.SetLights(lightState); return(customSegment.StartNodeLights); } else { customSegment.EndNodeLights = new CustomSegmentLights( this, segmentId, startNode, false); customSegment.EndNodeLights.SetLights(lightState); return(customSegment.EndNodeLights); } }
public ManualSegmentLight(ushort nodeId, ushort segmentId, RoadBaseAI.TrafficLightState mainLight, RoadBaseAI.TrafficLightState leftLight, RoadBaseAI.TrafficLightState rightLight, RoadBaseAI.TrafficLightState pedestrianLight) { this.nodeId = nodeId; this.segmentId = segmentId; LightMain = mainLight; LightLeft = leftLight; LightRight = rightLight; LightPedestrian = pedestrianLight; UpdateVisuals(); }
public CustomSegmentLight(CustomSegmentLights lights, ushort nodeId, ushort segmentId, RoadBaseAI.TrafficLightState mainLight, RoadBaseAI.TrafficLightState leftLight, RoadBaseAI.TrafficLightState rightLight /*, RoadBaseAI.TrafficLightState pedestrianLight*/) { this.NodeId = nodeId; this.SegmentId = segmentId; this.lights = lights; LightMain = mainLight; LightLeft = leftLight; LightRight = rightLight; UpdateVisuals(); }
public void ChangeLightPedestrian() { if (pedestrianEnabled) { var invertedLight = lightPedestrian == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; lightPedestrian = invertedLight; UpdateVisuals(); } }
public void SetLights(RoadBaseAI.TrafficLightState lightState) { foreach (KeyValuePair <ExtVehicleType, ICustomSegmentLight> e in CustomLights) { e.Value.SetStates(lightState, lightState, lightState, false); } Constants.ServiceFactory.NetService.ProcessNode(NodeId, delegate(ushort nId, ref NetNode node) { CalculateAutoPedestrianLightState(ref node); return(true); }); }
public CustomSegmentLight(CustomSegmentLights lights, ushort nodeId, ushort segmentId, RoadBaseAI.TrafficLightState mainLight, RoadBaseAI.TrafficLightState leftLight, RoadBaseAI.TrafficLightState rightLight/*, RoadBaseAI.TrafficLightState pedestrianLight*/) { this.NodeId = nodeId; this.SegmentId = segmentId; this.lights = lights; LightMain = mainLight; LightLeft = leftLight; LightRight = rightLight; //LightPedestrian = pedestrianLight; UpdateVisuals(); }
public ManualSegmentLight(ushort nodeId, ushort segmentId, RoadBaseAI.TrafficLightState mainLight, RoadBaseAI.TrafficLightState leftLight, RoadBaseAI.TrafficLightState rightLight, RoadBaseAI.TrafficLightState pedestrianLight) { this.nodeId = nodeId; this.segmentId = segmentId; LightMain = mainLight; LightLeft = leftLight; LightRight = rightLight; LightPedestrian = pedestrianLight; UpdateVisuals(); }
public CustomSegmentLight(CustomSegmentLights lights, ushort nodeId, ushort segmentId, RoadBaseAI.TrafficLightState mainLight) { this.NodeId = nodeId; this.SegmentId = segmentId; this.lights = lights; LightMain = mainLight; LightLeft = mainLight; LightRight = mainLight; UpdateVisuals(); }
public ManualSegmentLight(ushort nodeId, ushort segmentId, RoadBaseAI.TrafficLightState mainLight) { this.nodeId = nodeId; this.segmentId = segmentId; LightMain = mainLight; LightLeft = mainLight; LightRight = mainLight; LightPedestrian = mainLight == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; UpdateVisuals(); }
public void ChangeMode() { var hasLeftSegment = TrafficPriority.HasLeftSegment(segmentId, nodeId) && TrafficPriority.HasLeftLane(nodeId, segmentId); var hasForwardSegment = TrafficPriority.HasForwardSegment(segmentId, nodeId) && TrafficPriority.HasForwardLane(nodeId, segmentId); var hasRightSegment = TrafficPriority.HasRightSegment(segmentId, nodeId) && TrafficPriority.HasRightLane(nodeId, segmentId); if (CurrentMode == Mode.Simple) { if (!hasLeftSegment) { CurrentMode = Mode.SingleRight; } else { CurrentMode = Mode.SingleLeft; } } else if (CurrentMode == Mode.SingleLeft) { if (!hasForwardSegment || !hasRightSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.SingleRight; } } else if (CurrentMode == Mode.SingleRight) { if (!hasLeftSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.All; } } else { CurrentMode = Mode.Simple; } if (CurrentMode == Mode.Simple) { LightLeft = LightMain; LightRight = LightMain; LightPedestrian = _checkPedestrianLight(); } }
public void ChangeMode() { var hasLeftSegment = TrafficPriority.HasLeftSegment(this.segment, this.node) && TrafficPriority.hasLeftLane(this.node, this.segment); var hasForwardSegment = TrafficPriority.HasForwardSegment(this.segment, this.node) && TrafficPriority.hasForwardLane(this.node, this.segment); var hasRightSegment = TrafficPriority.HasRightSegment(this.segment, this.node) && TrafficPriority.hasRightLane(this.node, this.segment); if (currentMode == ManualSegmentLight.Mode.Simple) { if (!hasLeftSegment) { currentMode = ManualSegmentLight.Mode.RightForwardL; } else { currentMode = ManualSegmentLight.Mode.LeftForwardR; } } else if (currentMode == ManualSegmentLight.Mode.LeftForwardR) { if (!hasForwardSegment || !hasRightSegment) { currentMode = ManualSegmentLight.Mode.Simple; } else { currentMode = ManualSegmentLight.Mode.RightForwardL; } } else if (currentMode == ManualSegmentLight.Mode.RightForwardL) { if (!hasLeftSegment) { currentMode = ManualSegmentLight.Mode.Simple; } else { currentMode = ManualSegmentLight.Mode.All; } } else { currentMode = ManualSegmentLight.Mode.Simple; } if (currentMode == Mode.Simple) { lightLeft = lightMain; lightRight = lightMain; lightPedestrian = _checkPedestrianLight(); } }
public ManualSegmentLight(ushort node, int segment, RoadBaseAI.TrafficLightState mainLight) { Node = node; Segment = segment; LightMain = mainLight; LightLeft = mainLight; LightRight = mainLight; LightPedestrian = mainLight == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; UpdateVisuals(); }
GetSegmentLights(ushort segmentId, bool startNode, bool add = true, RoadBaseAI.TrafficLightState lightState = RoadBaseAI.TrafficLightState.Red) { if (!IsSegmentLight(segmentId, startNode)) { return(add ? AddSegmentLights(segmentId, startNode, lightState) : null); } CustomSegment customSegment = customSegments_[segmentId]; return(startNode ? customSegment.StartNodeLights : customSegment.EndNodeLights); }
public void ChangeLightRight() { var invertedLight = LightRight == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; LightRight = invertedLight; /*if (!PedestrianEnabled) { * LightPedestrian = _checkPedestrianLight(); * }*/ UpdateVisuals(); }
public ManualSegmentLight(ushort node, int segment, RoadBaseAI.TrafficLightState mainLight) { this.node = node; this.segment = segment; lightMain = mainLight; lightLeft = mainLight; lightRight = mainLight; lightPedestrian = mainLight == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; UpdateVisuals(); }
public static void AddSegmentLight(ushort nodeID, int segmentID, RoadBaseAI.TrafficLightState light) { if (ManualSegments.ContainsKey(segmentID)) { ManualSegments[segmentID].node_2 = nodeID; ManualSegments[segmentID].instance_2 = new ManualSegmentLight(nodeID, segmentID, light); } else { ManualSegments.Add(segmentID, new ManualSegment()); ManualSegments[segmentID].node_1 = nodeID; ManualSegments[segmentID].instance_1 = new ManualSegmentLight(nodeID, segmentID, light); } }
public static RoadBaseAI.TrafficLightState InvertLight(RoadBaseAI.TrafficLightState light) // TODO refactor { switch (light) { case RoadBaseAI.TrafficLightState.Red: case RoadBaseAI.TrafficLightState.GreenToRed: return(RoadBaseAI.TrafficLightState.Green); case RoadBaseAI.TrafficLightState.Green: case RoadBaseAI.TrafficLightState.RedToGreen: default: return(RoadBaseAI.TrafficLightState.Red); } }
//public bool PedestrianEnabled; public CustomSegmentLight(CustomSegmentLights lights, ushort nodeId, ushort segmentId, RoadBaseAI.TrafficLightState mainLight) { this.NodeId = nodeId; this.SegmentId = segmentId; this.lights = lights; LightMain = mainLight; LightLeft = mainLight; LightRight = mainLight; /*LightPedestrian = mainLight == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green;*/ UpdateVisuals(); }
private RoadBaseAI.TrafficLightState calcLightState(RoadBaseAI.TrafficLightState previousState, RoadBaseAI.TrafficLightState currentState, RoadBaseAI.TrafficLightState nextState, bool atStartTransition, bool atEndTransition) { if (atStartTransition && currentState == RoadBaseAI.TrafficLightState.Green && previousState == RoadBaseAI.TrafficLightState.Red) { return(RoadBaseAI.TrafficLightState.RedToGreen); } else if (atEndTransition && currentState == RoadBaseAI.TrafficLightState.Green && nextState == RoadBaseAI.TrafficLightState.Red) { return(RoadBaseAI.TrafficLightState.GreenToRed); } else { return(currentState); } }
public void ChangeLightLeft() { var invertedLight = LightLeft == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; LightLeft = invertedLight; if (!PedestrianEnabled) { LightPedestrian = _checkPedestrianLight(); } UpdateVisuals(); }
public void ChangeMode() { var hasLeftSegment = TrafficPriority.HasLeftSegment(this.segment, this.node) && TrafficPriority.hasLeftLane(this.node, this.segment); var hasForwardSegment = TrafficPriority.HasForwardSegment(this.segment, this.node) && TrafficPriority.hasForwardLane(this.node, this.segment); var hasRightSegment = TrafficPriority.HasRightSegment(this.segment, this.node) && TrafficPriority.hasRightLane(this.node, this.segment); if (currentMode == ManualSegmentLight.Mode.Simple) { if (!hasLeftSegment) { currentMode = ManualSegmentLight.Mode.RightForwardL; } else { currentMode = ManualSegmentLight.Mode.LeftForwardR; } } else if (currentMode == ManualSegmentLight.Mode.LeftForwardR) { if (!hasForwardSegment || !hasRightSegment) { currentMode = ManualSegmentLight.Mode.Simple; } else { currentMode = ManualSegmentLight.Mode.RightForwardL; } } else if (currentMode == ManualSegmentLight.Mode.RightForwardL) { if (!hasLeftSegment) { currentMode = ManualSegmentLight.Mode.Simple; } else { currentMode = ManualSegmentLight.Mode.All; } } else { currentMode = ManualSegmentLight.Mode.Simple; } if (currentMode == Mode.Simple) { lightLeft = lightMain; lightRight = lightMain; lightPedestrian = _checkPedestrianLight(); } }
public void ChangeLightPedestrian() { if (PedestrianEnabled) { var invertedLight = LightPedestrian == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; LightPedestrian = invertedLight; UpdateVisuals(); } }
internal void MakeRed() { LightLeft = RoadBaseAI.TrafficLightState.Red; LightMain = RoadBaseAI.TrafficLightState.Red; LightRight = RoadBaseAI.TrafficLightState.Red; }
internal void MakeRedOrGreen() { if (LightLeft == RoadBaseAI.TrafficLightState.RedToGreen) { LightLeft = RoadBaseAI.TrafficLightState.Green; } else if (LightLeft == RoadBaseAI.TrafficLightState.GreenToRed) { LightLeft = RoadBaseAI.TrafficLightState.Red; } if (LightMain == RoadBaseAI.TrafficLightState.RedToGreen) { LightMain = RoadBaseAI.TrafficLightState.Green; } else if (LightMain == RoadBaseAI.TrafficLightState.GreenToRed) { LightMain = RoadBaseAI.TrafficLightState.Red; } if (LightRight == RoadBaseAI.TrafficLightState.RedToGreen) { LightRight = RoadBaseAI.TrafficLightState.Green; } else if (LightRight == RoadBaseAI.TrafficLightState.GreenToRed) { LightRight = RoadBaseAI.TrafficLightState.Red; } }
public void invert() { LightMain = InvertLight(LightMain); LightLeft = InvertLight(LightLeft); LightRight = InvertLight(LightRight); //LightPedestrian = invertLight(LightPedestrian); }
/*public void ChangeLightPedestrian() { if (PedestrianEnabled) { var invertedLight = LightPedestrian == RoadBaseAI.TrafficLightState.Green ? RoadBaseAI.TrafficLightState.Red : RoadBaseAI.TrafficLightState.Green; LightPedestrian = invertedLight; UpdateVisuals(); } }*/ /*RoadBaseAI.TrafficLightState lastVehicleLightState = RoadBaseAI.TrafficLightState.Red; RoadBaseAI.TrafficLightState lastPedestrianLightState = RoadBaseAI.TrafficLightState.Red;*/ public void UpdateVisuals() { var instance = Singleton<NetManager>.instance; uint currentFrameIndex = Singleton<SimulationManager>.instance.m_currentFrameIndex; uint num = (uint)(((int)NodeId << 8) / 32768); RoadBaseAI.TrafficLightState vehicleLightState; RoadBaseAI.TrafficLightState pedestrianLightState; RoadBaseAI.TrafficLightState mainLight = LightMain; RoadBaseAI.TrafficLightState leftLight = LightLeft; RoadBaseAI.TrafficLightState rightLight = LightRight; switch (CurrentMode) { case Mode.Simple: leftLight = mainLight; rightLight = mainLight; break; case Mode.SingleLeft: rightLight = mainLight; break; case Mode.SingleRight: leftLight = mainLight; break; case Mode.All: default: break; } // any green? if (mainLight == RoadBaseAI.TrafficLightState.Green || leftLight == RoadBaseAI.TrafficLightState.Green || rightLight == RoadBaseAI.TrafficLightState.Green) { vehicleLightState = RoadBaseAI.TrafficLightState.Green; } else // all red? if (mainLight == RoadBaseAI.TrafficLightState.Red && leftLight == RoadBaseAI.TrafficLightState.Red && rightLight == RoadBaseAI.TrafficLightState.Red) { vehicleLightState = RoadBaseAI.TrafficLightState.Red; } else // any red+yellow? if (mainLight == RoadBaseAI.TrafficLightState.RedToGreen || leftLight == RoadBaseAI.TrafficLightState.RedToGreen || rightLight == RoadBaseAI.TrafficLightState.RedToGreen) { vehicleLightState = RoadBaseAI.TrafficLightState.RedToGreen; } else { vehicleLightState = RoadBaseAI.TrafficLightState.GreenToRed; } //pedestrianLightState = LightPedestrian; pedestrianLightState = lights.PedestrianLightState == null ? RoadBaseAI.TrafficLightState.Red : (RoadBaseAI.TrafficLightState)lights.PedestrianLightState; uint now = ((currentFrameIndex - num) >> 8) & 1; CustomRoadAI.OriginalSetTrafficLightState(true, NodeId, ref instance.m_segments.m_buffer[SegmentId], now << 8, vehicleLightState, pedestrianLightState, false, false); CustomRoadAI.OriginalSetTrafficLightState(true, NodeId, ref instance.m_segments.m_buffer[SegmentId], (1u-now) << 8, vehicleLightState, pedestrianLightState, false, false); /*if (vehicleLightState != lastVehicleLightState || pedestrianLightState != lastPedestrianLightState) { // force rendering Singleton<NetManager>.instance.UpdateSegmentRenderer(segmentId, true); } lastVehicleLightState = vehicleLightState; lastPedestrianLightState = pedestrianLightState;*/ }
/*public RoadBaseAI.TrafficLightState GetLightPedestrian() { return LightPedestrian; }*/ public void ChangeMode() { SegmentGeometry geometry = CustomRoadAI.GetSegmentGeometry(SegmentId); geometry.Recalculate(true, true); var hasLeftSegment = geometry.HasOutgoingLeftSegment(NodeId); var hasForwardSegment = geometry.HasOutgoingStraightSegment(NodeId); var hasRightSegment = geometry.HasOutgoingRightSegment(NodeId); Log._Debug($"ChangeMode. node {NodeId}, hasOutgoingLeft={hasLeftSegment}, hasOutgoingStraight={hasForwardSegment}, hasOutgoingRight={hasRightSegment}"); if (CurrentMode == Mode.Simple) { if (!hasLeftSegment) { CurrentMode = Mode.SingleRight; } else { CurrentMode = Mode.SingleLeft; } } else if (CurrentMode == Mode.SingleLeft) { if (!hasForwardSegment || !hasRightSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.SingleRight; } } else if (CurrentMode == Mode.SingleRight) { if (!hasLeftSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.All; } } else { CurrentMode = Mode.Simple; } if (CurrentMode == Mode.Simple) { LightLeft = LightMain; LightRight = LightMain; //LightPedestrian = _checkPedestrianLight(); } }
public void ChangeMode() { var hasLeftSegment = TrafficPriority.HasLeftSegment(Segment, Node) && TrafficPriority.HasLeftLane(Node, Segment); var hasForwardSegment = TrafficPriority.HasForwardSegment(Segment, Node) && TrafficPriority.HasForwardLane(Node, Segment); var hasRightSegment = TrafficPriority.HasRightSegment(Segment, Node) && TrafficPriority.HasRightLane(Node, Segment); if (CurrentMode == Mode.Simple) { if (!hasLeftSegment) { CurrentMode = Mode.RightForwardL; } else { CurrentMode = Mode.LeftForwardR; } } else if (CurrentMode == Mode.LeftForwardR) { if (!hasForwardSegment || !hasRightSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.RightForwardL; } } else if (CurrentMode == Mode.RightForwardL) { if (!hasLeftSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.All; } } else { CurrentMode = Mode.Simple; } if (CurrentMode == Mode.Simple) { LightLeft = LightMain; LightRight = LightMain; LightPedestrian = _checkPedestrianLight(); } }
public void ChangeMode() { var hasLeftSegment = TrafficPriority.HasLeftSegment(segmentId, nodeId); var hasForwardSegment = TrafficPriority.HasStraightSegment(segmentId, nodeId); var hasRightSegment = TrafficPriority.HasRightSegment(segmentId, nodeId); if (CurrentMode == Mode.Simple) { if (!hasLeftSegment) { CurrentMode = Mode.SingleRight; } else { CurrentMode = Mode.SingleLeft; } } else if (CurrentMode == Mode.SingleLeft) { if (!hasForwardSegment || !hasRightSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.SingleRight; } } else if (CurrentMode == Mode.SingleRight) { if (!hasLeftSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.All; } } else { CurrentMode = Mode.Simple; } if (CurrentMode == Mode.Simple) { LightLeft = LightMain; LightRight = LightMain; LightPedestrian = _checkPedestrianLight(); } }