lib/whirled_peas/animator/frameset.rb in whirled_peas-0.11.1 vs lib/whirled_peas/animator/frameset.rb in whirled_peas-0.12.0

- old
+ new

@@ -2,32 +2,37 @@ require_relative 'frame' module WhirledPeas module Animator class Frameset - def initialize(frame_slots, easing, effect) - @frame_slots = frame_slots + 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) - 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] + 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 :frame_slots, :easing, :frames + attr_reader :duration, :easing, :frames end private_constant :Frameset end end