src/ai/core/ai_factory.hpp
branchnoai
changeset 9392 7791ceeea57b
parent 9391 2d6da2e48112
child 9400 6da42d57fda2
equal deleted inserted replaced
9391:2d6da2e48112 9392:7791ceeea57b
    26 
    26 
    27 protected:
    27 protected:
    28 	/**
    28 	/**
    29 	 * This registers your AI to the main system so we know about you.
    29 	 * This registers your AI to the main system so we know about you.
    30 	 */
    30 	 */
    31 	void RegisterFactory(AIFactoryBase *instance, const char *name)
    31 	void RegisterFactory(const char *name)
    32 	{
    32 	{
    33 		std::pair<Factories::iterator, bool> P = GetFactories().insert(Factories::value_type(name, instance));
    33 		std::pair<Factories::iterator, bool> P = GetFactories().insert(Factories::value_type(name, this));
    34 		assert(P.second);
    34 		assert(P.second);
    35 		instance->name = name;
    35 		this->name = name;
    36 	}
    36 	}
    37 
    37 
    38 public:
    38 public:
    39 	virtual ~AIFactoryBase() { GetFactories().erase(this->name); }
    39 	virtual ~AIFactoryBase() { GetFactories().erase(this->name); }
    40 
    40 
   116  * Example: class FYourClass: public AIFactory<FYourClass> { }
   116  * Example: class FYourClass: public AIFactory<FYourClass> { }
   117  */
   117  */
   118 template <class T>
   118 template <class T>
   119 class AIFactory: public AIFactoryBase {
   119 class AIFactory: public AIFactoryBase {
   120 public:
   120 public:
   121 	AIFactory() { this->RegisterFactory(this, ((T *)this)->GetName()); }
   121 	AIFactory() { this->RegisterFactory(((T *)this)->GetName()); }
   122 };
   122 };
   123 
   123 
   124 #endif /* AI_FACTORY_HPP */
   124 #endif /* AI_FACTORY_HPP */