refactor(rcf): object update refactoring

This commit is contained in:
Swann Martinez
2019-03-29 17:48:19 +01:00
parent 736a409db2
commit c366da3e5c

View File

@ -22,8 +22,25 @@ client = None
server = None server = None
context = None context = None
TASKS = [] update_list = {}
def add_update(type,item):
try:
if item not in update_list[type]:
update_list[type].append(item)
except KeyError:
update_list[type] = []
def get_update(type):
try:
update = None
if update_list[type]:
update = update_list[type].pop()
except KeyError:
update_list[type] = []
return update
COLOR_TABLE = [(1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1), COLOR_TABLE = [(1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1),
(0, 0.5, 1, 1), (0.5, 0, 1, 1)] (0, 0.5, 1, 1), (0.5, 0, 1, 1)]
SUPPORTED_DATABLOCKS = ['collections', 'meshes', 'objects', SUPPORTED_DATABLOCKS = ['collections', 'meshes', 'objects',
@ -493,6 +510,7 @@ class session_join(bpy.types.Operator):
# REGISTER Updaters # REGISTER Updaters
bpy.app.timers.register(tick) bpy.app.timers.register(tick)
bpy.app.timers.register(object_tick)
bpy.ops.session.draw('INVOKE_DEFAULT') bpy.ops.session.draw('INVOKE_DEFAULT')
return {"FINISHED"} return {"FINISHED"}
@ -608,6 +626,7 @@ class session_stop(bpy.types.Operator):
bpy.ops.asyncio.stop() bpy.ops.asyncio.stop()
net_settings.is_running = False net_settings.is_running = False
bpy.app.timers.unregister(tick) bpy.app.timers.unregister(tick)
bpy.app.timers.unregister(object_tick)
else: else:
logger.debug("No server/client running.") logger.debug("No server/client running.")
@ -878,6 +897,23 @@ classes = (
session_snapview, session_snapview,
) )
def mesh_tick():
return 2
def object_tick():
obj = get_update("Object")
if obj:
dump_datablock_attibute(bpy.data.objects[obj],['matrix_world'])
return 0.1
def material_tick():
return 2
def tick(): def tick():
upload_client_position() upload_client_position()
@ -895,7 +931,8 @@ def depsgraph_update(scene):
if c[1].is_updated_geometry: if c[1].is_updated_geometry:
pass pass
elif c[1].is_updated_transform: elif c[1].is_updated_transform:
dump_datablock_attibute(bpy.data.objects[c[1].id.name],['matrix_world']) if c[1].id.name == scene.session_settings.active_object.name:
add_update(c[1].id.bl_rna.name,c[1].id.name)
else: else:
if c[1].id.bl_rna.name == 'Material' or c[1].id.bl_rna.name == 'Shader Nodetree': if c[1].id.bl_rna.name == 'Material' or c[1].id.bl_rna.name == 'Shader Nodetree':
print(c[1].id.bl_rna.name) print(c[1].id.bl_rna.name)