Class: MtgCardMaker::SpriteSheetBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/mtg_card_maker/sprite_sheet_builder.rb

Overview

Handles the core construction of sprite sheets from individual card files

Since:

  • 0.1.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cards_per_row: 5, spacing: 30) ⇒ SpriteSheetBuilder

Returns a new instance of SpriteSheetBuilder.

Since:

  • 0.1.0



10
11
12
13
# File 'lib/mtg_card_maker/sprite_sheet_builder.rb', line 10

def initialize(cards_per_row: 5, spacing: 30)
  @cards_per_row = cards_per_row
  @spacing = spacing
end

Instance Attribute Details

#cards_per_rowObject (readonly)

Since:

  • 0.1.0



8
9
10
# File 'lib/mtg_card_maker/sprite_sheet_builder.rb', line 8

def cards_per_row
  @cards_per_row
end

#spacingObject (readonly)

Since:

  • 0.1.0



8
9
10
# File 'lib/mtg_card_maker/sprite_sheet_builder.rb', line 8

def spacing
  @spacing
end

Instance Method Details

#create_sprite_builder(width, height, card_files, assets) ⇒ Object

Create the sprite sheet XML builder with assets and cards

Since:

  • 0.1.0



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/mtg_card_maker/sprite_sheet_builder.rb', line 29

def create_sprite_builder(width, height, card_files, assets)
  Nokogiri::XML::Builder.new do |xml|
    xml.svg(xmlns: 'http://www.w3.org/2000/svg',
            viewBox: "0 0 #{width} #{height}",
            width: width,
            height: height) do
      assets.add_assets_to_sprite(xml)
      add_cards_to_sprite(xml, card_files)
    end
  end
end

#sprite_dimensions(card_count) ⇒ Object

Calculate sprite sheet dimensions

Since:

  • 0.1.0



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/mtg_card_maker/sprite_sheet_builder.rb', line 16

def sprite_dimensions(card_count)
  return [0, 0] if card_count.zero?

  cols = [card_count, @cards_per_row].min
  rows = (card_count.to_f / @cards_per_row).ceil

  width = (cols * CARD_WIDTH) + ((cols - 1) * @spacing)
  height = (rows * CARD_HEIGHT) + ((rows - 1) * @spacing)

  [width, height]
end

#write_sprite_file(output_file, builder) ⇒ Object

Write the sprite sheet to file

Since:

  • 0.1.0



42
43
44
# File 'lib/mtg_card_maker/sprite_sheet_builder.rb', line 42

def write_sprite_file(output_file, builder)
  File.write(output_file, builder.to_xml)
end