From 5f669fd49ab1009a703a770a48aa1c8192d8f3e8 Mon Sep 17 00:00:00 2001 From: Swann Date: Wed, 19 May 2021 09:55:07 +0200 Subject: [PATCH] refactor: add camera back --- multi_user/bl_types/bl_camera.py | 51 +++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/multi_user/bl_types/bl_camera.py b/multi_user/bl_types/bl_camera.py index ff8faa1..15cd8e7 100644 --- a/multi_user/bl_types/bl_camera.py +++ b/multi_user/bl_types/bl_camera.py @@ -21,6 +21,8 @@ import mathutils from .dump_anything import Loader, Dumper from replication.protocol import ReplicatedDatablock +from .bl_datablock import resolve_datablock_from_uuid +from .bl_action import dump_animation_data, load_animation_data, resolve_animation_dependencies class BlCamera(ReplicatedDatablock): @@ -30,29 +32,34 @@ class BlCamera(ReplicatedDatablock): bl_icon = 'CAMERA_DATA' bl_reload_parent = False + + @staticmethod def construct(data: dict) -> object: return bpy.data.cameras.new(data["name"]) + @staticmethod def load(data: dict, datablock: object): loader = Loader() - loader.load(target, data) + loader.load(datablock, data) dof_settings = data.get('dof') - + + load_animation_data(datablock.get('animation_data'), datablock) + # DOF settings if dof_settings: - loader.load(target.dof, dof_settings) + loader.load(datablock.dof, dof_settings) background_images = data.get('background_images') - target.background_images.clear() - + datablock.background_images.clear() + if background_images: for img_name, img_data in background_images.items(): img_id = img_data.get('image') if img_id: - target_img = target.background_images.new() + target_img = datablock.background_images.new() target_img.image = bpy.data.images[img_id] loader.load(target_img, img_data) @@ -61,11 +68,8 @@ class BlCamera(ReplicatedDatablock): loader.load(target_img.image_user, img_user) + @staticmethod def dump(datablock: object) -> dict: - assert(instance) - - # TODO: background image support - dumper = Dumper() dumper.depth = 3 dumper.include_filter = [ @@ -114,15 +118,34 @@ class BlCamera(ReplicatedDatablock): 'use_cyclic', 'use_auto_refresh' ] - data = dumper.dump(instance) - for index, image in enumerate(instance.background_images): + data = dumper.dump(datablock) + data['animation_data'] = dump_animation_data(datablock) + + for index, image in enumerate(datablock.background_images): if image.image_user: data['background_images'][index]['image_user'] = dumper.dump(image.image_user) return data + + @staticmethod + def resolve(data: dict) -> object: + uuid = data.get('uuid') + name = data.get('name') + datablock = resolve_datablock_from_uuid(uuid, bpy.data.cameras) + if datablock is None: + datablock = bpy.data.cameras.get(name) + + return datablock + + @staticmethod def resolve_deps(datablock: object) -> [object]: deps = [] - for background in self.instance.background_images: + for background in datablock.background_images: if background.image: deps.append(background.image) - + + deps.extend(resolve_animation_dependencies(datablock)) + return deps + +_type = bpy.types.Camera +_class = BlCamera