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