refactor: add camera back

This commit is contained in:
Swann
2021-05-19 09:55:07 +02:00
parent 330ff08fd3
commit 5f669fd49a

View File

@ -21,6 +21,8 @@ import mathutils
from .dump_anything import Loader, Dumper from .dump_anything import Loader, Dumper
from replication.protocol import ReplicatedDatablock 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): class BlCamera(ReplicatedDatablock):
@ -30,29 +32,34 @@ class BlCamera(ReplicatedDatablock):
bl_icon = 'CAMERA_DATA' bl_icon = 'CAMERA_DATA'
bl_reload_parent = False bl_reload_parent = False
@staticmethod
def construct(data: dict) -> object: def construct(data: dict) -> object:
return bpy.data.cameras.new(data["name"]) return bpy.data.cameras.new(data["name"])
@staticmethod
def load(data: dict, datablock: object): def load(data: dict, datablock: object):
loader = Loader() loader = Loader()
loader.load(target, data) loader.load(datablock, data)
dof_settings = data.get('dof') dof_settings = data.get('dof')
load_animation_data(datablock.get('animation_data'), datablock)
# DOF settings # DOF settings
if dof_settings: if dof_settings:
loader.load(target.dof, dof_settings) loader.load(datablock.dof, dof_settings)
background_images = data.get('background_images') background_images = data.get('background_images')
target.background_images.clear() datablock.background_images.clear()
if background_images: if background_images:
for img_name, img_data in background_images.items(): for img_name, img_data in background_images.items():
img_id = img_data.get('image') img_id = img_data.get('image')
if img_id: if img_id:
target_img = target.background_images.new() target_img = datablock.background_images.new()
target_img.image = bpy.data.images[img_id] target_img.image = bpy.data.images[img_id]
loader.load(target_img, img_data) loader.load(target_img, img_data)
@ -61,11 +68,8 @@ class BlCamera(ReplicatedDatablock):
loader.load(target_img.image_user, img_user) loader.load(target_img.image_user, img_user)
@staticmethod
def dump(datablock: object) -> dict: def dump(datablock: object) -> dict:
assert(instance)
# TODO: background image support
dumper = Dumper() dumper = Dumper()
dumper.depth = 3 dumper.depth = 3
dumper.include_filter = [ dumper.include_filter = [
@ -114,15 +118,34 @@ class BlCamera(ReplicatedDatablock):
'use_cyclic', 'use_cyclic',
'use_auto_refresh' 'use_auto_refresh'
] ]
data = dumper.dump(instance) data = dumper.dump(datablock)
for index, image in enumerate(instance.background_images): data['animation_data'] = dump_animation_data(datablock)
for index, image in enumerate(datablock.background_images):
if image.image_user: if image.image_user:
data['background_images'][index]['image_user'] = dumper.dump(image.image_user) data['background_images'][index]['image_user'] = dumper.dump(image.image_user)
return data 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]: def resolve_deps(datablock: object) -> [object]:
deps = [] deps = []
for background in self.instance.background_images: for background in datablock.background_images:
if background.image: if background.image:
deps.append(background.image) deps.append(background.image)
deps.extend(resolve_animation_dependencies(datablock))
return deps return deps
_type = bpy.types.Camera
_class = BlCamera