nordic2025/scripts/XRHand.cs

42 lines
1.2 KiB
C#

using Godot;
using System.Collections.Generic;
public partial class XRHand : XRController3D
{
List<Generic6DofJoint3D> joints = new();
[Export]
StaticBody3D body;
[Export]
float strength = 1.0f;
public void _Update(float delta)
{
if ((bool)GetInput("trigger_click"))
{
var query = new PhysicsShapeQueryParameters3D();
var sphere = new SphereShape3D();
sphere.Radius = 0.1f;
query.Shape = sphere;
query.CollideWithBodies = true;
query.CollideWithAreas = false;
query.Transform = ((Node3D)GetParent()).GlobalTransform;
var overlaps = GetWorld3D().DirectSpaceState.IntersectShape(query);
foreach (var fuckingcollider in overlaps)
{
var collider = (Node3D)fuckingcollider["collider"];
Generic6DofJoint3D joint = new();
joint.NodeA = GetPathTo(body);
joint.NodeB = collider.GetPath();
joints.Add(joint);
AddChild(joint);
}
} else if (joints.Count > 0) {
foreach (var joint in joints)
joint.QueueFree();
joints.Clear();
}
}
}