def start_pregnancy(
            sim_info: SimInfo,
            partner_sim_info: SimInfo,
            pregnancy_origin: PregnancyOrigin = PregnancyOrigin.DEFAULT
    ) -> bool:
        """start_pregnancy(sim_info, partner_sim_info, pregnancy_origin=PregnancyOrigin.DEFAULT)

        Start a pregnancy between a Sim and a Partner Sim.

        :param sim_info: The Sim getting pregnant.
        :type sim_info: SimInfo
        :param partner_sim_info: The Sim that is getting the other Sim pregnant.
        :type partner_sim_info: SimInfo
        :param pregnancy_origin: The origin of the pregnancy. Default is PregnancyOrigin.DEFAULT.
        :type pregnancy_origin: PregnancyOrigin, optional
        :return: True, if the Sim is successfully impregnated by the Partner Sim. False, if not.
        :rtype: bool
        """
        if not CommonHouseholdUtils.has_free_household_slots(sim_info):
            return False
        pregnancy_tracker = CommonSimPregnancyUtils._get_pregnancy_tracker(
            sim_info)
        if pregnancy_tracker is None:
            return False
        pregnancy_tracker.start_pregnancy(sim_info,
                                          partner_sim_info,
                                          pregnancy_origin=pregnancy_origin)
        pregnancy_tracker.clear_pregnancy_visuals()
        CommonSimStatisticUtils.set_statistic_value(
            sim_info, CommonStatisticId.PREGNANCY, 1.0)
        return True
    def _setup_dialog(self, option_dialog: CommonChooseButtonOptionDialog,
                      on_close: Callable[[],
                                         None], on_previous: Callable[[],
                                                                      None],
                      reopen: Callable[[], None], **__) -> bool:
        def _operation_run(operation: S4CMSingleSimOperation):
            def _on_operation_complete(_: bool) -> None:
                reopen()

            operation.run(self._sim_info, on_completed=_on_operation_complete)

        is_pregnant = CommonSimPregnancyUtils.is_pregnant(self._sim_info)

        can_produce_pregnancy = S4CMSimPregnancyUtils.can_create_pregnancy(
            self._sim_info)

        create_pregnancy_disabled_text = None
        if is_pregnant:
            create_pregnancy_disabled_text = S4CMSimControlMenuStringId.SIM_IS_ALREADY_PREGNANT
        elif not can_produce_pregnancy:
            create_pregnancy_disabled_text = S4CMSimControlMenuStringId.SIM_IS_UNABLE_TO_CREATE_PREGNANCY
        elif not CommonHouseholdUtils.has_free_household_slots(self._sim_info):
            create_pregnancy_disabled_text = S4CMSimControlMenuStringId.TOO_MANY_SIMS_IN_HOUSEHOLD_ALREADY

        option_dialog.add_option(
            CommonDialogButtonOption(
                'CreatePregnancy',
                None,
                CommonDialogResponseOptionContext(
                    S4CMSimControlMenuStringId.CREATE_PREGNANCY,
                    disabled_text_identifier=create_pregnancy_disabled_text,
                    disabled_text_tokens=(self._sim_info, )),
                on_chosen=lambda *_, **__: _operation_run(
                    S4CMCreatePregnancyOp())))

        option_dialog.add_option(
            CommonDialogButtonOption(
                'InduceLabor',
                None,
                CommonDialogResponseOptionContext(
                    S4CMSimControlMenuStringId.INDUCE_LABOR,
                    disabled_text_identifier=S4CMSimControlMenuStringId.
                    SIM_IS_NOT_PREGNANT if not is_pregnant else None,
                    disabled_text_tokens=(self._sim_info, )),
                on_chosen=lambda *_, **__: _operation_run(S4CMInduceLaborOp()))
        )

        option_dialog.add_option(
            CommonDialogButtonOption(
                'ClearPregnancy',
                None,
                CommonDialogResponseOptionContext(
                    S4CMSimControlMenuStringId.CLEAR_PREGNANCY,
                    disabled_text_identifier=S4CMSimControlMenuStringId.
                    SIM_IS_NOT_PREGNANT if not is_pregnant else None,
                    disabled_text_tokens=(self._sim_info, )),
                on_chosen=lambda *_, **__: _operation_run(S4CMClearPregnancyOp(
                ))))
        return True
Exemple #3
0
 def start_pregnancy(sim_info: SimInfo, partner_sim_info: SimInfo) -> bool:
     """ Start a pregnancy between a Sim and a Partner Sim. """
     if not CommonHouseholdUtils.has_free_household_slots(sim_info):
         return False
     pregnancy_tracker = CommonSimPregnancyUtils._get_pregnancy_tracker(
         sim_info)
     if pregnancy_tracker is None:
         return False
     pregnancy_tracker.start_pregnancy(sim_info, partner_sim_info)
     pregnancy_tracker.clear_pregnancy_visuals()
     CommonSimStatisticUtils.set_statistic_value(
         sim_info, CommonStatisticId.PREGNANCY, 1.0)
     return True
    def start_pregnancy(sim_info: SimInfo, partner_sim_info: SimInfo) -> bool:
        """start_pregnancy(sim_info, partner_sim_info)

        Start a pregnancy between a Sim and a Partner Sim.

        :param sim_info: The Sim getting pregnant.
        :type sim_info: SimInfo
        :param partner_sim_info: The Sim that is getting the other Sim pregnant.
        :type partner_sim_info: SimInfo
        :return: True, if successful. False, if not.
        :rtype: bool
        """
        if not CommonHouseholdUtils.has_free_household_slots(sim_info):
            return False
        pregnancy_tracker = CommonSimPregnancyUtils._get_pregnancy_tracker(
            sim_info)
        if pregnancy_tracker is None:
            return False
        pregnancy_tracker.start_pregnancy(sim_info, partner_sim_info)
        pregnancy_tracker.clear_pregnancy_visuals()
        CommonSimStatisticUtils.set_statistic_value(
            sim_info, CommonStatisticId.PREGNANCY, 1.0)
        return True