Sha256: dd53ccd90826b53c8b087a09540f16a6016ad432e3e6fbe627e0d5c4428c89a9

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

# Use this for a thing that damages.
#
# Example:
#   class Rocket
#     it_is Damaging
#
#     damage { rand(10) + 5 }
#   end
#   
#   OR
#   class Rocket
#     it_is Damaging
#
#     damage 15
#   end
#   
#   OR
#   
#   class Rocket
#     it_is Damaging
#
#     def damage
#       # Define your own damage method.
#     end
#   end
#
module Damaging
  
  class DamageMissingError < RuntimeError
    def initialize
      super <<-MESSAGE
        In a Damaging thing, you need to define method
          damage damage = nil, &block
        with params
          damage 13 # some value
        or
          damage { 13 + rand(7) } # some block
        to define how much damage the thing does.
      MESSAGE
    end
  end
  
  def self.included klass
    klass.extend ClassMethods
  end
  
  def initialize window
    raise DamageMissingError.new unless self.respond_to? :damage
    super window
  end
  
  module ClassMethods
    
    def damage damage = nil, &block
      block = lambda { damage } unless block_given?
      define_method :damage, &block
    end
    
  end
  
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gosu_extensions-0.1.14 lib/traits/damaging.rb
gosu_extensions-0.1.13 lib/traits/damaging.rb
gosu_extensions-0.1.12 lib/traits/damaging.rb