Grip is now just the movement and trigger is the pickup.
This commit is contained in:
parent
68fd3a45a8
commit
293c95c50c
2 changed files with 61 additions and 13 deletions
|
@ -41,6 +41,9 @@ class CopiedCollision extends RefCounted:
|
||||||
## Grip controller axis
|
## Grip controller axis
|
||||||
@export var pickup_axis_action : String = "grip"
|
@export var pickup_axis_action : String = "grip"
|
||||||
|
|
||||||
|
## Trigger Controller axis
|
||||||
|
@export var pickup_axis_action_trigger : String = "trigger"
|
||||||
|
|
||||||
## Action controller button
|
## Action controller button
|
||||||
@export var action_button_action : String = "trigger_click"
|
@export var action_button_action : String = "trigger_click"
|
||||||
|
|
||||||
|
@ -76,6 +79,8 @@ var closest_object : Node3D = null
|
||||||
var picked_up_object : Node3D = null
|
var picked_up_object : Node3D = null
|
||||||
var picked_up_ranged : bool = false
|
var picked_up_ranged : bool = false
|
||||||
var grip_pressed : bool = false
|
var grip_pressed : bool = false
|
||||||
|
var trigger_value : float = 0
|
||||||
|
var grip_value_public : float = 0 #Used to trick the movement_world_grab
|
||||||
|
|
||||||
# Private fields
|
# Private fields
|
||||||
var _object_in_grab_area := Array()
|
var _object_in_grab_area := Array()
|
||||||
|
@ -162,8 +167,12 @@ func _process(delta):
|
||||||
if !enabled or !_controller.get_is_active():
|
if !enabled or !_controller.get_is_active():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
#Apply the public values to trick the movement script
|
||||||
|
grip_value_public = _controller.get_float(pickup_axis_action)
|
||||||
|
|
||||||
# Handle our grip
|
# Handle our grip
|
||||||
var grip_value = _controller.get_float(pickup_axis_action)
|
#var grip_value = grip_value_public
|
||||||
|
var grip_value = _controller.get_float(pickup_axis_action_trigger)
|
||||||
if (grip_pressed and grip_value < (_grip_threshold - 0.1)):
|
if (grip_pressed and grip_value < (_grip_threshold - 0.1)):
|
||||||
grip_pressed = false
|
grip_pressed = false
|
||||||
_on_grip_release()
|
_on_grip_release()
|
||||||
|
|
|
@ -31,6 +31,17 @@ signal player_world_grab_end
|
||||||
@export var world_scale_max := 2.0
|
@export var world_scale_max := 2.0
|
||||||
|
|
||||||
|
|
||||||
|
## Grip controller axis
|
||||||
|
#@export var pickup_axis_action : String = "grip"
|
||||||
|
|
||||||
|
##GPT stuff
|
||||||
|
var _left_grab_origin : Vector3 = Vector3.ZERO
|
||||||
|
var _right_grab_origin : Vector3 = Vector3.ZERO
|
||||||
|
var _is_left_grabbing : bool = false
|
||||||
|
var _is_right_grabbing : bool = false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Left world-grab handle
|
# Left world-grab handle
|
||||||
var _left_handle : Node3D
|
var _left_handle : Node3D
|
||||||
|
|
||||||
|
@ -87,35 +98,61 @@ func physics_movement(delta: float, player_body: XRToolsPlayerBody, disabled: bo
|
||||||
player_body.velocity = Vector3.ZERO
|
player_body.velocity = Vector3.ZERO
|
||||||
|
|
||||||
# Check for world-grab handles being deleted while held
|
# Check for world-grab handles being deleted while held
|
||||||
if not is_instance_valid(_left_handle):
|
#if not is_instance_valid(_left_handle):
|
||||||
_left_handle = null
|
#_left_handle = null
|
||||||
if not is_instance_valid(_right_handle):
|
#if not is_instance_valid(_right_handle):
|
||||||
_right_handle = null
|
#_right_handle = null
|
||||||
|
|
||||||
# Disable world-grab movement if not holding the world
|
if _left_pickup_node.grip_value_public < 0.8:
|
||||||
if not _left_handle and not _right_handle:
|
_is_left_grabbing = false
|
||||||
|
|
||||||
|
if _right_pickup_node.grip_value_public < 0.8:
|
||||||
|
_is_right_grabbing = false
|
||||||
|
if (not _right_pickup_node.grip_value_public > 0.9 and not _left_pickup_node.grip_value_public > 0.9):
|
||||||
_set_world_grab_moving(false)
|
_set_world_grab_moving(false)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Disable world-grab movement if not holding the world
|
||||||
|
#if not _left_handle and not _right_handle:
|
||||||
|
# _set_world_grab_moving(false)
|
||||||
|
# return
|
||||||
|
|
||||||
# World grabbed
|
# World grabbed
|
||||||
_set_world_grab_moving(true)
|
_set_world_grab_moving(true)
|
||||||
|
|
||||||
|
#GPT welcome to shity code
|
||||||
|
#Replacing the left and right world handles with the positions when the controller is grabbed
|
||||||
|
if _left_pickup_node.grip_value_public > 0.9 and not _is_left_grabbing:
|
||||||
|
_left_grab_origin = _left_controller.global_position
|
||||||
|
_is_left_grabbing = true
|
||||||
|
if _right_pickup_node.grip_value_public > 0.9 and not _is_right_grabbing:
|
||||||
|
_right_grab_origin = _right_controller.global_position
|
||||||
|
_is_right_grabbing = true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Handle world-grab movement
|
# Handle world-grab movement
|
||||||
var offset := Vector3.ZERO
|
var offset := Vector3.ZERO
|
||||||
if _left_handle and not _right_handle:
|
#if _left_handle and not _right_handle:
|
||||||
|
if _is_left_grabbing and not _is_right_grabbing:
|
||||||
# Left-hand movement only
|
# Left-hand movement only
|
||||||
var left_pickup_pos := _left_controller.global_position
|
var left_pickup_pos := _left_controller.global_position
|
||||||
var left_grab_pos := _left_handle.global_position
|
#var left_grab_pos := _left_handle.global_position
|
||||||
|
var left_grab_pos := _left_grab_origin
|
||||||
offset = left_pickup_pos - left_grab_pos
|
offset = left_pickup_pos - left_grab_pos
|
||||||
elif _right_handle and not _left_handle:
|
#if _right_handle and not _left_handle:
|
||||||
|
elif _is_right_grabbing and not _is_left_grabbing:
|
||||||
# Right-hand movement only
|
# Right-hand movement only
|
||||||
var right_pickup_pos := _right_controller.global_position
|
var right_pickup_pos := _right_controller.global_position
|
||||||
var right_grab_pos := _right_handle.global_position
|
#var right_grab_pos := _right_handle.global_position
|
||||||
|
var right_grab_pos := _right_grab_origin
|
||||||
offset = right_pickup_pos - right_grab_pos
|
offset = right_pickup_pos - right_grab_pos
|
||||||
else:
|
else:
|
||||||
# Get the world-grab handle positions
|
# Get the world-grab handle positions
|
||||||
var left_grab_pos := _left_handle.global_position
|
#var left_grab_pos := _left_handle.global_position
|
||||||
var right_grab_pos := _right_handle.global_position
|
#var right_grab_pos := _right_handle.global_position
|
||||||
|
var left_grab_pos := _left_grab_origin
|
||||||
|
var right_grab_pos := _right_grab_origin
|
||||||
var grab_l2r := (right_grab_pos - left_grab_pos).slide(player_body.up_player)
|
var grab_l2r := (right_grab_pos - left_grab_pos).slide(player_body.up_player)
|
||||||
var grab_mid := (left_grab_pos + right_grab_pos) * 0.5
|
var grab_mid := (left_grab_pos + right_grab_pos) * 0.5
|
||||||
|
|
||||||
|
@ -168,6 +205,7 @@ func _set_world_grab_moving(active: bool) -> void:
|
||||||
## Handler for left controller picked up
|
## Handler for left controller picked up
|
||||||
func _on_left_picked_up(what : Node3D) -> void:
|
func _on_left_picked_up(what : Node3D) -> void:
|
||||||
# Get the world-grab area
|
# Get the world-grab area
|
||||||
|
return
|
||||||
var world_grab_area = what as XRToolsWorldGrabArea
|
var world_grab_area = what as XRToolsWorldGrabArea
|
||||||
if not world_grab_area:
|
if not world_grab_area:
|
||||||
return
|
return
|
||||||
|
@ -181,6 +219,7 @@ func _on_left_picked_up(what : Node3D) -> void:
|
||||||
## Handler for right controller picked up
|
## Handler for right controller picked up
|
||||||
func _on_right_picked_up(what : Node3D) -> void:
|
func _on_right_picked_up(what : Node3D) -> void:
|
||||||
# Get the world-grab area
|
# Get the world-grab area
|
||||||
|
return
|
||||||
var world_grab_area = what as XRToolsWorldGrabArea
|
var world_grab_area = what as XRToolsWorldGrabArea
|
||||||
if not world_grab_area:
|
if not world_grab_area:
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in a new issue