class MonkeyMusic::LevelLoader

LevelLoader defines a DSL for building levels in a ruby file

Public Class Methods

new(level) click to toggle source
# File lib/monkey_music/level_loader.rb, line 6
def initialize(level)
  @level = level
  @legend = {}
end

Public Instance Methods

boost_cooldown(cooldown) click to toggle source
# File lib/monkey_music/level_loader.rb, line 24
def boost_cooldown(cooldown)
  @level.boost_cooldown = cooldown
end
carrying_capacity(capacity) click to toggle source
# File lib/monkey_music/level_loader.rb, line 20
def carrying_capacity(capacity)
  @level.players.each { |p| p.monkey.capacity = capacity }
end
layout(layout) click to toggle source
# File lib/monkey_music/level_loader.rb, line 32
def layout(layout)
  # Transform layout into x y indexed array
  units = (layout.lines.map { |l| l.chomp.split(//) }).transpose
  @level.width = units.length
  @level.height = units[0].length
  # Add units from layout to level
  @level.height.times do |y|
    @level.width.times do |x|
      curr_character = units[x][y]
      unit = parse_character(curr_character)
      @level.add(unit, x, y) if unit
    end
  end
end
legend(legend) click to toggle source
# File lib/monkey_music/level_loader.rb, line 28
def legend(legend)
  @legend = legend
end
time_limit(time_limit) click to toggle source
# File lib/monkey_music/level_loader.rb, line 15
def time_limit(time_limit)
  @level.time_limit = time_limit
  @level.players.each {|p| p.remaining_time = time_limit }
end
turn_limit(turn_limit) click to toggle source
# File lib/monkey_music/level_loader.rb, line 11
def turn_limit(turn_limit)
  @level.turn_limit = turn_limit
end

Private Instance Methods

parse_character(character) click to toggle source
# File lib/monkey_music/level_loader.rb, line 49
def parse_character(character)
  klass = @legend[character]
  if klass
    unit = if (klass <= Monkey)
      klass.from_players(@level.players)
    elsif klass <= Track
      klass.from_user(@level.user)
    elsif klass == User
      @level.user
    else
      klass.new
    end
    if unit
      unit.character = character
      unit
    end
  end
end