immersive-home/app/addons/godot-xr-tools/plugin.gd

139 lines
3.8 KiB
GDScript3
Raw Permalink Normal View History

2023-10-16 20:10:20 +03:00
@tool
extends EditorPlugin
## Menu ID for enabling OpenXR
const MENU_ID_ENABLE_OPENXR := 1001
## Menu ID for setting the physics layers
const MENU_ID_SET_PHYSICS_LAYERS := 1002
# XR Tools popup menu
var _xr_tools_menu : PopupMenu
func _define_project_setting(
p_name : String,
p_type : int,
p_hint : int = PROPERTY_HINT_NONE,
p_hint_string : String = "",
p_default_val = "") -> void:
# p_default_val can be any type!!
if !ProjectSettings.has_setting(p_name):
ProjectSettings.set_setting(p_name, p_default_val)
var property_info : Dictionary = {
"name" : p_name,
"type" : p_type,
"hint" : p_hint,
"hint_string" : p_hint_string
}
ProjectSettings.add_property_info(property_info)
if ProjectSettings.has_method("set_as_basic"):
ProjectSettings.call("set_as_basic", p_name, true)
ProjectSettings.set_initial_value(p_name, p_default_val)
func _enable_openxr() -> void:
ProjectSettings.set("xr/openxr/enabled", true)
ProjectSettings.set("xr/shaders/enabled", true)
func _set_physics_layers() -> void:
ProjectSettings.set("layer_names/3d_physics/layer_1", "Static World")
ProjectSettings.set("layer_names/3d_physics/layer_2", "Dynamic World")
ProjectSettings.set("layer_names/3d_physics/layer_3", "Pickable Objects")
ProjectSettings.set("layer_names/3d_physics/layer_4", "Wall Walking")
ProjectSettings.set("layer_names/3d_physics/layer_5", "Grappling Target")
ProjectSettings.set("layer_names/3d_physics/layer_17", "Held Objects")
ProjectSettings.set("layer_names/3d_physics/layer_18", "Player Hands")
ProjectSettings.set("layer_names/3d_physics/layer_19", "Grab Handles")
ProjectSettings.set("layer_names/3d_physics/layer_20", "Player Body")
ProjectSettings.set("layer_names/3d_physics/layer_21", "Pointable Objects")
ProjectSettings.set("layer_names/3d_physics/layer_22", "Hand Pose Areas")
ProjectSettings.set("layer_names/3d_physics/layer_23", "UI Objects")
func _on_xr_tools_menu_pressed(id : int) -> void:
match id:
MENU_ID_ENABLE_OPENXR:
_enable_openxr()
return
MENU_ID_SET_PHYSICS_LAYERS:
_set_physics_layers()
return
func _enter_tree():
# Construct the popup menu
_xr_tools_menu = PopupMenu.new()
_xr_tools_menu.name = "XR Tools"
_xr_tools_menu.id_pressed.connect(_on_xr_tools_menu_pressed)
add_tool_submenu_item("XR Tools", _xr_tools_menu)
# Add tool menu items
_xr_tools_menu.add_item("Enable OpenXR", MENU_ID_ENABLE_OPENXR)
_xr_tools_menu.add_item("Set Physics Layers", MENU_ID_SET_PHYSICS_LAYERS)
# Add input grip threshold to the project settings
_define_project_setting(
"godot_xr_tools/input/grip_threshold",
TYPE_FLOAT,
PROPERTY_HINT_RANGE,
"0.2,0.8,0.05",
0.7)
# Add input y_axis_dead_zone to the project settings
_define_project_setting(
"godot_xr_tools/input/y_axis_dead_zone",
TYPE_FLOAT,
PROPERTY_HINT_RANGE,
"0.0,0.5,0.01",
0.1)
# Add input x_axis_dead_zone to the project settings
_define_project_setting(
"godot_xr_tools/input/x_axis_dead_zone",
TYPE_FLOAT,
PROPERTY_HINT_RANGE,
"0.0,0.5,0.01",
0.2)
# Add input snap turning dead-zone to the project settings
_define_project_setting(
"godot_xr_tools/input/snap_turning_deadzone",
TYPE_FLOAT,
PROPERTY_HINT_RANGE,
"0.0,0.5,0.05",
0.25)
# Add input default snap turning to the project settings
_define_project_setting(
"godot_xr_tools/input/default_snap_turning",
TYPE_BOOL,
PROPERTY_HINT_NONE,
"",
true)
# Add player standard height to the project settings
_define_project_setting(
"godot_xr_tools/player/standard_height",
TYPE_FLOAT,
PROPERTY_HINT_RANGE,
"1.0,2.5,0.05",
1.85)
# Register our autoload user settings object
add_autoload_singleton(
"XRToolsUserSettings",
"res://addons/godot-xr-tools/user_settings/user_settings.gd")
func _exit_tree():
# our plugin is turned off
pass