GameEntity* EntityFactory::CreateAIEntity( GameEntitiesContainer* container, D3DXVECTOR3 position, D3DXVECTOR3 size, float speed, D3DCOLOR color, long framesToWait, Behaviour behaviour, AIEntitiesInteractionContainer entitiesContainer, AStarPathfindingGraph* graph, GameEntity* entityToFollow, PlayerComponent *player) { GameEntity* entity = new GameEntity(this->_game); entity->setPosition(position); entity->setSize(size); entity->setSpeed(speed); PhysicsComponent* physics = new PhysicsComponent(this->_game, entity); AIControllerComponent* aiController = new AIControllerComponent(this->_game, entity); AStarPathfindingComponent* pathfinding = new AStarPathfindingComponent(this->_game, entity, aiController, framesToWait, graph); ScaledBoxGraphicsComponent* graphics = new ScaledBoxGraphicsComponent(this->_game, entity, color); RadiusBasedCollisionComponent* collision = new RadiusBasedCollisionComponent(this->_game, entity, 20, Enemies, MinusLife); EntityHealthDisplayComponent* healthDisplay = new EntityHealthDisplayComponent(this->_game, entity, player->getEntity()); BehaviourComponent* behaviourComponent = new BehaviourComponent(this->_game, entity, behaviour, entitiesContainer, pathfinding, player); entity->AddComponent(physics); entity->AddComponent(aiController); entity->AddComponent(physics); entity->AddComponent(aiController); entity->AddComponent(collision); entity->AddDrawableComponent(pathfinding); entity->AddComponent(behaviourComponent); entity->AddGraphicsComponent(graphics); entity->AddGraphicsComponent(healthDisplay); if(entityToFollow != nullptr) { pathfinding->FollowEntity(entityToFollow); } container->Entities.push_back(entity); return entity; }