[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