class RpgTools::Dice::Bag

Attributes

content[RW]
dice_hash[RW]
modifiers[RW]
value[RW]

Public Class Methods

new(base) click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 12
def initialize(base)
  @dice_hash = Utils::Parser.new(base).handle
  @content = []
  @modifiers = dice_hash[:modifiers]
  @value = 0
end

Public Instance Methods

roll() click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 19
def roll
  invalid_dice! if dice_klass.nil?

  fill_bag!

  roll_bag_content!

  return @total if modifiers.empty?

  @total = Utils::ModifierCalculator.new(@total, modifiers).recalculate
end
Also aliased as: roll!
roll!()
Alias for: roll

Private Instance Methods

dice_klass() click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 44
def dice_klass
  NOTATIONS[type]
end
fill_bag!() click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 34
def fill_bag!
  quantity.times { @content << dice_klass.new(sides) }
end
invalid_dice!() click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 60
def invalid_dice!
  raise ArgumentError, 'Unsupported dice type.'
end
quantity() click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 56
def quantity
  dice_hash[:quantity]
end
roll_bag_content!() click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 38
def roll_bag_content!
  @content.map(&:roll)

  @total = @content.map(&:value).inject(0, :+)
end
sides() click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 52
def sides
  dice_hash[:sides]
end
type() click to toggle source
# File lib/rpg_tools/dice/bag.rb, line 48
def type
  dice_hash[:type]
end