Sha256: f8d325f98beda3185ea39e0cc7f8c065cb794e5b3d919d44deee32201c036445

Contents?: true

Size: 977 Bytes

Versions: 2

Compression:

Stored size: 977 Bytes

Contents

require_relative 'easing'
require_relative 'frame'

module WhirledPeas
  module Animator
    class Frameset
      def initialize(duration, easing, effect)
        @duration = duration
        @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)
        return if frames.length == 0
        if frames.length == 1
          frame, args = frames[0]
          yield frame, duration, args
        else
          frames.each.with_index do |(frame, args), index|
            curr_ease = @easing.invert(index.to_f / frames.length)
            next_ease = @easing.invert((index + 1).to_f / frames.length)
            yield frame, duration * (next_ease - curr_ease), args
          end
        end
      end

      private

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
whirled_peas-0.13.0 lib/whirled_peas/animator/frameset.rb
whirled_peas-0.12.0 lib/whirled_peas/animator/frameset.rb