mirror of
https://github.com/kaosat-dev/Blender_bevy_components_workflow.git
synced 2024-11-26 21:37:01 +00:00
31f6a0f122
* fixed bad hashing causing hashed project across two different blender sessions to appear different aka, no more systematic re-export of everything when reloading a project in blender ! * fixed issues with modifier & material hashing that was also causing overly eager change detection * previous_xxx_settings are now only saved AFTER a sucessfull export, for coherence * added more fine grained setting change detection (aka some setting changes do not require a re-export of all levels & blueprints !) * fixed handling of level & library scene names as part of the settings * fixed numerous issues with core, auto_export & component settings * cleaned up a ton of very verbose debug message * BlenvyAssets => BlueprintAssets * a lot of minor cleanups
74 lines
3.3 KiB
Python
74 lines
3.3 KiB
Python
|
|
import os
|
|
import json
|
|
import bpy
|
|
from ..core.scene_helpers import add_scene_property
|
|
|
|
def find_blueprints_not_on_disk(blueprints, folder_path, extension):
|
|
not_found_blueprints = []
|
|
for blueprint in blueprints:
|
|
gltf_output_path = os.path.join(folder_path, blueprint.name + extension)
|
|
# print("gltf_output_path", gltf_output_path)
|
|
found = os.path.exists(gltf_output_path) and os.path.isfile(gltf_output_path)
|
|
if not found:
|
|
not_found_blueprints.append(blueprint)
|
|
return not_found_blueprints
|
|
|
|
def check_if_blueprint_on_disk(scene_name, folder_path, extension):
|
|
gltf_output_path = os.path.join(folder_path, scene_name + extension)
|
|
found = os.path.exists(gltf_output_path) and os.path.isfile(gltf_output_path)
|
|
return found
|
|
|
|
def inject_export_path_into_internal_blueprints(internal_blueprints, blueprints_path, gltf_extension):
|
|
for blueprint in internal_blueprints:
|
|
blueprint_exported_path = os.path.join(blueprints_path, f"{blueprint.name}{gltf_extension}")
|
|
# print("injecting blueprint path", blueprint_exported_path, "for", blueprint.name)
|
|
|
|
blueprint.collection["export_path"] = blueprint_exported_path
|
|
|
|
def inject_blueprints_list_into_main_scene(scene, blueprints_data, settings):
|
|
project_root_path = getattr(settings, "project_root_path")
|
|
assets_path = getattr(settings,"assets_path")
|
|
levels_path = getattr(settings,"levels_path")
|
|
blueprints_path = getattr(settings, "blueprints_path")
|
|
export_gltf_extension = getattr(settings, "export_gltf_extension")
|
|
|
|
# print("injecting assets/blueprints data into scene")
|
|
assets_list_name = f"assets_list_{scene.name}_components"
|
|
assets_list_data = {}
|
|
|
|
blueprint_instance_names_for_scene = blueprints_data.blueprint_instances_per_main_scene.get(scene.name, None)
|
|
blueprint_assets_list = []
|
|
if blueprint_instance_names_for_scene:
|
|
for blueprint_name in blueprint_instance_names_for_scene:
|
|
blueprint = blueprints_data.blueprints_per_name.get(blueprint_name, None)
|
|
if blueprint is not None:
|
|
#print("BLUEPRINT", blueprint)
|
|
blueprint_exported_path = None
|
|
if blueprint.local:
|
|
blueprint_exported_path = os.path.join(blueprints_path, f"{blueprint.name}{export_gltf_extension}")
|
|
else:
|
|
# get the injected path of the external blueprints
|
|
blueprint_exported_path = blueprint.collection['Export_path'] if 'Export_path' in blueprint.collection else None
|
|
#print("foo", dict(blueprint.collection))
|
|
if blueprint_exported_path is not None:
|
|
blueprint_assets_list.append({"name": blueprint.name, "path": blueprint_exported_path, "type": "MODEL", "internal": True})
|
|
|
|
|
|
|
|
|
|
assets_list_name = f"assets_{scene.name}"
|
|
scene["assets"] = json.dumps(blueprint_assets_list)
|
|
|
|
#print("blueprint assets", blueprint_assets_list)
|
|
|
|
def remove_blueprints_list_from_main_scene(scene):
|
|
assets_list = None
|
|
assets_list_name = f"assets_list_{scene.name}_components"
|
|
|
|
for object in scene.objects:
|
|
if object.name == assets_list_name:
|
|
assets_list = object
|
|
if assets_list is not None:
|
|
bpy.data.objects.remove(assets_list, do_unlink=True)
|