1 require 'animation_field'
8 unless animations.empty?
9 anim = animations.dup.compact
10 Animation.new("group (#{anim.map{|a| a.to_s}.join(',')})") do |i|
19 def sequence(*animations)
20 anim = animations.dup.compact
21 return nil if anim.empty?
22 Animation.new("sequence (#{anim.size})") do |i|
30 def movement(item, src, dst, path_factory)
38 dst = board.to_real(dst)
39 path = path_factory.new(src, dst)
41 SimpleAnimation.new "move to #{dst}", LENGTH,
42 lambda { board.raise(item) },
43 lambda {|i| item.pos = src + path[i] },
44 lambda { item.pos = dst; board.lower(item) }
48 def disappear(item, name = "disappear")
50 SimpleAnimation.new name, LENGTH,
51 lambda { item.opacity = 1.0; item.visible = true },
52 lambda {|t| item.opacity = 1.0 - t },
53 lambda { item.remove }
57 def appear(item, name = "appear")
58 SimpleAnimation.new name, LENGTH,
59 lambda { item.opacity = 0.0; item.visible = true },
60 lambda {|i| item.opacity = i },
61 lambda { item.opacity = 1.0 }
64 def instant_appear(p, piece, name = "appear")
65 Animation.new(name) { board.add_piece p, piece }
68 def instant_disappear(p, name = "disappear")
69 Animation.new(name) { board.remove_item p }
74 Linear = Factory.new do |src, dst|
76 lambda {|i| delta * i }
80 FACTOR = Math.exp(3.0) - 1
81 def initialize(src, dst)
83 nonlin = lambda{|i| (Math.exp(3.0 * i) - 1) / FACTOR }
85 if @delta.x.abs < @delta.y.abs
95 Qt::PointF.new(@delta.x * @x[i], @delta.y * @y[i])