| #ifndef _RIVE_PROPERTY_RECORDER_HPP_ | |
| #define _RIVE_PROPERTY_RECORDER_HPP_ | |
| #include "rive/core/binary_writer.hpp" | |
| #include "rive/core/vector_binary_writer.hpp" | |
| #include "rive/core/binary_data_reader.hpp" | |
| #include "rive/core/binary_data_reader.hpp" | |
| #include <algorithm> | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| namespace rive | |
| { | |
| class Artboard; | |
| class StateMachine; | |
| class StateMachineLayer; | |
| class StateMachineInput; | |
| class LayerState; | |
| class LinearAnimation; | |
| class KeyedObject; | |
| class Core; | |
| class StateMachineInstance; | |
| class CoreObjectData | |
| { | |
| private: | |
| std::vector<uint16_t> m_propertyKeys; | |
| public: | |
| CoreObjectData(uint32_t id) { objectId = id; } | |
| uint32_t objectId; | |
| void addPropertyKey(uint16_t key) | |
| { | |
| auto it = std::find(m_propertyKeys.begin(), m_propertyKeys.end(), key); | |
| if (it == m_propertyKeys.end()) | |
| { | |
| m_propertyKeys.push_back(key); | |
| } | |
| } | |
| std::vector<uint16_t>* propertyKeys() { return &m_propertyKeys; } | |
| }; | |
| class PropertyRecorder | |
| { | |
| private: | |
| VectorBinaryWriter m_binaryWriter; | |
| BinaryDataReader m_binaryReader; | |
| std::vector<uint8_t> m_WriteBuffer; | |
| VectorBinaryWriter m_binaryWriterSM; | |
| BinaryDataReader m_binaryReaderSM; | |
| std::vector<uint8_t> m_WriteBufferSM; | |
| std::vector<std::unique_ptr<CoreObjectData>> m_coreObjectsData; | |
| void recordDataBinds(const Artboard* artboard); | |
| void recordStateMachine(const StateMachine* stateMachine); | |
| void recordStateMachineInput(const StateMachineInput* stateMachineInput); | |
| void recordStateMachineLayer(const StateMachineLayer* stateMachineLayer); | |
| void recordStateMachineLayerState(const LayerState* layerState); | |
| void recordLinearAnimation(const LinearAnimation* linearAnimation); | |
| void recordKeyedObject(const KeyedObject* keyedObject); | |
| CoreObjectData* getCoreObjectData(uint32_t id); | |
| void writeProperties(const Artboard* artboard); | |
| void addPropertyKey(CoreObjectData* coreObjectData, int propertyKey); | |
| int getObjectId(const Artboard* artboard, Core* object); | |
| void writeObjectId(uint32_t objectId, VectorBinaryWriter& writer); | |
| void writeTotalProperties(uint32_t value, VectorBinaryWriter& writer); | |
| void writePropertyKey(uint32_t value, VectorBinaryWriter& writer); | |
| void writePropertyValue(float value, VectorBinaryWriter& writer); | |
| void writePropertyValue(int value, VectorBinaryWriter& writer); | |
| void writePropertyValue(uint32_t value, VectorBinaryWriter& writer); | |
| void writePropertyValue(std::string value, VectorBinaryWriter& writer); | |
| void writePropertyValue(bool value, VectorBinaryWriter& writer); | |
| void writeSeparator(); | |
| void complete( | |
| VectorBinaryWriter& writer, | |
| BinaryDataReader& reader, | |
| std::vector<uint8_t>& buffer); | |
| public: | |
| PropertyRecorder(); | |
| void recordArtboard(const Artboard* artboard); | |
| void recordStateMachineInputs(const StateMachine* stateMachine); | |
| void apply(Artboard* artboard); | |
| void apply(StateMachineInstance* stateMachineInstace); | |
| void clear(); | |
| }; | |
| } // namespace rive | |
| #endif |