class ImageParadise::Gruff::Scene

Attributes

layers[R]

An array listing the foldernames that will be rendered, from back to front.

g.layers = %w(sky clouds buildings street people)

Public Class Methods

new(target_width, base_dir) click to toggle source

initialize

Calls superclass method ImageParadise::Gruff::Base::new
# File lib/image_paradise/graphs/scene.rb, line 57
def initialize(target_width, base_dir)
  @base_dir = base_dir
  @groups = {}
  @layers = []    
  super target_width
end

Public Instance Methods

draw() click to toggle source

draw

# File lib/image_paradise/graphs/scene.rb, line 64
def draw
  # Join all the custom paths and filter out the empty ones
  image_paths = @layers.map { |layer| layer.path }.select { |path| !path.empty? }
  images = Magick::ImageList.new(*image_paths)
  @base_image = images.flatten_images
end
layers=(ordered_list) click to toggle source

layers=

# File lib/image_paradise/graphs/scene.rb, line 71
def layers=(ordered_list)
  ordered_list.each do |layer_name|
    @layers << Gruff::Layer.new(@base_dir, layer_name)
  end
end
method_missing(method_name, *args) click to toggle source

Group layers to input values

g.weather_group = ["sky", "sea", "clouds"]

Set input values

g.weather = "cloudy"
Calls superclass method
# File lib/image_paradise/graphs/scene.rb, line 85
def method_missing(method_name, *args)
  case method_name.to_s
  when /^(\w+)_group=$/
    add_group $1, *args
    return
  when /^(\w+)=$/
    set_input $1, args.first
    return
  end
  super
end

Private Instance Methods

add_group(input_name, layer_names) click to toggle source
# File lib/image_paradise/graphs/scene.rb, line 99
def add_group(input_name, layer_names)
  @groups[input_name] = Gruff::Group.new(input_name, @layers.select { |layer| layer_names.include?(layer.name) })
end
set_input(input_name, input_value) click to toggle source
# File lib/image_paradise/graphs/scene.rb, line 103
def set_input(input_name, input_value)
  if not @groups[input_name].nil?
    @groups[input_name].send_updates(input_value)
  else
    if chosen_layer = @layers.detect { |layer| layer.name == input_name }
      chosen_layer.update input_value
    end
  end
end