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 |