Importing event input changes
diff --git a/include/rive/animation/event_input_change.hpp b/include/rive/animation/event_input_change.hpp index 93e3796..ee3e724 100644 --- a/include/rive/animation/event_input_change.hpp +++ b/include/rive/animation/event_input_change.hpp
@@ -1,10 +1,11 @@ #ifndef _RIVE_EVENT_INPUT_CHANGE_HPP_ #define _RIVE_EVENT_INPUT_CHANGE_HPP_ #include "rive/generated/animation/event_input_change_base.hpp" -#include <stdio.h> + namespace rive { class EventInputChange : public EventInputChangeBase { public: + StatusCode import(ImportStack& importStack) override; }; } // namespace rive
diff --git a/include/rive/animation/state_machine_event.hpp b/include/rive/animation/state_machine_event.hpp index 55a2644..c59bc16 100644 --- a/include/rive/animation/state_machine_event.hpp +++ b/include/rive/animation/state_machine_event.hpp
@@ -1,9 +1,17 @@ #ifndef _RIVE_STATE_MACHINE_EVENT_HPP_ #define _RIVE_STATE_MACHINE_EVENT_HPP_ #include "rive/generated/animation/state_machine_event_base.hpp" -#include <stdio.h> + namespace rive { + class StateMachineEventImporter; + class EventInputChange; class StateMachineEvent : public StateMachineEventBase { + friend class StateMachineEventImporter; + + private: + std::vector<EventInputChange*> m_InputChanges; + void addInputChange(EventInputChange* inputChange); + public: StatusCode import(ImportStack& importStack) override; };
diff --git a/include/rive/importers/state_machine_event_importer.hpp b/include/rive/importers/state_machine_event_importer.hpp new file mode 100644 index 0000000..64ac249 --- /dev/null +++ b/include/rive/importers/state_machine_event_importer.hpp
@@ -0,0 +1,21 @@ +#ifndef _RIVE_STATE_MACHINE_EVENT_IMPORTER_HPP_ +#define _RIVE_STATE_MACHINE_EVENT_IMPORTER_HPP_ + +#include "rive/importers/import_stack.hpp" + +namespace rive { + class StateMachineEvent; + class StateMachine; + class EventInputChange; + class StateMachineEventImporter : public ImportStackObject { + private: + StateMachineEvent* m_StateMachineEvent; + + public: + StateMachineEventImporter(StateMachineEvent* event); + const StateMachineEvent* stateMachineEvent() const { return m_StateMachineEvent; } + void addInputChange(EventInputChange* change); + StatusCode resolve() override; + }; +} // namespace rive +#endif
diff --git a/src/animation/event_input_change.cpp b/src/animation/event_input_change.cpp new file mode 100644 index 0000000..d319855 --- /dev/null +++ b/src/animation/event_input_change.cpp
@@ -0,0 +1,17 @@ +#include "rive/animation/state_machine_event.hpp" +#include "rive/importers/import_stack.hpp" +#include "rive/importers/state_machine_event_importer.hpp" +#include "rive/animation/event_input_change.hpp" +#include "rive/generated/animation/state_machine_base.hpp" + +using namespace rive; + +StatusCode EventInputChange::import(ImportStack& importStack) { + auto stateMachineEventImporter = + importStack.latest<StateMachineEventImporter>(StateMachineEventBase::typeKey); + if (stateMachineEventImporter == nullptr) { + return StatusCode::MissingObject; + } + stateMachineEventImporter->addInputChange(this); + return Super::import(importStack); +}
diff --git a/src/animation/state_machine_event.cpp b/src/animation/state_machine_event.cpp index d14c0ab..5eadc0f 100644 --- a/src/animation/state_machine_event.cpp +++ b/src/animation/state_machine_event.cpp
@@ -5,6 +5,10 @@ using namespace rive; +void StateMachineEvent::addInputChange(EventInputChange* inputChange) { + m_InputChanges.push_back(inputChange); +} + StatusCode StateMachineEvent::import(ImportStack& importStack) { auto stateMachineImporter = importStack.latest<StateMachineImporter>(StateMachineBase::typeKey); if (stateMachineImporter == nullptr) {
diff --git a/src/file.cpp b/src/file.cpp index 3f1de50..a539b74 100644 --- a/src/file.cpp +++ b/src/file.cpp
@@ -13,6 +13,7 @@ #include "rive/importers/keyed_property_importer.hpp" #include "rive/importers/linear_animation_importer.hpp" #include "rive/importers/state_machine_importer.hpp" +#include "rive/importers/state_machine_event_importer.hpp" #include "rive/importers/state_machine_layer_importer.hpp" #include "rive/importers/layer_state_importer.hpp" #include "rive/importers/state_transition_importer.hpp" @@ -218,6 +219,9 @@ stackObject = new StateTransitionImporter(object->as<StateTransition>()); stackType = StateTransition::typeKey; break; + case StateMachineEvent::typeKey: + stackObject = new StateMachineEventImporter(object->as<StateMachineEvent>()); + break; case ImageAsset::typeKey: stackObject = new FileAssetImporter(object->as<FileAsset>(), m_AssetResolver); stackType = FileAsset::typeKey;
diff --git a/src/importers/state_machine_event_importer.cpp b/src/importers/state_machine_event_importer.cpp new file mode 100644 index 0000000..9d8fd3c --- /dev/null +++ b/src/importers/state_machine_event_importer.cpp
@@ -0,0 +1,13 @@ +#include "rive/importers/state_machine_event_importer.hpp" +#include "rive/animation/state_machine_event.hpp" + +using namespace rive; + +StateMachineEventImporter::StateMachineEventImporter(StateMachineEvent* event) : + m_StateMachineEvent(event) {} + +void StateMachineEventImporter::addInputChange(EventInputChange* change) { + m_StateMachineEvent->addInputChange(change); +} + +StatusCode StateMachineEventImporter::resolve() { return StatusCode::Ok; } \ No newline at end of file