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 };
33 static constexpr units::meter_t
FlipX(units::meter_t x) {
34 return fieldLength - x;
43 static constexpr units::meter_t
FlipY(units::meter_t y) {
return y; }
51 static constexpr units::radian_t
FlipHeading(units::radian_t heading) {
52 return units::radian_t{std::numbers::pi} - heading;
70 static constexpr units::meter_t
FlipX(units::meter_t x) {
71 return fieldLength - x;
80 static constexpr units::meter_t
FlipY(units::meter_t y) {
81 return fieldWidth - y;
90 static constexpr units::radian_t
FlipHeading(units::radian_t heading) {
91 return units::radian_t{std::numbers::pi} + heading;
95inline constexpr Map flipperMap{
96 std::array{std::pair{2022, FlipperType::RotateAround},
97 std::pair{2023, FlipperType::Mirrored},
98 std::pair{2024, FlipperType::Mirrored},
99 std::pair{2025, FlipperType::RotateAround}}};
101inline constexpr int kDefaultYear = 2025;
112template <
int Year = kDefaultYear>
113constexpr auto GetFlipperForYear() {
114 constexpr bool yearInMap = [] {
117 auto checked = flipperMap.
at(Year);
124 if constexpr (!yearInMap) {
125 static_assert(yearInMap,
"Year not found in flipperMap");
127 constexpr auto flipperType = flipperMap.
at(Year);
128 if constexpr (flipperType == FlipperType::RotateAround) {
129 return RotateAroundFlipper{};
130 }
else if constexpr (flipperType == FlipperType::Mirrored) {
131 return MirroredFlipper{};
133 static_assert(flipperType == FlipperType::RotateAround ||
134 flipperType == FlipperType::Mirrored,
135 "Invalid FlipperType in flipperMap");
constexpr const Value & at(const Key &key) const
Definition Map.h:38
Definition AllianceFlipperUtil.h:23
static constexpr units::radian_t FlipHeading(units::radian_t heading)
Definition AllianceFlipperUtil.h:51
static constexpr units::meter_t FlipX(units::meter_t x)
Definition AllianceFlipperUtil.h:33
static constexpr bool isMirrored
Whether pose should be mirrored.
Definition AllianceFlipperUtil.h:25
static constexpr units::meter_t FlipY(units::meter_t y)
Definition AllianceFlipperUtil.h:43
Definition AllianceFlipperUtil.h:60
static constexpr bool isMirrored
Whether pose should be mirrored.
Definition AllianceFlipperUtil.h:62
static constexpr units::meter_t FlipY(units::meter_t y)
Definition AllianceFlipperUtil.h:80
static constexpr units::radian_t FlipHeading(units::radian_t heading)
Definition AllianceFlipperUtil.h:90
static constexpr units::meter_t FlipX(units::meter_t x)
Definition AllianceFlipperUtil.h:70