Example #1
0
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;
}