class Gemwarrior::World

Constants

ERROR_DESCRIBE_ENTITY_INVALID
ERROR_LIST_PARAM_INVALID

CONSTANTS

WORLD_DIM_HEIGHT
WORLD_DIM_WIDTH

Attributes

duration[RW]
emerald_beaten[RW]
locations[RW]
player[RW]
shifty_has_jeweled[RW]
shifty_to_jewel[RW]

Public Instance Methods

can_move?(direction) click to toggle source
# File lib/gemwarrior/world.rb, line 128
def can_move?(direction)
  location_by_coords(player.cur_coords).has_loc_to_the?(direction)
end
describe(point) click to toggle source
# File lib/gemwarrior/world.rb, line 26
def describe(point)
  desc_text = "[>>> #{point.name_display.upcase} <<<]".colorize(:cyan)

  if GameOptions.data['debug_mode']
    desc_text << " DL[#{point.danger_level.to_s}] MLR[#{point.monster_level_range.to_s}]".colorize(:yellow)
  end

  desc_text << "\n"

  point_desc = point.description.clone
  
  # specific location description changes
  if point.name.eql?('home')
    if point.contains_item?('tent')
      point_desc << ' Next to the bed, on the floor, is a folded-up tent.'
    end
    if point.contains_item?('letter')
      point_desc << ' Atop the chest you notice a curious letter, folded in three.'
    end
  end

  desc_text << point_desc

  point.populate_monsters(GameMonsters.data) unless point.checked_for_monsters?

  desc_text << "\n >> Monster(s):  #{point.list_monsters.join(', ')}".colorize(:yellow) unless point.list_monsters.empty?
  desc_text << "\n >> Boss(es):    #{point.list_bosses.join(', ')}".colorize(:red) unless point.list_bosses.empty?
  desc_text << "\n >> Thing(s):    #{point.list_items.join(', ')}".colorize(:white) unless point.list_items.empty?
  desc_text << "\n >> Path(s):     #{point.list_paths.join(', ')}".colorize(:white)

  if GameOptions.data['debug_mode']
    desc_text << "\n >>> Actionable: ".colorize(color: :yellow, background: :grey)
    desc_text << point.list_actionable_words.colorize(color: :white, background: :grey)
  end

  desc_text
end
describe_entity(point, entity_name) click to toggle source
# File lib/gemwarrior/world.rb, line 64
def describe_entity(point, entity_name)
  entity_name.downcase!

  if point.contains_item?(entity_name)
    point.items.each do |i|
      if i.name.downcase.eql?(entity_name)
        if GameOptions.data['debug_mode']
          return i.describe_detailed(self)
        else
          return i.describe(self)
        end
      end
    end
  elsif point.has_monster?(entity_name)
    point.monsters_abounding.each do |m|
      if m.name.downcase.eql?(entity_name)
        if GameOptions.data['debug_mode']
          return m.describe_detailed(self)
        else
          return m.describe(self)
        end
      end
    end
  elsif point.has_boss?(entity_name)
    point.bosses_abounding.each do |b|
      if b.name.downcase.eql?(entity_name)
        if GameOptions.data['debug_mode']
          return b.describe_detailed(self)
        else
          return b.describe(self)
        end
      end
    end
  elsif player.inventory.contains_item?(entity_name)
    player.inventory.describe_item(entity_name, self)
  else
    ERROR_DESCRIBE_ENTITY_INVALID
  end
end
has_monster_to_attack?(monster_name) click to toggle source
# File lib/gemwarrior/world.rb, line 132
def has_monster_to_attack?(monster_name)
  possible_combatants = location_by_coords(player.cur_coords).monsters_abounding.map(&:name) | location_by_coords(player.cur_coords).bosses_abounding.map(&:name)

  possible_combatants.each do |combatant|
    return true if combatant.downcase.eql?(monster_name.downcase)
  end
  false
end
list(param, details = false) click to toggle source
# File lib/gemwarrior/world.rb, line 141
def list(param, details = false)
  case param
  when 'players'
    puts '[PLAYERS]'.colorize(:yellow)
    if details
      player.check_self(false)
    else
      ">> players: #{player.name}"
    end
  when 'creatures'
    puts "[CREATURES](#{GameCreatures.data.length})".colorize(:yellow)
    if details
      GameCreatures.data.map { |c| print c.describe_detailed }
      return
    else
      ">> creatures: #{GameCreatures.data.map(&:name).join(', ')}"
    end
  when 'items'
    puts "[ITEMS](#{GameItems.data.length})".colorize(:yellow)
    if details
      GameItems.data.map { |i| print i.describe_detailed }
      return
    else
      ">> items: #{GameItems.data.map(&:name).join(', ')}"
    end
  when 'locations'
    puts "[LOCATIONS](#{locations.length})".colorize(:yellow)
    if details
      locations.map { |l| print l.describe_detailed }
      return
    else
      ">> locations: #{locations.map(&:name).join(', ')}"
    end
  when 'monsters'
    puts "[MONSTERS](#{GameMonsters.data.length})".colorize(:yellow)
    if details
      GameMonsters.data.map { |m| print m.describe_detailed }
      return
    else
      ">> monsters: #{GameMonsters.data.map(&:name).join(', ')}"
    end
  when 'people'
    puts "[PEOPLE](#{GamePeople.data.length})".colorize(:yellow)
    if details
      GamePeople.data.map { |p| print p.describe_detailed }
      return
    else
      ">> people: #{GamePeople.data.map(&:name).join(', ')}"
    end
  when 'weapons'
    puts "[WEAPONS](#{GameWeapons.data.length})".colorize(:yellow)
    if details
      GameWeapons.data.map { |w| print w.describe_detailed }
      return
    else
      ">> weapons: #{GameWeapons.data.map(&:name).join(', ')}"
    end
  when 'armor'
    puts "[ARMOR](#{GameArmor.data.length})".colorize(:yellow)
    if details
      GameArmor.data.map { |w| print w.describe_detailed }
      return
    else
      ">> armor: #{GameArmor.data.map(&:name).join(', ')}"
    end
  else
    ERROR_LIST_PARAM_INVALID
  end
end
location_by_coords(coords) click to toggle source
# File lib/gemwarrior/world.rb, line 104
def location_by_coords(coords)
  locations.each do |l|
    return l if l.coords.eql?(coords)
  end
  nil
end
location_by_name(location_name) click to toggle source
# File lib/gemwarrior/world.rb, line 120
def location_by_name(location_name)
  loc = locations[locations.map(&:name).index(location_name)]
  if loc.nil?
    loc = locations[locations.map(&:name_display).index(location_name)]
  end
  loc.nil? ? nil : loc
end
location_coords_by_name(name) click to toggle source
# File lib/gemwarrior/world.rb, line 111
def location_coords_by_name(name)
  locations.each do |l|
    if l.name.downcase.eql?(name.downcase) or l.name_display.downcase.eql?(name.downcase)
      return l.coords
    end
  end
  nil
end
print_map(floor) click to toggle source
print_vars(show_details = false) click to toggle source