blob: f2f90d07d49bee53b31c96e593f0a8628e92e3ca [file] [log] [blame]
#include "rive/animation/listener_align_target.hpp"
#include "rive/animation/state_machine_instance.hpp"
// #include "rive/animation/state_machine_number.hpp"
// #include "rive/animation/state_machine_input_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);
}