Class: BCDice::CommonCommand::AddDice::Node::Command

Inherits:
Object
  • Object
show all
Defined in:
lib/bcdice/common_command/add_dice/node.rb

Overview

加算ロールコマンドのノード。

目標値が設定されていない場合は lhs のみを使用する。目標値が設定されている場合は、lhscmp_oprhs を使用する。

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(secret, lhs, cmp_op = nil, rhs = nil) ⇒ Command

ノードを初期化する

Parameters:

  • lhs (Object)

    左辺のノード

  • cmp_op (Symbol) (defaults to: nil)

    比較演算子

  • rhs (Integer, String) (defaults to: nil)

    右辺のノード



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_opSymbol (readonly)

比較演算子

Returns:

  • (Symbol)


20
21
22
# File 'lib/bcdice/common_command/add_dice/node.rb', line 20

def cmp_op
  @cmp_op
end

#lhsObject (readonly)

左辺のノード

Returns:

  • (Object)


17
18
19
# File 'lib/bcdice/common_command/add_dice/node.rb', line 17

def lhs
  @lhs
end

#rhsInteger, String (readonly)

右辺のノード

Returns:

  • (Integer, String)


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

文字列に変換する

Parameters:

Returns:

  • (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_expString

ノードのS式を返す

Returns:

  • (String)


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