-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTrafficLight.java
45 lines (39 loc) · 1.43 KB
/
TrafficLight.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package de.amr.statemachine.samples.trafficlight;
import static de.amr.easy.game.Application.app;
import static de.amr.statemachine.samples.trafficlight.TrafficLight.Light.GREEN;
import static de.amr.statemachine.samples.trafficlight.TrafficLight.Light.OFF;
import static de.amr.statemachine.samples.trafficlight.TrafficLight.Light.RED;
import static de.amr.statemachine.samples.trafficlight.TrafficLight.Light.YELLOW;
import java.awt.event.KeyEvent;
import de.amr.easy.game.input.Keyboard;
import de.amr.statemachine.core.StateMachine;
import de.amr.statemachine.samples.trafficlight.TrafficLight.Light;
/**
* A simple traffic light.
*
* @author Armin Reichert & Anna Schillo
*/
public class TrafficLight extends StateMachine<Light, Void> {
public enum Light {
OFF, RED, YELLOW, GREEN;
}
public TrafficLight() {
//@formatter:off
super(Light.class);
beginStateMachine()
.description("Traffic Light")
.initialState(OFF)
.states()
.state(OFF)
.state(RED).timeoutAfter(() -> app().clock().sec(3))
.state(YELLOW).timeoutAfter(() -> app().clock().sec(2))
.state(GREEN).timeoutAfter(() -> app().clock().sec(5))
.transitions()
.when(OFF).then(RED).condition(() -> Keyboard.keyPressedOnce(KeyEvent.VK_SPACE))
.when(RED).then(GREEN).onTimeout()
.when(GREEN).then(YELLOW).onTimeout()
.when(YELLOW).then(RED).onTimeout()
.endStateMachine();
//@formatter:off
}
}