[Bf-extensions-cvs] [b172b029] xr-dev: VR: Customizable Actions

Peter Kim noreply at git.blender.org
Sun Feb 20 07:57:37 CET 2022


Commit: b172b0292c6d046d2211e87d0558e5cc23ac9664
Author: Peter Kim
Date:   Sun Feb 20 15:24:51 2022 +0900
Branches: xr-dev
https://developer.blender.org/rBAb172b0292c6d046d2211e87d0558e5cc23ac9664

VR: Customizable Actions

https://developer.blender.org/D13421

===================================================================

M	viewport_vr_preview/action_map.py
M	viewport_vr_preview/action_map_io.py
M	viewport_vr_preview/defaults.py
M	viewport_vr_preview/gui.py
M	viewport_vr_preview/operators.py

===================================================================

diff --git a/viewport_vr_preview/action_map.py b/viewport_vr_preview/action_map.py
index 6c62c05d..a9728ec4 100644
--- a/viewport_vr_preview/action_map.py
+++ b/viewport_vr_preview/action_map.py
@@ -4,6 +4,7 @@
 
 if "bpy" in locals():
     import importlib
+    importlib.reload(action_map_io)
     importlib.reload(defaults)
 else:
     from . import action_map_io, defaults
@@ -15,22 +16,65 @@ import importlib.util
 import os.path
 
 
+def vr_actionmap_active_get(session_settings):
+    actionmaps = session_settings.actionmaps
+    return (
+        None if (len(actionmaps) <
+                 1) else actionmaps[session_settings.active_actionmap]
+    )
+
+
+def vr_actionmap_selected_get(session_settings):
+    actionmaps = session_settings.actionmaps
+    return (
+        None if (len(actionmaps) <
+                 1) else actionmaps[session_settings.selected_actionmap]
+    )
+
+
+def vr_actionmap_item_selected_get(am):
+    actionmap_items = am.actionmap_items
+    return (
+        None if (len(actionmap_items) <
+                 1) else actionmap_items[am.selected_item]
+    )
+
+
+def vr_actionmap_user_path_selected_get(ami):
+    user_paths = ami.user_paths
+    return (
+        None if (len(user_paths) <
+                 1) else user_paths[ami.selected_user_path]
+    )
+
+
+def vr_actionmap_binding_selected_get(ami):
+    actionmap_bindings = ami.bindings
+    return (
+        None if (len(actionmap_bindings) <
+                 1) else actionmap_bindings[ami.selected_binding]
+    )
+
+
+def vr_actionmap_component_path_selected_get(amb):
+    component_paths = amb.component_paths
+    return (
+        None if (len(component_paths) <
+                 1) else component_paths[amb.selected_component_path]
+    )
+
+
 def vr_actionset_active_update(context):
     session_state = context.window_manager.xr_session_state
-    if not session_state or len(session_state.actionmaps) < 1:
+    if not session_state:
         return
 
-    scene = context.scene
-
-    if scene.vr_actions_use_gamepad and session_state.actionmaps.find(session_state, defaults.VRDefaultActionmaps.GAMEPAD.value):
-        session_state.active_action_set_set(context, defaults.VRDefaultActionmaps.GAMEPAD.value)
-    else:
-        # Use first action map.
-        session_state.active_action_set_set(context, session_state.actionmaps[0].name)
+    session_settings = context.window_manager.xr_session_settings
+    am = vr_actionmap_active_get(session_settings)
+    if not am:
+        return
 
-
-def vr_actions_use_gamepad_update(self, context):
-    vr_actionset_active_update(context)
+    session_state.active_action_set_set(context, am.name)
 
 
 @persistent
@@ -45,11 +89,14 @@ def vr_create_actions(context: bpy.context):
     if not scene.vr_actions_enable:
         return
 
