Class: BCDice::CommonCommand::Choice
- Inherits:
-
Object
- Object
- BCDice::CommonCommand::Choice
- Defined in:
- lib/bcdice/common_command/choice.rb
Overview
チョイスコマンド
列挙された項目の中から一つを選んで出力する。
フォーマットは以下の通りchoice choice(A,B,C,D) choice A B C D choice(新クトゥルフ神話TRPG, ソード・ワールド2.5, Dungeons & Dragons)
“choice”の次の文字によって区切り文字が変化する
"[" -> ","
各項目の前後に空白文字があった場合は除去される
choice[A, B, C , D ]
項目が空文字列である場合、その項目は無視する
choice[A,,C]
フォーマットを選ぶことで、項目の文字列に()や,を含めることができる
choice A,B X,Y -> "A,B"
Defined Under Namespace
Modules: BlockDelimiter
Constant Summary collapse
- PREFIX_PATTERN =
/choice/.freeze
- DELIMITER =
{ bracket: /,/, paren: /,/, space: /\s+/, }.freeze
- TERMINATION =
{ bracket: /\]/, paren: /\)/, space: /$/, }.freeze
- SUFFIX =
{ bracket: "]", paren: ")", space: "", }.freeze
Class Method Summary collapse
Instance Method Summary collapse
- #expr ⇒ Object
-
#initialize(secret:, block_delimiter:, items:) ⇒ Choice
constructor
A new instance of Choice.
- #roll(randomizer) ⇒ Result
Constructor Details
#initialize(secret:, block_delimiter:, items:) ⇒ Choice
123 124 125 126 127 |
# File 'lib/bcdice/common_command/choice.rb', line 123 def initialize(secret:, block_delimiter:, items:) @secret = secret @block_delimiter = block_delimiter @items = items end |
Class Method Details
.eval(command, _game_system, randomizer) ⇒ Result?
64 65 66 67 |
# File 'lib/bcdice/common_command/choice.rb', line 64 def eval(command, _game_system, randomizer) cmd = parse(command) cmd&.roll(randomizer) end |
Instance Method Details
#expr ⇒ Object
141 142 143 144 145 146 147 148 149 150 |
# File 'lib/bcdice/common_command/choice.rb', line 141 def expr case @block_delimiter when BlockDelimiter::SPACE "choice #{@items.join(' ')}" when BlockDelimiter::BRACKET "choice[#{@items.join(',')}]" when BlockDelimiter::PAREN "choice(#{@items.join(',')})" end end |
#roll(randomizer) ⇒ Result
131 132 133 134 135 136 137 138 139 |
# File 'lib/bcdice/common_command/choice.rb', line 131 def roll(randomizer) index = randomizer.roll_index(@items.size) chosen = @items[index] Result.new.tap do |r| r.secret = @secret r.text = "(#{expr()}) > #{chosen}" end end |