Sha256: 532b132a8e1b6ddfdccfef53b7ae65d66056070f62e87143b6de45a54d4e5476

Contents?: true

Size: 1.67 KB

Versions: 5

Compression:

Stored size: 1.67 KB

Contents

module Gloomhaven
  class Player

    attr_reader :character_class, :name, :deck
    attr_accessor :gold, :items, :perks, :xp

    def initialize(options = { character_class: nil, name: nil } )
      validate_character_class!(options[:character_class])

      @character_class = options[:character_class].downcase
      @deck = Deck.new
      @name = options[:name]
      @gold = 0
      @items = []
      @perks = []
      @xp = 0
    end

    def add_perk!(perk)
      raise TypeError.new('Perk must be a Gloomhaven::Perk') unless perk.is_a?(Gloomhaven::Perk)
      raise ArgumentError.new("#{character_class} cannot select #{perk.description}") unless available_perks.include?(perk.key)
      raise ArgumentError.new("#{character_class} has the maximum number of #{perk.description} perks") if existing_perk_count(perk) >= character_perk_limit(perk)
      update_attack_modifier_deck_from!(perk)
      @perks << perk
    end

    private

    def available_perks
      CHARACTERS[character_class]['perks'].keys
    end

    def existing_perk_count(perk)
      @perks.count { |p| p.key == perk.key }
    end

    def character_perk_limit(perk)
      CHARACTERS[character_class]['perks'][perk.key]
    end

    def update_attack_modifier_deck_from!(perk)
      perk.cards['add'].each { |card| deck.add!(card) }
      perk.cards['remove'].each { |card| deck.remove!(card) }
    end

    def validate_character_class!(character_class)
      raise ArgumentError.new("options[:character_class] cannot be blank") if character_class.nil?

      raise TypeError.new("Invalid character_class: #{character_class} is not supported") unless Gloomhaven::CHARACTERS.keys.include?(character_class.downcase)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
gloomhaven-1.0.4 lib/gloomhaven/player.rb
gloomhaven-1.0.3 lib/gloomhaven/player.rb
gloomhaven-1.0.2 lib/gloomhaven/player.rb
gloomhaven-1.0.1 lib/gloomhaven/player.rb
gloomhaven-1.0.0 lib/gloomhaven/player.rb