class Oakdex::Battle::Side

Represents a side in an active battle, has n trainers

Attributes

battle[R]
trainers[R]

Public Class Methods

new(battle, trainers) click to toggle source
# File lib/oakdex/battle/side.rb, line 13
def initialize(battle, trainers)
  @battle = battle
  @trainers = trainers
  @trainers.each { |t| t.side = self }
end

Public Instance Methods

active_in_battle_pokemon() click to toggle source
# File lib/oakdex/battle/side.rb, line 50
def active_in_battle_pokemon
  @trainers.map(&:active_in_battle_pokemon).flatten(1)
end
fainted?() click to toggle source
# File lib/oakdex/battle/side.rb, line 54
def fainted?
  @trainers.all?(&:fainted?)
end
id() click to toggle source
# File lib/oakdex/battle/side.rb, line 58
def id
  @id ||= trainers.map(&:name).join(',')
end
next_position() click to toggle source
# File lib/oakdex/battle/side.rb, line 19
def next_position
  left_position.first
end
pokemon_in_battle?(position) click to toggle source
# File lib/oakdex/battle/side.rb, line 40
def pokemon_in_battle?(position)
  active_in_battle_pokemon.any? do |ibp|
    ibp.position == position
  end
end
pokemon_left?() click to toggle source
# File lib/oakdex/battle/side.rb, line 46
def pokemon_left?
  !active_in_battle_pokemon.empty?
end
remove_fainted() click to toggle source
# File lib/oakdex/battle/side.rb, line 32
def remove_fainted
  @trainers.each(&:remove_fainted)
end
send_to_battle() click to toggle source
# File lib/oakdex/battle/side.rb, line 23
def send_to_battle
  @trainers.map do |trainer|
    pokemon_per_trainer.times do |i|
      break unless trainer.team[i]
      trainer.send_to_battle(trainer.team[i], self)
    end
  end
end
to_h() click to toggle source
# File lib/oakdex/battle/side.rb, line 62
def to_h
  {
    id: id,
    fainted: fainted?,
    trainers: trainers.map(&:to_h)
  }
end
trainer_on_side?(trainer) click to toggle source
# File lib/oakdex/battle/side.rb, line 36
def trainer_on_side?(trainer)
  @trainers.include?(trainer)
end

Private Instance Methods

all_position() click to toggle source
# File lib/oakdex/battle/side.rb, line 84
def all_position
  battle.pokemon_per_side.times.to_a
end
left_position() click to toggle source
# File lib/oakdex/battle/side.rb, line 76
def left_position
  all_position - taken_positions
end
pokemon_per_trainer() click to toggle source
# File lib/oakdex/battle/side.rb, line 72
def pokemon_per_trainer
  (battle.pokemon_per_side / trainers.size)
end
taken_positions() click to toggle source
# File lib/oakdex/battle/side.rb, line 80
def taken_positions
  active_in_battle_pokemon.map(&:position).sort
end