Class: MonsterId::Monster

Inherits:
Object
  • Object
show all
Defined in:
lib/monster_id/monster.rb

Constant Summary collapse

SIZE =
120

Instance Method Summary collapse

Constructor Details

#initialize(seed, size = nil) ⇒ Monster

Returns a new instance of Monster.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/monster_id/monster.rb', line 10

def initialize(seed, size=nil)
  srand Digest::MD5.hexdigest(seed.to_s).to_i(16)

  # throw the dice for body parts
  parts = {
    legs:  rand(5),
    hair:  rand(5),
    arms:  rand(5),
    body:  rand(15),
    eyes:  rand(15),
    mouth: rand(10),
  }

  @image = ChunkyPNG::Image.new SIZE, SIZE, ChunkyPNG::Color::TRANSPARENT

  parts.each do |name, number|
    path = File.join File.dirname(__FILE__), 'parts', "#{name}_#{number + 1}.png"
    part = ChunkyPNG::Image.from_file path

    if name == :body
      # random body color
      w, h = part.width, part.height
      r, g, b = rand(215) + 20, rand(215) + 20, rand(215) + 20
      body_color = r * 256 * 256 * 256 + g * 256 * 256 + b * 256 + 255
      part.pixels.each_with_index do |color, i|
        unless color == 0 || color == 255
          part[i % w, (i / w).to_i] = body_color
        end
      end
    end

    @image.compose!(part, 0, 0)
  end

  @image.resample_bilinear!(size, size) unless size == nil or size == SIZE

  srand
end

Instance Method Details

#inspectObject



53
54
55
# File 'lib/monster_id/monster.rb', line 53

def inspect
  ''
end

#save(path) ⇒ Object



61
62
63
# File 'lib/monster_id/monster.rb', line 61

def save(path)
  @image.save(path)
end

#to_data_uriObject



57
58
59
# File 'lib/monster_id/monster.rb', line 57

def to_data_uri
  'data:image/png;base64,' + Base64.encode64(@image.to_s).gsub(/\n/, '')
end

#to_sObject



49
50
51
# File 'lib/monster_id/monster.rb', line 49

def to_s
  @image.to_datastream.to_s
end