def create_offspring_data(self): r = random.Random() r.seed(self._seed) if self._offspring_count_override is not None: offspring_count = self._offspring_count_override else: offspring_count = pop_weighted([ (p.weight * p.modifiers.get_multiplier(SingleSimResolver(self._sim_info)), p.size) for p in self.MULTIPLE_OFFSPRING_CHANCES ], random=r) offspring_count = min(self._sim_info.household.free_slot_count + 1, offspring_count) species = self._sim_info.species age = self._sim_info.get_birth_age() aging_data = AgingTuning.get_aging_data(species) num_personality_traits = aging_data.get_personality_trait_count(age) self._offspring_data = [] for offspring_index in range(offspring_count): if offspring_index and r.random( ) < self.MONOZYGOTIC_OFFSPRING_CHANCE: gender = self._offspring_data[offspring_index - 1].gender genetics = self._offspring_data[offspring_index - 1].genetics else: gender_chance_stat = self._sim_info.get_statistic( self.GENDER_CHANCE_STAT) if gender_chance_stat is None: gender_chance = 0.5 else: gender_chance = (gender_chance_stat.get_value() - gender_chance_stat.min_value) / ( gender_chance_stat.max_value - gender_chance_stat.min_value) gender = Gender.FEMALE if r.random( ) < gender_chance else Gender.MALE genetics = r.randint(1, MAX_UINT32) last_name = SimSpawner.get_last_name(self._sim_info.last_name, gender, species) offspring_data = PregnancyOffspringData(age, gender, species, genetics, last_name=last_name) (parent_a, parent_b) = self.get_parents() offspring_data.traits = self.select_traits_for_offspring( offspring_data, parent_a, parent_b, num_personality_traits, origin=self._origin) self._offspring_data.append(offspring_data)
def __call__(self, actor_sim_info, created_sim_info): created_sim_info.last_name = SimSpawner.get_last_name( actor_sim_info.last_name, created_sim_info.gender, created_sim_info.species) parent_a = actor_sim_info parent_b = services.sim_info_manager().get(parent_a.spouse_sim_id) created_sim_info.relationship_tracker.destroy_all_relationships() for relation in FamilyRelationshipIndex: relation_id = created_sim_info.get_relation(relation) relation_info = services.sim_info_manager().get(relation_id) if relation_info is not None: created_sim_info.genealogy.remove_family_link(relation) family_relation = relation_info.genealogy.get_family_relationship_bit( created_sim_info.sim_id) relation_info.genealogy.clear_family_relation( family_relation) relation_info.relationship_tracker.destroy_relationship( created_sim_info.sim_id) created_sim_info.genealogy.clear_family_relation(relation) PregnancyTracker.initialize_sim_info(created_sim_info, parent_a, parent_b)
def _name_and_create_adoptee_gen(self, timeline): adopted_sim_info = self.get_participant(ParticipantType.PickedSim) if adopted_sim_info is None: return False yield last_name = SimSpawner.get_last_name(self.sim.last_name, adopted_sim_info.gender, adopted_sim_info.species) result = yield from self._do_renames_gen( timeline, (adopted_sim_info, ), additional_tokens=(last_name, )) if not result: return result yield parent_a = self.sim.sim_info parent_b = services.sim_info_manager().get(parent_a.spouse_sim_id) adoption_service = services.get_adoption_service() adoption_service.remove_sim_info(adopted_sim_info) (adopted_sim_info, _) = adoption_service.create_adoption_sim_info( adopted_sim_info, household=parent_a.household, account=parent_a.account, zone_id=parent_a.household.home_zone_id) PregnancyTracker.initialize_sim_info(adopted_sim_info, parent_a, parent_b) self.interaction_parameters['picked_item_ids'] = { adopted_sim_info.sim_id } services.daycare_service().exclude_sim_from_daycare(adopted_sim_info) if adopted_sim_info.age == Age.BABY: adopted_sim_info.set_zone_on_spawn() if not assign_bassinet_for_baby(adopted_sim_info): create_and_place_baby(adopted_sim_info) else: SimSpawner.spawn_sim(adopted_sim_info, sim_position=self.sim.position) return True yield