void MenuController::leapMenuOpen(const Leap::Controller& controller, const Leap::Frame& frame) { updateLeapPointer(controller, frame); if (pointer_.isValid()) { Vec2 v = (leap - viewport_.center()); float radians = v.anglePositive(); float radius = v.length(); float innerRadius = min(viewport_.width, viewport_.height) * 0.5 * 0.55; float hitRadius = min(viewport_.width, viewport_.height) * 0.5 * 0.7; float outerRadius = min(viewport_.width, viewport_.height) * 0.5 * 0.85; selected_ = -1; if (radius > innerRadius) { int highlightedItem = calcHighlightedMenu(radians); selected_ = highlightedItem; progress_ = gl::clamp((radius - innerRadius) / (outerRadius - innerRadius), 0.0f, 1.0f); if (radius > outerRadius && selected_ >= 0 && menu_) { (*menu_)[highlightedItem].trigger(); } } } }