Sha256: 930737463c6c54b19f87eca00dd4e99e3d046784d2b36ab4f6d818e8fb1b4ada

Contents?: true

Size: 1.74 KB

Versions: 5

Compression:

Stored size: 1.74 KB

Contents

######################################
# Yet another examples of reading and
# writing to some form of markup,
# appropriately yaml.
# by Martin Prout after Dan Shiffman
# ###################################
load_library :bubble

attr_reader :bubble_data

def setup()
  size(640, 360)
  # load data from file
  @bubble_data = BubbleData.new 'bubbles'
  bubble_data.load_data 'data/data.yml'
end

def draw
  background 255
  bubble_data.display mouse_x, mouse_y
end

def mouse_pressed
  # create a new bubble instance, where mouse was clicked
  @bubble_data.create_new_bubble(mouse_x, mouse_y)
end

class BubbleData 
  include Enumerable
  
  MAX_BUBBLE = 10
  
  attr_reader :key, :path, :bubbles
  def initialize key
    @key = key
    @bubbles = []
  end
  
  def each &block
    bubbles.each &block
  end  
  
  def create_new_bubble x, y
    self.add Bubble.new(x, y, rand(40 .. 80), 'new label')    
    save_data 
    load_data path
  end
  
  def display x, y
    self.each do |bubble|
      bubble.display
      bubble.rollover(x, y)
    end
  end
  
  # @param path to yaml file
  
  def load_data path
    @path = path
    yaml = Psych.load_file('data/data.yml')
    data = yaml[key]
    bubbles.clear
    # iterate the bubble_data array, and create an array of bubbles
    data.each do |point|
      self.add Bubble.new(
        point['position']['x'],
        point['position']['y'],
        point['diameter'],
        point['label'])
    end
  end
  
  
  def add bubble
    bubbles << bubble
    bubbles.shift if bubbles.size > MAX_BUBBLE
  end 
  
  private   
  
  def save_data
    hash = { key => self.map{ |point| point.to_hash } }
    yaml = hash.to_yaml
    # overwite existing 'data.yaml' 
    open('data/data.yml', 'w:UTF-8') { |f| f.write(yaml) }
  end  
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ruby-processing-2.6.2 samples/processing_app/topics/advanced_data/load_save_yaml.rb
ruby-processing-2.6.1 samples/processing_app/topics/advanced_data/load_save_yaml.rb
ruby-processing-2.6.0 samples/processing_app/topics/advanced_data/load_save_yaml.rb
ruby-processing-2.5.1 samples/processing_app/topics/advanced_data/load_save_yaml.rb
ruby-processing-2.5.0 samples/processing_app/topics/advanced_data/load_save_yaml.rb