class BCDice::CommonCommand::AddDice::Node::Command
加算ロールコマンドのノード。
目標値が設定されていない場合は lhs
のみを使用する。 目標値が設定されている場合は、lhs
、cmp_op
、rhs
を使用する。
Attributes
cmp_op[R]
比較演算子 @return [Symbol]
lhs[R]
左辺のノード @return [Object]
rhs[R]
右辺のノード @return [Integer, String]
Public Class Methods
new(secret, lhs, cmp_op = nil, rhs = nil)
click to toggle source
ノードを初期化する @param [Object] lhs 左辺のノード @param [Symbol] cmp_op
比較演算子 @param [Integer, String] rhs 右辺のノード
# 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
Public Instance Methods
eval(game_system, randomizer)
click to toggle source
# 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)
click to toggle source
文字列に変換する @param game_system [BCDice::Base] @return [String]
# 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()
click to toggle source
ノードのS式を返す @return [String]
# 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
Private Instance Methods
cmp_op_text()
click to toggle source
メッセージ中で比較演算子をどのように表示するかを返す @return [String]
# File lib/bcdice/common_command/add_dice/node.rb, line 86 def cmp_op_text case @cmp_op when :'!=' "<>" when :== "=" else @cmp_op.to_s end end