Created first version of SimpleSocket to test socket with SimpleKey (Any pickupable with socket)

This commit is contained in:
2026-09-26 22:19:20 +03:00
parent 6af29d4611
commit 2cc2d59be9
5 changed files with 61 additions and 7 deletions
+5
View File
@@ -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
View File
@@ -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