Created first version of SimpleSocket to test socket with SimpleKey (Any pickupable with socket)
This commit is contained in:
@@ -25,6 +25,8 @@ var holdDistance: float
|
||||
var rotationOffset: Basis
|
||||
var localCenterOffset: Vector3
|
||||
|
||||
var currentSocket: Socket = null
|
||||
|
||||
func _ready():
|
||||
if body:
|
||||
body.mass = bodyMass
|
||||
@@ -115,6 +117,9 @@ func endInteract(player):
|
||||
rotating = false
|
||||
player.setMouseFactors(1.0, 1.0)
|
||||
playerRef = null
|
||||
|
||||
if currentSocket != null and currentSocket.isInRange(self):
|
||||
currentSocket.snapObject(self)
|
||||
|
||||
func throw():
|
||||
if !dragging:
|
||||
|
||||
+22
-2
@@ -2,13 +2,19 @@ class_name Socket
|
||||
extends Node3D
|
||||
|
||||
@export var snapPoint: Marker3D
|
||||
@export var snapArea: Area3D
|
||||
@export var snapDistance: float = 0.5
|
||||
@export var lockOnSnap: bool = true
|
||||
|
||||
var candidate: Pickupable = null
|
||||
var snappedObject: Pickupable = null
|
||||
|
||||
func is_in_range(object: Pickupable) -> bool:
|
||||
func _ready() -> void:
|
||||
if snapArea:
|
||||
snapArea.body_entered.connect(onBodyEntered)
|
||||
snapArea.body_exited.connect(onBodyExited)
|
||||
|
||||
func isInRange(object: Pickupable) -> bool:
|
||||
if object == null:
|
||||
return false
|
||||
|
||||
@@ -33,7 +39,7 @@ func getSnapTransform(object: Pickupable) -> Transform3D:
|
||||
return snapPoint.global_transform * anchorOffset.affine_inverse()
|
||||
|
||||
func snapObject(object: Pickupable):
|
||||
if not is_in_range(object):
|
||||
if not isInRange(object):
|
||||
return
|
||||
|
||||
var targetTransform := getSnapTransform(object)
|
||||
@@ -50,3 +56,17 @@ func snapObject(object: Pickupable):
|
||||
|
||||
snappedObject = object
|
||||
candidate = null
|
||||
|
||||
func onBodyEntered(body: Node3D):
|
||||
if body is RigidBody3D and body.get_parent() is Pickupable:
|
||||
var pickup = body.get_parent() as Pickupable
|
||||
pickup.currentSocket = self
|
||||
candidate = pickup
|
||||
|
||||
func onBodyExited(body: Node3D):
|
||||
if body is RigidBody3D and body.get_parent() is Pickupable:
|
||||
var pickup = body.get_parent() as Pickupable
|
||||
if pickup.currentSocket == self:
|
||||
pickup.currentSocket = null
|
||||
if candidate == pickup:
|
||||
candidate = null
|
||||
|
||||
Reference in New Issue
Block a user