public Species Clone(string cloneName) { Species clone = new Species(cloneName); foreach (var mutation in Mutations) { clone.AddMutation(mutation); } return(clone); }
private Species GenerateInitialSpecies(EaterType eaterType, float calorieLimit) { List <Mutation> heads = AllMutations.Where(mutation => { HeadMutation head = mutation as HeadMutation; return(head != null && head.Type == eaterType); }).ToList(); List <Mutation> remainingMutations = AllMutations.Where(mutation => { return(!(mutation is HeadMutation) && !(mutation is TorsoMutation)); }).ToList(); Species newSpecies = new Species("Species"); newSpecies.AddMutation(_torsos[Random.Range(0, _torsos.Count)]); newSpecies.AddMutation(heads[Random.Range(0, heads.Count)]); while (remainingMutations.Count > 0 && newSpecies.CalorieConsumption < calorieLimit) { Mutation newMutation = remainingMutations[Random.Range(0, remainingMutations.Count)]; newSpecies.AddMutation(newMutation); for (int i = remainingMutations.Count - 1; i >= 0; i--) { MutationCategory category = remainingMutations[i].Category; if (category != null && category == newMutation.Category) { remainingMutations.RemoveAt(i); } } } newSpecies.OnResearchComplete += OnResearchComplete; Species.Add(newSpecies); BeginRandomResearch(newSpecies); return(newSpecies); }