Compare commits
6 Commits
204-animat
...
204-animat
Author | SHA1 | Date | |
---|---|---|---|
9003abcd18 | |||
a199e0df00 | |||
3774419b7e | |||
3e552cb406 | |||
9f381b44c8 | |||
ad795caed5 |
@ -219,7 +219,7 @@ def load_fcurve(fcurve_data, fcurve):
|
|||||||
def dump_animation_data(datablock):
|
def dump_animation_data(datablock):
|
||||||
animation_data = {}
|
animation_data = {}
|
||||||
if has_action(datablock):
|
if has_action(datablock):
|
||||||
animation_data['action'] = datablock.animation_data.action.name
|
animation_data['action'] = datablock.animation_data.action.uuid
|
||||||
if has_driver(datablock):
|
if has_driver(datablock):
|
||||||
animation_data['drivers'] = []
|
animation_data['drivers'] = []
|
||||||
for driver in datablock.animation_data.drivers:
|
for driver in datablock.animation_data.drivers:
|
||||||
@ -241,8 +241,10 @@ def load_animation_data(animation_data, datablock):
|
|||||||
for driver in animation_data['drivers']:
|
for driver in animation_data['drivers']:
|
||||||
load_driver(datablock, driver)
|
load_driver(datablock, driver)
|
||||||
|
|
||||||
if 'action' in animation_data:
|
action = animation_data.get('action')
|
||||||
datablock.animation_data.action = bpy.data.actions[animation_data['action']]
|
if action:
|
||||||
|
action = resolve_datablock_from_uuid(action, bpy.data.actions)
|
||||||
|
datablock.animation_data.action = action
|
||||||
elif datablock.animation_data.action:
|
elif datablock.animation_data.action:
|
||||||
datablock.animation_data.action = None
|
datablock.animation_data.action = None
|
||||||
|
|
||||||
|
@ -404,6 +404,7 @@ class BlMaterial(ReplicatedDatablock):
|
|||||||
bl_check_common = False
|
bl_check_common = False
|
||||||
bl_icon = 'MATERIAL_DATA'
|
bl_icon = 'MATERIAL_DATA'
|
||||||
bl_reload_parent = False
|
bl_reload_parent = False
|
||||||
|
bl_reload_child = True
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def construct(data: dict) -> object:
|
def construct(data: dict) -> object:
|
||||||
@ -411,8 +412,6 @@ class BlMaterial(ReplicatedDatablock):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def load(data: dict, datablock: object):
|
def load(data: dict, datablock: object):
|
||||||
load_animation_data(data.get('animation_data'), datablock)
|
|
||||||
|
|
||||||
loader = Loader()
|
loader = Loader()
|
||||||
|
|
||||||
is_grease_pencil = data.get('is_grease_pencil')
|
is_grease_pencil = data.get('is_grease_pencil')
|
||||||
@ -429,6 +428,8 @@ class BlMaterial(ReplicatedDatablock):
|
|||||||
datablock.use_nodes = True
|
datablock.use_nodes = True
|
||||||
|
|
||||||
load_node_tree(data['node_tree'], datablock.node_tree)
|
load_node_tree(data['node_tree'], datablock.node_tree)
|
||||||
|
load_animation_data(data.get('nodes_animation_data'), datablock.node_tree)
|
||||||
|
load_animation_data(data.get('animation_data'), datablock)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def dump(datablock: object) -> dict:
|
def dump(datablock: object) -> dict:
|
||||||
@ -496,8 +497,10 @@ class BlMaterial(ReplicatedDatablock):
|
|||||||
data['grease_pencil'] = gp_mat_dumper.dump(datablock.grease_pencil)
|
data['grease_pencil'] = gp_mat_dumper.dump(datablock.grease_pencil)
|
||||||
elif datablock.use_nodes:
|
elif datablock.use_nodes:
|
||||||
data['node_tree'] = dump_node_tree(datablock.node_tree)
|
data['node_tree'] = dump_node_tree(datablock.node_tree)
|
||||||
|
data['nodes_animation_data'] = dump_animation_data(datablock.node_tree)
|
||||||
|
|
||||||
data['animation_data'] = dump_animation_data(datablock)
|
data['animation_data'] = dump_animation_data(datablock)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -511,7 +514,7 @@ class BlMaterial(ReplicatedDatablock):
|
|||||||
|
|
||||||
if datablock.use_nodes:
|
if datablock.use_nodes:
|
||||||
deps.extend(get_node_tree_dependencies(datablock.node_tree))
|
deps.extend(get_node_tree_dependencies(datablock.node_tree))
|
||||||
|
deps.extend(resolve_animation_dependencies(datablock.node_tree))
|
||||||
deps.extend(resolve_animation_dependencies(datablock))
|
deps.extend(resolve_animation_dependencies(datablock))
|
||||||
|
|
||||||
return deps
|
return deps
|
||||||
|
Submodule multi_user/libs/replication updated: cb4cdd0444...ce3a7b4363
@ -100,7 +100,7 @@ def initialize_session():
|
|||||||
|
|
||||||
# Step 2: Load nodes
|
# Step 2: Load nodes
|
||||||
logging.info("Applying nodes")
|
logging.info("Applying nodes")
|
||||||
for node in session.repository.index_sorted:
|
for node in session.repository.heads:
|
||||||
porcelain.apply(session.repository, node)
|
porcelain.apply(session.repository, node)
|
||||||
|
|
||||||
logging.info("Registering timers")
|
logging.info("Registering timers")
|
||||||
@ -604,9 +604,9 @@ class SessionApply(bpy.types.Operator):
|
|||||||
node_ref = session.repository.graph.get(self.target)
|
node_ref = session.repository.graph.get(self.target)
|
||||||
porcelain.apply(session.repository,
|
porcelain.apply(session.repository,
|
||||||
self.target,
|
self.target,
|
||||||
force=True,
|
force=True)
|
||||||
force_dependencies=self.reset_dependencies)
|
|
||||||
impl = session.repository.rdp.get_implementation(node_ref.instance)
|
impl = session.repository.rdp.get_implementation(node_ref.instance)
|
||||||
|
# NOTE: find another way to handle child and parent automatic reloading
|
||||||
if impl.bl_reload_parent:
|
if impl.bl_reload_parent:
|
||||||
for parent in session.repository.graph.get_parents(self.target):
|
for parent in session.repository.graph.get_parents(self.target):
|
||||||
logging.debug(f"Refresh parent {parent}")
|
logging.debug(f"Refresh parent {parent}")
|
||||||
@ -614,6 +614,11 @@ class SessionApply(bpy.types.Operator):
|
|||||||
porcelain.apply(session.repository,
|
porcelain.apply(session.repository,
|
||||||
parent.uuid,
|
parent.uuid,
|
||||||
force=True)
|
force=True)
|
||||||
|
if hasattr(impl, 'bl_reload_child') and impl.bl_reload_child:
|
||||||
|
for dep in node_ref.dependencies:
|
||||||
|
porcelain.apply(session.repository,
|
||||||
|
dep,
|
||||||
|
force=True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.report({'ERROR'}, repr(e))
|
self.report({'ERROR'}, repr(e))
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
@ -637,7 +642,7 @@ class SessionCommit(bpy.types.Operator):
|
|||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
try:
|
try:
|
||||||
porcelain.commit(session.repository, self.target)
|
porcelain.commit(session.repository, self.target)
|
||||||
porcelain.push(session.repository, 'origin', self.target)
|
porcelain.push(session.repository, 'origin', self.target, force=True)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.report({'ERROR'}, repr(e))
|
self.report({'ERROR'}, repr(e))
|
||||||
|
@ -129,6 +129,11 @@ class ApplyTimer(Timer):
|
|||||||
porcelain.apply(session.repository,
|
porcelain.apply(session.repository,
|
||||||
parent.uuid,
|
parent.uuid,
|
||||||
force=True)
|
force=True)
|
||||||
|
if hasattr(impl, 'bl_reload_child') and impl.bl_reload_child:
|
||||||
|
for dep in node_ref.dependencies:
|
||||||
|
porcelain.apply(session.repository,
|
||||||
|
dep,
|
||||||
|
force=True)
|
||||||
|
|
||||||
|
|
||||||
class DynamicRightSelectTimer(Timer):
|
class DynamicRightSelectTimer(Timer):
|
||||||
|
Reference in New Issue
Block a user