Sha256: 438db0585c0fa3a9da38e79e10a4b6c08f91f73352d526cc5f8182adc1fde03d

Contents?: true

Size: 807 Bytes

Versions: 1

Compression:

Stored size: 807 Bytes

Contents

require 'ws_light/set/color_set'

module WSLight
  module Set
    # Creates a moving rainbow (actually a color circle)
    class RainbowSet < ColorSet
      def init
        @frequency = Math::PI / @length
      end

      def next_frame
        @frame_count += 1
      end

      def frame
        next_frame
        set = []

        @length.times do |i|
          set << pixel(i)
        end

        set += set.reverse if type == :double

        set
      end

      def pixel(number)
        number = @full_length - 1 - number if number >= @length
        x = @frequency * (number + @frame_count)
        Color.new(
          (Math.sin(x)**2 * 127),
          (Math.sin(x + 2.0 * Math::PI / 3.0)**2 * 127),
          (Math.sin(x + 4.0 * Math::PI / 3.0)**2 * 127)
        )
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ws_light-0.4.2 lib/ws_light/set/rainbow_set.rb