public static Animal[] SetGendersRate(GameObject[] creatures, float rate, char sex) { Animal[] scripts = new Animal[creatures.Length]; for (int idx = 0; creatures.Length > idx; idx++) { scripts[idx] = creatures[idx].GetComponent <Animal>(); scripts[idx].sex = Sex.SwitchSex(sex); if (Random.Range(0.0f, 1.0f) < rate) { scripts[idx].sex = sex; } } return(scripts); }
public static Animal[] SetParents(Animal[] scripts, float parentsRandomRate, int minParentsCount) { float parentsCount = 0; char parentalSex = Sex.female; bool alphaMaleSetted = false, alphaFemaleSetted = false; Family family = new Family(scripts[0].Group.familySize, scripts[0].Group.parentsRate, scripts[0].Group.parentalCare); HashSet <Animal> adults = new HashSet <Animal>(); HashSet <Animal> children = new HashSet <Animal>(); foreach (Animal script in scripts) { script.Group = family; if (minParentsCount > parentsCount || parentsRandomRate > (parentsCount / scripts.Length)) { adults.Add(script); parentsCount++; script.lifeStage = LifeStage.adult; script.sex = parentalSex; if (!alphaFemaleSetted) { family.alphaFemale = script; alphaFemaleSetted = true; } else if (!alphaMaleSetted) { family.alphaMale = script; alphaMaleSetted = true; } parentalSex = Sex.SwitchSex(parentalSex); } else { script.lifeStage = LifeStage.child; children.Add(script); } } family.members = scripts; family.fed = children.ToArray(); family.feeders = adults.ToArray(); return(scripts); }