mirror of
https://github.com/rive-app/rive-cpp.git
synced 2026-01-18 21:21:17 +01:00
* fix: invalidate effects when sorted * improve scripted converters code Co-authored-by: hernan <hernan@rive.app>
71 lines
2.3 KiB
C++
71 lines
2.3 KiB
C++
#ifndef _RIVE_SCRIPTED_DATA_CONVERTER_HPP_
|
|
#define _RIVE_SCRIPTED_DATA_CONVERTER_HPP_
|
|
#ifdef WITH_RIVE_SCRIPTING
|
|
#include "rive/lua/rive_lua_libs.hpp"
|
|
#endif
|
|
#include "rive/generated/scripted/scripted_data_converter_base.hpp"
|
|
#include "rive/advancing_component.hpp"
|
|
#include "rive/scripted/scripted_object.hpp"
|
|
#include <stdio.h>
|
|
namespace rive
|
|
{
|
|
class DataBind;
|
|
class DataContext;
|
|
class DataValue;
|
|
|
|
class ScriptedDataConverter : public ScriptedDataConverterBase,
|
|
public ScriptedObject,
|
|
public AdvancingComponent
|
|
{
|
|
private:
|
|
DataContext* m_dataContext = nullptr;
|
|
DataValue* m_dataValue = nullptr;
|
|
template <typename T = DataValue> void storeData(DataValue* input)
|
|
{
|
|
if (m_dataValue && !m_dataValue->is<T>())
|
|
{
|
|
delete m_dataValue;
|
|
}
|
|
if (!m_dataValue)
|
|
{
|
|
m_dataValue = new T();
|
|
}
|
|
m_dataValue->as<T>()->value(input->as<T>()->value());
|
|
};
|
|
virtual void disposeScriptInputs() override;
|
|
#ifdef WITH_RIVE_SCRIPTING
|
|
DataValue* applyConversion(DataValue* value, const std::string& method);
|
|
bool pushDataValue(DataValue*);
|
|
#endif
|
|
|
|
public:
|
|
~ScriptedDataConverter();
|
|
#ifdef WITH_RIVE_SCRIPTING
|
|
bool scriptInit(LuaState* state) override;
|
|
DataValue* convert(DataValue* value, DataBind* dataBind) override;
|
|
DataValue* reverseConvert(DataValue* value, DataBind* dataBind) override;
|
|
#endif
|
|
void bindFromContext(DataContext* dataContext, DataBind* dataBind) override;
|
|
DataContext* dataContext() override { return m_dataContext; }
|
|
DataType outputType() override { return DataType::any; }
|
|
uint32_t assetId() override { return scriptAssetId(); }
|
|
bool advanceComponent(float elapsedSeconds,
|
|
AdvanceFlags flags = AdvanceFlags::Animate |
|
|
AdvanceFlags::NewFrame) override;
|
|
StatusCode import(ImportStack& importStack) override;
|
|
void addProperty(CustomProperty* prop) override;
|
|
Core* clone() const override;
|
|
bool addScriptedDirt(ComponentDirt value, bool recurse = false) override
|
|
{
|
|
markConverterDirty();
|
|
return true;
|
|
}
|
|
ScriptProtocol scriptProtocol() override
|
|
{
|
|
return ScriptProtocol::converter;
|
|
}
|
|
Component* component() override { return nullptr; }
|
|
};
|
|
} // namespace rive
|
|
|
|
#endif |