Sha256: 7e29a0389f4fc84beeac0948b7a645e1ac985083e742c6b8cec6ce09de0856c5

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 KB

Contents

module AdventureRL
  class Animation < Image
    DEFAULT_SETTINGS = Settings.new(
      files:     ['DEFAULT_ANIMATION_FILE.png'],
      intervals: [0.5]  # Image switch intervals in seconds.
    )

    def initialize settings = {}
      @settings = DEFAULT_SETTINGS.merge settings
      image_settings = @settings.get
      image_settings[:dont_create_image] = true
      super image_settings
      @images              = get_images_from [@settings.get(:files)].flatten
      @animation_intervals = [@settings.get(:intervals)].flatten
      @timing_handler      = TimingHandler.new
      @timeout_id          = :next_image_timeout
      @current_image_index = -1
      next_image
    end

    def update_animation
      @timing_handler.update
    end

    # Call this (or #update_animation) every frame, to ensure that the animation is playing.
    def update
      update_animation
    end

    def next_image
      @current_image_index += 1
      @current_image_index  = 0  if (@current_image_index >= @images.size)
      @image = @images[@current_image_index]
      set_timeout
    end

    def set_timeout
      current_interval = get_current_interval
      @timing_handler.set_timeout(
        id:      @timeout_id,
        seconds: get_current_interval,
        method:  method(:next_image)
      )  if (current_interval)
    end

    private

      def get_images_from files
        return files.map do |file|
          next get_image_from(file)
        end
      end

      def get_current_interval
        intervals_size = @animation_intervals.size
        if (@current_image_index < intervals_size)
          return @animation_intervals[@current_image_index]
        else
          return @animation_intervals[@current_image_index - (intervals_size * (@current_image_index / intervals_size).floor)]
        end
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
adventure_rl-0.0.2 lib/AdventureRL/Animation.rb
adventure_rl-0.0.1.pre.ld42 lib/AdventureRL/Animation.rb