blob: 047eac883cd4aad4790254eeda6530c341a57821 [file] [log] [blame]
Henry Speiser354d2782022-07-22 13:56:48 -07001#include "y2022_bot3/actors/auto_splines.h"
2
3#include "frc971/control_loops/control_loops_generated.h"
4
5namespace y2022_bot3 {
6namespace actors {
7
8void MaybeFlipSpline(
9 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder,
10 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset,
11 bool is_left) {
12 flatbuffers::Vector<float> *spline_y =
13 GetMutableTemporaryPointer(*builder->fbb(), spline_y_offset);
14
15 if (!is_left) {
16 for (size_t i = 0; i < spline_y->size(); i++) {
17 spline_y->Mutate(i, -spline_y->Get(i));
18 }
19 }
20}
21
22flatbuffers::Offset<frc971::MultiSpline> FixSpline(
23 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
24 *builder,
25 flatbuffers::Offset<frc971::MultiSpline> spline_offset,
26 aos::Alliance alliance) {
27 frc971::MultiSpline *spline =
28 GetMutableTemporaryPointer(*builder->fbb(), spline_offset);
29 flatbuffers::Vector<float> *spline_x = spline->mutable_spline_x();
30 flatbuffers::Vector<float> *spline_y = spline->mutable_spline_y();
31
32 if (alliance == aos::Alliance::kBlue) {
33 for (size_t ii = 0; ii < spline_x->size(); ++ii) {
34 spline_x->Mutate(ii, -spline_x->Get(ii));
35 }
36 for (size_t ii = 0; ii < spline_y->size(); ++ii) {
37 spline_y->Mutate(ii, -spline_y->Get(ii));
38 }
39 }
40 return spline_offset;
41}
42
43flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::TestSpline(
44 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
45 *builder,
46 aos::Alliance alliance) {
47 return FixSpline(
48 builder,
49 aos::CopyFlatBuffer<frc971::MultiSpline>(test_spline_, builder->fbb()),
50 alliance);
51}
52
53} // namespace actors
54} // namespace y2022_bot3