FRAMERATE = 12
MAX_CROSS_TIME = 3
MAX_STEP_DIV = FRAMERATE*MAX_CROSS_TIME
LINES = 20

Shoes.app do
  size = [width, height]
  endpoints = (0..1).collect do
    [Slider.new(size, 0), Slider.new(size, 1), Slider.new(size, 0), Slider.new(size, 1)]
  end

  lines = [[], []]

  animate FRAMERATE do
    size[0] = width
    size[1] = height

    (0..1).each do |i|
      after(lines[i].last) do
        lines[i].push(line *(endpoints[i].collect {|s| s.slide }))
      end

      if(lines[i].length>LINES)
        junk = lines[i].shift
        junk.remove
      end
    end
  end
end

# A slider is a real-line component that maintains it's own velocity
# and bounces against 0 or a given max extent.
class Slider
  def initialize(size, cardinal)
    @size = size
    @cardinal = cardinal
    @pos = rand*@size[@cardinal]
    @vel = @size[@cardinal] / ( rand * MAX_STEP_DIV + MAX_STEP_DIV/2 ) * (rand(2)*2-1)
  end

  def slide
    @pos += @vel
    sign = 0
    sign=-1 if(@pos>@size[@cardinal])
    sign= 1 if(@pos<0)

    if sign==0
#      @vel *= 1.01
    else
      @pos -= @vel
      @vel= sign * @size[@cardinal] / (rand * MAX_STEP_DIV + MAX_STEP_DIV)
      @pos += @vel
    end

    @pos
  end
end
