summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/character_skill.rb16
1 files changed, 11 insertions, 5 deletions
diff --git a/app/models/character_skill.rb b/app/models/character_skill.rb
index 368cc28..406cade 100644
--- a/app/models/character_skill.rb
+++ b/app/models/character_skill.rb
@@ -39,6 +39,10 @@ class CharacterSkill < ApplicationRecord
end
end
+ def self.xp_required_for_level(level)
+ level <= 120 ? XP_TOTALS_PER_LEVEL[level - 1] : nil
+ end
+
def level
XP_TOTALS_PER_LEVEL.each_with_index do |total, index|
return index if total > self.xp
@@ -46,7 +50,7 @@ class CharacterSkill < ApplicationRecord
end
def total_xp_for_next_level
- xp_required_for_level(level + 1)
+ CharacterSkill.xp_required_for_level(level + 1)
end
def xp_to_next_level
@@ -57,11 +61,13 @@ class CharacterSkill < ApplicationRecord
CharacterSkill.top_xp_for(self.skill, limit: nil).map(&:character).map(&:id).index(self.character.id) + 1
end
- private
- def xp_required_for_level(level)
- level <= 120 ? XP_TOTALS_PER_LEVEL[level - 1] : nil
- end
+ def percentage_of_skill_level_completed
+ xp_gained_this_level = xp - CharacterSkill.xp_required_for_level(level)
+ total_xp_gain_neeeded_for_entire_level = total_xp_for_next_level - CharacterSkill.xp_required_for_level(level)
+ (xp_gained_this_level.to_f / total_xp_gain_neeeded_for_entire_level) * 100
+ end
+ private
def send_chat_message_if_leveled_up
if CharacterSkill.level_for_xp(self.xp_was) < CharacterSkill.level_for_xp(self.xp)
chat_message = ChatMessage.new(body: "reached #{self.skill.name} level #{self.level}!",