00001 #include "BehaviorBase.h"
00002 #include "Events/EventRouter.h"
00003
00004 BehaviorBase::BehaviorBase(const std::string& name)
00005 : ReferenceCounter(), EventListener(), started(false),
00006 instanceName(name), className(name)
00007 {
00008 getRegistryInstance().insert(this);
00009 }
00010
00011 BehaviorBase::BehaviorBase(const std::string& classname, const std::string& instancename)
00012 : ReferenceCounter(), EventListener(), started(false),
00013 instanceName(instancename), className(classname)
00014 {
00015 getRegistryInstance().insert(this);
00016 }
00017
00018
00019 BehaviorBase::BehaviorBase(const BehaviorBase& b)
00020 : ReferenceCounter(b), EventListener(b), started(b.started),
00021 instanceName(b.instanceName), className(b.className)
00022 {
00023 getRegistryInstance().insert(this);
00024 }
00025
00026 BehaviorBase&
00027 BehaviorBase::operator=(const BehaviorBase& b) {
00028 ReferenceCounter::operator=(b);
00029 EventListener::operator=(b);
00030 started=b.started;
00031 instanceName=b.instanceName;
00032 return *this;
00033 }
00034
00035 BehaviorBase::~BehaviorBase() {
00036 SetAutoDelete(false);
00037 if(started)
00038 std::cerr << "Behavior " << getName() << " deleted while running: use 'RemoveReference', not 'delete'" << std::endl;
00039 erouter->removeListener(this);
00040 getRegistryInstance().erase(this);
00041 }
00042
00043 void
00044 BehaviorBase::DoStart() {
00045
00046 if(!started) {
00047 started=true;
00048 AddReference();
00049 }
00050 }
00051
00052 void
00053 BehaviorBase::DoStop() {
00054
00055 if(started) {
00056 started=false;
00057 erouter->remove(this);
00058 RemoveReference();
00059 }
00060 }
00061
00062 std::set<BehaviorBase*>& BehaviorBase::getRegistryInstance() {
00063 static std::set<BehaviorBase*> registry;
00064 return registry;
00065 }
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077