class FifthedSim::AdditionNode
Constants
- ALLOWED_TYPES
Public Class Methods
new(*values)
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 8 def initialize(*values) values.each(&method(:check_type)) @components = values.flatten end
Public Instance Methods
+(other)
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 13 def +(other) check_type(other) self.class.new(*@components, other) end
average()
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 28 def average @components.map{|x| x.average}.inject(:+) end
dice()
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 24 def dice self.class.new(*@components.find_all{|x| x.is_a?(RollNode)}) end
distribution()
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 40 def distribution # TODO: Maybe figure out how to minimize convolution expense? @components.map{|x| x.distribution}.inject do |memo, p| memo.convolve(p) end end
expression_equation()
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 59 def expression_equation "(" + @components.map do |c| c.expression_equation end.inject{|m, x| m + "+ #{x}"} + ")" end
has_crit?()
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 36 def has_crit? @components.any?{|x| x.has_crit?} end
has_critfail?()
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 32 def has_critfail? @components.any?{|x| x.has_critfail?} end
reroll()
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 47 def reroll self.class.new(*@components.map{|x| x.reroll}) end
value()
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 18 def value # Symbol::& uses send, so refinements would break # How sad @components.map{|x| x.value}.inject(:+) end
value_equation(terminal: false)
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 52 def value_equation(terminal: false) arglist = @components.map do |c| c.value_equation(terminal: terminal) end.inject{|m, x| m + "+ #{x}"} "(#{arglist})" end
Private Instance Methods
check_type(obj)
click to toggle source
# File lib/fifthed_sim/nodes/addition_node.rb, line 69 def check_type(obj) unless ALLOWED_TYPES.any?{|x| obj.kind_of?(x)} raise TypeError, "#{obj.inspect} is not a DiceExpression" end end