""" Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. SPDX-License-Identifier: Apache-2.0 OR MIT """ import azlmbr.scene as sceneApi from scene_api import scene_data as sceneData import uuid def update_manifest(scene): graph = sceneData.SceneGraph(scene.graph) rootNode = graph.get_root() kidNode = graph.get_node_child(rootNode) chunkNameList = [] siblingNode = graph.get_node_child(kidNode) while siblingNode.IsValid(): chunkGraphName = sceneData.SceneGraphName(graph.get_node_name(siblingNode)) chunkName = chunkGraphName.get_name() chunkNameList.append(chunkName) siblingNode = graph.get_node_sibling(siblingNode) sceneManifest = sceneData.SceneManifest() for activeMeshIndex in range(len(chunkNameList)): chunkName = chunkNameList[activeMeshIndex] meshGroup = sceneManifest.add_mesh_group(chunkName) meshGroup['id'] = '{' + str(uuid.uuid5(uuid.NAMESPACE_DNS, scene.sourceFilename + chunkName)) + '}' sceneManifest.mesh_group_add_comment(meshGroup, 'auto generated by test_chunks_builder') sceneManifest.mesh_group_add_advanced_coordinate_system(meshGroup) for meshIndex in range(len(chunkNameList)): if (activeMeshIndex == meshIndex): sceneManifest.mesh_group_select_node(meshGroup, chunkNameList[meshIndex]) else: sceneManifest.mesh_group_unselect_node(meshGroup, chunkNameList[meshIndex]) return sceneManifest.export() mySceneJobHandler = None def on_update_manifest(args): scene = args[0] result = update_manifest(scene) global mySceneJobHandler # do not delete or set sceneJobHandler to None, just disconnect from it. # this call is occuring while the scene Job Handler itself is in the callstack, so deleting it here # would cause a crash. mySceneJobHandler.disconnect() return result def main(): global mySceneJobHandler mySceneJobHandler = sceneApi.ScriptBuildingNotificationBusHandler() mySceneJobHandler.connect() mySceneJobHandler.add_callback('OnUpdateManifest', on_update_manifest) if __name__ == "__main__": main()