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);
        }