Class: BCDice::CommonCommand::UpperDice::Node::Command
- Inherits:
-
Object
- Object
- BCDice::CommonCommand::UpperDice::Node::Command
- Defined in:
- lib/bcdice/common_command/upper_dice/node.rb
Instance Method Summary collapse
-
#eval(game_system, randomizer) ⇒ Result?
上方無限ロールを実行する.
-
#initialize(secret:, notations:, modifier:, cmp_op:, target_number:, reroll_threshold: nil) ⇒ Command
constructor
A new instance of Command.
Constructor Details
#initialize(secret:, notations:, modifier:, cmp_op:, target_number:, reroll_threshold: nil) ⇒ Command
Returns a new instance of Command.
14 15 16 17 18 19 20 21 |
# File 'lib/bcdice/common_command/upper_dice/node.rb', line 14 def initialize(secret:, notations:, modifier:, cmp_op:, target_number:, reroll_threshold: nil) @secret = secret @notations = notations @modifier = modifier @cmp_op = cmp_op @target_number = target_number @reroll_threshold = reroll_threshold end |
Instance Method Details
#eval(game_system, randomizer) ⇒ Result?
上方無限ロールを実行する
27 28 29 30 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 |
# File 'lib/bcdice/common_command/upper_dice/node.rb', line 27 def eval(game_system, randomizer) round_type = game_system.round_type dice_list = @notations.map { |n| n.to_dice(round_type) } reroll_threshold = @reroll_threshold&.eval(round_type) || game_system.upper_dice_reroll_threshold || 0 modifier = @modifier&.eval(round_type) || 0 target_number = @target_number&.eval(round_type) expr = expr(dice_list, reroll_threshold, modifier, target_number) if reroll_threshold <= 1 return result_with_text("(#{expr}) > 無限ロールの条件がまちがっています") end roll_list = dice_list.map do |n| n.roll(randomizer, reroll_threshold, game_system.) end.reduce([], :concat) result = if @cmp_op result_success_count(roll_list, modifier, target_number) else result_max_sum(roll_list, modifier) end sequence = [ "(#{expr})", interlim_expr(roll_list, modifier), result ] result_with_text(sequence.join(" > ")) end |