Class: RoadToRubykaigi::Config

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Singleton
Defined in:
lib/road_to_rubykaigi/config.rb

Constant Summary collapse

CONFIG_FILE =
'.road_to_rubykaigi'
DEFAULT_START_THRESHOLD =
0.025
DEFAULT_CONTINUATION_THRESHOLD =
0.05
INPUT_SOURCES =
%i[ble serial].freeze
INPUT_SOURCE_CYCLE =
[nil, :ble, :serial].freeze

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



24
25
26
# File 'lib/road_to_rubykaigi/config.rb', line 24

def initialize
  @settings = load
end

Instance Method Details

#bgm_off?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/road_to_rubykaigi/config.rb', line 71

def bgm_off?
  @settings['BGM_OFF']
end

#ble?Boolean

Returns:

  • (Boolean)


33
# File 'lib/road_to_rubykaigi/config.rb', line 33

def ble? = input_source == :ble

#continuation_thresholdObject



83
84
85
# File 'lib/road_to_rubykaigi/config.rb', line 83

def continuation_threshold
  (@settings['CONTINUATION_THRESHOLD'] || DEFAULT_CONTINUATION_THRESHOLD).to_f
end

#cycle_input_sourceObject



42
43
44
45
46
# File 'lib/road_to_rubykaigi/config.rb', line 42

def cycle_input_source
  current_index = INPUT_SOURCE_CYCLE.index(input_source) || 0
  self.input_source = INPUT_SOURCE_CYCLE[(current_index + 1) % INPUT_SOURCE_CYCLE.size]
  detect_serial_port! if serial?
end

#debug?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/road_to_rubykaigi/config.rb', line 67

def debug?
  @settings['DEBUG']
end

#demo?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/road_to_rubykaigi/config.rb', line 75

def demo?
  @settings['DEMO']
end

#detect_serial_port!Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/road_to_rubykaigi/config.rb', line 52

def detect_serial_port!
  return serial_port if File.exist?(serial_port)

  port = detect_serial_port
  if port
    @settings['SERIAL_PORT'] = port
    save(['SERIAL_PORT'])
  end
  port
end

#external_input?Boolean

Returns:

  • (Boolean)


35
# File 'lib/road_to_rubykaigi/config.rb', line 35

def external_input? = !input_source.nil?

#gravity_vectorObject



95
96
97
98
99
100
101
# File 'lib/road_to_rubykaigi/config.rb', line 95

def gravity_vector
  value = @settings['GRAVITY']
  return nil unless value

  parts = value.split(',').map(&:to_f)
  parts.size == 3 ? parts : nil
end

#input_sourceObject



28
29
30
31
# File 'lib/road_to_rubykaigi/config.rb', line 28

def input_source
  value = @settings['INPUT_SOURCE']&.to_sym
  INPUT_SOURCES.include?(value) ? value : nil
end

#input_source=(value) ⇒ Object



37
38
39
40
# File 'lib/road_to_rubykaigi/config.rb', line 37

def input_source=(value)
  @settings['INPUT_SOURCE'] = value.to_s
  save(['INPUT_SOURCE'])
end

#jump_v_maxObject



103
104
105
# File 'lib/road_to_rubykaigi/config.rb', line 103

def jump_v_max
  @settings['JUMP_V_MAX']&.to_f
end

#project_rootObject



125
126
127
# File 'lib/road_to_rubykaigi/config.rb', line 125

def project_root
  __dir__.sub('lib/road_to_rubykaigi', '')
end

#save_calibration(start_threshold:, continuation_threshold:, walk_cadence:, walk_intensity:, gravity_vector: nil, jump_v_max: nil) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/road_to_rubykaigi/config.rb', line 107

def save_calibration(start_threshold:, continuation_threshold:, walk_cadence:, walk_intensity:,
                     gravity_vector: nil, jump_v_max: nil)
  @settings['START_THRESHOLD'] = start_threshold.to_s
  @settings['CONTINUATION_THRESHOLD'] = continuation_threshold.to_s
  @settings['WALK_CADENCE'] = walk_cadence.to_s
  @settings['WALK_INTENSITY'] = walk_intensity.to_s
  keys = %w[START_THRESHOLD CONTINUATION_THRESHOLD WALK_CADENCE WALK_INTENSITY]
  if gravity_vector
    @settings['GRAVITY'] = gravity_vector.join(',')
    keys << 'GRAVITY'
  end
  if jump_v_max
    @settings['JUMP_V_MAX'] = jump_v_max.to_s
    keys << 'JUMP_V_MAX'
  end
  save(keys)
end

#serial?Boolean

Returns:

  • (Boolean)


34
# File 'lib/road_to_rubykaigi/config.rb', line 34

def serial? = input_source == :serial

#serial_portObject



48
49
50
# File 'lib/road_to_rubykaigi/config.rb', line 48

def serial_port
  @settings['SERIAL_PORT'] || detect_serial_port
end

#signal_sourceObject



63
64
65
# File 'lib/road_to_rubykaigi/config.rb', line 63

def signal_source
  serial? ? SerialReader : GameServer
end

#start_thresholdObject



79
80
81
# File 'lib/road_to_rubykaigi/config.rb', line 79

def start_threshold
  (@settings['START_THRESHOLD'] || DEFAULT_START_THRESHOLD).to_f
end

#walk_cadenceObject



87
88
89
# File 'lib/road_to_rubykaigi/config.rb', line 87

def walk_cadence
  @settings['WALK_CADENCE']&.to_f
end

#walk_intensityObject



91
92
93
# File 'lib/road_to_rubykaigi/config.rb', line 91

def walk_intensity
  @settings['WALK_INTENSITY']&.to_f
end