/* * Copyright (C) 2016+ AzerothCore , released under GNU GPL v2 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-GPL2 * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS */ #ifndef ACORE_CREATUREAIFACTORY_H #define ACORE_CREATUREAIFACTORY_H #include "ObjectRegistry.h" #include "FactoryHolder.h" #include "GameObjectAI.h" struct SelectableAI : public FactoryHolder, public Permissible { SelectableAI(const char* id) : FactoryHolder(id) {} }; template struct CreatureAIFactory : public SelectableAI { CreatureAIFactory(const char* name) : SelectableAI(name) {} CreatureAI* Create(void*) const; int Permit(const Creature* c) const { return REAL_AI::Permissible(c); } }; template inline CreatureAI* CreatureAIFactory::Create(void* data) const { Creature* creature = reinterpret_cast(data); return (new REAL_AI(creature)); } typedef FactoryHolder CreatureAICreator; typedef FactoryHolder::FactoryHolderRegistry CreatureAIRegistry; //GO struct SelectableGameObjectAI : public FactoryHolder, public Permissible { SelectableGameObjectAI(const char* id) : FactoryHolder(id) {} }; template struct GameObjectAIFactory : public SelectableGameObjectAI { GameObjectAIFactory(const char* name) : SelectableGameObjectAI(name) {} GameObjectAI* Create(void*) const; int Permit(const GameObject* g) const { return REAL_GO_AI::Permissible(g); } }; template inline GameObjectAI* GameObjectAIFactory::Create(void* data) const { GameObject* go = reinterpret_cast(data); return (new REAL_GO_AI(go)); } typedef FactoryHolder GameObjectAICreator; typedef FactoryHolder::FactoryHolderRegistry GameObjectAIRegistry; #endif