module Adjective::Imbibable

Public Instance Methods

can_level_up?() click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 40
def can_level_up?
  return false if max_level?
  @experience >= @active_exp_set[@level+1]
end
experience_to_next_level() click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 61
def experience_to_next_level
  return nil if max_level?
  return @active_exp_set[@level+1] - @experience
end
grant_experience(exp, opts = {}) click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 45
def grant_experience(exp, opts = {})
  return false if max_level?
  @experience += exp
  level_up if !opts[:suppress_level_up]      
end
grant_levels(num, opts = {}) click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 56
def grant_levels(num, opts = {})
  @level += num
  @experience = @active_exp_set[@level] if !opts[:constrain_exp] 
end
initialize_experience(opts) click to toggle source

Able to be enhanced by experience

# File lib/adjective/concerns/imbibable.rb, line 6
def initialize_experience(opts)
  @level = opts[:level] ||= 1
  @experience = opts[:initial_exp] ||= 0
  # This may throw an error if the user decides to instantiate a class without a table present.
  @active_exp_set = opts[:exp_table]
  [:active_exp_set, :level].each {|attribute| self.class.send(:attr_reader, attribute)}
  self.class.send(:attr_accessor, :experience)
  set_experience_to_level_minimum
end
level_up() click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 20
def level_up
  until !can_level_up?
    @level += 1
  end
end
max_level() click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 32
def max_level
  @active_exp_set.length - 1
end
max_level?() click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 36
def max_level?
  @active_exp_set.length - 1 <= @level
end
normalize_experience() click to toggle source

Level down functionality should work the same way as simply setting a level.

# File lib/adjective/concerns/imbibable.rb, line 28
def normalize_experience
  @experience = 0 if @experience < 0
end
set_experience_to_level_minimum() click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 16
def set_experience_to_level_minimum
  @experience = @active_exp_set[@level]
end
set_level(num, opts = {}) click to toggle source
# File lib/adjective/concerns/imbibable.rb, line 51
def set_level(num, opts = {})
  @level = num
  @experience = @active_exp_set[num] if !opts[:constrain_exp]
end