module Waxy::Render::Svg

Constants

TEMPLATE_PATH

Public Class Methods

close_svg() click to toggle source
# File lib/waxy/render/svg.rb, line 12
def self.close_svg
  t = Tilt.new(File.join(TEMPLATE_PATH, 'close_svg.erb'))
  t.render
end
hex_pie(layout, hex, meta = Waxy::Meta.new) click to toggle source
# File lib/waxy/render/svg.rb, line 22
def self.hex_pie(layout, hex, meta = Waxy::Meta.new)
  hex.size = meta.size
  t = Tilt.new(File.join(TEMPLATE_PATH, 'hex_pie.erb'))
  s = t.render(layout, hex: hex, meta: meta)
end
hexagon(layout, hex, color = 'black') click to toggle source
# File lib/waxy/render/svg.rb, line 17
def self.hexagon(layout, hex, color = 'black')
  t = Tilt.new(File.join(TEMPLATE_PATH, 'hex.erb'))
  t.render(layout, hex: hex, color: color)
end
open_svg(canvas) click to toggle source
# File lib/waxy/render/svg.rb, line 7
def self.open_svg(canvas)
  t = Tilt.new(File.join(TEMPLATE_PATH, 'open_svg.erb'))
  t.render(canvas)
end
painted_hexagon(layout, map_radius, metadata) click to toggle source

Code directly from Amit/RedBlob games This is for known radius, if you don't have enough hexes it won't render a full hexagon, “painted” because it completes in bands

# File lib/waxy/render/svg.rb, line 65
def self.painted_hexagon(layout, map_radius, metadata)
  str = ''
  ((-1 * map_radius)..(map_radius - 1)).each do |q|
    r1 = [(-1 * map_radius), (-1 * q) - map_radius].max
    r2 = [map_radius, (-1 * q) + map_radius].min

    (r1 ... r2 - 1).each do |r|
      hex = Waxy::Geometry::Hex.new( q, r, ((-1 * q) - r))
      str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop)

      return str if metadata.size == 0
    end
  end
  str
end
rectangle(layout, metadata, w = 10, h = 10) click to toggle source
# File lib/waxy/render/svg.rb, line 98
def self.rectangle(layout, metadata, w = 10, h = 10)
  str = ''

  (0..h).each do |r|
    layout.reset_w_padding
    (0..w).each do |j|
      return str if metadata.size == 0
      q = j - (r/2).floor
      hex = Waxy::Geometry::Hex.new(q, r)
      str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop)
      layout.increase_w_padding
    end
    layout.increase_h_padding
  end
  str
end
spiral(layout, radius, metadata) click to toggle source

A spiral layout that is continuous from an empty center. TODO: use a theta/spiral calc and pixel_to_hex to simplify(?) the algorithim

# File lib/waxy/render/svg.rb, line 32
def self.spiral(layout, radius, metadata)
  str = ''
  hex = Waxy::Geometry::Hex.new( 0, 0, nil)
  directions = [2, 3, 4, 5]

  (0..radius).each do |r|
    (0..r).each do |z|
      hex = hex.hex_neighbor(0) 
      str <<  Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop )
      return str if metadata.size == 0
    end

    (0..r - 1).each do |o|
      hex = hex.hex_neighbor(1) 
      str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop )
      return str if metadata.size == 0
    end

    directions.each do |v1|
      (0..r).each do |y|
        hex = hex.hex_neighbor(v1) 
        str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop)
        return str if metadata.size == 0
      end
    end
  end
  str
end
square(layout, metadata) click to toggle source

Map for Square

# File lib/waxy/render/svg.rb, line 82
def self.square(layout, metadata)
  str = ''
  h = Math.sqrt(metadata.size).to_i

  (0..h).each do |r|
    (0..h).each do |j|
      return str if metadata.size == 0
      q = j - (r/2).floor
      hex = Waxy::Geometry::Hex.new(q, r)
      str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop)
    end
  end
  str
end