Sha256: dce55ba482f4ba707e2c0ed9cd66a1ca48de2aed23cdcd1db50590b00feb7d9c
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
class AngryMob class Target class Mother attr_reader :mob def initialize(mob) @mob = mob end def target_classes Target::Tracking.subclasses end def pose_as(nickname,nickname_to_pose_as) nickname = nickname.to_s nickname_to_pose_as = nickname_to_pose_as.to_s posing_class = target_classes[nickname ] || raise(TargetError, "posing class '#{nickname}' doesn't exist!") old_class = target_classes[nickname_to_pose_as] target_classes[nickname_to_pose_as] = posing_class if old_class && instances = key_classes.delete(old_class) # TODO - merge instances if required end end def clear_instances! @target_instances = nil end def target_instances @target_instances ||= {} end def unkeyed_instances @unkeyed_instances ||= [] end def key_classes @key_classes ||= Hash.new {|h,k| h[k] = []} end def target_call(nickname, *args, &blk) raise(MobError, "no target nicknamed '#{nickname}'\n#{target_classes.keys.inspect}") unless target_classes.key?(nickname.to_s) klass = target_classes[nickname.to_s] args = Arguments.parse(args,&blk) if key = Target::Call.instance_key(klass,args) if call = target_instances[key] call.add_args(args) else call = target_instances[key] = Target::Call.new( klass, args ) end else unkeyed_instances << call = Target::Call.new( klass, args ) end call.target ||= klass.new call end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
angry_mob-0.1.0 | lib/angry_mob/target/mother.rb |