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

Returns a new instance of 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



64
65
66
67
68
69
70
# File 'lib/pfrpg_core/skills.rb', line 64

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



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

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

#calculate_misc_bonus(skill, character) ⇒ Object



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

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



59
60
61
62
# File 'lib/pfrpg_core/skills.rb', line 59

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

#is_class_skill?(skill, character) ⇒ Boolean

Returns:

  • (Boolean)


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

def is_class_skill?(skill, character)
  found = character.levels.any? do |l|
    l.heroclass.skills.find { |x| x.to_s == skill[:skill].to_s }
  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

#total_bonusesObject



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

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