9#include <units/angle.h>
10#include <units/length.h>
12#include "choreo/util/FieldDimensions.h"
13#include "choreo/util/Map.h"
15namespace choreo::util {
17enum class FlipperType { Mirrored, RotateAround };
29 static constexpr units::meter_t
FlipX(units::meter_t x) {
30 return fieldLength - x;
37 static constexpr units::meter_t
FlipY(units::meter_t y) {
return y; }
43 static constexpr units::radian_t
FlipHeading(units::radian_t heading) {
44 return units::radian_t{std::numbers::pi} - heading;
58 static constexpr units::meter_t
FlipX(units::meter_t x) {
59 return fieldLength - x;
66 static constexpr units::meter_t
FlipY(units::meter_t y) {
67 return fieldWidth - y;
74 static constexpr units::radian_t
FlipHeading(units::radian_t heading) {
75 return units::radian_t{std::numbers::pi} + heading;
79inline constexpr Map flipperMap{
80 std::array{std::pair{2022, FlipperType::RotateAround},
81 std::pair{2023, FlipperType::Mirrored},
82 std::pair{2024, FlipperType::Mirrored},
83 std::pair{2025, FlipperType::RotateAround}}};
85inline constexpr int kDefaultYear = 2025;
94template <
int Year = kDefaultYear>
95constexpr auto GetFlipperForYear() {
96 constexpr bool yearInMap = [] {
99 auto checked = flipperMap.
at(Year);
106 if constexpr (!yearInMap) {
107 static_assert(yearInMap,
"Year not found in flipperMap");
109 constexpr auto flipperType = flipperMap.
at(Year);
110 if constexpr (flipperType == FlipperType::RotateAround) {
111 return RotateAroundFlipper{};
112 }
else if constexpr (flipperType == FlipperType::Mirrored) {
113 return MirroredFlipper{};
115 static_assert(flipperType == FlipperType::RotateAround ||
116 flipperType == FlipperType::Mirrored,
117 "Invalid FlipperType in flipperMap");
constexpr const Value & at(const Key &key) const
Definition Map.h:32
Definition AllianceFlipperUtil.h:21
static constexpr units::radian_t FlipHeading(units::radian_t heading)
Definition AllianceFlipperUtil.h:43
static constexpr units::meter_t FlipX(units::meter_t x)
Definition AllianceFlipperUtil.h:29
static constexpr bool isMirrored
Whether pose should be mirrored.
Definition AllianceFlipperUtil.h:23
static constexpr units::meter_t FlipY(units::meter_t y)
Definition AllianceFlipperUtil.h:37
Definition AllianceFlipperUtil.h:50
static constexpr bool isMirrored
Whether pose should be mirrored.
Definition AllianceFlipperUtil.h:52
static constexpr units::meter_t FlipY(units::meter_t y)
Definition AllianceFlipperUtil.h:66
static constexpr units::radian_t FlipHeading(units::radian_t heading)
Definition AllianceFlipperUtil.h:74
static constexpr units::meter_t FlipX(units::meter_t x)
Definition AllianceFlipperUtil.h:58