/*
================
idAASCluster::Build
================
*/
bool idAASCluster::Build( idAASFileLocal *file ) {
	common->Printf( "[Clustering]\n" );
	this->file = file;
	this->noFaceFlood = true;
	RemoveInvalidPortals();
	while( 1 ) {
		// delete all existing clusters
		file->DeleteClusters();
		// create the portals from the portal areas
		CreatePortals();
		common->Printf( "\r%6d", file->portals.Num() );
		// find the clusters
		if( !FindClusters() ) {
			continue;
		}
		// test the portals
		if( !TestPortals() ) {
			continue;
		}
		break;
	}
	common->Printf( "\r%6d portals\n", file->portals.Num() );
	common->Printf( "%6d clusters\n", file->clusters.Num() );
	for( int i = 0; i < file->clusters.Num(); i++ ) {
		common->Printf( "%6d reachable areas in cluster %d\n", file->clusters[i].numReachableAreas, i );
	}
	file->ReportRoutingEfficiency();
	return true;
}
ClusterData* ClusterHelper::Update(){


	std::vector<Point*>* reducedPoints = ReducePoints(localcpy);

	if (AreEnoughPointsForClustering((int)reducedPoints->size()))
	{
		FindClusters(reducedPoints);
		AssignAllPoints(localcpy);
	}
	else
	{
		if (value) {
			delete value;
		}
		value = new ClusterData();
	}
	return value;

}