refactor: add camera back
This commit is contained in:
@ -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
|
||||||
|
Reference in New Issue
Block a user