diff --git a/io_scene_psk_psa/__init__.py b/io_scene_psk_psa/__init__.py index 62a5045..bb99054 100644 --- a/io_scene_psk_psa/__init__.py +++ b/io_scene_psk_psa/__init__.py @@ -1,6 +1,41 @@ from bpy.app.handlers import persistent -if 'bpy' in locals(): +from .shared import data as shared_data, types as shared_types, helpers as shared_helpers +from .shared import dfs as shared_dfs, ui as shared_ui +from .psk import ( + builder as psk_builder, + data as psk_data, + importer as psk_importer, + properties as psk_properties, + writer as psk_writer, +) +from .psk import reader as psk_reader, ui as psk_ui +from .psk.export import ( + operators as psk_export_operators, + properties as psk_export_properties, + ui as psk_export_ui, +) +from .psk.import_ import operators as psk_import_operators + +from .psa import ( + config as psa_config, + data as psa_data, + writer as psa_writer, + reader as psa_reader, + builder as psa_builder, + importer as psa_importer, +) +from .psa.export import ( + properties as psa_export_properties, + ui as psa_export_ui, + operators as psa_export_operators, +) +from .psa.import_ import operators as psa_import_operators +from .psa.import_ import ui as psa_import_ui, properties as psa_import_properties + +_needs_reload = 'bpy' in locals() + +if _needs_reload: import importlib importlib.reload(shared_data) @@ -33,58 +68,10 @@ if 'bpy' in locals(): importlib.reload(psa_import_properties) importlib.reload(psa_import_operators) importlib.reload(psa_import_ui) -else: - from .shared import data as shared_data, types as shared_types, helpers as shared_helpers - from .shared import dfs as shared_dfs, ui as shared_ui - from .psk import ( - builder as psk_builder, - data as psk_data, - importer as psk_importer, - properties as psk_properties, - writer as psk_writer, - ) - from .psk import reader as psk_reader, ui as psk_ui - from .psk.export import ( - operators as psk_export_operators, - properties as psk_export_properties, - ui as psk_export_ui, - ) - from .psk.import_ import operators as psk_import_operators - - from .psa import ( - config as psa_config, - data as psa_data, - writer as psa_writer, - reader as psa_reader, - builder as psa_builder, - importer as psa_importer, - ) - from .psa.export import ( - properties as psa_export_properties, - ui as psa_export_ui, - operators as psa_export_operators, - ) - from .psa.import_ import operators as psa_import_operators - from .psa.import_ import ui as psa_import_ui, properties as psa_import_properties import bpy from bpy.props import PointerProperty -classes = shared_types.classes + \ - shared_ui.classes + \ - psk_properties.classes + \ - psk_ui.classes + \ - psk_import_operators.classes + \ - psk_export_properties.classes + \ - psk_export_operators.classes + \ - psk_export_ui.classes + \ - psa_export_properties.classes + \ - psa_export_operators.classes + \ - psa_export_ui.classes + \ - psa_import_properties.classes + \ - psa_import_operators.classes + \ - psa_import_ui.classes - def psk_export_menu_func(self, context): self.layout.operator(psk_export_operators.PSK_OT_export.bl_idname, text='Unreal PSK (.psk)') @@ -102,9 +89,26 @@ def psa_import_menu_func(self, context): self.layout.operator(psa_import_operators.PSA_OT_import.bl_idname, text='Unreal PSA (.psa)') +_modules = ( + shared_types, + shared_ui, + psk_properties, + psk_ui, + psk_import_operators, + psk_export_properties, + psk_export_operators, + psk_export_ui, + psa_export_properties, + psa_export_operators, + psa_export_ui, + psa_import_properties, + psa_import_operators, + psa_import_ui +) + def register(): - for cls in classes: - bpy.utils.register_class(cls) + for module in _modules: + module.register() bpy.types.TOPBAR_MT_file_export.append(psk_export_menu_func) bpy.types.TOPBAR_MT_file_import.append(psk_import_menu_func) bpy.types.TOPBAR_MT_file_export.append(psa_export_menu_func) @@ -128,8 +132,8 @@ def unregister(): bpy.types.TOPBAR_MT_file_import.remove(psk_import_menu_func) bpy.types.TOPBAR_MT_file_export.remove(psa_export_menu_func) bpy.types.TOPBAR_MT_file_import.remove(psa_import_menu_func) - for cls in reversed(classes): - bpy.utils.unregister_class(cls) + for module in reversed(_modules): + module.unregister() if __name__ == '__main__': diff --git a/io_scene_psk_psa/psa/export/operators.py b/io_scene_psk_psa/psa/export/operators.py index ced6e17..43e3088 100644 --- a/io_scene_psk_psa/psa/export/operators.py +++ b/io_scene_psk_psa/psa/export/operators.py @@ -658,10 +658,14 @@ class PSA_OT_export_bone_collections_deselect_all(Operator): return {'FINISHED'} -classes = ( +_classes = ( PSA_OT_export, PSA_OT_export_actions_select_all, PSA_OT_export_actions_deselect_all, PSA_OT_export_bone_collections_select_all, PSA_OT_export_bone_collections_deselect_all, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) + diff --git a/io_scene_psk_psa/psa/export/properties.py b/io_scene_psk_psa/psa/export/properties.py index 26c512e..eed2cc0 100644 --- a/io_scene_psk_psa/psa/export/properties.py +++ b/io_scene_psk_psa/psa/export/properties.py @@ -262,10 +262,14 @@ def filter_sequences(pg: PSA_PG_export, sequences) -> List[int]: return flt_flags -classes = ( +_classes = ( PSA_PG_export_action_list_item, PSA_PG_export_timeline_markers, PSA_PG_export_nla_strip_list_item, PSA_PG_export_active_action_list_item, PSA_PG_export, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) + diff --git a/io_scene_psk_psa/psa/export/ui.py b/io_scene_psk_psa/psa/export/ui.py index b7d8fe9..62e4121 100644 --- a/io_scene_psk_psa/psa/export/ui.py +++ b/io_scene_psk_psa/psa/export/ui.py @@ -52,6 +52,10 @@ class PSA_UL_export_sequences(UIList): return flt_flags, flt_neworder -classes = ( +_classes = ( PSA_UL_export_sequences, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) + diff --git a/io_scene_psk_psa/psa/import_/operators.py b/io_scene_psk_psa/psa/import_/operators.py index 0169d91..d24faa4 100644 --- a/io_scene_psk_psa/psa/import_/operators.py +++ b/io_scene_psk_psa/psa/import_/operators.py @@ -438,7 +438,7 @@ class PSA_FH_import(FileHandler): # TODO: rename and add handling for PSA expor return context.area and context.area.type == 'VIEW_3D' -classes = ( +_classes = ( PSA_OT_import_sequences_select_all, PSA_OT_import_sequences_deselect_all, PSA_OT_import_sequences_select_from_text, @@ -447,3 +447,6 @@ classes = ( PSA_OT_import_drag_and_drop, PSA_FH_import, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) diff --git a/io_scene_psk_psa/psa/import_/properties.py b/io_scene_psk_psa/psa/import_/properties.py index 83b1087..171c5b7 100644 --- a/io_scene_psk_psa/psa/import_/properties.py +++ b/io_scene_psk_psa/psa/import_/properties.py @@ -175,9 +175,12 @@ def get_visible_sequences(pg: PSA_PG_import, sequences) -> List[PSA_PG_import_ac return visible_sequences -classes = ( +_classes = ( PSA_PG_import_action_list_item, PSA_PG_bone, PSA_PG_data, PSA_PG_import, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) diff --git a/io_scene_psk_psa/psa/import_/ui.py b/io_scene_psk_psa/psa/import_/ui.py index bf4f7ce..40da274 100644 --- a/io_scene_psk_psa/psa/import_/ui.py +++ b/io_scene_psk_psa/psa/import_/ui.py @@ -42,8 +42,11 @@ class PSA_UL_import_actions(PSA_UL_sequences_mixin): pass -classes = ( +_classes = ( PSA_UL_sequences, PSA_UL_import_sequences, PSA_UL_import_actions, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) diff --git a/io_scene_psk_psa/psk/export/operators.py b/io_scene_psk_psa/psk/export/operators.py index a9e5c86..529022b 100644 --- a/io_scene_psk_psa/psk/export/operators.py +++ b/io_scene_psk_psa/psk/export/operators.py @@ -509,7 +509,7 @@ class PSK_OT_export(Operator, ExportHelper): return {'FINISHED'} -classes = ( +_classes = ( PSK_OT_material_list_move_up, PSK_OT_material_list_move_down, PSK_OT_export, @@ -521,3 +521,6 @@ classes = ( PSK_OT_material_list_name_move_down, PSK_OT_material_list_name_add, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) diff --git a/io_scene_psk_psa/psk/export/properties.py b/io_scene_psk_psa/psk/export/properties.py index d13bee1..ab32bd7 100644 --- a/io_scene_psk_psa/psk/export/properties.py +++ b/io_scene_psk_psa/psk/export/properties.py @@ -67,8 +67,12 @@ class PSK_PG_export(PropertyGroup, PskExportMixin): pass -classes = ( +_classes = ( PSK_PG_material_list_item, PSK_PG_material_name_list_item, PSK_PG_export, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) + diff --git a/io_scene_psk_psa/psk/export/ui.py b/io_scene_psk_psa/psk/export/ui.py index 37645ad..459316b 100644 --- a/io_scene_psk_psa/psk/export/ui.py +++ b/io_scene_psk_psa/psk/export/ui.py @@ -10,6 +10,9 @@ class PSK_UL_material_names(UIList): row.prop(item, 'material_name', text='', emboss=False, icon_value=icon_value, icon='BLANK1' if icon_value == 0 else 'NONE') -classes = ( +_classes = ( PSK_UL_material_names, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) diff --git a/io_scene_psk_psa/psk/import_/operators.py b/io_scene_psk_psa/psk/import_/operators.py index 1c2a9f8..2ffa1ab 100644 --- a/io_scene_psk_psa/psk/import_/operators.py +++ b/io_scene_psk_psa/psk/import_/operators.py @@ -171,8 +171,12 @@ class PSK_FH_import(FileHandler): return context.area and context.area.type == 'VIEW_3D' -classes = ( +_classes = ( PSK_OT_import, PSK_OT_import_drag_and_drop, PSK_FH_import, + PSK_OT_create_bones_from_selected_objects, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) diff --git a/io_scene_psk_psa/psk/properties.py b/io_scene_psk_psa/psk/properties.py index e1a8619..2b56f65 100644 --- a/io_scene_psk_psa/psk/properties.py +++ b/io_scene_psk_psa/psk/properties.py @@ -145,6 +145,10 @@ class PskImportMixin: ) -classes = ( +_classes = ( PSX_PG_material, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) + diff --git a/io_scene_psk_psa/psk/ui.py b/io_scene_psk_psa/psk/ui.py index a3577b0..58499f4 100644 --- a/io_scene_psk_psa/psk/ui.py +++ b/io_scene_psk_psa/psk/ui.py @@ -23,6 +23,10 @@ class PSK_PT_material(Panel): col.prop(material.psk, 'mesh_triangle_bit_flags', expand=True, text='Flags') -classes = ( +_classes = ( PSK_PT_material, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) + diff --git a/io_scene_psk_psa/shared/types.py b/io_scene_psk_psa/shared/types.py index ac497da..5e19422 100644 --- a/io_scene_psk_psa/shared/types.py +++ b/io_scene_psk_psa/shared/types.py @@ -154,10 +154,13 @@ class PSX_PG_scene_export(PropertyGroup, TransformMixin): pass -classes = ( +_classes = ( PSX_PG_scene_export, PSX_PG_action_export, PSX_PG_bone_collection_list_item, PSX_UL_bone_collection_list, PSX_PT_action, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) diff --git a/io_scene_psk_psa/shared/ui.py b/io_scene_psk_psa/shared/ui.py index f8be4b1..ab8b80b 100644 --- a/io_scene_psk_psa/shared/ui.py +++ b/io_scene_psk_psa/shared/ui.py @@ -50,6 +50,10 @@ class PSX_PT_scene(Panel): flow.prop(psx_export, 'up_axis') -classes = ( +_classes = ( PSX_PT_scene, ) + +from bpy.utils import register_classes_factory +register, unregister = register_classes_factory(_classes) +