Sha256: 7e10477536f8c5e5a5d79848ed7c14e204fe0784580a57fc9ecaeb3583167fb9

Contents?: true

Size: 1.33 KB

Versions: 3

Compression:

Stored size: 1.33 KB

Contents

# Behavior is any type of behavior an actor can exibit.
class Behavior
  attr_accessor :actor, :opts, :relegated_methods

  def initialize(actor,opts={})
    @actor = actor
    @opts = opts
    @relegated_methods = []

    req_behs = self.class.required_behaviors
    req_behs.each do |beh|
      unless @actor.is? beh
        @actor.is beh
      end
    end
    setup
  end

  def setup
  end

  def removed
    target = self

    @actor.instance_eval do
      (class << self; self; end).class_eval do
        target.relegated_methods.each do |meth|
          remove_method meth
        end
      end
    end
  end

  def update(time)
  end

  def self.required_behaviors
    @required_behaviors ||= []
  end

  def self.requires_behaviors(*args)
    @required_behaviors ||= []
    for a in args
      @required_behaviors << a
    end
    @behaviors
  end

  def self.requires_behavior(*args)
    requires_behaviors(*args)
  end

  def relegates(*methods)
    target = self

    @actor.instance_eval do
      (class << self; self; end).class_eval do
        methods.each do |meth|
          # log("redefining #{meth} for #{@actor.class}") if @actor.respond_to? meth
          target.relegated_methods << meth

          define_method meth do |*args, &block|
            target.send meth, *args, &block
          end
        end
      end
    end
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gamebox-0.3.4 lib/gamebox/behavior.rb
gamebox-0.3.3 lib/gamebox/behavior.rb
gamebox-0.3.2 lib/gamebox/behavior.rb