refactor: initial step rewrite user frustum drawing code to debug xr camera position

This commit is contained in:
Swann Martinez
2022-03-27 17:33:13 +02:00
parent 629f2e1cdb
commit 1b614f4fb6
4 changed files with 85 additions and 68 deletions

View File

@ -28,8 +28,7 @@ from replication import porcelain
from . import operators, utils
from .presence import (UserFrustumWidget, UserNameWidget, UserModeWidget, UserSelectionWidget,
generate_user_camera, get_view_matrix, refresh_3d_view,
refresh_sidebar_view, renderer)
get_view_matrix, refresh_3d_view, refresh_sidebar_view, renderer)
from . import shared_data
@ -276,22 +275,23 @@ class ClientUpdate(Timer):
if session and renderer:
if session.state in [STATE_ACTIVE, STATE_LOBBY]:
local_user = session.online_users.get(
settings.username)
local_user = session.online_users.get(settings.username)
xr_session_state = bpy.context.window_manager.xr_session_state
if not local_user:
return
else:
for username, user_data in session.online_users.items():
if username != settings.username:
cached_user_data = self.users_metadata.get(
username)
cached_user_data = self.users_metadata.get(username)
new_user_data = session.online_users[username]['metadata']
if cached_user_data is None:
self.users_metadata[username] = user_data['metadata']
elif 'view_matrix' in cached_user_data and 'view_matrix' in new_user_data and cached_user_data['view_matrix'] != new_user_data['view_matrix']:
refresh_3d_view()
viewer = new_user_data.get('xr')
if viewer:
logging.info(viewer)
self.users_metadata[username] = user_data['metadata']
break
else:
@ -300,13 +300,12 @@ class ClientUpdate(Timer):
local_user_metadata = local_user.get('metadata')
scene_current = bpy.context.scene.name
local_user = session.online_users.get(settings.username)
current_view_corners = generate_user_camera()
current_view_matrix = get_view_matrix()
# Init client metadata
if not local_user_metadata or 'color' not in local_user_metadata.keys():
metadata = {
'view_corners': get_view_matrix(),
'view_matrix': get_view_matrix(),
'view_matrix': current_view_matrix,
'color': (settings.client_color.r,
settings.client_color.g,
settings.client_color.b,
@ -322,10 +321,8 @@ class ClientUpdate(Timer):
elif scene_current != local_user_metadata['scene_current']:
local_user_metadata['scene_current'] = scene_current
porcelain.update_user_metadata(session.repository, local_user_metadata)
elif 'view_corners' in local_user_metadata and current_view_corners != local_user_metadata['view_corners']:
local_user_metadata['view_corners'] = current_view_corners
local_user_metadata['view_matrix'] = get_view_matrix(
)
elif 'view_matrix' in local_user_metadata and current_view_matrix != local_user_metadata['view_matrix']:
local_user_metadata['view_matrix'] = current_view_matrix
porcelain.update_user_metadata(session.repository, local_user_metadata)
elif bpy.context.mode != local_user_metadata['mode_current']:
local_user_metadata['mode_current'] = bpy.context.mode
@ -387,3 +384,28 @@ class MainThreadExecutor(Timer):
function, kwargs = self.execution_queue.get()
logging.debug(f"Executing {function.__name__}")
function(**kwargs)
class XrUserUpdate(Timer):
def __init__(self, timeout=1):
# TODO: Add user refresh rate settings
super().__init__(timeout)
def execute(self):
xr_session_state = bpy.context.window_manager.xr_session_state
if xr_session_state and xr_session_state.is_running:
# Update user state
porcelain.update_user_metadata(
session.repository,
{'xr': {
'viewer_pose_location': list(xr_session_state.viewer_pose_location),
'viewer_pose_rotation': list(xr_session_state.viewer_pose_rotation),
'controller_0_location': list(xr_session_state.controller_grip_location_get(bpy.context, 0)),
'controller_0_rotation': list(xr_session_state.controller_grip_rotation_get(bpy.context, 0)),
'controller_1_location': list(xr_session_state.controller_grip_location_get(bpy.context, 1)),
'controller_1_rotation': list(xr_session_state.controller_grip_rotation_get(bpy.context, 1))}
})
else:
logging.info("XR Session ended, stopping user update")
self.unregister()