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