class WSLight::Set::RainSet

Creates a set with all random colors

Constants

CLOUD
FRAMES_PER_DROP
VISIBLE_DROPS

Public Instance Methods

brightness(frame_distance) click to toggle source
# File lib/ws_light/set/weather/rain_set.rb, line 48
def brightness(frame_distance)
  (250 * (1.0 - (frame_distance.to_f / FRAMES_PER_DROP.to_f))).to_i
end
draw_drop(position, drop_frame) click to toggle source
# File lib/ws_light/set/weather/rain_set.rb, line 39
def draw_drop(position, drop_frame)
  blue = brightness(drop_frame.to_f) % 250
  @set[position] = Color.new(4, 4, 4 + blue)
end
frame() click to toggle source
# File lib/ws_light/set/weather/rain_set.rb, line 25
def frame
  next_frame
  @set
end
generate_frame() click to toggle source
# File lib/ws_light/set/weather/rain_set.rb, line 30
def generate_frame
  @set = [CLOUD] * @full_length
  start = (@frame_count * VISIBLE_DROPS / FRAMES_PER_DROP) % @max
  VISIBLE_DROPS.times do |i|
    drop_ratio = (FRAMES_PER_DROP.to_f / VISIBLE_DROPS.to_f)
    draw_drop(@drops[start + i], @frame_count - ((start - VISIBLE_DROPS + 1 + i) * drop_ratio).to_i)
  end
end
init() click to toggle source
# File lib/ws_light/set/weather/rain_set.rb, line 11
def init
  @drops = (0..(@full_length - 1)).to_a.shuffle
  @max = @drops.size
  # append the start at the end to ensure same result window when near the % @max
  @drops += @drops[0, VISIBLE_DROPS]
  generate_frame
end
next_frame() click to toggle source
# File lib/ws_light/set/weather/rain_set.rb, line 19
def next_frame
  @frame_count += 1
  @frame_count = @frame_count % (@max * FRAMES_PER_DROP)
  generate_frame
end
pixel(number) click to toggle source
# File lib/ws_light/set/weather/rain_set.rb, line 44
def pixel(number)
  @set[number]
end