class ProconBypassMan::Procon
Attributes
user_operation[RW]
Public Class Methods
new(binary)
click to toggle source
# File lib/procon_bypass_man/procon.rb, line 23 def initialize(binary) self.user_operation = ProconBypassMan::Procon::UserOperation.new(binary.dup) end
reset!()
click to toggle source
# File lib/procon_bypass_man/procon.rb, line 13 def self.reset! @@status = { buttons: {}, current_layer_key: :up, ongoing_macro: MacroRegistry.load(:null), ongoing_mode: ModeRegistry.load(:manual), } end
Public Instance Methods
apply!()
click to toggle source
# File lib/procon_bypass_man/procon.rb, line 36 def apply! if user_operation.change_layer? @@status[:current_layer_key] = user_operation.next_layer_key if user_operation.pressed_next_layer? user_operation.set_no_action! return end if ongoing_macro.finished? current_layer.macros.each do |macro_name, options| if options[:if_pressed].all? { |b| user_operation.pressed_button?(b) } @@status[:ongoing_macro] = MacroRegistry.load(macro_name) end end end case current_layer.mode when :manual @@status[:ongoing_mode] = ModeRegistry.load(:manual) current_layer.flip_buttons.each do |button, options| if !options[:if_pressed] FlipCache.fetch(key: button, expires_in: options[:flip_interval]) do status[button] = !status[button] end next end if options[:if_pressed] && options[:if_pressed].all? { |b| user_operation.pressed_button?(b) } FlipCache.fetch(key: button, expires_in: options[:flip_interval]) do status[button] = !status[button] end else FlipCache.fetch(key: button, expires_in: options[:flip_interval]) do status[button] = false end end end else unless ongoing_mode.name == current_layer.mode @@status[:ongoing_mode] = ProconBypassMan::Procon::ModeRegistry.load(current_layer.mode) end if(binary = ongoing_mode.next_binary) self.user_operation.merge(target_binary: binary) end return end status end
current_layer()
click to toggle source
# File lib/procon_bypass_man/procon.rb, line 32 def current_layer ProconBypassMan::Configuration.instance.layers[current_layer_key] end
current_layer_key()
click to toggle source
# File lib/procon_bypass_man/procon.rb, line 30 def current_layer_key; @@status[:current_layer_key]; end
ongoing_macro()
click to toggle source
# File lib/procon_bypass_man/procon.rb, line 28 def ongoing_macro; @@status[:ongoing_macro]; end
ongoing_mode()
click to toggle source
# File lib/procon_bypass_man/procon.rb, line 29 def ongoing_mode; @@status[:ongoing_mode]; end
status()
click to toggle source
# File lib/procon_bypass_man/procon.rb, line 27 def status; @@status[:buttons]; end
to_binary()
click to toggle source
@return [String<binary>]
# File lib/procon_bypass_man/procon.rb, line 86 def to_binary if ongoing_mode.name != :manual return user_operation.binary end if ongoing_macro.ongoing? step = ongoing_macro.next_step or return(user_operation.binary) user_operation.press_button_only(step) return user_operation.binary end current_layer.flip_buttons.each do |button, options| # 何もしないで常に連打 if !options[:if_pressed] && status[button] user_operation.press_button(button) unless user_operation.pressed_button?(button) next end # 押している時だけ連打 if options[:if_pressed] && options[:if_pressed].all? { |b| user_operation.pressed_button?(b) } if !status[button] user_operation.unpress_button(button) end options[:force_neutral]&.each do |force_neutral_button| user_operation.pressed_button?(force_neutral_button) && user_operation.unpress_button(force_neutral_button) end end end current_layer.remaps.each do |from_button, to_buttons| if user_operation.pressed_button?(from_button) user_operation.unpress_button(from_button) # TODO 2重でpressしないようにしたい to_buttons[:to].each do |to_button| user_operation.press_button(to_button) unless user_operation.pressed_button?(to_button) end end end user_operation.binary end
Private Instance Methods
method_missing(name)
click to toggle source
Calls superclass method
# File lib/procon_bypass_man/procon.rb, line 131 def method_missing(name) if name.to_s =~ /\Apressed_[a-z]+\?\z/ user_operation.public_send(name) else super end end