Class: MonstersManual

Inherits:
Object show all
Includes:
MonstersManualContent
Defined in:
lib/monsters/monsters_manual.rb

Constant Summary

Constants included from MonstersManualContent

MonstersManualContent::MONSTERS_MANUAL_CONTENT

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMonstersManual

Returns a new instance of MonstersManual.



12
13
14
15
16
17
# File 'lib/monsters/monsters_manual.rb', line 12

def initialize
  @monsters = {}
  @sources = {}
  @challenges = {}
  @types = {}
end

Instance Attribute Details

#monstersObject (readonly)

Returns the value of attribute monsters.



8
9
10
# File 'lib/monsters/monsters_manual.rb', line 8

def monsters
  @monsters
end

Instance Method Details

#add_monster(monster) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/monsters/monsters_manual.rb', line 81

def add_monster( monster )
  @monsters[monster.key]=monster

  @sources[monster.source] ||= []
  @sources[monster.source] << monster.key

  @challenges[monster.challenge] ||= []
  @challenges[monster.challenge] << monster.key

  @types[monster.type] ||= []
  @types[monster.type] << monster.key

end

#challengesObject



58
59
60
# File 'lib/monsters/monsters_manual.rb', line 58

def challenges
  @challenges.keys.sort
end

#get(monster_key) ⇒ Object

Retrieve a monster by its monster key



50
51
52
# File 'lib/monsters/monsters_manual.rb', line 50

def get( monster_key )
  @monsters[ monster_key ]
end

#loadObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/monsters/monsters_manual.rb', line 19

def load
  @monsters = {}
  MONSTERS_MANUAL_CONTENT[:monsters].each do |m|
    monster = Monster.new( m[:challenge], m[:name], m[:type], m[:source] )
    monster.xp_value = m[:xp_value]
    monster.boss = m[:boss]
    @monsters[ monster.key ] = monster
  end

  @sources = MONSTERS_MANUAL_CONTENT[:sources]
  @challenges = MONSTERS_MANUAL_CONTENT[:challenges]
  @types = MONSTERS_MANUAL_CONTENT[:types]

end

#save(filename) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/monsters/monsters_manual.rb', line 34

def save( filename )
  monster_manual = {
      monsters: @monsters.map{ |_, m| m.to_hash },
      sources: @sources,
      challenges: @challenges,
      types: @types
  }
  File.open( filename, 'w' ) do |f|
    f.puts 'module MonstersManualContent'
    f.puts "\t MONSTERS_MANUAL_CONTENT = "
    PP.pp(monster_manual,f)
    f.puts 'end'
  end
end

#select(sources: :all, types: :all, min_challenge: :none, max_challenge: :none) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/monsters/monsters_manual.rb', line 66

def select( sources: :all, types: :all, min_challenge: :none, max_challenge: :none )
  validate_loaded

  sources_ids = ( sources == :all ? @sources.values.flatten : sources.map{ |s| @sources[s] }.flatten )
  types_ids = ( types == :all ? @types.values.flatten : types.map{ |t| @types[t] }.flatten )

  challenges = @challenges.keys
  challenges.reject!{ |c| c > max_challenge } if max_challenge != :none
  challenges.reject!{ |c| c < min_challenge } if min_challenge != :none
  challenges_ids = challenges.map{ |c| @challenges[ c ] }.flatten

  monsters_ids = sources_ids & types_ids & challenges_ids
  monsters_ids.map{ |m| @monsters[m] }
end

#sourcesObject



54
55
56
# File 'lib/monsters/monsters_manual.rb', line 54

def sources
  @sources.keys.sort
end

#typesObject



62
63
64
# File 'lib/monsters/monsters_manual.rb', line 62

def types
  @types.keys.sort
end

#validate_loadedObject



95
96
97
# File 'lib/monsters/monsters_manual.rb', line 95

def validate_loaded
  raise 'Monster manual not loadad' if @monsters.empty?
end