protected override bool PrivateUpdate(ScenarioFrame frame) { SimDescription dad = ManagerSim.Find(Sim.Pregnancy.DadDescriptionId); if ((GetValue <SameSexSameGenderOption, bool>()) && (dad != null) && (dad.Gender == Sim.Gender)) { IncStat("Same Sex"); Sim.Pregnancy.mGender = Sim.Gender; return(true); } FirstBornGender firstBorn = GetValue <FirstBornGenderOption, FirstBornGender>(); if (firstBorn == FirstBornGender.Male) { IncStat("First Born Male"); Sim.Pregnancy.mGender = CASAgeGenderFlags.Male; return(true); } else if (firstBorn == FirstBornGender.Female) { IncStat("First Born Female"); Sim.Pregnancy.mGender = CASAgeGenderFlags.Female; return(true); } else { if ((GetValue <OneOfEachGenderOption, bool>()) && (Sim.Genealogy != null)) { bool male = false, female = false; foreach (SimDescription child in Relationships.GetChildren(Sim)) { if (SimTypes.IsDead(child)) { continue; } if (child.IsMale) { male = true; } else if (child.IsFemale) { female = true; } } if (male) { if (!female) { Sim.Pregnancy.mGender = CASAgeGenderFlags.Female; return(true); } } else if (female) { Sim.Pregnancy.mGender = CASAgeGenderFlags.Male; return(true); } } if (firstBorn == FirstBornGender.Balanced) { Sim.Pregnancy.mGender = CalculateGenderBalancer(Pregnancies, Sim.IsPet); return(true); } } return(false); }
protected override FirstBornGender Combine(FirstBornGender original, FirstBornGender add, out bool same) { same = (original == add); return(add); }
public static CASAgeGenderFlags GetGenderByFirstBorn(StoryProgressionObject manager, FirstBornGender firstBorn, bool isPet) { if (firstBorn == FirstBornGender.Male) { return(CASAgeGenderFlags.Male); } else if (firstBorn == FirstBornGender.Female) { return(CASAgeGenderFlags.Female); } else if (firstBorn == FirstBornGender.Balanced) { return(CalculateGenderBalancer(manager, isPet)); } else if (RandomUtil.CoinFlip()) { return(CASAgeGenderFlags.Male); } else { return(CASAgeGenderFlags.Female); } }