constrain method 
    
    
    
  Implementation
  @override
void constrain(ActorNode node) {
  ActorNode? t = target as ActorNode?;
  if (t == null) {
    return;
  }
  ActorNode p = parent!;
  Vec2D targetTranslation = t.getWorldTranslation(Vec2D());
  Vec2D ourTranslation = p.getWorldTranslation(Vec2D());
  Vec2D toTarget = Vec2D.subtract(Vec2D(), ourTranslation, targetTranslation);
  double currentDistance = Vec2D.length(toTarget);
  switch (_mode) {
    case DistanceMode.closer:
      if (currentDistance < _distance) {
        return;
      }
      break;
    case DistanceMode.further:
      if (currentDistance > _distance) {
        return;
      }
      break;
  }
  if (currentDistance < 0.001) {
    return;
  }
  Vec2D.scale(toTarget, toTarget, 1.0 / currentDistance);
  Vec2D.scale(toTarget, toTarget, _distance);
  Mat2D world = p.worldTransform;
  Vec2D position = Vec2D.lerp(Vec2D(), ourTranslation,
      Vec2D.add(Vec2D(), targetTranslation, toTarget), strength);
  world[4] = position[0];
  world[5] = position[1];
}