Parent

Gruff::Scene

A scene is a non-linear graph that assembles layers together to tell a story. Layers are folders with appropriately named files (see below). You can group layers and control them together or just set their values individually.

Examples:

Usage:

 g = Gruff::Scene.new("500x100", "path/to/city_scene_directory")

 # Define order of layers, back to front
 g.layers = %w(background haze sky clouds)

 # Define groups that will be controlled by the same input
 g.weather_group = %w(clouds)
 g.time_group = %w(background sky)

 # Set values for the layers or groups
 g.weather = "cloudy"
 g.time = Time.now
 g.haze = true

 # Write the final graph to disk
 g.write "hazy_daytime_city_scene.png"

There are several rules that will magically select a layer when possible.

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
    # File lib/gruff/scene.rb, line 50
50:   def initialize(target_width, base_dir)
51:     @base_dir = base_dir
52:     @groups = {}
53:     @layers = []    
54:     super target_width
55:   end

Public Instance Methods

draw() click to toggle source
    # File lib/gruff/scene.rb, line 57
57:   def draw
58:     # Join all the custom paths and filter out the empty ones
59:     image_paths = @layers.map { |layer| layer.path }.select { |path| !path.empty? }
60:     images = Magick::ImageList.new(*image_paths)
61:     @base_image = images.flatten_images
62:   end
layers=(ordered_list) click to toggle source
    # File lib/gruff/scene.rb, line 64
64:   def layers=(ordered_list)
65:     ordered_list.each do |layer_name|
66:       @layers << Gruff::Layer.new(@base_dir, layer_name)
67:     end
68:   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"
    # File lib/gruff/scene.rb, line 78
78:   def method_missing(method_name, *args)
79:     case method_name.to_s
80:     when /^(\w+)_group=$/
81:       add_group $1, *args
82:       return
83:     when /^(\w+)=$/
84:       set_input $1, args.first
85:       return
86:     end
87:     super
88:   end

Private Instance Methods

add_group(input_name, layer_names) click to toggle source
    # File lib/gruff/scene.rb, line 92
92:   def add_group(input_name, layer_names)
93:     @groups[input_name] = Gruff::Group.new(input_name, @layers.select { |layer| layer_names.include?(layer.name) })
94:   end
set_input(input_name, input_value) click to toggle source
     # File lib/gruff/scene.rb, line 96
 96:   def set_input(input_name, input_value)
 97:     if not @groups[input_name].nil?
 98:       @groups[input_name].send_updates(input_value)
 99:     else
100:       if chosen_layer = @layers.detect { |layer| layer.name == input_name }
101:         chosen_layer.update input_value
102:       end
103:     end
104:   end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.