class CoopAl::Encounter

Encounter

Attributes

name[R]

Public Class Methods

new(name, parent) click to toggle source
# File lib/coop_al/encounter.rb, line 8
def initialize(name, parent)
  @name = name
  @parent = parent
  @monsters = []
  @xp = 0
  @loot = Loot.empty
  @sub_encounters = []
end

Public Instance Methods

add_item(item) click to toggle source
# File lib/coop_al/encounter.rb, line 41
def add_item(item)
  @loot.add_item(item)
end
add_monster(monster) click to toggle source
# File lib/coop_al/encounter.rb, line 33
def add_monster(monster)
  @monsters << monster
end
add_sub_encounter(encounter) click to toggle source
# File lib/coop_al/encounter.rb, line 29
def add_sub_encounter(encounter)
  @sub_encounters << encounter
end
add_treasure(treasure) click to toggle source
# File lib/coop_al/encounter.rb, line 37
def add_treasure(treasure)
  @loot.add_treasure(treasure)
end
add_xp(amount) click to toggle source
# File lib/coop_al/encounter.rb, line 45
def add_xp(amount)
  @xp += amount
end
adventure_name() click to toggle source
# File lib/coop_al/encounter.rb, line 17
def adventure_name
  @parent.adventure_name
end
empty?() click to toggle source
# File lib/coop_al/encounter.rb, line 57
def empty?
  @monsters.empty? && @xp.zero? && @loot.empty?
end
full_name() click to toggle source
# File lib/coop_al/encounter.rb, line 21
def full_name
  if @parent.nil?
    @name
  else
    @parent.full_name + ' - ' + @name
  end
end
run(state, log) click to toggle source
# File lib/coop_al/encounter.rb, line 49
def run(state, log)
  run_sub_encounters(state, log)
  trace unless empty?
  log.record_encounter(adventure_name, full_name, monster_names, total_xp, total_loot)
  state.add_xp(total_xp)
  state.add_loot(total_loot)
end

Private Instance Methods

all_monster_names() click to toggle source
# File lib/coop_al/encounter.rb, line 90
def all_monster_names
  @monsters.map(&:id).join(', ')
end
encounter_items() click to toggle source
# File lib/coop_al/encounter.rb, line 120
def encounter_items
  encounter_loot.items.map(&:to_s).join(', ')
end
encounter_loot() click to toggle source
# File lib/coop_al/encounter.rb, line 112
def encounter_loot
  @loot
end
encounter_treasure() click to toggle source
# File lib/coop_al/encounter.rb, line 116
def encounter_treasure
  encounter_loot.treasures.map(&:to_s).join(', ')
end
encounter_xp() click to toggle source
# File lib/coop_al/encounter.rb, line 98
def encounter_xp
  @xp
end
monster_items() click to toggle source
# File lib/coop_al/encounter.rb, line 130
def monster_items
  monster_loot.items.map(&:to_s).join(', ')
end
monster_loot() click to toggle source
# File lib/coop_al/encounter.rb, line 124
def monster_loot
  @monsters.inject(Loot.empty) do |loot, monster|
    loot + monster.loot
  end
end
monster_names() click to toggle source
# File lib/coop_al/encounter.rb, line 138
def monster_names
  @monsters.map(&:to_s)
end
monster_treasure() click to toggle source
# File lib/coop_al/encounter.rb, line 134
def monster_treasure
  monster_loot.treasures.map(&:to_s).join(', ')
end
monster_xp() click to toggle source
# File lib/coop_al/encounter.rb, line 102
def monster_xp
  @monsters.inject(0) do |total, monster|
    total + monster.xp
  end
end
run_sub_encounters(state, log) click to toggle source
# File lib/coop_al/encounter.rb, line 142
def run_sub_encounters(state, log)
  @sub_encounters.each do |encounter|
    encounter.run(state, log)
  end
end
total_loot() click to toggle source
# File lib/coop_al/encounter.rb, line 108
def total_loot
  encounter_loot + monster_loot
end
total_xp() click to toggle source
# File lib/coop_al/encounter.rb, line 94
def total_xp
  encounter_xp + monster_xp
end
trace() click to toggle source
# File lib/coop_al/encounter.rb, line 63
def trace
  Trace.instance.info("Encounter: #{full_name}")
  Trace.instance.info("Fighting: #{all_monster_names}") unless @monsters.empty?
  trace_xp
  trace_loot
end
trace_items() click to toggle source
# File lib/coop_al/encounter.rb, line 85
def trace_items
  Trace.instance.info("Encounter Items: #{encounter_items}") unless encounter_loot.items.empty?
  Trace.instance.info("Monster Items: #{monster_items}") unless monster_loot.items.empty?
end
trace_loot() click to toggle source
# File lib/coop_al/encounter.rb, line 75
def trace_loot
  trace_treasure
  trace_items
end
trace_treasure() click to toggle source
# File lib/coop_al/encounter.rb, line 80
def trace_treasure
  Trace.instance.info("Encounter Treasure: #{encounter_treasure}") unless encounter_loot.treasures.empty?
  Trace.instance.info("Monster Treasure: #{monster_treasure}") unless monster_loot.treasures.empty?
end
trace_xp() click to toggle source
# File lib/coop_al/encounter.rb, line 70
def trace_xp
  Trace.instance.info("Monster XP: #{monster_xp}") unless @monsters.empty?
  Trace.instance.info("Encounter XP: #{encounter_xp}") unless @xp.zero?
end