refactor: initial step rewrite user frustum drawing code to debug xr camera position
This commit is contained in:
@ -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()
|
Reference in New Issue
Block a user