blob: 72470a0b5683ec259a2c948c54fa6c505a549b53 [file]
#ifndef _RIVE_SCRIPTED_INTERPOLATOR_HPP_
#define _RIVE_SCRIPTED_INTERPOLATOR_HPP_
#include "rive/generated/scripted/scripted_interpolator_base.hpp"
#include "rive/scripted/scripted_object.hpp"
#include <stdio.h>
namespace rive
{
class ScriptedInterpolator : public ScriptedInterpolatorBase,
public ScriptedObject
{
public:
float transformValue(float valueFrom, float valueTo, float factor) override;
float transform(float factor) const override;
uint32_t assetId() override { return scriptAssetId(); }
bool addScriptedDirt(ComponentDirt value, bool recurse = false) override
{
return false;
}
ScriptProtocol scriptProtocol() override
{
return ScriptProtocol::interpolator;
}
Component* component() override { return nullptr; }
/// Not a Component, so Artboard::m_Objects never takes this object's
/// ScriptInputs and it has to free them itself -- the same rule
/// ScriptedDataConverter, ScriptedListenerAction and
/// ScriptedTransitionCondition already implement. Like them, the
/// destructor calls it: ~ScriptedObject cannot, because a virtual call
/// from a base destructor resolves to the base override.
~ScriptedInterpolator();
void disposeScriptInputs() override;
StatusCode import(ImportStack& importStack) override;
// Cloning support so each (LinearAnimationInstance, InterpolatingKeyFrame)
// pair can vend its own stateful Lua instance. Mirrors
// ScriptedListenerAction / ScriptedTransitionCondition. Without these the
// base `ScriptedObject::cloneScriptedObject` returns nullptr and the
// per-instance path silently degrades to the shared template's
// identity/linear fallback.
Core* clone() const override;
ScriptedObject* cloneScriptedObject(DataBindContainer*) const override;
void addProperty(CustomProperty* prop) override;
};
} // namespace rive
#endif