def build_msg(self, **kwargs):
     message = super().build_msg(**kwargs)
     message.dialog_type = Dialog_pb2.UiDialogMessage.MULTI_PICKER
     if self.text_input is not None:
         text_input_overrides = {}
         (text_name, text) = self.existing_text
         text_input_overrides = {}
         if text:
             text_input_overrides[text_name] = lambda *_, **__: LocalizationHelperTuning.get_raw_text(text)
         self.text_input.build_msg(self, message, name=text_name, text_input_overrides=text_input_overrides if text_input_overrides else None)
     context = InteractionContext(self._owner(), InteractionSource.SCRIPT, Priority.Low)
     multi_picker_msg = Dialog_pb2.UiDialogMultiPicker()
     for picker_data in self.pickers:
         aop = AffordanceObjectPair(picker_data.picker_interaction, None, picker_data.picker_interaction, None)
         result = aop.interaction_factory(context)
         if not result:
             continue
         interaction = result.interaction
         picker_tuning = picker_data.picker_interaction.picker_dialog
         if picker_tuning.title is None:
             title = lambda *_, **__: interaction.get_name(apply_name_modifiers=False)
         else:
             title = self.picker_dialog.title
         dialog = picker_tuning(self._owner(), title=title, resolver=interaction.get_resolver(context=context))
         interaction._setup_dialog(dialog)
         dialog.add_listener(interaction._on_picker_selected)
         self._picker_dialogs[dialog.dialog_id] = dialog
         new_message = dialog.build_msg()
         multi_picker_item = multi_picker_msg.multi_picker_items.add()
         multi_picker_item.picker_data = new_message.picker_data
         multi_picker_item.picker_id = new_message.dialog_id
         multi_picker_item.disabled_tooltip = picker_data.disabled_tooltip
     message.multi_picker_data = multi_picker_msg
     return message
Пример #2
0
 def create_route_interaction(self):
     if self.owner.is_sim:
         aop = AffordanceObjectPair(AnimationInteraction, None, AnimationInteraction, None, hide_unrelated_held_props=False)
         context = InteractionContext(self.owner, InteractionContext.SOURCE_SCRIPT, Priority.High)
         self._route_interaction = aop.interaction_factory(context).interaction
     else:
         self._animation_context = AnimationContext()
         self._animation_context.add_ref(self._current_path)
     for slave_data in self.get_routing_slave_data():
         slave_data.slave.routing_component.create_route_interaction()
Пример #3
0
 def start_overlay(self):
     aop = AffordanceObjectPair(AnimationInteraction,
                                None,
                                AnimationInteraction,
                                None,
                                hide_unrelated_held_props=False)
     context = InteractionContext(self._sim,
                                  InteractionContext.SOURCE_SCRIPT,
                                  Priority.High)
     self._overlay_interaction = aop.interaction_factory(
         context).interaction
Пример #4
0
 def get_comfortable_interaction(self):
     sim = self.owner
     if not sim.posture.unconstrained:
         return
     if sim.get_main_group():
         return
     affordance = interactions.utils.satisfy_constraint_interaction.SatisfyConstraintSuperInteraction
     aop = AffordanceObjectPair(affordance, None, affordance, None, constraint_to_satisfy=STAND_OR_SIT_CONSTRAINT, route_fail_on_transition_fail=False, name_override='Satisfy[GetComfortable]', allow_posture_changes=True)
     context = InteractionContext(sim, InteractionContext.SOURCE_GET_COMFORTABLE, Priority.Low, insert_strategy=QueueInsertStrategy.NEXT, must_run_next=True, cancel_if_incompatible_in_queue=True)
     execute_result = aop.interaction_factory(context)
     return execute_result.interaction
Пример #5
0
 def _get_carried_linked_source_interaction(self):
     for super_affordance in self.sim.super_affordances():
         if super_affordance.provided_posture_type is self.carried_linked_posture_type:
             if super_affordance._provided_posture_type_species == self.target.species:
                 break
     else:
         raise RuntimeError(
             '{} does not provide an appropriate affordance to {}'.format(
                 self.sim, self))
     context = InteractionContext(self.target,
                                  InteractionContext.SOURCE_SCRIPT,
                                  Priority.Low)
     aop = AffordanceObjectPair(super_affordance,
                                self.sim,
                                super_affordance,
                                None,
                                force_inertial=True)
     result = aop.interaction_factory(context)
     if not result:
         raise RuntimeError(
             "Unable to execute 'Be Carried' posture providing AOP: {} ({})"
             .format(aop, result.reason))
     return result.interaction
 def get_target_si(self, interaction):
     sim = interaction.carry_target or interaction.target
     if self.affordance is None:
         interaction = sim.create_default_si()
     else:
         for running_interaction in sim.get_all_running_and_queued_interactions(
         ):
             if not running_interaction.transition is None:
                 if running_interaction.is_finishing:
                     continue
                 if running_interaction.get_interaction_type(
                 ) is not self.affordance:
                     continue
                 if running_interaction.target is not interaction.target:
                     continue
                 return (running_interaction, TestResult.TRUE)
         context = interaction.context.clone_for_sim(sim,
                                                     carry_target=None,
                                                     continuation_id=None)
         aop = AffordanceObjectPair(self.affordance, interaction.target,
                                    self.affordance, None)
         interaction = aop.interaction_factory(context).interaction
     return (interaction, TestResult.TRUE)
Пример #7
0
 def get_comfortable_interaction(self):
     sim = self.owner
     if not sim.posture.unconstrained:
         return
     if sim.get_main_group():
         return
     affordance = interactions.utils.satisfy_constraint_interaction.SatisfyConstraintSuperInteraction
     aop = AffordanceObjectPair(
         affordance,
         None,
         affordance,
         None,
         constraint_to_satisfy=STAND_OR_SIT_CONSTRAINT,
         route_fail_on_transition_fail=False,
         name_override='Satisfy[GetComfortable]',
         allow_posture_changes=True)
     context = InteractionContext(sim,
                                  InteractionContext.SOURCE_GET_COMFORTABLE,
                                  Priority.Low,
                                  insert_strategy=QueueInsertStrategy.NEXT,
                                  must_run_next=True,
                                  cancel_if_incompatible_in_queue=True)
     execute_result = aop.interaction_factory(context)
     return execute_result.interaction