Class: BCDice::CommonCommand::AddDice::Node::Command
- Inherits:
-
Object
- Object
- BCDice::CommonCommand::AddDice::Node::Command
- Defined in:
- lib/bcdice/common_command/add_dice/node.rb
Overview
加算ロールコマンドのノード。
目標値が設定されていない場合は lhs
のみを使用する。目標値が設定されている場合は、lhs
、cmp_op
、rhs
を使用する。
Instance Attribute Summary collapse
-
#cmp_op ⇒ Symbol
readonly
比較演算子.
-
#lhs ⇒ Object
readonly
左辺のノード.
-
#rhs ⇒ Integer, String
readonly
右辺のノード.
Instance Method Summary collapse
- #eval(game_system, randomizer) ⇒ Object
-
#expr(game_system) ⇒ String
文字列に変換する.
-
#initialize(secret, lhs, cmp_op = nil, rhs = nil) ⇒ Command
constructor
ノードを初期化する.
-
#s_exp ⇒ String
ノードのS式を返す.
Constructor Details
#initialize(secret, lhs, cmp_op = nil, rhs = nil) ⇒ Command
ノードを初期化する
29 30 31 32 33 34 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 29 def initialize(secret, lhs, cmp_op = nil, rhs = nil) @secret = secret @lhs = lhs @cmp_op = cmp_op @rhs = rhs end |
Instance Attribute Details
#cmp_op ⇒ Symbol (readonly)
比較演算子
20 21 22 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 20 def cmp_op @cmp_op end |
#lhs ⇒ Object (readonly)
左辺のノード
17 18 19 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 17 def lhs @lhs end |
#rhs ⇒ Integer, String (readonly)
右辺のノード
23 24 25 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 23 def rhs @rhs end |
Instance Method Details
#eval(game_system, randomizer) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 53 def eval(game_system, randomizer) randomizer = Randomizer.new(randomizer, game_system) total = @lhs.eval(game_system, randomizer) interrim_expr = unless randomizer.rand_results.size <= 1 && @lhs.is_a?(Node::DiceRoll) @lhs.output end result = if @cmp_op rhs = @rhs.eval(game_system, nil) game_system.check_result(total, randomizer.rand_results, @cmp_op, rhs) end result ||= Result.new sequence = [ "(#{expr(game_system)})", interrim_expr, total, result&.text ].compact result.tap do |r| r.secret = @secret r.text = sequence.join(" > ") end end |
#expr(game_system) ⇒ String
文字列に変換する
39 40 41 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 39 def expr(game_system) @lhs.expr(game_system) + cmp_op_text + @rhs&.eval(game_system, nil).to_s end |
#s_exp ⇒ String
ノードのS式を返す
45 46 47 48 49 50 51 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 45 def s_exp if @cmp_op "(Command (#{@cmp_op} #{@lhs.s_exp} #{@rhs.s_exp}))" else "(Command #{@lhs.s_exp})" end end |