gloomhaven 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,52 @@
1
+ module Gloomhaven
2
+ class Player
3
+
4
+ attr_reader :character_class, :name, :deck
5
+ attr_accessor :gold, :items, :perks, :xp
6
+
7
+ def initialize(options = { character_class: nil, name: nil } )
8
+ validate_character_class!(options[:character_class])
9
+
10
+ @character_class = options[:character_class].downcase
11
+ @deck = Deck.new
12
+ @name = options[:name]
13
+ @gold = 0
14
+ @items = []
15
+ @perks = []
16
+ @xp = 0
17
+ end
18
+
19
+ def add_perk!(perk)
20
+ raise TypeError.new('Perk must be a Gloomhaven::Perk') unless perk.is_a?(Gloomhaven::Perk)
21
+ raise ArgumentError.new("#{character_class} cannot select #{perk.description}") unless available_perks.include?(perk.key)
22
+ raise ArgumentError.new("#{character_class} has the maximum number of #{perk.description} perks") if existing_perk_count(perk) >= character_perk_limit(perk)
23
+ update_attack_modifier_deck_from!(perk)
24
+ @perks << perk
25
+ end
26
+
27
+ private
28
+
29
+ def available_perks
30
+ CHARACTERS[character_class]['perks'].keys
31
+ end
32
+
33
+ def existing_perk_count(perk)
34
+ @perks.count { |p| p.key == perk.key }
35
+ end
36
+
37
+ def character_perk_limit(perk)
38
+ CHARACTERS[character_class]['perks'][perk.key]
39
+ end
40
+
41
+ def update_attack_modifier_deck_from!(perk)
42
+ perk.cards['add'].each { |card| deck.add!(card) }
43
+ perk.cards['remove'].each { |card| deck.remove!(card) }
44
+ end
45
+
46
+ def validate_character_class!(character_class)
47
+ raise ArgumentError.new("options[:character_class] cannot be blank") if character_class.nil?
48
+
49
+ raise TypeError.new("Invalid character_class: #{character_class} is not supported") unless Gloomhaven::CHARACTERS.keys.include?(character_class.downcase)
50
+ end
51
+ end
52
+ end
@@ -1,3 +1,3 @@
1
1
  module Gloomhaven
2
- VERSION = "0.1.0"
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/gloomhaven.rb CHANGED
@@ -1,9 +1,19 @@
1
+ require 'pry'
1
2
  require 'yaml'
2
3
  require 'gloomhaven/version'
3
4
  require 'gloomhaven/card'
4
5
  require 'gloomhaven/deck'
6
+ require 'gloomhaven/player'
7
+ require 'gloomhaven/perk'
5
8
 
6
9
  module Gloomhaven
10
+ class CardNotFoundError < StandardError; end
11
+
7
12
  CARDS = YAML.load(File.read('config/cards.yml'))
8
-
13
+ CHARACTERS = YAML.load(File.read('config/characters.yml'))
14
+ PERKS = YAML.load(File.read('config/perks.yml'))
15
+
16
+ def self.version
17
+ VERSION
18
+ end
9
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gloomhaven
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Teo Dell'Amico
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-25 00:00:00.000000000 Z
11
+ date: 2020-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,10 +98,14 @@ files:
98
98
  - bin/console
99
99
  - bin/setup
100
100
  - config/cards.yml
101
+ - config/characters.yml
102
+ - config/perks.yml
101
103
  - gloomhaven.gemspec
102
104
  - lib/gloomhaven.rb
103
105
  - lib/gloomhaven/card.rb
104
106
  - lib/gloomhaven/deck.rb
107
+ - lib/gloomhaven/perk.rb
108
+ - lib/gloomhaven/player.rb
105
109
  - lib/gloomhaven/version.rb
106
110
  homepage:
107
111
  licenses: