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 if(erouter!=NULL)
00040 erouter->removeListener(this);
00041 getRegistryInstance().erase(this);
00042 }
00043
00044 void
00045 BehaviorBase::DoStart() {
00046
00047 if(!started) {
00048 started=true;
00049 AddReference();
00050 }
00051 }
00052
00053 void
00054 BehaviorBase::DoStop() {
00055
00056 if(started) {
00057 started=false;
00058 erouter->remove(this);
00059 RemoveReference();
00060 }
00061 }
00062
00063 std::set<BehaviorBase*>& BehaviorBase::getRegistryInstance() {
00064 static std::set<BehaviorBase*> registry;
00065 return registry;
00066 }
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078