Sha256: 1cf2c3a61aa4aee4c3a6eec0b73c713e9d0fccb7ccf8d7ed2279550e2cd7e2ac

Contents?: true

Size: 1.42 KB

Versions: 4

Compression:

Stored size: 1.42 KB

Contents

module CyberarmEngine
  class Animator
    DEFAULT_TWEEN = :linear
    def initialize(start_time:, duration:, from:, to:, &block)
      @start_time = start_time
      @duration = duration
      @from = from.dup
      @to = to.dup
      @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)
    end

    def complete?
      progress >= 1.0
    end

    def transition(from, to, tween = DEFAULT_TWEEN)
      from + (to - from) * send("tween_#{tween}", progress)
    end

    def color_transition(from, to, _tween = DEFAULT_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)
      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)

      Gosu::Color.from_ahsv(alpha, hue, saturation, value)
    end

    # NOTE: Use this for future reference? https://github.com/danro/easing-js/blob/master/easing.js

    def tween_linear(t)
      t
    end

    def tween_sine(t)
      Math.sin(t) * t
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
cyberarm_engine-0.17.1 lib/cyberarm_engine/animator.rb
cyberarm_engine-0.17.0 lib/cyberarm_engine/animator.rb
cyberarm_engine-0.16.0 lib/cyberarm_engine/animator.rb
cyberarm_engine-0.15.0 lib/cyberarm_engine/animator.rb