72 lines
1.8 KiB
C++
72 lines
1.8 KiB
C++
#pragma once
|
||
|
||
#include <Arduino.h>
|
||
#include "FS.h"
|
||
#include "FFat.h"
|
||
#include <unordered_map>
|
||
#include "nodegraph.h"
|
||
|
||
|
||
#define NUM_CHANNELS 5
|
||
#define FRAMES_PER_SECOND 50
|
||
#define MAX_DURATION_SECONDS 10
|
||
#define MAX_FRAMES (FRAMES_PER_SECOND * MAX_DURATION_SECONDS)
|
||
|
||
struct AnimationHeader {
|
||
char magic[4]; // 0–3 ANIM tag
|
||
uint16_t frameCount; // 4–5 Number of total frames
|
||
uint8_t version; // 6
|
||
uint8_t frameRate; // 7 Frames per second
|
||
uint8_t reserved[8]; // 8–15
|
||
};
|
||
|
||
struct __attribute__((packed)) CurveSegment {
|
||
uint8_t motorID;
|
||
uint16_t startTime;// centiseconds (0.01s) MAX 655.35 seconds
|
||
uint16_t endTime;// centiseconds (0.01s) MAX 655.35 seconds
|
||
// remapped from -1 to 1 → 0–65535
|
||
int16_t startPointY;
|
||
uint16_t startHandleX;
|
||
int16_t startHandleY;
|
||
uint16_t endHandleX;
|
||
int16_t endHandleY;
|
||
int16_t endPointY;
|
||
};
|
||
|
||
|
||
|
||
|
||
class Animation {
|
||
public:
|
||
Animation();
|
||
|
||
void setFrame(uint16_t frameIndex, uint16_t channel, uint16_t value);
|
||
uint16_t getFrame(uint16_t frameIndex, uint16_t channel) const;
|
||
bool getFramePositions(uint16_t frameIndex, uint16_t* outPositions);
|
||
|
||
void addCurveSegment(const CurveSegment& segment);
|
||
void clearCurves(uint8_t motorID);
|
||
void clearAllCurves();
|
||
void printCurves();
|
||
uint16_t getMotorPosition(uint8_t motorID, uint16_t timeCS);
|
||
|
||
void clear();
|
||
//uint16_t* getRawData(); // Optional: for bulk access
|
||
//size_t getSize() const;
|
||
bool saveToFile(const char* filename);
|
||
bool loadFromFile(const char* filename);
|
||
uint16_t getFrameCount() const;
|
||
void setFrameCount(uint16_t count);
|
||
void createBasicSCurve();
|
||
void createEaseOutCurve();
|
||
AnimationHeader header;
|
||
NodeGraph nodeGraph;
|
||
|
||
|
||
private:
|
||
//uint16_t data[MAX_FRAMES][NUM_CHANNELS];
|
||
std::unordered_map<uint8_t, std::vector<CurveSegment>> curves;
|
||
|
||
};
|
||
|