/* * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef ACORE_CREATUREAIFACTORY_H #define ACORE_CREATUREAIFACTORY_H #include "FactoryHolder.h" #include "GameObjectAI.h" #include "ObjectRegistry.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