blob: 43172272c891f69bb26a5756d201fbbf1d2eb7c8 [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);
}