lib/cyberarm_engine/animator.rb in cyberarm_engine-0.17.1 vs lib/cyberarm_engine/animator.rb in cyberarm_engine-0.18.0
- old
+ new
@@ -1,42 +1,42 @@
module CyberarmEngine
class Animator
- DEFAULT_TWEEN = :linear
- def initialize(start_time:, duration:, from:, to:, &block)
+ def initialize(start_time:, duration:, from:, to:, tween: :linear, &block)
@start_time = start_time
@duration = duration
@from = from.dup
@to = to.dup
+ @tween = tween
@block = block
end
def update
@block.call(self, @from, @to) if @block
end
def progress
- (@start_time.to_f + (Gosu.milliseconds - @start_time)) / (@start_time + @duration.to_f)
+ ((Gosu.milliseconds - @start_time) / @duration.to_f).clamp(0.0, 1.0)
end
def complete?
progress >= 1.0
end
- def transition(from, to, tween = DEFAULT_TWEEN)
+ def transition(from = @from, to = @to, tween = @tween)
from + (to - from) * send("tween_#{tween}", progress)
end
- def color_transition(from, to, _tween = DEFAULT_TWEEN)
+ def color_transition(from = @from, to = @to, _tween = @tween)
r = transition(from.red, to.red)
g = transition(from.green, to.green)
b = transition(from.blue, to.blue)
a = transition(from.alpha, to.alpha)
Gosu::Color.rgba(r, g, b, a)
end
- def color_hsv_transition(from, to, tween = DEFAULT_TWEEN)
+ def color_hsv_transition(from = @from, to = @to, tween = @tween)
hue = transition(from.hue, to.hue, tween)
saturation = transition(from.saturation, to.saturation, tween)
value = transition(from.value, to.value, tween)
alpha = transition(from.alpha, to.alpha, tween)
@@ -47,10 +47,10 @@
def tween_linear(t)
t
end
- def tween_sine(t)
- Math.sin(t) * t
+ def tween_ease_in_out(t)
+ (-0.5 * (Math.cos(Math::PI * t) - 1))
end
end
end