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
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()
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
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
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)
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