Class: PfrpgCore::PrettySkill

Inherits:
Object
  • Object
show all
Includes:
Filterable
Defined in:
lib/pfrpg_core/skills.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Filterable

#apply_filters

Constructor Details

#initialize(skill, character, skill_filters) ⇒ PrettySkill



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/pfrpg_core/skills.rb', line 10

def initialize(skill, character, skill_filters)
  @class_skill   = is_class_skill?(skill, character)
  @ac_penalty    = calculate_ac_penalty(skill, character)
  @name          = skill[:skill].description
  if skill[:char_skill]
    @trained_rank  = skill[:char_skill]['trained_rank']
  else
    @trained_rank = 0
  end
  @stat_bonus    = calculate_attribute_bonus(skill, character)
  @misc_bonus    = calculate_misc_bonus(skill, character)
  @attribute     = skill[:skill].attribute
  @total_bonus   = total_bonuses
  @filters       = skill_filters
  @filter_str    = []
  apply_filters
end

Instance Attribute Details

#ac_penaltyObject (readonly)

Returns the value of attribute ac_penalty.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def ac_penalty
  @ac_penalty
end

#attributeObject (readonly)

Returns the value of attribute attribute.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def attribute
  @attribute
end

#class_skillObject (readonly)

Returns the value of attribute class_skill.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def class_skill
  @class_skill
end

#filter_strObject (readonly)

Returns the value of attribute filter_str.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def filter_str
  @filter_str
end

#filtersObject (readonly)

Returns the value of attribute filters.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def filters
  @filters
end

#misc_bonusObject

Returns the value of attribute misc_bonus.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def misc_bonus
  @misc_bonus
end

#nameObject (readonly)

Returns the value of attribute name.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def name
  @name
end

#stat_bonusObject (readonly)

Returns the value of attribute stat_bonus.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def stat_bonus
  @stat_bonus
end

#total_bonusObject (readonly)

Returns the value of attribute total_bonus.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def total_bonus
  @total_bonus
end

#trained_rankObject (readonly)

Returns the value of attribute trained_rank.



6
7
8
# File 'lib/pfrpg_core/skills.rb', line 6

def trained_rank
  @trained_rank
end

Instance Method Details

#as_json(options = {}) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/pfrpg_core/skills.rb', line 32

def as_json(options={})
  {
      :class_skill  => @class_skill,
      :ac_penalty   => @ac_penalty,
      :name         => @name,
      :trained_rank => @trained_rank,
      :stat_bonus   => @stat_bonus,
      :misc_bonus   => @misc_bonus,
      :total_bonus  => @total_bonus,
      :attribute    => @attribute
  }
end

#calculate_ac_penalty(skill, character) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/pfrpg_core/skills.rb', line 76

def calculate_ac_penalty(skill, character)
  ac_penalty = 0
  if skill[:skill].ac_penalty?
    ac_penalty = character.get_ac_penalty
  end
  ac_penalty
end

#calculate_attribute_bonus(skill, character) ⇒ Object



84
85
86
87
# File 'lib/pfrpg_core/skills.rb', line 84

def calculate_attribute_bonus(skill, character)
  attribute = skill[:skill].attribute
  character.attributes.send("#{attribute}_mod") || 0
end

#calculate_misc_bonus(skill, character) ⇒ Object



95
96
97
98
99
100
101
# File 'lib/pfrpg_core/skills.rb', line 95

def calculate_misc_bonus(skill, character)
  if skill[:skill].respond_to? "bonus_str"
    return character.get_bonus(skill[:skill].bonus_str).to_i
  else
    return character.get_bonus(skill[:skill].description).to_i
  end
end

#class_skill_bonuses(character) ⇒ Object



71
72
73
74
# File 'lib/pfrpg_core/skills.rb', line 71

def class_skill_bonuses(character)
  bonuses = character.get_bonus("class_skill")
  return bonuses || []
end

#crafty(class_skills, skill) ⇒ Object



50
51
52
53
# File 'lib/pfrpg_core/skills.rb', line 50

def crafty(class_skills, skill)
  class_skills.find { |x| x.to_s.downcase['craft']} &&
      skill[:skill].to_s.downcase['craft']
end

#is_class_skill?(skill, character) ⇒ Boolean



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/pfrpg_core/skills.rb', line 55

def is_class_skill?(skill, character)
  found = character.levels.any? do |l|
    (l.heroclass.skills.find { |x| x.to_s == skill[:skill].to_s } ||
      professional(l.heroclass.skills, skill) ||
        crafty(l.heroclass.skills, skill))
  end
  found ||= class_skill_bonuses(character).find do |x|
      if x
        x.downcase == skill[:skill].description.downcase
      else
        false
      end
  end
  return (found != nil)
end

#professional(class_skills, skill) ⇒ Object



45
46
47
48
# File 'lib/pfrpg_core/skills.rb', line 45

def professional(class_skills, skill)
  class_skills.find { |x| x.to_s.downcase['profession']} &&
      skill[:skill].to_s.downcase['profession']
end

#total_bonusesObject



89
90
91
92
93
# File 'lib/pfrpg_core/skills.rb', line 89

def total_bonuses
  total = @misc_bonus + @stat_bonus - @ac_penalty + @trained_rank
  total += 3 if (@class_skill && @trained_rank > 0)
  total
end