def update_body_frame(sim_info: SimInfo, masculine: bool) -> bool: """update_body_frame(sim_info, masculine) Update the Body Frame of a Sim. .. note:: Will only update Human Sims. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :param masculine: If True, the Sim will get a Masculine frame.\ If False, the Sim will get a Feminine frame. :type masculine: bool :return: True, if successful. False, if not. :rtype: bool """ if sim_info is None: return False if not CommonSpeciesUtils.is_human(sim_info): return False if masculine: CommonTraitUtils.remove_trait( sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_FEMININE) CommonTraitUtils.add_trait( sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_MASCULINE) else: CommonTraitUtils.remove_trait( sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_MASCULINE) CommonTraitUtils.add_trait( sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_FEMININE) from sims4communitylib.events.sim.common_sim_event_dispatcher import CommonSimEventDispatcherService CommonSimEventDispatcherService( )._on_sim_change_gender_options_body_frame(sim_info) return True
def can_impregnate(sim_info: SimInfo) -> bool: """can_impregnate(sim_info) Determine if a Sim can impregnate other sims. :param sim_info: The Sim being checked. :type sim_info: SimInfo :return: True, if they can. False, if they cannot. :rtype: bool """ from sims4communitylib.utils.sims.common_trait_utils import CommonTraitUtils from sims4communitylib.enums.traits_enum import CommonTraitId if CommonSpeciesUtils.is_human(sim_info): if CommonTraitUtils.has_trait( sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_NOT_IMPREGNATE): return False return CommonTraitUtils.has_trait( sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_IMPREGNATE) elif CommonSpeciesUtils.is_pet(sim_info): if CommonTraitUtils.has_trait( sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_NOT_REPRODUCE): return False return CommonTraitUtils.has_trait( sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_REPRODUCE) return False
def update_clothing_preference(sim_info: SimInfo, prefer_menswear: bool) -> bool: """update_clothing_preference(sim_info, prefer_menswear) Update the Clothing Preference of a Sim. .. note:: Will only update Human Sims. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :param prefer_menswear: If True, the Sim will prefer Menswear.\ If False, the Sim will prefer Womenswear. :type prefer_menswear: bool :return: True, if successful. False, if not. :rtype: bool """ if sim_info is None: return False if not CommonSpeciesUtils.is_human(sim_info): return False if prefer_menswear: CommonTraitUtils.remove_trait( sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_WOMENS_WEAR) CommonTraitUtils.add_trait( sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_MENS_WEAR) else: CommonTraitUtils.remove_trait( sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_MENS_WEAR) CommonTraitUtils.add_trait( sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_WOMENS_WEAR) from sims4communitylib.events.sim.common_sim_event_dispatcher import CommonSimEventDispatcherService CommonSimEventDispatcherService( )._on_sim_change_gender_options_clothing_preference(sim_info) return True
def update_toilet_usage(sim_info: SimInfo, uses_toilet_standing: bool) -> bool: """update_toilet_usage(sim_info, uses_toilet_standing) Update how a Sim uses the toilet. i.e. Toilet Standing or Toilet Sitting. .. note:: Will only update Human Sims. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :param uses_toilet_standing: If True, the Sim will use toilets while standing.\ If False, the Sim will use toilets while sitting. :type uses_toilet_standing: bool :return: True, if successful. False, if not. :rtype: bool """ if sim_info is None: return False if not CommonSpeciesUtils.is_human(sim_info): return False if uses_toilet_standing: CommonTraitUtils.remove_trait( sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_SITTING) CommonTraitUtils.add_trait( sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_STANDING) else: CommonTraitUtils.remove_trait( sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_STANDING) CommonTraitUtils.add_trait( sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_SITTING) from sims4communitylib.events.sim.common_sim_event_dispatcher import CommonSimEventDispatcherService CommonSimEventDispatcherService( )._on_sim_change_gender_options_toilet_usage(sim_info) return True
def _try_apply_traits(self, sim_info: SimInfo): if CommonSpeciesUtils.is_human(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM): return CommonTraitUtils.add_trait(sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM) elif CommonSpeciesUtils.is_large_dog(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM): return CommonTraitUtils.add_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM) elif CommonSpeciesUtils.is_small_dog(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM): return CommonTraitUtils.add_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM) elif CommonSpeciesUtils.is_cat(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM): return CommonTraitUtils.add_trait(sim_info, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM) elif CommonSpeciesUtils.is_fox(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM): return CommonTraitUtils.add_trait(sim_info, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM)
def get_bowels_level(sim_info: SimInfo) -> float: """ Retrieve the bowels level of a Sim. """ if CommonSpeciesUtils.is_human(sim_info): return -1.0 elif CommonSpeciesUtils.is_dog(sim_info): return CommonSimMotiveUtils._get_motive_level( sim_info, CommonMotiveId.PET_DOG_BOWEL) elif CommonSpeciesUtils.is_cat(sim_info): return CommonSimMotiveUtils._get_motive_level( sim_info, CommonMotiveId.PET_CAT_BOWEL) return -1.0
def is_baby_toddler_or_child_human(sim_info: SimInfo) -> bool: """is_baby_toddler_or_child_human(sim_info) Determine if a sim is a Baby, Toddler, or Child Human. :param sim_info: The Sim to check. :type sim_info: SimInfo :return: True, if the Sim is a Baby, Toddler, or Child Human. False, if the Sim is not. :rtype: bool """ return CommonAgeUtils.is_baby_toddler_or_child( sim_info) and CommonSpeciesUtils.is_human(sim_info)
def get_species(sim_info: SimInfo) -> int: """ Retrieve the CommonSpecies of a sim. Use this instead of CommonSpeciesUtils.get_species to determine a more specific species. """ from sims4communitylib.utils.sims.common_species_utils import CommonSpeciesUtils if CommonSpeciesUtils.is_human(sim_info): return CommonSpecies.HUMAN elif CommonSpeciesUtils.is_small_dog(sim_info): return CommonSpecies.SMALL_DOG elif CommonSpeciesUtils.is_large_dog(sim_info): return CommonSpecies.LARGE_DOG elif CommonSpeciesUtils.is_cat(sim_info): return CommonSpecies.CAT return CommonSpecies.INVALID
def is_teen_adult_or_elder_human(sim_info: SimInfo) -> bool: """is_teen_adult_or_elder_human(sim_info) Determine if a sim is a Teen, Young Adult, Adult, or Elder Human. :param sim_info: The Sim to check. :type sim_info: SimInfo :return: True, if the Sim is a Teen, Young Adult, Adult, or Elder Human. False, if the Sim is not. :rtype: bool """ return CommonAgeUtils.is_teen_adult_or_elder( sim_info) and CommonSpeciesUtils.is_human(sim_info)
def is_mature_adult_human(sim_info: SimInfo) -> bool: """is_mature_adult_human(sim_info) Determine if a sim is an Adult Human. :param sim_info: The Sim to check. :type sim_info: SimInfo :return: True, if the Sim is an Adult Human. False, if the Sim is not. :rtype: bool """ return CommonAgeUtils.is_mature_adult( sim_info) and CommonSpeciesUtils.is_human(sim_info)
def is_child_or_teen_human(sim_info: SimInfo) -> bool: """is_child_or_teen_human(sim_info) Determine if a sim is a Child or Teen Human. :param sim_info: The Sim to check. :type sim_info: SimInfo :return: True, if the Sim is a Child or Teen Human. False, if the Sim is not. :rtype: bool """ return CommonAgeUtils.is_child_or_teen( sim_info) and CommonSpeciesUtils.is_human(sim_info)
def get_bowels_level(sim_info: SimInfo) -> float: """get_bowels_level(sim_info) Retrieve the bowel level of a Sim. .. note:: Human Sims do not have Bowels. (As hard as that is to believe) :param sim_info: The Sim to get the level of. :type sim_info: SimInfo :return: The current level of the Motive of the Sim. :rtype: float """ if CommonSpeciesUtils.is_human(sim_info): return -1.0 return CommonSimMotiveUtils._get_motive_level(sim_info, CommonMotiveId.BOWEL)
def get_bowels_level(sim_info: SimInfo) -> float: """get_bowels_level(sim_info) Retrieve the bowels level of a Sim. :param sim_info: The Sim to get the level of. :type sim_info: SimInfo :return: The current level of the Motive of the Sim. :rtype: float """ if CommonSpeciesUtils.is_human(sim_info): return -1.0 elif CommonSpeciesUtils.is_dog(sim_info): return CommonSimMotiveUtils._get_motive_level(sim_info, CommonMotiveId.PET_DOG_BOWEL) elif CommonSpeciesUtils.is_cat(sim_info): return CommonSimMotiveUtils._get_motive_level(sim_info, CommonMotiveId.PET_CAT_BOWEL) return -1.0
def get_stand_interaction(sim_info: SimInfo) -> Union[int, None]: """get_stand_interaction(sim_info) Retrieve a Stand interaction appropriate for a Sim. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :return: The decimal identifier of a Stand interaction appropriate for the Sim or None if no Stand interaction was found to be appropriate. :rtype: Union[int, None] """ from sims4communitylib.utils.sims.common_species_utils import CommonSpeciesUtils if CommonSpeciesUtils.is_human(sim_info): return CommonInteractionId.SIM_STAND elif CommonSpeciesUtils.is_dog(sim_info): return CommonInteractionId.DOG_STAND elif CommonSpeciesUtils.is_cat(sim_info): return CommonInteractionId.CAT_STAND return None
def get_swim_interaction(sim_info: SimInfo) -> Union[int, None]: """get_swim_interaction(sim_info) Retrieve a Swim interaction appropriate for a Sim. .. note:: Cats do not have an appropriate Swim interaction. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :return: The decimal identifier of an interaction appropriate for the Sim or None if no interaction was found to be appropriate. :rtype: Union[int, None] """ if CommonSpeciesUtils.is_human(sim_info): return CommonInteractionId.SIM_SWIM elif CommonSpeciesUtils.is_dog(sim_info): return CommonInteractionId.DOG_SWIM # Cats don't have a swim interaction. return None
def can_impregnate(sim_info: SimInfo) -> bool: """ Determine if a Sim can impregnate other sims. """ from sims4communitylib.utils.sims.common_trait_utils import CommonTraitUtils from sims4communitylib.enums.traits_enum import CommonTraitId if CommonSpeciesUtils.is_human(sim_info): if CommonTraitUtils.has_trait( sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_NOT_IMPREGNATE): return False return CommonTraitUtils.has_trait( sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_IMPREGNATE) elif CommonSpeciesUtils.is_pet(sim_info): if CommonTraitUtils.has_trait( sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_NOT_REPRODUCE): return False return CommonTraitUtils.has_trait( sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_REPRODUCE) return False
def get_species(sim_info: SimInfo) -> 'CommonSpecies': """get_species(sim_info) Retrieve the CommonSpecies of a sim. Use this instead of CommonSpeciesUtils.get_species to determine a more specific species. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :return: A species matching the Sim or CommonSpecies.INVALID if no matching species is found. :rtype: CommonSpecies """ from sims4communitylib.utils.sims.common_species_utils import CommonSpeciesUtils if CommonSpeciesUtils.is_human(sim_info): return CommonSpecies.HUMAN elif CommonSpeciesUtils.is_small_dog(sim_info): return CommonSpecies.SMALL_DOG elif CommonSpeciesUtils.is_large_dog(sim_info): return CommonSpecies.LARGE_DOG elif CommonSpeciesUtils.is_cat(sim_info): return CommonSpecies.CAT return CommonSpecies.INVALID
def _try_apply_traits(self, sim_info: SimInfo): if CommonSpeciesUtils.is_human(sim_info): CommonTraitUtils.remove_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG, CommonTraitId.S4CL_MAIN_TRAIT_CAT) if CommonTraitUtils.has_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN): return CommonTraitUtils.add_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN) elif CommonSpeciesUtils.is_large_dog(sim_info): CommonTraitUtils.remove_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG, CommonTraitId.S4CL_MAIN_TRAIT_CAT) if CommonTraitUtils.has_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG): return CommonTraitUtils.add_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG) elif CommonSpeciesUtils.is_small_dog(sim_info): CommonTraitUtils.remove_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG, CommonTraitId.S4CL_MAIN_TRAIT_CAT) if CommonTraitUtils.has_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG): return CommonTraitUtils.add_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG) elif CommonSpeciesUtils.is_cat(sim_info): CommonTraitUtils.remove_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG) if CommonTraitUtils.has_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_CAT): return CommonTraitUtils.add_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_CAT)
def update_can_be_impregnated(sim_info: SimInfo, can_be_impregnated: bool) -> bool: """update_can_be_impregnated(sim_info, can_be_impregnated) Update a Sims ability to be impregnated by other Sims. .. note:: Will only update Human Sims. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :param can_be_impregnated: If True, the Sim will have the ability to be impregnated.\ If False, the Sim will not have the ability to be impregnated. :type can_be_impregnated: bool :return: True, if successful. False, if not. :rtype: bool """ if sim_info is None: return False if not CommonSpeciesUtils.is_human(sim_info): return False if can_be_impregnated: CommonTraitUtils.remove_trait( sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_NOT_BE_IMPREGNATED) CommonTraitUtils.add_trait( sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_BE_IMPREGNATED) else: CommonTraitUtils.remove_trait( sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_BE_IMPREGNATED) CommonTraitUtils.add_trait( sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_NOT_BE_IMPREGNATED) from sims4communitylib.events.sim.common_sim_event_dispatcher import CommonSimEventDispatcherService CommonSimEventDispatcherService( )._on_sim_change_gender_options_can_be_impregnated(sim_info) return True
def get_in_labor_buff(sim_info: SimInfo) -> Union[int, CommonBuffId]: """get_in_labor_buff(sim_info) Retrieve an In Labor buff appropriate for causing the Sim to go into labor (Give Birth). :param sim_info: An instance of a Sim. :type sim_info: SimInfo :return: The decimal identifier of a Buff that will cause the specified Sim to go into labor. If no appropriate Buff is found, -1 will be returned. :rtype: Union[int, CommonBuffId] """ from sims4communitylib.utils.sims.common_gender_utils import CommonGenderUtils sim_name = CommonSimNameUtils.get_full_name(sim_info) log.debug( 'Locating appropriate Buff for inducing labor in \'{}\'.'.format( sim_name)) is_female = CommonGenderUtils.is_female(sim_info) if CommonSpeciesUtils.is_human(sim_info): log.debug('\'{}\' is Human.'.format(sim_name)) if is_female: log.debug('\'{}\' is Female.'.format(sim_name)) return CommonBuffId.PREGNANCY_IN_LABOR else: log.debug('\'{}\' is Male.'.format(sim_name)) return CommonBuffId.PREGNANCY_IN_LABOR_MALE elif CommonSpeciesUtils.is_dog(sim_info): log.debug('\'{}\' is a Dog.'.format(sim_name)) if is_female: log.debug('\'{}\' is Female.'.format(sim_name)) return CommonBuffId.PREGNANCY_IN_LABOR_PET_DOG elif CommonSpeciesUtils.is_cat(sim_info): log.debug('\'{}\' is a Cat.'.format(sim_name)) if is_female: log.debug('\'{}\' is Female.'.format(sim_name)) return CommonBuffId.PREGNANCY_IN_LABOR_PET_CAT log.debug( 'No appropriate Buff located to induce labor in \'{}\'.'.format( sim_name)) return -1
def is_adult_human(sim_info: SimInfo) -> bool: """ Determine if a sim is a Young Adult or Adult Human. """ return CommonAgeUtils.is_adult(sim_info) and CommonSpeciesUtils.is_human(sim_info)
def is_teen_adult_or_elder_human(sim_info: SimInfo) -> bool: """ Determine if a sim is a Teen, Young Adult, Adult, or Elder Human. """ return CommonAgeUtils.is_teen_adult_or_elder(sim_info) and CommonSpeciesUtils.is_human(sim_info)
def is_baby_human(sim_info: SimInfo) -> bool: """ Determine if a sim is a Baby Human. """ return CommonAgeUtils.is_baby(sim_info) and CommonSpeciesUtils.is_human(sim_info)
def _update_gender_options(self, sim_info: SimInfo): update_outfits = False if self._setting_utils.force_all_sims_to_male( ) and not CommonGenderUtils.is_male(sim_info): CommonGenderUtils.swap_gender(sim_info, update_gender_options=False) update_outfits = True elif self._setting_utils.force_all_sims_to_female( ) and not CommonGenderUtils.is_female(sim_info): CommonGenderUtils.swap_gender(sim_info, update_gender_options=False) update_outfits = True if CommonGenderUtils.is_male(sim_info): if CommonSpeciesUtils.is_pet(sim_info): if self._setting_utils.all_male_options.can_reproduce( ) and not CommonSimGenderOptionUtils.can_reproduce(sim_info): CommonSimGenderOptionUtils.update_can_reproduce( sim_info, True) if self._setting_utils.all_male_options.cannot_reproduce( ) and not CommonSimGenderOptionUtils.can_not_reproduce( sim_info): CommonSimGenderOptionUtils.update_can_reproduce( sim_info, False) elif CommonSpeciesUtils.is_human(sim_info): if self._setting_utils.all_male_options.use_toilet_standing( ) and not CommonSimGenderOptionUtils.uses_toilet_standing( sim_info): CommonSimGenderOptionUtils.update_toilet_usage( sim_info, True) update_outfits = True if self._setting_utils.all_male_options.use_toilet_sitting( ) and not CommonSimGenderOptionUtils.uses_toilet_sitting( sim_info): CommonSimGenderOptionUtils.update_toilet_usage( sim_info, False) update_outfits = True if self._setting_utils.all_male_options.prefer_menswear( ) and not CommonSimGenderOptionUtils.prefers_menswear( sim_info): CommonSimGenderOptionUtils.update_clothing_preference( sim_info, True) if self._setting_utils.all_male_options.prefer_womenswear( ) and not CommonSimGenderOptionUtils.prefers_womenswear( sim_info): CommonSimGenderOptionUtils.update_clothing_preference( sim_info, False) if self._setting_utils.all_male_options.force_masculine_body_frame( ) and not CommonSimGenderOptionUtils.has_masculine_frame( sim_info): CommonSimGenderOptionUtils.update_body_frame( sim_info, True) if self._setting_utils.all_male_options.force_feminine_body_frame( ) and not CommonSimGenderOptionUtils.has_feminine_frame( sim_info): CommonSimGenderOptionUtils.update_body_frame( sim_info, False) if self._setting_utils.all_male_options.can_impregnate( ) and not CommonSimGenderOptionUtils.can_impregnate(sim_info): CommonSimGenderOptionUtils.update_can_impregnate( sim_info, True) if self._setting_utils.all_male_options.cannot_impregnate( ) and not CommonSimGenderOptionUtils.can_not_impregnate( sim_info): CommonSimGenderOptionUtils.update_can_impregnate( sim_info, False) if self._setting_utils.all_male_options.can_be_impregnated( ) and not CommonSimGenderOptionUtils.can_be_impregnated( sim_info): CommonSimGenderOptionUtils.update_can_be_impregnated( sim_info, True) if self._setting_utils.all_male_options.cannot_be_impregnated( ) and not CommonSimGenderOptionUtils.can_not_be_impregnated( sim_info): CommonSimGenderOptionUtils.update_can_be_impregnated( sim_info, False) if self._setting_utils.all_male_options.force_breasts_on( ) and not CommonSimGenderOptionUtils.has_breasts(sim_info): CommonSimGenderOptionUtils.update_has_breasts( sim_info, True) update_outfits = True if self._setting_utils.all_male_options.force_breasts_off( ) and CommonSimGenderOptionUtils.has_breasts(sim_info): CommonSimGenderOptionUtils.update_has_breasts( sim_info, False) update_outfits = True elif CommonGenderUtils.is_female(sim_info): if CommonSpeciesUtils.is_pet(sim_info): if self._setting_utils.all_female_options.can_reproduce( ) and not CommonSimGenderOptionUtils.can_reproduce(sim_info): CommonSimGenderOptionUtils.update_can_reproduce( sim_info, True) if self._setting_utils.all_female_options.cannot_reproduce( ) and not CommonSimGenderOptionUtils.can_not_reproduce( sim_info): CommonSimGenderOptionUtils.update_can_reproduce( sim_info, False) elif CommonSpeciesUtils.is_human(sim_info): if self._setting_utils.all_female_options.use_toilet_standing( ) and not CommonSimGenderOptionUtils.uses_toilet_standing( sim_info): CommonSimGenderOptionUtils.update_toilet_usage( sim_info, True) update_outfits = True if self._setting_utils.all_female_options.use_toilet_sitting( ) and not CommonSimGenderOptionUtils.uses_toilet_sitting( sim_info): CommonSimGenderOptionUtils.update_toilet_usage( sim_info, False) update_outfits = True if self._setting_utils.all_female_options.prefer_menswear( ) and not CommonSimGenderOptionUtils.prefers_menswear( sim_info): CommonSimGenderOptionUtils.update_clothing_preference( sim_info, True) if self._setting_utils.all_female_options.prefer_womenswear( ) and not CommonSimGenderOptionUtils.prefers_womenswear( sim_info): CommonSimGenderOptionUtils.update_clothing_preference( sim_info, False) if self._setting_utils.all_female_options.force_masculine_body_frame( ) and not CommonSimGenderOptionUtils.has_masculine_frame( sim_info): CommonSimGenderOptionUtils.update_body_frame( sim_info, True) if self._setting_utils.all_female_options.force_feminine_body_frame( ) and not CommonSimGenderOptionUtils.has_feminine_frame( sim_info): CommonSimGenderOptionUtils.update_body_frame( sim_info, False) if self._setting_utils.all_female_options.can_impregnate( ) and not CommonSimGenderOptionUtils.can_impregnate(sim_info): CommonSimGenderOptionUtils.update_can_impregnate( sim_info, True) if self._setting_utils.all_female_options.cannot_impregnate( ) and not CommonSimGenderOptionUtils.can_not_impregnate( sim_info): CommonSimGenderOptionUtils.update_can_impregnate( sim_info, False) if self._setting_utils.all_female_options.can_be_impregnated( ) and not CommonSimGenderOptionUtils.can_be_impregnated( sim_info): CommonSimGenderOptionUtils.update_can_be_impregnated( sim_info, True) if self._setting_utils.all_female_options.cannot_be_impregnated( ) and not CommonSimGenderOptionUtils.can_not_be_impregnated( sim_info): CommonSimGenderOptionUtils.update_can_be_impregnated( sim_info, False) if self._setting_utils.all_female_options.force_breasts_on( ) and not CommonSimGenderOptionUtils.has_breasts(sim_info): CommonSimGenderOptionUtils.update_has_breasts( sim_info, True) update_outfits = True if self._setting_utils.all_female_options.force_breasts_off( ) and CommonSimGenderOptionUtils.has_breasts(sim_info): CommonSimGenderOptionUtils.update_has_breasts( sim_info, False) update_outfits = True if update_outfits: CommonOutfitUtils.update_outfits(sim_info)
def is_elder_human(sim_info: SimInfo) -> bool: """ Determine if a sim is an Elder Human. """ return CommonAgeUtils.is_elder(sim_info) and CommonSpeciesUtils.is_human(sim_info)
def is_baby_toddler_or_child_human(sim_info: SimInfo) -> bool: """ Determine if a sim is a Baby, Toddler, or Child Human. """ return CommonAgeUtils.is_baby_toddler_or_child(sim_info) and CommonSpeciesUtils.is_human(sim_info)
def is_child_or_teen_human(sim_info: SimInfo) -> bool: """ Determine if a sim is a Child or Teen Human. """ return CommonAgeUtils.is_child_or_teen(sim_info) and CommonSpeciesUtils.is_human(sim_info)
def is_enabled_for_interactions(self, sim_info: SimInfo) -> bool: """ Determine if a Sim is enabled for Custom Gender Setting interactions. """ return CommonSpeciesUtils.is_human(sim_info) or CommonSpeciesUtils.is_pet(sim_info)
def is_baby_or_toddler_human(sim_info: SimInfo) -> bool: """ Determine if a sim is a Baby or Toddler Human. """ return CommonAgeUtils.is_baby_or_toddler(sim_info) and CommonSpeciesUtils.is_human(sim_info)
def _is_valid_sim(_sim_info: SimInfo) -> bool: return CommonSpeciesUtils.is_human( _sim_info) and not CommonAgeUtils.is_baby(_sim_info)