versioning.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #Versioning Tasks
  2. # this will be the new versioning system, and will deprecate the old SOCKETS_ADDED and such
  3. from bpy.types import Node, NodeSocket
  4. from .utilities import prRed, prGreen
  5. def version_upgrade_bone_0_12_0_from_older(*args, **kwargs):
  6. # we need to check if it has an array collection input and a color input
  7. # then we need to solve each task
  8. node = kwargs['node']
  9. current_major_version = node.id_data.mantis_version[0]
  10. current_minor_version = node.id_data.mantis_version[1]
  11. if current_major_version > 0: # major version must be 0
  12. return
  13. if current_minor_version >= 12: # minor version must be 11 or less
  14. return
  15. # sub version doesn't matter since any subversion of 11 should trigger this task
  16. try:
  17. collection_input_is_array = node.inputs['Bone Collection'].is_multi_input
  18. if not collection_input_is_array: # it must be made into an array!
  19. from .utilities import get_socket_maps
  20. socket_maps = get_socket_maps(node)
  21. socket_map = socket_maps[0]
  22. for i, socket in enumerate(node.inputs):
  23. if socket.name == 'Bone Collection': break
  24. old_id = socket.identifier
  25. # it is an input
  26. node.inputs.remove(socket)
  27. s = node.inputs.new('BoneCollectionSocket', 'Bone Collection',
  28. identifier='Bone Collection', use_multi_input=True)
  29. node.inputs.move(len(node.inputs)-1, i)
  30. socket_map_from_old_socket = socket_map[old_id]
  31. # there seems to be an error in do_relink
  32. # gonna do it directly instead
  33. if isinstance(socket_map_from_old_socket, list):
  34. for map_info in socket_map_from_old_socket:
  35. if isinstance(map_info, Node ):
  36. l = node.id_data.links.new(input=map_info.outputs[0], output=s)
  37. elif isinstance(map_info, NodeSocket):
  38. l = node.id_data.links.new(input=map_info, output=s)
  39. else:
  40. s.default_value = socket_map_from_old_socket
  41. if node.inputs.get('Color') is None:
  42. s = node.inputs.new('ColorSetSocket', 'Color',)
  43. node.inputs.move(len(node.inputs)-1, 22)
  44. except Exception as e:
  45. prRed(f"Error updating version in node: {node.id_data.name}::{node.name}; see error:")
  46. print(e)
  47. versioning_tasks = [
  48. # node bl_idname task required keyword arguments
  49. (['xFormBoneNode'], version_upgrade_bone_0_12_0_from_older, ['node'],),
  50. ]