class HDeck::CardCaster

Manager class for Card Caster

Attributes

alignment[RW]
deck[RW]

Public Class Methods

new(alignment: 'CN') click to toggle source
# File lib/hdeck/card_caster.rb, line 8
def initialize(alignment: 'CN')
  @alignment = alignment
  @deck = Deck.new
end

Public Instance Methods

detect_alignment_match(card) click to toggle source
# File lib/hdeck/card_caster.rb, line 53
def detect_alignment_match(card)
  return :full if card.morality == @alignment

  @alignment.each_char do |sign|
    return :partial if card.morality.include?(sign)
  end

  :none
end
draw_card(amount: 1) click to toggle source
# File lib/hdeck/card_caster.rb, line 13
def draw_card(amount: 1)
  copy = Marshal.load(Marshal.dump(deck))

  (0...amount).each do |_|
    card = copy.draw
    if card.nil?
      puts "Out of cards. Create a new deck with 'hdeck new'"
      return
    end

    puts "\n#{card}\n\n"
  end
end
throw_card(amount: 1) click to toggle source
# File lib/hdeck/card_caster.rb, line 27
def throw_card(amount: 1)
  (0...amount).each do |_|
    card = deck.draw
    if card.nil?
      puts "Out of cards. Create a new deck with 'hdeck new'"
      return
    end

    # Bonuses applied via Role Dealer feat
    case detect_alignment_match(card)
    when :full
      puts "Full alignment match!\n"\
            "--------------------\n"\
            "crit range: 19-20\n"\
            "crit damage bonus: x3\n"\
            "+4 bonus to confirmation roll\n"
    when :partial
      puts "Partial alignment match!\n"\
            "--------------------\n"\
            "crit range: 19-20\n"
    end

    puts "\n#{card}\n\n"
  end
end