From b340fe21c7387eb4e2d7313e67503856567a4dbf Mon Sep 17 00:00:00 2001 From: minimata Date: Thu, 22 May 2025 17:55:48 +0200 Subject: [PATCH] fix: correctly detecting items horizontally in front of player --- player_controller/PlayerController.tscn | 3 ++- player_controller/Scripts/MantleSystem.cs | 17 +++++++++++++---- player_controller/Scripts/PlayerController.cs | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/player_controller/PlayerController.tscn b/player_controller/PlayerController.tscn index 22d838a..bc4aae9 100644 --- a/player_controller/PlayerController.tscn +++ b/player_controller/PlayerController.tscn @@ -187,7 +187,8 @@ target_position = Vector3(0, -0.75, 0) script = ExtResource("14_4coqe") [node name="WallInFrontRayCast3D" type="RayCast3D" parent="."] -transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 1.65, -0.5) +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 1.65, 0) +target_position = Vector3(0, -1.5, 0) [node name="StairsSystem" type="Node3D" parent="."] script = ExtResource("7_bmt5a") diff --git a/player_controller/Scripts/MantleSystem.cs b/player_controller/Scripts/MantleSystem.cs index 253b0f3..655c536 100644 --- a/player_controller/Scripts/MantleSystem.cs +++ b/player_controller/Scripts/MantleSystem.cs @@ -5,19 +5,28 @@ namespace PolarBears.PlayerControllerAddon; public partial class MantleSystem: Node3D { private RayCast3D _wallInFrontRaycast3D; + private Node3D _head; - public void Init(RayCast3D wallInFrontRaycast3D) + public void Init(RayCast3D wallInFrontRaycast3D, Node3D head) { _wallInFrontRaycast3D = wallInFrontRaycast3D; + _head = head; } public void CheckWallInFront() { + _wallInFrontRaycast3D.SetRotation(new Vector3( + _wallInFrontRaycast3D.Rotation.X, + _head.Rotation.Y, + _wallInFrontRaycast3D.Rotation.Z)); + var collider = _wallInFrontRaycast3D.GetCollider(); - if (collider != null) + if (collider == null) { - GD.Print(_wallInFrontRaycast3D.GetCollisionPoint()); - GD.Print(_wallInFrontRaycast3D.GetCollisionNormal()); + return; } + + GD.Print(_wallInFrontRaycast3D.GetCollisionPoint()); + GD.Print(_wallInFrontRaycast3D.GetCollisionNormal()); } } diff --git a/player_controller/Scripts/PlayerController.cs b/player_controller/Scripts/PlayerController.cs index cbe4c18..23029a7 100644 --- a/player_controller/Scripts/PlayerController.cs +++ b/player_controller/Scripts/PlayerController.cs @@ -93,7 +93,7 @@ public partial class PlayerController : CharacterBody3D StairsSystem.Init(stairsBelowRayCast3D, stairsAheadRayCast3D, cameraSmooth); MantleSystem = GetNode("MantleSystem"); - MantleSystem.Init(wallInFrontRaycast3D); + MantleSystem.Init(wallInFrontRaycast3D, Head); CapsuleCollider = GetNode("CapsuleCollider");