class Theseus::Formatters::PNG::Upsilon

Renders a UpsilonMaze to a PNG canvas. Does not currently support the :wall_width option.

You will almost never access this class directly. Instead, use UpsilonMaze#to(:png, options) to return the raw PNG data directly.

Public Class Methods

new(maze, options={}) click to toggle source

Create and return a fully initialized PNG::Upsilon object, with the maze rendered. To get the maze data, call to_blob.

See Theseus::Formatters::PNG for a list of all supported options.

Calls superclass method Theseus::Formatters::PNG::new
# File lib/theseus/formatters/png/upsilon.rb, line 16
def initialize(maze, options={})
  super

  width = @options[:outer_padding] * 2 + (3 * maze.width + 1) * @options[:cell_size] / 4
  height = @options[:outer_padding] * 2 + (3 * maze.height + 1) * @options[:cell_size] / 4

  canvas = ChunkyPNG::Image.new(width, height, @options[:background])

  metrics = { size: @options[:cell_size] - @options[:cell_padding] * 2 }
  metrics[:s4] = metrics[:size] / 4.0
  metrics[:inc] = 3 * @options[:cell_size] / 4.0

  maze.height.times do |y|
    py = @options[:outer_padding] + y * metrics[:inc]
    maze.row_length(y).times do |x|
      cell = maze[x, y]
      next if cell == 0

      px = @options[:outer_padding] + x * metrics[:inc]

      if (y + x) % 2 == 0
        draw_octogon_cell(canvas, [x, y], px, py, cell, metrics)
      else
        draw_square_cell(canvas, [x, y], px, py, cell, metrics)
      end
    end
  end

  @blob = canvas.to_blob
end