def get_sim_interaction_log(interaction, clear=False): if interaction.sim is not None: all_interaction_logs = setdefault_callable(interaction_archive, interaction.sim, weakref.WeakKeyDictionary) interaction_log = setdefault_callable(all_interaction_logs, interaction, InteractionArchiveGSILog) if clear: del all_interaction_logs[interaction] return interaction_log
def get_path_route_events_log(path, clear=False): if path.sim is not None: all_path_logs = setdefault_callable(path_events_archive, path.sim.id, dict) path_log = setdefault_callable(all_path_logs, id(path), PathRouteEventsArchiveGSILog) if clear: del path_events_archive[path.sim.id][id(path)] return path_log
def get_sim_transition_log(sim, interaction=None): all_transition_logs = setdefault_callable(posture_transition_logs, sim, weakref.WeakKeyDictionary) if interaction is None: interaction_ref = current_transition_interactions.get(sim, None) if interaction_ref is None: return interaction = interaction_ref() if interaction is None: del current_transition_interactions[sim] return posture_log = setdefault_callable(all_transition_logs, interaction, PostureTransitionGSILog) return posture_log
def __init__(self, interaction, **kwargs): super().__init__(**kwargs) self._sim = interaction.sim self._autonomy_modifier_handles = weakref.WeakKeyDictionary() autonomy_modifiers = interaction.target.autonomy_modifiers for modifier in autonomy_modifiers: subject = self._sim if modifier.subject: subject = interaction.get_participant(modifier.subject) if subject is not None: handle = subject.add_statistic_modifier( modifier, interaction_modifier=True) setdefault_callable(self._autonomy_modifier_handles, subject, list).append(handle)
def partition_boundary_on_params(boundary_to_params): ks_to_vs = {} for params in set(itertools.chain(*boundary_to_params.values())): for (k, v) in params.items(): vs = setdefault_callable(ks_to_vs, k, set) vs.add(v) def get_matching_params_excluding_key(k, v): results = [] for (boundary, param_sets) in boundary_to_params.items(): valid_params = set() for params in param_sets: vp = params.get(k, v) if vp == v: valid_params.add(sims4.collections.frozendict({kf: vf for (kf, vf) in params.items() if kf != k})) results.append((boundary, valid_params)) return results unique_keys = set() for (k, vs) in ks_to_vs.items(): matching_params = None for v in vs: matching_params_v = get_matching_params_excluding_key(k, v) if matching_params is None: matching_params = matching_params_v elif matching_params != matching_params_v: unique_keys.add(k) break boundary_param_sets = {boundary: unique_keys for boundary in boundary_to_params} return boundary_param_sets
def reserve(self, sim, owner, multi=False): use_list = self._reservations_multi if multi else self._reservations sim_list = setdefault_callable(use_list, sim, WeakSet) sim_list.add(owner) self._use_list_changed_callbacks(user=sim, added=True)
def created_objects(cls): created_objects = cls._zone_to_cls_to_created_objects.setdefault( services.current_zone(), {}) return setdefault_callable(created_objects, cls, WeakSet)
def get_greeting_log(sim_id, clear=False): greeting_log = setdefault_callable(greeting_archive, sim_id, GreetingsArchiveLog) if clear: del greeting_archive[sim_id] return greeting_log
def get_animation_log(arb, clear=False): animation_log = setdefault_callable(animation_archive, id(arb), AnimationArchiveGSILog) if clear: del animation_archive[id(arb)] return animation_log
def created_objects(cls): created_objects = cls._zone_to_cls_to_created_objects.setdefault(services.current_zone(), {}) return setdefault_callable(created_objects, cls, WeakSet)