Class: Natural20::Roller

Inherits:
Object
  • Object
show all
Defined in:
lib/natural_20/die_roll.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(roll_str, crit: false, disadvantage: false, advantage: false, description: nil, entity: nil, battle: nil) ⇒ Roller

Returns a new instance of Roller.



20
21
22
23
24
25
26
27
28
# 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

Instance Attribute Details

#advantageObject (readonly)

Returns the value of attribute advantage.



18
19
20
# File 'lib/natural_20/die_roll.rb', line 18

def advantage
  @advantage
end

#battleObject (readonly)

Returns the value of attribute battle.



18
19
20
# File 'lib/natural_20/die_roll.rb', line 18

def battle
  @battle
end

#critObject (readonly)

Returns the value of attribute crit.



18
19
20
# File 'lib/natural_20/die_roll.rb', line 18

def crit
  @crit
end

#descriptionObject (readonly)

Returns the value of attribute description.



18
19
20
# File 'lib/natural_20/die_roll.rb', line 18

def description
  @description
end

#disadvantageObject (readonly)

Returns the value of attribute disadvantage.



18
19
20
# File 'lib/natural_20/die_roll.rb', line 18

def disadvantage
  @disadvantage
end

#entityObject (readonly)

Returns the value of attribute entity.



18
19
20
# File 'lib/natural_20/die_roll.rb', line 18

def entity
  @entity
end

#roll_strObject (readonly)

Returns the value of attribute roll_str.



18
19
20
# File 'lib/natural_20/die_roll.rb', line 18

def roll_str
  @roll_str
end

Instance Method Details

#roll(lucky: false, description_override: nil) ⇒ Object

Parameters:

  • lucky (Boolean) (defaults to: false)

    This is a lucky feat reroll



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 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 = {}) ⇒ Object



71
72
73
# File 'lib/natural_20/die_roll.rb', line 71

def t(key, options = {})
  I18n.t(key, **options)
end