Reference features in rolls by slug

This commit is contained in:
Trevor Vallender 2024-07-08 16:15:48 +01:00
parent 7faebf0173
commit 1556ebe9c7
2 changed files with 21 additions and 4 deletions

View File

@ -13,8 +13,8 @@ class DiceRoller
end
def roll
@roll_command = @roll_command.sub("self", @stat.to_s) if @roll_command.include?("self")
Dice.roll(@roll_command)
roll_command = parse_roll_command_references(roll_command)
Dice.roll(roll_command)
end
def valid?
@ -39,6 +39,10 @@ class DiceRoller
private
def roll_delimiters
[ "+", "-", "*", "/" ]
end
def roll_dice(command)
parts = command.downcase.split("d").compact_blank
die_type = parts.last
@ -52,4 +56,18 @@ class DiceRoller
end
result
end
def parse_roll_command_references(roll_command)
roll_command = @roll_command.include?("self") ? @roll_command.gsub("self", @stat.to_s) : @roll_command
roll_command.split(Regexp.union(roll_delimiters)).each do |part|
next if part.match?(/\A\d*\z/)
next if part.match?(/\A\d*d\d*\z/)
value = CharacterSheetFeature.find_by(slug: part).featurable.value
raise "#{part} not found" if value.blank?
roll_command.gsub!(part, value.to_s)
end
roll_command
end
end

View File

@ -1,10 +1,9 @@
Character sheets
= Must haves
- Refer to stat in roll (Skill in Troika)
- Add tests for feature references
- Lists
- Reorganise sections
- Edit additional roll types
- improve dice roll parsing to allow e.g. choose highest
= Nice to haves
- Calculate from result - e.g. troika damage roll should calc. damage amount from die roll:w
- Add min/max when creating stats