1 package org.opentrafficsim.road.network.lane.object.trafficlight;
2
3 import org.djunits.unit.LengthUnit;
4 import org.djunits.value.vdouble.scalar.Length;
5 import org.opentrafficsim.core.network.NetworkException;
6 import org.opentrafficsim.road.network.lane.Lane;
7 import org.opentrafficsim.road.network.lane.object.AbstractLaneBasedObject;
8 import org.opentrafficsim.road.network.lane.object.LaneBasedObject;
9
10 import nl.tudelft.simulation.dsol.simulators.DEVSSimulatorInterface;
11 import nl.tudelft.simulation.language.Throw;
12
13
14
15
16
17
18
19
20
21
22
23
24 public abstract class AbstractTrafficLight extends AbstractLaneBasedObject implements TrafficLight
25 {
26
27 private static final long serialVersionUID = 201601001L;
28
29
30 private TrafficLightColor trafficLightColor;
31
32
33 private final DEVSSimulatorInterface.TimeDoubleUnit simulator;
34
35
36 public static final Length DEFAULT_TRAFFICLIGHT_ELEVATION = new Length(1, LengthUnit.METER);
37
38
39
40
41
42
43
44
45
46
47 public AbstractTrafficLight(final String id, final Lane lane, final Length longitudinalPosition,
48 final DEVSSimulatorInterface.TimeDoubleUnit simulator, final Length height) throws NetworkException
49 {
50 super(id, lane, longitudinalPosition, LaneBasedObject.makeGeometry(lane, longitudinalPosition), height);
51
52 Throw.whenNull(simulator, "Simulator may not be null");
53 this.simulator = simulator;
54
55 this.trafficLightColor = TrafficLightColor.GREEN;
56 }
57
58
59
60
61
62
63
64
65
66 public AbstractTrafficLight(final String id, final Lane lane, final Length longitudinalPosition,
67 final DEVSSimulatorInterface.TimeDoubleUnit simulator) throws NetworkException
68 {
69 this(id, lane, longitudinalPosition, simulator, DEFAULT_TRAFFICLIGHT_ELEVATION);
70 }
71
72
73 @Override
74 public final TrafficLightColor getTrafficLightColor()
75 {
76 return this.trafficLightColor;
77 }
78
79
80 @Override
81 public final void setTrafficLightColor(final TrafficLightColor trafficLightColor)
82 {
83 this.trafficLightColor = trafficLightColor;
84 fireTimedEvent(TRAFFICLIGHT_CHANGE_EVENT, new Object[] { getId(), this, trafficLightColor },
85 this.simulator.getSimulatorTime());
86 }
87
88 }