-    # Ensure default action maps.
-    if not defaults.vr_ensure_default_actionmaps(session_state):
-        return
+    session_settings = context.window_manager.xr_session_settings
+
+    if (len(session_settings.actionmaps) < 1):
+        # Ensure default action maps.
+        if not defaults.vr_ensure_default_actionmaps(session_settings):
+            return
 
-    for am in session_state.actionmaps:
+    for am in session_settings.actionmaps:    
         if len(am.actionmap_items) < 1:
             continue
 
@@ -101,7 +148,7 @@ def vr_create_actions(context: bpy.context):
     vr_actionset_active_update(context)
 
 
-def vr_load_actionmaps(session_state, filepath):
+def vr_load_actionmaps(session_settings, filepath):
     if not os.path.exists(filepath):
         return False
 
@@ -109,16 +156,16 @@ def vr_load_actionmaps(session_state, filepath):
     file = importlib.util.module_from_spec(spec)
     spec.loader.exec_module(file)
 
-    action_map_io.actionconfig_init_from_data(session_state, file.actionconfig_data, file.actionconfig_version)
+    action_map_io.actionconfig_init_from_data(session_settings, file.actionconfig_data, file.actionconfig_version)
 
     return True
 
 
-def vr_save_actionmaps(session_state, filepath, sort=False):
-    action_map_io.actionconfig_export_as_data(session_state, filepath, sort=sort)
+def vr_save_actionmaps(session_settings, filepath, sort=False):
+    action_map_io.actionconfig_export_as_data(session_settings, filepath, sort=sort)
 
     print("Saved XR actionmaps: " + filepath)
-
+    
     return True
 
 
@@ -128,11 +175,6 @@ def register():
         description="Enable default VR controller actions, including controller poses and haptics",
         default=True,
     )
