blob: c0a573a5672c1248aab183cb183ea7053409dba3 [file] [log] [blame]
#include "rive/animation/listener_align_target.hpp"
#include "rive/animation/state_machine_instance.hpp"
#include "rive/node.hpp"
#include "rive/constraints/constraint.hpp"
using namespace rive;
void ListenerAlignTarget::perform(StateMachineInstance* stateMachineInstance, Vec2D position) const
{
auto coreTarget = stateMachineInstance->artboard()->resolve(targetId());
if (coreTarget == nullptr || !coreTarget->is<Node>())
{
return;
}
auto target = coreTarget->as<Node>();
Mat2D targetParentWorld = getParentWorld(*target);
Mat2D inverse;
if (!targetParentWorld.invert(&inverse))
{
return;
}
auto localPosition = inverse * position;
target->x(localPosition.x);
target->y(localPosition.y);
}