def split_by_net_role(obj):
    # Actor Mixer和Virtual Folder无法被放在SwitchContainer下面
    if obj['type'] == 'ActorMixer' or obj['type'] == 'Folder':
        return
    original_name = obj['name']
    # 拆分结构并重组到SwitchContainer下面
    old_parent = WaapiTools.get_parent_objects(obj, False)
    new_parent = WaapiTools.create_object(original_name + '_Temp',
                                          'SwitchContainer', old_parent,
                                          'rename')
    WaapiTools.move_object(obj, new_parent)
    obj_2p = WaapiTools.copy_object(obj, new_parent)
    obj_3p = WaapiTools.copy_object(obj, new_parent)
    WaapiTools.rename_object(obj, original_name + '_1P')
    WaapiTools.rename_object(obj_2p, original_name + '_2P')
    WaapiTools.rename_object(obj_3p, original_name + '_3P')
    WaapiTools.rename_object(new_parent, original_name)
    # 分配bus
    original_bus = WaapiTools.get_object_property(obj, '@OutputBus')
    original_bus_name = original_bus['name']
    bus_1p = WaapiTools.find_object_by_name(original_bus_name + '_1P', 'Bus')
    if bus_1p is None:
        bus_1p = WaapiTools.create_object(original_bus_name + '_1P', 'Bus',
                                          original_bus, 'replace')
    bus_2p = WaapiTools.find_object_by_name(original_bus_name + '_2P', 'Bus')
    if bus_2p is None:
        bus_2p = WaapiTools.create_object(original_bus_name + '_2P', 'Bus',
                                          original_bus, 'replace')
    bus_3p = WaapiTools.find_object_by_name(original_bus_name + '_3P', 'Bus')
    if bus_3p is None:
        bus_3p = WaapiTools.create_object(original_bus_name + '_3P', 'Bus',
                                          original_bus, 'replace')
    WaapiTools.set_object_property(obj, 'OverrideOutput', True)
    WaapiTools.set_object_reference(obj, 'OutputBus', bus_1p)
    WaapiTools.set_object_property(obj_2p, 'OverrideOutput', True)
    WaapiTools.set_object_reference(obj_2p, 'OutputBus', bus_2p)
    WaapiTools.set_object_property(obj_3p, 'OverrideOutput', True)
    WaapiTools.set_object_reference(obj_3p, 'OutputBus', bus_3p)
    net_role_switch_group = WaapiTools.find_object_by_name(
        'Net_Role', 'SwitchGroup')
    if net_role_switch_group is None:
        return
    WaapiTools.set_object_reference(new_parent, 'SwitchGroupOrStateGroup',
                                    net_role_switch_group)
    for switch_obj in WaapiTools.get_children_objects(net_role_switch_group,
                                                      False):
        if '1P' in switch_obj['name']:
            assign_switch_mapping(obj, switch_obj)
            WaapiTools.set_object_reference(new_parent, 'DefaultSwitchOrState',
                                            switch_obj)
        if '2P' in switch_obj['name']:
            assign_switch_mapping(obj_2p, switch_obj)
        if '3P' in switch_obj['name']:
            assign_switch_mapping(obj_3p, switch_obj)
 def find_matching_bank(self, obj):
     # 在每一种排列组合中搜索
     for permutation in self.permutations:
         match = True
         for item in permutation:
             if item not in obj['path']:
                 match = False
                 break
         # 找到符合名称的Bank
         if match:
             bank_name = self.get_bank_name(permutation)
             bank = WaapiTools.find_object_by_name(bank_name, 'SoundBank')
             # Wwise搜索会包含所有带有关键词的,需要精确搜索
             if bank and bank['name'] == bank_name:
                 set_args = {
                     'soundbank': bank['id'],
                     'operation': 'add',
                     'inclusions': [{
                         'object': obj['id'],
                         'filter': ['media']
                     }]
                 }
                 WaapiTools.Client.call(
                     'ak.wwise.core.soundbank.setInclusions', set_args)
             return True
     # 每一个组合都不符合,在下级继续找
     return False
def temp_tool(objects: list):
    for obj in objects:
        parent = WaapiTools.get_parent_objects(obj, False)
        new_obj = WaapiTools.create_object('Tail', 'SwitchContainer', parent,
                                           'rename')
        WaapiTools.move_object(obj, new_obj)
        indoor_switch_group = WaapiTools.find_object_by_name(
            'Indoor_Outdoor', 'SwitchGroup')
        WaapiTools.set_object_reference(new_obj, 'SwitchGroupOrStateGroup',
                                        indoor_switch_group)
        outdoor_switch = WaapiTools.get_children_objects(
            indoor_switch_group, False)[1]
        LogicContainerTools.assign_switch_mapping(obj, outdoor_switch)
        WaapiTools.set_object_reference(new_obj, 'DefaultSwitchOrState',
                                        outdoor_switch)

        if parent['type'] == 'SwitchContainer':
            loop_switch_group = WaapiTools.find_object_by_name(
                'Gun_Shot_Loop_Mode', 'SwitchGroup')
            end_switch = WaapiTools.get_children_objects(
                loop_switch_group, False)[0]
            LogicContainerTools.assign_switch_mapping(new_obj, end_switch)
def create_or_add_to_bank(obj):
    # 寻找或创建同名bank
    bank = WaapiTools.find_object_by_name(obj['name'], 'SoundBank')
    if bank is None:
        bank = create_sound_bank_by_name(obj['name'])

    # 为bank添加内容
    set_args = {
        'soundbank':
        bank['id'],
        'operation':
        'add',
        'inclusions': [{
            'object': obj['id'],
            'filter': ['events', 'structures', 'media']
        }]
    }
    WaapiTools.Client.call('ak.wwise.core.soundbank.setInclusions', set_args)