Repository navigation
Expand file tree
/
Copy pathHubShiftUtil.java
More file actions
56 lines (44 loc) · 1.59 KB
/
Copy pathHubShiftUtil.java
File metadata and controls
56 lines (44 loc) · 1.59 KB
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
package frc.robot.util;
// Copyright (c) 2025-2026 Littleton Robotics
// http://github.com/Mechanical-Advantage
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file at
// the root directory of this project.
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj.Timer;
import java.util.Optional;
import java.util.function.Supplier;
import lombok.Setter;
public class HubShiftUtil {
private static Timer shiftTimer = new Timer();
@Setter
private static Supplier<Optional<Boolean>> allianceWinOverride = () -> Optional.empty();
public static Optional<Boolean> getAllianceWinOverride() {
return allianceWinOverride.get();
}
public static Alliance getFirstActiveAlliance() {
var alliance = DriverStation.getAlliance().orElse(Alliance.Blue);
var winOverride = getAllianceWinOverride();
if (!winOverride.isEmpty()) {
return winOverride.get()
? (alliance == Alliance.Blue ? Alliance.Red : Alliance.Blue)
: (alliance == Alliance.Blue ? Alliance.Blue : Alliance.Red);
}
String message = DriverStation.getGameSpecificMessage();
if (message.length() > 0) {
char character = message.charAt(0);
if (character == 'R') {
return Alliance.Blue;
} else if (character == 'B') {
return Alliance.Red;
}
}
return alliance == Alliance.Blue ? Alliance.Red : Alliance.Blue;
}
/** Starts the timer at the beginning of teleop. */
public static void initialize() {
shiftTimer.restart();
}
}