Sha256: 062e52d91a1045cf80e2cfc9029f1d6d52da24491fe462a31a62f36981716823

Contents?: true

Size: 771 Bytes

Versions: 5

Compression:

Stored size: 771 Bytes

Contents

require_relative 'easing'
require_relative 'frame'

module WhirledPeas
  module Animator
    class Frameset
      def initialize(frame_slots, easing, effect)
        @frame_slots = frame_slots
        @easing = Easing.new(easing, effect)
        @frames = []
      end

      def add_frame(name, args: {})
        frames << [name, args]
      end

      # Yield each frame in an "eased" order
      def each_frame(&block)
        frame_slots.times do |i|
          input = i.to_f / (frame_slots - 1)
          eased_value = @easing.ease(input)
          index = (eased_value * (frames.length - 1)).floor
          yield *frames[index]
        end
      end

      private

      attr_reader :frame_slots, :easing, :frames
    end
    private_constant :Frameset
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
whirled_peas-0.11.1 lib/whirled_peas/animator/frameset.rb
whirled_peas-0.11.0 lib/whirled_peas/animator/frameset.rb
whirled_peas-0.10.0 lib/whirled_peas/animator/frameset.rb
whirled_peas-0.9.1 lib/whirled_peas/animator/frameset.rb
whirled_peas-0.9.0 lib/whirled_peas/animator/frameset.rb