Blender_bevy_components_wor.../tools/blenvy/__init__.py

197 lines
7.1 KiB
Python
Raw Permalink Normal View History

bl_info = {
"name": "blenvy",
"author": "kaosigh",
"version": (0, 1, 0, "alpha.1"),
"blender": (3, 4, 0),
"location": "File > Import-Export",
"description": "tooling for the Bevy engine",
"warning": "",
"wiki_url": "https://github.com/kaosat-dev/Blenvy",
"tracker_url": "https://github.com/kaosat-dev/Blenvy/issues/new",
"category": "Import-Export"
}
import bpy
from bpy.app.handlers import persistent
from bpy.props import (StringProperty)
# components management
from .add_ons.bevy_components.components.operators import BLENVY_OT_component_copy, BLENVY_OT_component_fix, BLENVY_OT_component_rename_component, BLENVY_OT_component_remove_from_all_items, BLENVY_OT_component_remove, BLENVY_OT_component_from_custom_property, BLENVY_OT_component_paste, BLENVY_OT_component_add, RenameHelper, BLENVY_OT_component_toggle_visibility, BLENVY_OT_components_refresh_custom_properties_all, BLENVY_OT_components_refresh_custom_properties_current, BLENVY_OT_components_refresh_propgroups_all, BLENVY_OT_components_refresh_propgroups_current
from .add_ons.bevy_components.registry.registry import ComponentsRegistry,MissingBevyType
from .add_ons.bevy_components.registry.operators import (BLENVY_OT_components_registry_reload, BLENVY_OT_components_registry_browse_schema)
from .add_ons.bevy_components.registry.ui import (BLENVY_PT_components_missing_types_panel, BLENVY_UL_components_missing_types)
from .add_ons.bevy_components.components.metadata import (ComponentMetadata, ComponentsMeta)
from .add_ons.bevy_components.components.lists import BLENVY_OT_component_list_actions
from .add_ons.bevy_components.components.maps import BLENVY_OT_component_map_actions
from .add_ons.bevy_components.components.ui import BLENVY_PT_components_panel, BLENVY_PT_component_tools_panel
from .add_ons.bevy_components.settings import ComponentsSettings
from .add_ons.bevy_components.utils import BLENVY_OT_item_select
# auto export
from .add_ons.auto_export import gltf_post_export_callback
from .add_ons.auto_export.common.tracker import AutoExportTracker
from .add_ons.auto_export.settings import AutoExportSettings
# asset management
from .assets.ui import BLENVY_PT_assets_panel
from .assets.assets_registry import Asset, AssetsRegistry
from .assets.operators import BLENVY_OT_assets_browse, BLENVY_OT_assets_add, BLENVY_OT_assets_remove, BLENVY_OT_assets_generate_files
# levels management
from .levels.ui import BLENVY_PT_levels_panel
from .levels.operators import BLENVY_OT_level_select
# blueprints management
from .blueprints.ui import BLENVY_PT_blueprints_panel
from .blueprints.blueprints_registry import BlueprintsRegistry
from .blueprints.operators import BLENVY_OT_blueprint_select
# blenvy core
from .core.blenvy_manager import BlenvyManager
from .core.operators import BLENVY_OT_tooling_switch, BLENVY_OT_configuration_switch, BLENVY_OT_configuration_reset
from .core.ui.ui import (BLENVY_PT_SidePanel)
from .core.ui.scenes_list import BLENVY_OT_scenes_list_actions
from .core.ui.menus_and_shortcuts import BLENVY_OT_ui_blueprint_create, BLENVY_OT_ui_blueprint_edit_start, BLENVY_OT_ui_blueprint_edit_end, BLENVY_OT_ui_blueprint_create_or_edit, edit_or_create_blueprint_menu
from .assets.assets_folder_browser import BLENVY_OT_assets_paths_browse
# this needs to be here, as it is how Blender's gltf exporter callbacks are defined, at the add-on root level
def glTF2_post_export_callback(data):
gltf_post_export_callback(data)
classes = [
# common/core
BLENVY_OT_scenes_list_actions,
BLENVY_OT_assets_paths_browse,
# blenvy
BLENVY_PT_SidePanel,
# bevy components
ComponentsSettings,
BLENVY_OT_component_add,
BLENVY_OT_component_copy,
BLENVY_OT_component_paste,
BLENVY_OT_component_remove,
BLENVY_OT_component_remove_from_all_items,
BLENVY_OT_component_fix,
BLENVY_OT_component_rename_component,
RenameHelper,
BLENVY_OT_component_from_custom_property,
BLENVY_OT_component_toggle_visibility,
ComponentMetadata,
ComponentsMeta,
MissingBevyType,
ComponentsRegistry,
BLENVY_OT_components_registry_browse_schema,
BLENVY_OT_components_registry_reload,
BLENVY_OT_components_refresh_custom_properties_all,
BLENVY_OT_components_refresh_custom_properties_current,
BLENVY_OT_components_refresh_propgroups_all,
BLENVY_OT_components_refresh_propgroups_current,
BLENVY_OT_item_select,
BLENVY_PT_components_panel,
BLENVY_PT_component_tools_panel,
BLENVY_UL_components_missing_types,
BLENVY_PT_components_missing_types_panel,
BLENVY_OT_component_list_actions,
BLENVY_OT_component_map_actions,
# gltf auto export
AutoExportTracker,
AutoExportSettings,
# blenvy
BlenvyManager,
BLENVY_OT_tooling_switch,
BLENVY_OT_configuration_switch,
BLENVY_OT_configuration_reset,
Asset,
AssetsRegistry,
BLENVY_OT_assets_add,
BLENVY_OT_assets_remove,
BLENVY_OT_assets_generate_files,
BLENVY_OT_assets_browse,
BLENVY_PT_assets_panel,
BLENVY_PT_levels_panel,
BLENVY_OT_level_select,
BlueprintsRegistry,
BLENVY_OT_blueprint_select,
BLENVY_PT_blueprints_panel,
BLENVY_OT_ui_blueprint_create,
BLENVY_OT_ui_blueprint_edit_start,
BLENVY_OT_ui_blueprint_edit_end,
BLENVY_OT_ui_blueprint_create_or_edit
]
@persistent
def post_update(scene, depsgraph):
bpy.context.window_manager.auto_export_tracker.deps_post_update_handler( scene, depsgraph)
@persistent
def post_save(scene, depsgraph):
bpy.context.window_manager.auto_export_tracker.save_handler( scene, depsgraph)
@persistent
def post_load(file_name):
blenvy = bpy.context.window_manager.blenvy
if blenvy is not None:
blenvy.load_settings()
def init_keymaps():
window_manager = bpy.context.window_manager
if window_manager.keyconfigs.addon:
km = window_manager.keyconfigs.addon.keymaps.new(name='3D View', space_type='VIEW_3D')
kmi = [
km.keymap_items.new(BLENVY_OT_ui_blueprint_create_or_edit.bl_idname, "F", "PRESS", shift=True),
]
return km, kmi
addon_keymaps = []
def register():
for cls in classes:
bpy.utils.register_class(cls)
bpy.app.handlers.load_post.append(post_load)
# for some reason, adding these directly to the tracker class in register() do not work reliably
bpy.app.handlers.depsgraph_update_post.append(post_update)
bpy.app.handlers.save_post.append(post_save)
bpy.types.VIEW3D_MT_object.append(edit_or_create_blueprint_menu)
bpy.types.VIEW3D_MT_object_context_menu.append(edit_or_create_blueprint_menu)
if not bpy.app.background:
km, kmi = init_keymaps()
for k in kmi:
k.active = True
addon_keymaps.append((km, k))
def unregister():
for cls in classes:
bpy.utils.unregister_class(cls)
bpy.app.handlers.load_post.remove(post_load)
bpy.app.handlers.depsgraph_update_post.remove(post_update)
bpy.app.handlers.save_post.remove(post_save)
for km, kmi in addon_keymaps:
km.keymap_items.remove(kmi)
addon_keymaps.clear()
bpy.types.VIEW3D_MT_object.remove(edit_or_create_blueprint_menu)
bpy.types.VIEW3D_MT_object_context_menu.remove(edit_or_create_blueprint_menu)