private List<int>[] findParentSimilarities(List<Creature>[] parents, Creature creature)
{
// similarities (number of equal wildlevels as creature, to find parents easier)
int e;// number of equal wildlevels
List<int> motherListSimilarities = new List<int>();
List<int> fatherListSimilarities = new List<int>();
List<int>[] parentListSimilarities = new List<int>[2] { motherListSimilarities, fatherListSimilarities };
if (parents[0] != null && parents[1] != null)
{
for (int ps = 0; ps < 2; ps++)
{
foreach (Creature c in parents[ps])
{
e = 0;
for (int s = 0; s < 7; s++)
{
if (creature.levelsWild[s] >= 0 && creature.levelsWild[s] == c.levelsWild[s])
e++;
}
parentListSimilarities[ps].Add(e);
}
// sort parents: put all creatures not available to the end, then the ones with 0 common stats to the end
int moved = 0;
for (int p = 0; p < parents[ps].Count - moved; p++)
{
if (parents[ps][p].status != CreatureStatus.Available)
{
parentListSimilarities[ps].Add(parentListSimilarities[ps][p]);
parentListSimilarities[ps].RemoveAt(p);
parents[ps].Add(parents[ps][p]);
parents[ps].RemoveAt(p);
moved++;
p--;
}
}
moved = 0;
for (int p = 0; p < parents[ps].Count - moved; p++)
{
if (parentListSimilarities[ps][p] == 0)
{
parentListSimilarities[ps].Add(parentListSimilarities[ps][p]);
parentListSimilarities[ps].RemoveAt(p);
parents[ps].Add(parents[ps][p]);
parents[ps].RemoveAt(p);
moved++;
p--;
}
}
}
}
return parentListSimilarities;
}