class Pazzdra::Calc

Constants

COMBO_UP_BASE
DROP_COLORS
DROP_PLUS_UP_BASE
LENGTH_UP_BASE

Attributes

data[RW]

Public Class Methods

DEFAULT_BASE() click to toggle source

何も指定しない場合の値

# File lib/pazzdra/calc.rb, line 15
def DEFAULT_BASE
  { base: 0, leader: 1, friend: nil, skill: nil, up_drops: nil, combo: nil }
end
cal(*ups) click to toggle source

単に引数全てを掛け合わせるだけの簡単なお仕事

# File lib/pazzdra/calc.rb, line 11
def cal(*ups)
  ups.compact.inject(1){|base, i| base.to_f * i.to_f }.round
end
new(data=nil) click to toggle source
# File lib/pazzdra/calc.rb, line 20
def initialize(data=nil)
  self.data = data
end

Public Instance Methods

cal(data={}) click to toggle source

データを元に計算する

# File lib/pazzdra/calc.rb, line 39
def cal(data={})
  merge data
  case @data[:base]
  when Numeric
    Calc.cal @data[:base], @data[:leader], @data[:friend], @data[:skill], combo_up_pct
  when Array
    dragons = []
    @data[:base].each do |val|
      dragon = {}
      DROP_COLORS.each do |key|
        next unless val[key]
        dragon[key] = Calc.cal attack_power_with_all_pct(val[key], key),
          @data[:leader], @data[:friend], @data[:skill], combo_up_pct
        next unless val[:sub]
        dragon[:sub] = {}
        attc_pct = 0.3
        attc_pct = 0.1 if key == val[:sub]
        dragon[:sub][val[:sub]] = Calc.cal attack_power_with_all_pct((val[key].to_f * attc_pct).to_i, val[:sub]),
          @data[:leader], @data[:friend], @data[:skill], combo_up_pct
      end
      dragons.push(dragon)
    end
    dragons
  end
end
data=(data) click to toggle source
# File lib/pazzdra/calc.rb, line 24
def data=(data)
  data ||= Calc.DEFAULT_BASE
  @data = data
end
merge(data={}) click to toggle source
# File lib/pazzdra/calc.rb, line 29
def merge(data={})
  @data.merge!(data)
end
show() click to toggle source
# File lib/pazzdra/calc.rb, line 33
def show
  p @data
  p cal
end

Private Instance Methods

attack_power_with_all_pct(base_power, color=nil) click to toggle source

繋げた長さと強化ドロップを考慮したベース攻撃力

# File lib/pazzdra/calc.rb, line 93
def attack_power_with_all_pct(base_power, color=nil)
  base_power * length_up_pct(color) * plus_up_pct(color)
end
combo_count(color=nil) click to toggle source

コンボ総数

# File lib/pazzdra/calc.rb, line 73
def combo_count(color=nil)
  case @data[:combo]
  when Numeric
    @data[:combo].to_i
  when Hash
    if color
      return @data[:combo][color].count if @data[:combo][color]
      return 0
    end
    total_count = 0
    DROP_COLORS.each do |key|
      total_count += @data[:combo][key].count if @data[:combo][key]
    end
    total_count
  else
    1
  end
end
combo_up_pct() click to toggle source

コンボ数による倍率

# File lib/pazzdra/calc.rb, line 67
def combo_up_pct
  return 1 unless @data[:combo]
  1 + ((combo_count - 1) * COMBO_UP_BASE)
end
length_count(color=nil) click to toggle source

繋げた長さ(余剰分)

# File lib/pazzdra/calc.rb, line 122
def length_count(color=nil)
  return 0 unless color
  case @data[:combo]
  when Numeric
    0
  when Hash
    return 0 unless @data[:combo][color]
    length_count_sub(@data[:combo][color])
  else
    0
  end
end
length_count_sub(count_data) click to toggle source

配列内の 3 以上の余剰分の数を返す

# File lib/pazzdra/calc.rb, line 136
def length_count_sub(count_data)
  count_data.inject(0) do |val, i| val += i - 3 end
end
length_up_pct(color=nil) click to toggle source

繋げた長さによる加算倍率

# File lib/pazzdra/calc.rb, line 117
def length_up_pct(color=nil)
  combo_count(color) + (length_count(color) * LENGTH_UP_BASE)
end
plus_count(color=nil) click to toggle source

強化ドロップの数

# File lib/pazzdra/calc.rb, line 103
def plus_count(color=nil)
  return 0 unless color
  case @data[:plus_drop]
  when Numeric
    0
  when Hash
    return 0 unless @data[:plus_drop][color]
    @data[:plus_drop][color]
  else
    0
  end
end
plus_up_pct(color=nil) click to toggle source

強化ドロップによる加算倍率

# File lib/pazzdra/calc.rb, line 98
def plus_up_pct(color=nil)
  1 + (plus_count(color) * DROP_PLUS_UP_BASE)
end