Class: RoadToRubykaigi::CalibrationBar
- Inherits:
-
Object
- Object
- RoadToRubykaigi::CalibrationBar
- Defined in:
- lib/road_to_rubykaigi/calibration_bar.rb
Constant Summary collapse
- BAR_WIDTH =
100- BAR_MAX =
2.5- EMOJI_WIDTH =
2- BOUNCE_HZ =
4- BASE_X =
5- EMOJI_BOUNCE_Y =
6- EMOJI_BASE_Y =
EMOJI_BOUNCE_Y + 1
- MESSAGES =
{ remaining: [5, 5, "#{ANSI::BOLD}%-20s#{ANSI::RESET} %5.1fs"], intensity: [5, 8, '[%s] %.4f'], }.freeze
- LABELS =
{ static: { text: 'Hold still', emoji: 'π§' }, walk: { text: 'Walk', emoji: 'πΆββ‘οΈ', emoji_bounce: 'πββ‘οΈ' }, jump: { text: 'Jump', emoji: 'π§', emoji_bounce: 'π€Έ' }, }.freeze
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.clear_emoji ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/road_to_rubykaigi/calibration_bar.rb', line 25 def self.clear_emoji blank = ' ' * (BAR_WIDTH + EMOJI_WIDTH) [ [BASE_X + 1, EMOJI_BOUNCE_Y, blank], [BASE_X + 1, EMOJI_BASE_Y, blank], ] end |
.states ⇒ Object
23 |
# File 'lib/road_to_rubykaigi/calibration_bar.rb', line 23 def self.states = LABELS.keys.dup |
Instance Method Details
#render ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/road_to_rubykaigi/calibration_bar.rb', line 33 def render result = [ format_line(MESSAGES[:remaining], "βΆ #{@label[:text]}", @sampler.remaining), format_line(MESSAGES[:intensity], , @sampler.intensity), ] if bouncing_state? emoji_x = BASE_X + 1 + (@sampler.progress * BAR_WIDTH).to_i.clamp(0, BAR_WIDTH) # Clear previous emoji unless @prev_emoji_x == emoji_x result << [@prev_emoji_x, EMOJI_BOUNCE_Y, ' ' * EMOJI_WIDTH] result << [@prev_emoji_x, EMOJI_BASE_Y, ' ' * EMOJI_WIDTH] @prev_emoji_x = emoji_x end if bouncing? result << [emoji_x, EMOJI_BOUNCE_Y, @label[:emoji_bounce]] result << [emoji_x, EMOJI_BASE_Y, ' ' * EMOJI_WIDTH] else result << [emoji_x, EMOJI_BOUNCE_Y, ' ' * EMOJI_WIDTH] result << [emoji_x, EMOJI_BASE_Y, @label[:emoji]] end else result << [BASE_X + 1, EMOJI_BASE_Y, @label[:emoji]] end result end |