class Hanoi::Jane::AnimatedTowers

Attributes

discs[RW]
height[RW]
towers[RW]

Public Class Methods

new() { |self| ... } click to toggle source
# File lib/hanoi/jane/towers/animated_towers.rb, line 8
def initialize
  yield self if block_given?

  if @discs > @height
    raise HanoiException.new 'number_of_discs (%d) > height (%d)' % [@discs, @height]
  end

  @towers = @towers.new @discs
end

Public Instance Methods

each() { |frame stacks, value, :key| ... } click to toggle source
# File lib/hanoi/jane/towers/animated_towers.rb, line 18
def each
  until @towers.solved
    stacks = PaddedStacks.new @towers.stacks, @height
    value = @towers.rebased
    @towers.move
    yield Frame.new stacks, value, :key

    @anim = Animation.new do |a|
      a.stacks = stacks
      a.disc = @towers.disc
      a.from = @towers.from
      a.to = @towers.to
      a.height = @height
    end

    @anim.each do |frame|
      yield Frame.new frame.stacks, @towers.rebased, :tween
    end
  end

  yield Frame.new (PaddedStacks.new @towers.stacks, @height), @towers.rebased, :key
end