blob: c9955e957bd3179dcfdf38738c42252fd8ab93d0 [file]
#include "rive/constraints/targeted_constraint.hpp"
#include "rive/transform_component.hpp"
#include "rive/core_context.hpp"
using namespace rive;
bool TargetedConstraint::validate(CoreContext* context)
{
if (!Super::validate(context))
{
return false;
}
auto coreObject = context->resolve(targetId());
// If core object is not null and is not a TransformComponent it should
// always be invalid
if (coreObject != nullptr && !coreObject->is<TransformComponent>())
{
return false;
}
return !requiresTarget() || coreObject != nullptr;
}
StatusCode TargetedConstraint::onAddedDirty(CoreContext* context)
{
StatusCode code = Super::onAddedDirty(context);
if (code != StatusCode::Ok)
{
return code;
}
auto coreObject = context->resolve(targetId());
if (requiresTarget() && coreObject == nullptr)
{
return StatusCode::MissingObject;
}
#ifdef WITH_RIVE_EDITOR
setTargetForEditor(static_cast<TransformComponent*>(coreObject));
#else
m_Target = static_cast<TransformComponent*>(coreObject);
#endif
return StatusCode::Ok;
}
void TargetedConstraint::buildDependencies()
{
// Targeted constraints must have their constrained component (parent)
// update after the target.
if (auto* t = target())
{
t->addDependent(parent());
}
}