internal void UpdateGroupClusteringVariables()
{
//grouping clustering
if (FunkyBaseExtension.Settings.Grouping.AttemptGroupingMovements)
{
if ((CurrentGroupClusters.Count == 0 && DateTime.Compare(LastClusterGroupingLogicRefresh, DateTime.Now) < 0)
|| (CurrentGroupClusters.Count > 0 && DateTime.Now.Subtract(LastClusterGroupingLogicRefresh).TotalMilliseconds > 1250))
{
//Clear Clusters and Unit collection
CurrentGroupClusters = new List<UnitCluster>();
//Check if there are enough units present currently..
if (FunkyGame.Targeting.Cache.Environment.DistantUnits.Count > FunkyBaseExtension.Settings.Grouping.GroupingMinimumUnitsInCluster)
{
//Update UnitCluster Collection
CurrentGroupClusters = UnitCluster.RunKmeans(FunkyGame.Targeting.Cache.Environment.DistantUnits, FunkyBaseExtension.Settings.Grouping.GroupingClusterRadiusDistance)
.Where(cluster => cluster.ListUnits.Count >= FunkyBaseExtension.Settings.Grouping.GroupingMinimumUnitsInCluster && cluster.NearestMonsterDistance <= FunkyBaseExtension.Settings.Grouping.GroupingMaximumDistanceAllowed)
.OrderByDescending(cluster => cluster.NearestMonsterDistance).ToList();
//if (FunkyBaseExtension.SettingsFunky.LogGroupingOutput)
// Logger.Write(LogLevel.Cluster, "Updated Group Clusters. Count={0}", CurrentGroupClusters.Count.ToString());
LastClusterGroupingLogicRefresh = DateTime.Now;
}
}
}
}