Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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