lib/fusuma/plugin/detectors/swipe_detector.rb in fusuma-2.4.1 vs lib/fusuma/plugin/detectors/swipe_detector.rb in fusuma-2.5.0

- old
+ new

@@ -1,76 +1,76 @@ # frozen_string_literal: true -require_relative './detector' +require_relative "./detector" module Fusuma module Plugin module Detectors class SwipeDetector < Detector - SOURCES = ['gesture'].freeze - BUFFER_TYPE = 'gesture' - GESTURE_RECORD_TYPE = 'swipe' + SOURCES = ["gesture"].freeze + BUFFER_TYPE = "gesture" + GESTURE_RECORD_TYPE = "swipe" FINGERS = [3, 4].freeze BASE_THERESHOLD = 25 # @param buffers [Array<Buffers::Buffer>] # @return [Events::Event] if event is detected # @return [NilClass] if event is NOT detected def detect(buffers) gesture_buffer = buffers.find { |b| b.type == BUFFER_TYPE } - .select_from_last_begin - .select_by_events { |e| e.record.gesture == GESTURE_RECORD_TYPE } + .select_from_last_begin + .select_by_events { |e| e.record.gesture == GESTURE_RECORD_TYPE } updating_events = gesture_buffer.updating_events return if updating_events.empty? oneshot_move_x, oneshot_move_y = if updating_events.size >= 10 - updating_time = 100 * (updating_events[-1].time - updating_events[-10].time) - last_10 = gesture_buffer.class.new(updating_events[-10..-1]) - [last_10.sum_attrs(:move_x) / updating_time, - last_10.sum_attrs(:move_y) / updating_time] - else - updating_time = 100 * (updating_events.last.time - updating_events.first.time) - [gesture_buffer.sum_attrs(:move_x) / updating_time, - gesture_buffer.sum_attrs(:move_y) / updating_time] - end - gesture_buffer.sum_attrs(:move_x) / updating_time + updating_time = 100 * (updating_events[-1].time - updating_events[-10].time) + last_10 = gesture_buffer.class.new(updating_events[-10..-1]) + [last_10.sum_attrs(:move_x) / updating_time, + last_10.sum_attrs(:move_y) / updating_time] + else + updating_time = 100 * (updating_events.last.time - updating_events.first.time) + [gesture_buffer.sum_attrs(:move_x) / updating_time, + gesture_buffer.sum_attrs(:move_y) / updating_time] + end + (gesture_buffer.sum_attrs(:move_x) / updating_time) finger = gesture_buffer.finger status = case gesture_buffer.events.last.record.status - when 'end' - 'end' - when 'update' - if updating_events.length == 1 - 'begin' - else - 'update' - end - else - gesture_buffer.events.last.record.status - end + when "end" + "end" + when "update" + if updating_events.length == 1 + "begin" + else + "update" + end + else + gesture_buffer.events.last.record.status + end - delta = if status == 'end' - gesture_buffer.events[-2].record.delta - else - gesture_buffer.events.last.record.delta - end + delta = if status == "end" + gesture_buffer.events[-2].record.delta + else + gesture_buffer.events.last.record.delta + end repeat_direction = Direction.new(move_x: delta.move_x, move_y: delta.move_y).to_s repeat_quantity = Quantity.new(move_x: delta.move_x, move_y: delta.move_y).to_f repeat_index = create_repeat_index(gesture: type, finger: finger, - direction: repeat_direction, status: status) + direction: repeat_direction, status: status) - if status == 'update' + if status == "update" return unless moved?(repeat_quantity) oneshot_direction = Direction.new(move_x: oneshot_move_x, move_y: oneshot_move_y).to_s oneshot_quantity = Quantity.new(move_x: oneshot_move_x, move_y: oneshot_move_y).to_f oneshot_index = create_oneshot_index(gesture: type, finger: finger, - direction: oneshot_direction) + direction: oneshot_direction) if enough_oneshot_threshold?(index: oneshot_index, quantity: oneshot_quantity) return [ create_event(record: Events::Records::IndexRecord.new( index: oneshot_index, trigger: :oneshot, args: delta.to_h )), @@ -126,23 +126,23 @@ end def threshold(index:) @threshold ||= {} @threshold[index.cache_key] ||= begin - keys_specific = Config::Index.new [*index.keys, 'threshold'] - keys_global = Config::Index.new ['threshold', type] + keys_specific = Config::Index.new [*index.keys, "threshold"] + keys_global = Config::Index.new ["threshold", type] config_value = Config.search(keys_specific) || - Config.search(keys_global) || 1 + Config.search(keys_global) || 1 BASE_THERESHOLD * config_value end end # direction of gesture class Direction - RIGHT = 'right' - LEFT = 'left' - DOWN = 'down' - UP = 'up' + RIGHT = "right" + LEFT = "left" + DOWN = "down" + UP = "up" def initialize(move_x:, move_y:) @move_x = move_x.to_f @move_y = move_y.to_f end