-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathAutoModeSelector.java
105 lines (84 loc) · 3.81 KB
/
AutoModeSelector.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.team254.frc2020;
import com.team254.frc2020.auto.modes.*;
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import java.util.Optional;
public class AutoModeSelector {
enum StartingPosition {
LEFT, RIGHT, CENTER
}
enum DesiredMode {
DO_NOTHING, TEST_TRAJECTORY,
FAR_WOF_8_BALL, FAR_WOF_10_BALL, FAR_WOF_11_BALL,
NEAR_WOF_10_BALL
}
private DesiredMode mCachedDesiredMode = null;
private StartingPosition mCachedStartingPosition = null;
private SendableChooser<DesiredMode> mModeChooser;
private SendableChooser<StartingPosition> mStartPositionChooser;
private Optional<AutoModeBase> mAutoMode = Optional.empty();
public AutoModeSelector() {
mStartPositionChooser = new SendableChooser<>();
mStartPositionChooser.setDefaultOption("Left", StartingPosition.LEFT);
mStartPositionChooser.addOption("Right", StartingPosition.RIGHT);
mStartPositionChooser.addOption("Center", StartingPosition.CENTER);
SmartDashboard.putData("Starting Position", mStartPositionChooser);
mModeChooser = new SendableChooser<>();
mModeChooser.setDefaultOption("Do Nothing", DesiredMode.DO_NOTHING);
mModeChooser.addOption("Test Trajectory", DesiredMode.TEST_TRAJECTORY);
mModeChooser.addOption("Far WOF 8 Ball", DesiredMode.FAR_WOF_8_BALL);
mModeChooser.addOption("Far WOF 10 Ball", DesiredMode.FAR_WOF_10_BALL);
mModeChooser.addOption("Far WOF 11 Ball", DesiredMode.FAR_WOF_11_BALL);
mModeChooser.addOption("Near WOF 10 Ball", DesiredMode.NEAR_WOF_10_BALL);
SmartDashboard.putData("Auto mode", mModeChooser);
}
public void updateModeCreator() {
DesiredMode desiredMode = mModeChooser.getSelected();
StartingPosition startingPosition = mStartPositionChooser.getSelected();
if (desiredMode == null) {
desiredMode = DesiredMode.DO_NOTHING;
}
if (startingPosition == null) {
startingPosition = StartingPosition.LEFT;
}
if (mCachedDesiredMode != desiredMode || startingPosition != mCachedStartingPosition) {
System.out.println("Auto selection changed, updating creator: desiredMode->" + desiredMode.name()
+ ", starting position->" + startingPosition.name());
mAutoMode = getAutoModeForParams(desiredMode, startingPosition);
}
mCachedDesiredMode = desiredMode;
mCachedStartingPosition = startingPosition;
}
private boolean startingLeft(StartingPosition position) {
return position == StartingPosition.LEFT;
}
private Optional<AutoModeBase> getAutoModeForParams(DesiredMode mode, StartingPosition position) {
switch (mode) {
case DO_NOTHING:
return Optional.of(new DoNothingAutoMode());
case TEST_TRAJECTORY:
return Optional.of(new TestTrajectoryFollowingMode());
case FAR_WOF_8_BALL:
return Optional.of(new FarWOF8Ball());
case FAR_WOF_10_BALL:
return Optional.of(new FarWOF10Ball());
case NEAR_WOF_10_BALL:
return Optional.of(new NearWOF10Ball());
default:
break;
}
System.err.println("No valid auto mode found for " + mode);
return Optional.empty();
}
public void reset() {
mAutoMode = Optional.empty();
mCachedDesiredMode = null;
}
public void outputToSmartDashboard() {
SmartDashboard.putString("AutoModeSelected", mCachedDesiredMode.name());
SmartDashboard.putString("StartingPositionSelected", mCachedStartingPosition.name());
}
public Optional<AutoModeBase> getAutoMode() {
return mAutoMode;
}
}