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