# File lib/oakdex/pokemon/factory.rb, line 33 def primary_status_condition @options[:primary_status_condition] end
class Oakdex::Pokemon::Factory
Creates Pokemon
instance and prefills attributes
Constants
- OPTIONAL_ATTRIBUTES
- REQUIRED_ATTRIBUTES
Public Class Methods
create(species, options = {})
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 16 def create(species, options = {}) factory = new(species, options) attributes = Hash[(REQUIRED_ATTRIBUTES + OPTIONAL_ATTRIBUTES).map do |attr| [attr, factory.send(attr)] end] Pokemon.new(species.names['en'], attributes) end
new(species, options = {})
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 26 def initialize(species, options = {}) @species = species @options = options end
Private Instance Methods
abilities()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 100 def abilities @species.abilities.select { |a| !a['hidden'] && !a['mega'] } end
ability_id()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 92 def ability_id if @options[:ability_id] @options[:ability_id] else abilities.sample['name'] end end
additional_moves()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 78 def additional_moves return [] unless @options[:additional_moves] @options[:additional_moves].map do |move_name| move_type = Oakdex::Pokedex::Move.find!(move_name) Move.new(move_type, move_type.pp, move_type.pp) end end
amie()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 53 def amie @options[:amie] end
available_moves()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 86 def available_moves @species.learnset.map do |m| m['move'] if m['level'] && m['level'] <= level end.compact end
calculate_gender()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 146 def calculate_gender if rand(1..1000) <= @species.gender_ratios['male'] * 10 'male' else 'female' end end
ev()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 133 def ev return @options[:ev] if @options[:ev] @ev ||= Hash[Pokemon::BATTLE_STATS.map do |stat| [stat, 0] end] end
exp()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 104 def exp @options[:exp] || Stat.exp_by_level( @species.leveling_rate, @options[:level] ) end
friendship()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 45 def friendship @options[:friendship] || @species.base_friendship end
gender()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 140 def gender return @options[:gender] if @options[:gender] return 'neuter' unless @species.gender_ratios calculate_gender end
generate_available_moves()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 71 def generate_available_moves available_moves.sample(4).map do |move_name| move_type = Oakdex::Pokedex::Move.find!(move_name) Move.new(move_type, move_type.pp, move_type.pp) end end
hp()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 115 def hp return @options[:hp] if @options[:hp] Stat.initial_stat(:hp, level: level, iv: iv, ev: ev, base_stats: @species.base_stats, nature: nature ) end
item_id()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 49 def item_id @options[:item_id] end
iv()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 126 def iv return @options[:iv] if @options[:iv] @iv ||= Hash[Pokemon::BATTLE_STATS.map do |stat| [stat, rand(0..31)] end] end
level()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 111 def level Stat.level_by_exp(@species.leveling_rate, exp) end
moves()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 57 def moves if @options[:moves] @options[:moves].map do |move_data| Move.new( Oakdex::Pokedex::Move.find!(move_data[0]), move_data[1], move_data[2] ) end else (generate_available_moves + additional_moves).take(4) end end
nature()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 162 def nature @nature ||= Oakdex::Pokedex::Nature.find!(nature_id) end
nature_id()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 154 def nature_id @nature_id ||= if @options[:nature_id] @options[:nature_id] else Oakdex::Pokedex::Nature.all.values.sample.names['en'] end end
original_trainer()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 37 def original_trainer @options[:original_trainer] end
primary_status_condition()
click to toggle source
wild()
click to toggle source
# File lib/oakdex/pokemon/factory.rb, line 41 def wild @options[:wild] end