class Waxy::Geometry::Layout
Attributes
orientation[RW]
origin[RW]
pad_h_offset[R]
pad_w_offset[R]
padding[RW]
pixels between hexes !! Padding is applied at render time, not geometry compute time, i.e. using this will currently !! break things like pixel_to_hex
size[RW]
Public Class Methods
new(_orientation, _size, _origin, _padding = 0.0)
click to toggle source
# File lib/waxy/geometry/layout.rb, line 22 def initialize(_orientation, _size, _origin, _padding = 0.0) @orientation = _orientation @size = _size @origin = _origin @padding = _padding reset_padding end
Public Instance Methods
hex_corner_angle(corner)
click to toggle source
@param corner [Integer]
# File lib/waxy/geometry/layout.rb, line 56 def hex_corner_angle(corner) 2.0 * Math::PI * (orientation.start_angle + corner) / 6 end
hex_corner_offset(corner, s = nil)
click to toggle source
@param corner [Integer]
# File lib/waxy/geometry/layout.rb, line 49 def hex_corner_offset(corner, s = nil) s ||= size angle = hex_corner_angle(corner) Waxy::Geometry::Point.new(s.x * Math.cos(angle), s.y * Math.sin(angle)) end
hex_to_pixel(hex)
click to toggle source
# File lib/waxy/geometry/layout.rb, line 30 def hex_to_pixel(hex) m = orientation x = (m.f0 * hex.q + m.f1 * hex.r) * size.x y = (m.f2 * hex.q + m.f3 * hex.r) * size.y Waxy::Geometry::Point.new(x + origin.x, y + origin.y) end
increase_h_padding()
click to toggle source
# File lib/waxy/geometry/layout.rb, line 118 def increase_h_padding @pad_h_offset += padding end
increase_w_padding()
click to toggle source
# File lib/waxy/geometry/layout.rb, line 122 def increase_w_padding @pad_w_offset += padding end
pixel_to_hex(p)
click to toggle source
# File lib/waxy/geometry/layout.rb, line 38 def pixel_to_hex(p) m = orientation pt = Waxy::Geometry::Point.new((p.x - origin.x) / size.x, (p.y - origin.y) / size.y) q = m.b0 * pt.x + m.b1 * pt.y r = m.b2 * pt.x + m.b3 * pt.y Waxy::Geometry::FractionalHex.new(q, r, q * -1.0, r * -1.0) end
point(hex, i, scale = 1.0 )
click to toggle source
Departing from Redblob here
# File lib/waxy/geometry/layout.rb, line 76 def point(hex, i, scale = 1.0 ) center = hex_to_pixel(hex) resized = size.dup resized.x = resized.x * scale resized.y = resized.y * scale offset = hex_corner_offset(i, resized) Waxy::Geometry::Point.new( center.x + offset.x, center.y + offset.y ) end
polygon_corners(h)
click to toggle source
@params h [Waxy::Geometry::Hex]
# File lib/waxy/geometry/layout.rb, line 61 def polygon_corners(h) corners = [] center = hex_to_pixel(h) (0..5).each do |i| offset = hex_corner_offset(i) corners.push Waxy::Geometry::Point.new( center.x + offset.x, center.y + offset.y) end corners end
reset_h_padding()
click to toggle source
# File lib/waxy/geometry/layout.rb, line 110 def reset_h_padding @pad_h_offset = 0.0 end
reset_padding()
click to toggle source
Padding methods are not part of Amit's original code. They are not integrated into geometry compute.
# File lib/waxy/geometry/layout.rb, line 105 def reset_padding reset_h_padding reset_w_padding end
reset_w_padding()
click to toggle source
# File lib/waxy/geometry/layout.rb, line 114 def reset_w_padding @pad_w_offset = 0.0 end
triangle(hex, i)
click to toggle source
# File lib/waxy/geometry/layout.rb, line 88 def triangle(hex, i) scale = hex.size[i] points = [ hex_to_pixel(hex) ] points.push point(hex, i, scale) points.push point(hex, (i + 1 == 6 ? 0 : i + 1), scale) points end
triangles(hex)
click to toggle source
# File lib/waxy/geometry/layout.rb, line 97 def triangles(hex) (0..5).each_with_index.collect{|t,i| triangle(hex, i) } end