class NyanCat::Cat
Public Class Methods
new(opts = {})
click to toggle source
# File lib/nyan-cat/cat.rb, line 19 def initialize(opts = {}) @frames = opts.fetch(:frames) { [FRAME1, FRAME2] } @trail_length = opts.fetch(:trail_length) { 9 } @colorize_trail = opts.fetch(:colorize) { true } @frame_count = 0 end
Public Instance Methods
tick(frame_count = @frame_count)
click to toggle source
# File lib/nyan-cat/cat.rb, line 26 def tick(frame_count = @frame_count) increment_internal_frame_count generate_cat(frame_count) end
Private Instance Methods
add_trail_to_each_line(frame, index)
click to toggle source
# File lib/nyan-cat/cat.rb, line 43 def add_trail_to_each_line(frame, index) lines = frame.split(/\r?\n/) frame_with_trails = lines.map.with_index do |line, i| @trail_length.times do |j| if @colorize_trail color_index = j - @frame_count % @trail_length line.prepend(Paint[trail_char(index, i, j), rainbow(color_index)]) else line.prepend(trail_char(index, i, j)) end end line end frame_with_trails.join("\n") end
generate_cat(frame_count)
click to toggle source
# File lib/nyan-cat/cat.rb, line 37 def generate_cat(frame_count) index = frame_count % @frames.count frame = @frames[index] frame_with_trail = add_trail_to_each_line(frame, index) end
increment_internal_frame_count()
click to toggle source
# File lib/nyan-cat/cat.rb, line 33 def increment_internal_frame_count @frame_count += 1 end
rainbow(freq = 0.3, i)
click to toggle source
# File lib/nyan-cat/cat.rb, line 60 def rainbow(freq = 0.3, i) red = Math.sin(freq*i + 0) * 127 + 128 green = Math.sin(freq*i + 2*Math::PI/3) * 127 + 128 blue = Math.sin(freq*i + 4*Math::PI/3) * 127 + 128 "#%02X%02X%02X" % [ red, green, blue ] end
trail_char(frame_index, line_index, trail_index)
click to toggle source
# File lib/nyan-cat/cat.rb, line 67 def trail_char(frame_index, line_index, trail_index) ((frame_index + line_index + trail_index) % 2).zero? ? '-' : '_' end