bcdice/BCDice

View on GitHub
lib/bcdice/game_system/beginning_idol/skill_table.rb

Summary

Maintainability
A
1 hr
Test Coverage
# frozen_string_literal: true

module BCDice
  module GameSystem
    class BeginningIdol < Base
      class SkillTable < DiceTable::SaiFicSkillTable
        def roll(randomizer)
          roll_command(randomizer, "RTT")
        end
      end

      class SkillGetTable < DiceTable::Table
        def self.from_i18n(key, skill_table, locale)
          table = I18n.t(key, locale: locale)
          new(table[:name], table[:type], table[:items], skill_table, locale)
        end

        def initialize(name, type, items, skill_table, locale)
          super(name, type, items)
          @skill_table = skill_table

          skill_get_table = I18n.t("BeginningIdol.skill_get_table", locale: locale)
          @reroll_reg = Regexp.new(skill_get_table[:reroll_reg])
          @reroll = skill_get_table[:reroll]
          @secondary_name = skill_get_table[:secondary_name]
        end

        def roll(randomizer)
          chosen = super(randomizer)

          m = @reroll_reg.match(chosen.body)
          unless m
            return chosen
          end

          reroll_category = m.captures
          body = chosen.body + "\n"
          loop do
            skill = @skill_table.roll_skill(randomizer)
            body += "#{@secondary_name} > [#{skill.category_dice},#{skill.row_dice}] > #{skill}"
            unless reroll_category.include?(skill.category_name)
              break
            end

            body += " > #{@reroll}\n"
          end

          DiceTable::RollResult.new(chosen.table_name, chosen.value, body)
        end
      end

      class SkillHometown
        def initialize(skill_table)
          @skill_name = skill_table
        end

        def roll(randomizer)
          @skill_name.roll_command(randomizer, "AT6")
        end
      end
    end
  end
end