-    bpy.types.Scene.vr_actions_use_gamepad = bpy.props.BoolProperty(
-        description="Use input from gamepad (Microsoft Xbox Controller) instead of motion controllers",
-        default=False,
-        update=vr_actions_use_gamepad_update,
-    )
     bpy.types.Scene.vr_actions_enable_huawei = bpy.props.BoolProperty(
         description="Enable bindings for the Huawei controllers. Note that this may not be supported by all OpenXR runtimes",
         default=False,
@@ -155,7 +197,6 @@ def register():
 
 def unregister():
     del bpy.types.Scene.vr_actions_enable
-    del bpy.types.Scene.vr_actions_use_gamepad
     del bpy.types.Scene.vr_actions_enable_huawei
     del bpy.types.Scene.vr_actions_enable_reverb_g2
     del bpy.types.Scene.vr_actions_enable_vive_cosmos
diff --git a/viewport_vr_preview/action_map_io.py b/viewport_vr_preview/action_map_io.py
index c4e04581..809a2906 100644
--- a/viewport_vr_preview/action_map_io.py
+++ b/viewport_vr_preview/action_map_io.py
@@ -189,10 +189,10 @@ def amb_data_from_args(amb, args, type):
         amb.pose_rotation.z = float(l[2])
 
 
-def actionconfig_export_as_data(session_state, filepath, *, sort=False):
+def actionconfig_export_as_data(session_settings, filepath, *, sort=False):
     export_actionmaps = []
 
-    for am in session_state.actionmaps:
+    for am in session_settings.actionmaps:
         export_actionmaps.append(am)
 
     if sort:
@@ -318,7 +318,7 @@ def actionmap_init_from_data(am, am_items):
         actionmap_item_init_from_data(ami, ami_bindings)
 
 
-def actionconfig_init_from_data(session_state, actionconfig_data, actionconfig_version):
+def actionconfig_init_from_data(session_settings, actionconfig_data, actionconfig_version):
     # Load data in the format defined above.
     #
     # Runs at load time, keep this fast!
@@ -327,7 +327,7 @@ def actionconfig_init_from_data(session_state, actionconfig_data, actionconfig_v
         actionconfig_data = actionconfig_update(actionconfig_data, actionconfig_version)
 
     for (am_name, am_content) in actionconfig_data:
-        am = session_state.actionmaps.new(session_state, am_name, True)
+        am = session_settings.actionmaps.new(am_name, True)
         am_items = am_content["items"]
         # Check here instead of inside 'actionmap_init_from_data'
         # because we want to allow both tuple & list types in that case.
@@ -338,9 +338,9 @@ def actionconfig_init_from_data(session_state, actionconfig_data, actionconfig_v
         actionmap_init_from_data(am, am_items)
 
 
-def actionconfig_import_from_data(session_state, actionconfig_data, *, actionconfig_version=(0, 0, 0)):
+def actionconfig_import_from_data(session_settings, actionconfig_data, *, actionconfig_version=(0, 0, 0)):
     # Load data in the format defined above.
     #
     # Runs at load time, keep this fast!
     import bpy
-    actionconfig_init_from_data(session_state, actionconfig_data, actionconfig_version)
+    actionconfig_init_from_data(session_settings, actionconfig_data, actionconfig_version)
diff --git a/viewport_vr_preview/defaults.py b/viewport_vr_preview/defaults.py
index fe253e10..8d2a38f4 100644
--- a/viewport_vr_preview/defaults.py
+++ b/viewport_vr_preview/defaults.py
@@ -9,7 +9,6 @@ else:
     from . import action_map
 
 import bpy
-from bpy.app.handlers import persistent
 from enum import Enum
 import math
 import os.path
@@ -71,8 +70,8 @@ class VRDefaultActionprofiles(Enum):
     WMR = "/interaction_profiles/microsoft/motion_controller"
 
 
-def vr_defaults_actionmap_add(session_state, name):
-    am = session_state.actionmaps.new(session_state, name, True)
+def vr_defaults_actionmap_add(session_settings, name):
+    am = session_settings.actionmaps.new(name, True)
 
     return am
 
@@ -186,8 +185,8 @@ def vr_defaults_haptic_actionbinding_add(ami,
     return amb
 
 
-def vr_defaults_create_default(session_state):
-    am = vr_defaults_actionmap_add(session_state,
+def vr_defaults_create_default(session_settings):
+    am = vr_defaults_actionmap_add(session_settings,
                                    VRDefaultActionmaps.DEFAULT.value)
     if not am:
         return
@@ -1199,8 +1198,8 @@ def vr_defaults_create_default(session_state):
                                              "/output/haptic"])
 
 
-def vr_defaults_create_default_gamepad(session_state):
-    am = vr_defaults_actionmap_add(session_state,
+def vr_defaults_create_default_gamepad(session_settings):
+    am = vr_defaults_actionmap_add(session_settings,
                                    VRDefaultActionmaps.GAMEPAD.value)
 
     ami = vr_defaults_action_add(am,
@@ -1476,11 +1475,11 @@ def vr_get_default_config_path():
     return os.path.join(filepath, "default.py")
 
 
-def vr_ensure_default_actionmaps(session_state):
+def vr_ensure_default_actionmaps(session_settings):
     loaded = True
 
     for name in VRDefaultActionmaps:
-        if not session_state.actionmaps.find(session_state, name.value):
+        if not session_settings.actionmaps.find(name.value):
             loaded = False
             break
 
@@ -1492,11 +1491,11 @@ def vr_ensure_default_actionmaps(session_state):
 
     if not os.path.exists(filepath):
         # Create and save default action maps.
-        vr_defaults_create_default(session_state)
-        vr_defaults_create_default_gamepad(session_state)
+        vr_defaults_create_default(session_settings)
+        vr_defaults_create_default_gamepad(session_settings)
 
-        action_map.vr_save_actionmaps(session_state, filepath, sort=False)
+        action_map.vr_save_actionmaps(session_settings, filepath, sort=False)
 
-    loaded = action_map.vr_load_actionmaps(session_state, fil

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list