Blender_bevy_components_wor.../tools/blenvy/__init__.py
kaosat.dev c282dab585 feat(Blenvy): another big cleanup, fixing & improvement pass for Components
* fixed broken registry reload
 * fixed incorect handling of the "invalid" flag when reloading the registry should fix that
 * fixed unreliable generate_propGroup_name : now uses tiger-hash to generate hashes of nested paths + long names
  this ensures that even if there are additions & removals to the registry, it does not break existing components !
 * fixed & overhauled list & map components ui handling for objects + collections/blueprints
 * merged the various list component ui operators into a single one
 * removed obsolete code in registry & components
 * improved handling of invalid components in the UI: now they are not displayed ! much cleaner & simpler
 * overall cleanup to components
 * lots of minor tweaks & co
2024-06-13 16:11:06 +02:00

161 lines
5.8 KiB
Python

bl_info = {
"name": "blenvy",
"author": "kaosigh",
"version": (0, 1, 0),
"blender": (3, 4, 0),
"location": "File > Import-Export",
"description": "tooling for the Bevy engine",
"warning": "",
"wiki_url": "https://github.com/kaosat-dev/Blender_bevy_components_workflow",
"tracker_url": "https://github.com/kaosat-dev/Blender_bevy_components_workflow/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
from .core.ui.ui import (BLENVY_PT_SidePanel)
from .core.ui.scenes_list import BLENVY_OT_scenes_list_actions
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,
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,
]
@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):
print("POST LOAD")
blenvy = bpy.context.window_manager.blenvy
if blenvy is not None:
blenvy.load_settings()
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)
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)