blob: 9dd186048906370fd82ce3fd06db45a13111463f [file] [log] [blame]
#include "y2022/actors/auto_splines.h"
#include "frc971/control_loops/control_loops_generated.h"
namespace y2022 {
namespace actors {
void MaybeFlipSpline(
aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder,
flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset,
bool is_left) {
flatbuffers::Vector<float> *spline_y =
GetMutableTemporaryPointer(*builder->fbb(), spline_y_offset);
if (!is_left) {
for (size_t i = 0; i < spline_y->size(); i++) {
spline_y->Mutate(i, -spline_y->Get(i));
}
}
}
flatbuffers::Offset<frc971::MultiSpline> FixSpline(
aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
*builder,
flatbuffers::Offset<frc971::MultiSpline> spline_offset,
aos::Alliance alliance) {
frc971::MultiSpline *spline =
GetMutableTemporaryPointer(*builder->fbb(), spline_offset);
flatbuffers::Vector<float> *spline_x = spline->mutable_spline_x();
flatbuffers::Vector<float> *spline_y = spline->mutable_spline_y();
if (alliance == aos::Alliance::kBlue) {
for (size_t ii = 0; ii < spline_x->size(); ++ii) {
spline_x->Mutate(ii, -spline_x->Get(ii));
}
for (size_t ii = 0; ii < spline_y->size(); ++ii) {
spline_y->Mutate(ii, -spline_y->Get(ii));
}
}
return spline_offset;
}
flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::TestSpline(
aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
*builder,
aos::Alliance alliance) {
return FixSpline(
builder,
aos::CopyFlatBuffer<frc971::MultiSpline>(test_spline_, builder->fbb()),
alliance);
}
flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::Spline1(
aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
*builder,
aos::Alliance alliance) {
return FixSpline(
builder,
aos::CopyFlatBuffer<frc971::MultiSpline>(spline_1_, builder->fbb()),
alliance);
}
flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::Spline2(
aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
*builder,
aos::Alliance alliance) {
return FixSpline(
builder,
aos::CopyFlatBuffer<frc971::MultiSpline>(spline_2_, builder->fbb()),
alliance);
}
flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::Spline3(
aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
*builder,
aos::Alliance alliance) {
return FixSpline(
builder,
aos::CopyFlatBuffer<frc971::MultiSpline>(spline_3_, builder->fbb()),
alliance);
}
} // namespace actors
} // namespace y2022