class Natural20::Roller

Attributes

advantage[R]
battle[R]
crit[R]
description[R]
disadvantage[R]
entity[R]
roll_str[R]

Public Class Methods

new(roll_str, crit: false, disadvantage: false, advantage: false, description: nil, entity: nil, battle: nil) click to toggle source
# File lib/natural_20/die_roll.rb, line 20
def initialize(roll_str, crit: false, disadvantage: false, advantage: false, description: nil, entity: nil, battle: nil)
  @roll_str = roll_str
  @crit = crit
  @advantage = advantage
  @disadvantage = disadvantage
  @description = description
  @entity = entity
  @battle = battle
end

Public Instance Methods

roll(lucky: false, description_override: nil) click to toggle source

@param lucky [Boolean] This is a lucky feat reroll

# File lib/natural_20/die_roll.rb, line 31
def roll(lucky: false, description_override: nil)
  die_sides = 20

  detail = DieRoll.parse(roll_str)
  number_of_die = detail.die_count
  die_type_str = detail.die_type
  modifier_str = detail.modifier
  modifier_op = detail.modifier_op

  if die_type_str.blank?
    return Natural20::DieRoll.new([number_of_die], "#{modifier_op}#{modifier_str}".to_i, 0,
                                  roller: self)
  end

  die_sides = die_type_str.to_i

  number_of_die *= 2 if crit

  description = t('dice_roll.description', description: description_override.presence || @description,
                                           roll_str: roll_str)
  description = lucky ? "(lucky) #{description}" : description

  description = '(with advantage)'.colorize(:blue) + description if advantage
  description = '(with disadvantage)'.colorize(:red) + description if disadvantage
  rolls = if advantage || disadvantage
            if battle
              battle.roll_for(entity, die_sides, number_of_die, description, advantage: advantage,
                                                                             disadvantage: disadvantage)
            else
              number_of_die.times.map { [(1..die_sides).to_a.sample, (1..die_sides).to_a.sample] }
            end
          elsif battle
            battle.roll_for(entity, die_sides, number_of_die, description)
          else
            number_of_die.times.map { (1..die_sides).to_a.sample }
          end
  Natural20::DieRoll.new(rolls, modifier_str.blank? ? 0 : "#{modifier_op}#{modifier_str}".to_i, die_sides,
                         advantage: advantage, disadvantage: disadvantage, roller: self)
end
t(key, options = {}) click to toggle source
# File lib/natural_20/die_roll.rb, line 71
def t(key, options = {})
  I18n.t(key, **options)
end