You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.1 KiB
116 lines
4.1 KiB
require 'forwardable' |
|
require 'pp' |
|
require_relative '../squib' |
|
require_relative 'args/unit_conversion' |
|
require_relative 'card' |
|
require_relative 'conf' |
|
require_relative 'constants' |
|
require_relative 'graphics/hand' |
|
require_relative 'graphics/showcase' |
|
require_relative 'layout_parser' |
|
require_relative 'progress' |
|
|
|
|
|
# The project module |
|
# |
|
# @api public |
|
module Squib |
|
|
|
# The main interface to Squib. Provides a front-end porcelain whereas the Card class interacts with the graphics plumbing. |
|
# |
|
# @api public |
|
class Deck |
|
include Enumerable |
|
extend Forwardable |
|
|
|
# Attributes for the width, height (in pixels) and number of cards |
|
# These are expected to be immuatble for the life of Deck |
|
# @api private |
|
attr_reader :width, :height, :cards, :progress_bar |
|
|
|
# Delegate these configuration options to the Squib::Conf object |
|
def_delegators :conf, :antialias, :backend, :count_format, :custom_colors, :dir, |
|
:img_dir, :prefix, :text_hint, :typographer |
|
# :nodoc: |
|
# @api private |
|
attr_reader :layout, :conf, :dpi, :font |
|
|
|
# |
|
# deck.size is really just @cards.size |
|
def_delegators :cards, :size |
|
|
|
# Squib's constructor that sets the immutable properties. |
|
# |
|
# This is the starting point for Squib. In providing a block to the constructor, you have access to all of Deck's instance methods. |
|
# The documented methods in Deck are the ones intended for use by most users. |
|
# If your game requires multiple different sizes or orientations, I recommend using multiple `Squib::Deck`s in your `deck.rb`. You can modify the internals of `Squib::Deck` (e.g. `@cards`), but that's not recommended. |
|
# @example |
|
# require 'squib' |
|
# Squib::Deck.new do |
|
# text str: 'Hello, World!" |
|
# end |
|
# |
|
# @param width [Integer] the width of each card in pixels. Supports unit conversion (e.g. '2.5in'). |
|
# @param height [Integer] the height of each card in pixels. Supports unit conversion (e.g. '3.5in'). |
|
# @param cards [Integer] the number of cards in the deck |
|
# @param dpi [Integer] the pixels per inch when rendering out to PDF or calculating using inches. |
|
# @param config [String] the file used for global settings of this deck |
|
# @param layout [String, Array] load a YML file of custom layouts. Multiple files are merged sequentially, redefining collisons. See README and sample for details. |
|
# @param block [Block] the main body of the script. |
|
# @api public |
|
def initialize(width: 825, height: 1125, cards: 1, dpi: 300, config: 'config.yml', layout: nil, &block) |
|
@dpi = dpi |
|
@font = DEFAULT_FONT |
|
@cards = [] |
|
@conf = Conf.load(config) |
|
@progress_bar = Progress.new(@conf.progress_bars) # FIXME this is evil. Using something different with @ and non-@ |
|
show_info(config, layout) |
|
@width = Args::UnitConversion.parse width, dpi |
|
@height = Args::UnitConversion.parse height, dpi |
|
cards.times{ |i| @cards << Squib::Card.new(self, @width, @height, i) } |
|
@layout = LayoutParser.new(dpi).load_layout(layout) |
|
enable_groups_from_env! |
|
if block_given? |
|
instance_eval(&block) # here we go. wheeeee! |
|
end |
|
@cards.each { |c| c.finish! } |
|
end |
|
|
|
# Directly accesses the array of cards in the deck |
|
# |
|
# @api private |
|
def [](key) |
|
@cards[key] |
|
end |
|
|
|
# Iterates over each card in the deck |
|
# |
|
# @api private |
|
def each(&block) |
|
@cards.each { |card| block.call(card) } |
|
end |
|
|
|
# Use Logger to show more detail on the run |
|
# :nodoc: |
|
# @api private |
|
def show_info(config, layout) |
|
Squib::logger.info "Squib v#{Squib::VERSION}" |
|
Squib::logger.info " building #{@cards.size} #{@width}x#{@height} cards" |
|
Squib::logger.info " using #{@backend}" |
|
end |
|
|
|
################## |
|
### PUBLIC API ### |
|
################## |
|
require_relative 'api/background' |
|
require_relative 'api/data' |
|
require_relative 'api/groups' |
|
require_relative 'api/image' |
|
require_relative 'api/save' |
|
require_relative 'api/settings' |
|
require_relative 'api/shapes' |
|
require_relative 'api/text' |
|
require_relative 'api/units' |
|
|
|
end |
|
end
|
|
|