Module: PfrpgCore::Derived::Misc

Included in:
Character
Defined in:
lib/pfrpg_core/derived/misc.rb

Instance Method Summary collapse

Instance Method Details

#calc_speed(speed_type, base) ⇒ Object



33
34
35
# File 'lib/pfrpg_core/derived/misc.rb', line 33

def calc_speed(speed_type, base)
  base + get_bonus("#{speed_type}_speed")
end

#explode_levelsObject



79
80
81
82
# File 'lib/pfrpg_core/derived/misc.rb', line 79

def explode_levels
  # TODO: implement me
  []
end

#get_caster_levelObject



88
89
90
91
92
93
94
95
# File 'lib/pfrpg_core/derived/misc.rb', line 88

def get_caster_level
  # TODO constantize somewhere better
  caster_classes = ['Bard', 'Cleric', 'Druid', 'Paladin', 'Ranger', 'Sorcerer', 'Wizard']
  caster_levels = latest_levels.select { |x| caster_classes.include? x.class_name }
  max_caster_level = caster_levels.map { |x| x.class_number }.max || 0
  ek_level = get_class_level(PfrpgClasses::Heroclass.by_name('Eldritch Knight'))
  return (max_caster_level + ek_level) || 0
end

#get_class_level(heroclass) ⇒ Object



70
71
72
73
74
75
76
77
# File 'lib/pfrpg_core/derived/misc.rb', line 70

def get_class_level(heroclass)
  l = latest_levels.find { |x| x.class_name[heroclass.name] }
  if l
    return l.class_number
  else
    return 0
  end
end

#hit_diceObject



84
85
86
# File 'lib/pfrpg_core/derived/misc.rb', line 84

def hit_dice
  hit_die
end

#hit_dieObject



66
67
68
# File 'lib/pfrpg_core/derived/misc.rb', line 66

def hit_die
  total_level
end

#hit_pointsObject



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/pfrpg_core/derived/misc.rb', line 45

def hit_points
  hp = @character.hit_points
  # TODO : potentially move off this method when multiple hp affect stats exist
  if (@feats.find { |x| x.name == 'Toughness' })
    hp += 3
    if (total_level > 3)
      hp += total_level - 3
    end
  end
  return hp
end

#initiativeObject



14
15
16
17
18
19
# File 'lib/pfrpg_core/derived/misc.rb', line 14

def initiative
  initiative = 0
  initiative += @attributes.dex_mod
  initiative += get_bonus("initiative").to_i
  return initiative
end

#level_stringObject



5
6
7
8
9
10
11
12
# File 'lib/pfrpg_core/derived/misc.rb', line 5

def level_string
  str = "#{@alignment} :"
  @levels.each do |l|
    str += "#{l.name}/#{l.rank}"
    str += "*" if l.favored
  end
  str
end

#misc_jsonObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/pfrpg_core/derived/misc.rb', line 97

def misc_json
  {
      :initiative     => initiative,
      :alignment      => @alignment,
      :speed          => speed,
      :hit_points     => hit_points,
      :feats          => @feats,
      :class_features => @class_features,
      :levels         => @levels,
      :total_level    => @total_level,
      :size           => size,
      :level_string   => level_string,
      :temporary      => @character.temp_values
  }
end

#parse_speed_bonuses(speed_bonuses) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/pfrpg_core/derived/misc.rb', line 37

def parse_speed_bonuses(speed_bonuses)
  speed_bonus = 0
  speed_bonuses.each do |s|
    speed_bonus += s.to_i if MathHelper.is_number(s)
  end
  speed_bonus
end

#sizeObject



57
58
59
60
# File 'lib/pfrpg_core/derived/misc.rb', line 57

def size
  return @race.size if @race
  return nil
end

#speedObject



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/pfrpg_core/derived/misc.rb', line 21

def speed
  base_speed =  NullObject.maybe(@race).speed || 0
  base_speed += parse_speed_bonuses(get_bonus("speed"))
  base_speed -= armor_speed_penalty
  speeds = {}
  ['land','fly','climb','swim'].each do |type|
    speeds["#{type}_speed"] = calc_speed(type, base_speed)
  end
  speeds['speed'] = speeds['land_speed']
  return speeds
end

#total_levelObject



62
63
64
# File 'lib/pfrpg_core/derived/misc.rb', line 62

def total_level
  @levels.inject(0) {|sum, x| sum = sum + x.rank }
end