mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2026-03-23 08:06:50 +00:00
mass commit of laziness
This commit is contained in:
parent
ce992c70ee
commit
6d4fc549d9
167 changed files with 5471 additions and 675 deletions
|
|
@ -1,9 +1,7 @@
|
|||
using ABI_RC.Core.InteractionSystem.Base;
|
||||
using ABI_RC.Core.UI;
|
||||
using ABI.CCK.Components;
|
||||
using NAK.SuperAwesomeMod.Components;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
||||
|
|
@ -108,7 +106,8 @@ namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
|||
// Check if there are pickups or interactables in immediate proximity
|
||||
if ((flags & RaycastFlags.ProximityInteract) != 0)
|
||||
{
|
||||
ProcessProximityHits(ray, ref result); // TODO: Offset origin to center of palm based on hand type
|
||||
Ray proximityRay = GetProximityRayFromImpl();
|
||||
ProcessProximityHits(proximityRay, ref result);
|
||||
if (result.isProximityHit)
|
||||
return result;
|
||||
}
|
||||
|
|
@ -150,7 +149,7 @@ namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
|||
int proximityHits = Physics.SphereCastNonAlloc(
|
||||
ray.origin,
|
||||
RAYCAST_SPHERE_RADIUS,
|
||||
Vector3.up,
|
||||
ray.direction,
|
||||
_hits,
|
||||
0.001f,
|
||||
_layerMask,
|
||||
|
|
@ -313,6 +312,7 @@ namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
|||
result.hitInteractable = _workingInteractable;
|
||||
hitValidComponent = true;
|
||||
}
|
||||
|
||||
if (_workingGameObject.TryGetComponent(out _workingPickupable)
|
||||
&& _workingPickupable.CanPickup
|
||||
&& IsCVRPickupableWithinRange(_workingPickupable, hit))
|
||||
|
|
@ -343,6 +343,7 @@ namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
|||
#region Protected Methods
|
||||
|
||||
protected abstract Ray GetRayFromImpl();
|
||||
protected abstract Ray GetProximityRayFromImpl();
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
|
|
@ -375,10 +376,10 @@ namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
|||
return hit.distance <= pickupable.MaxGrabDistance;
|
||||
}
|
||||
|
||||
private static bool IsCVRCanvasWrapperWithinRange(CVRCanvasWrapper canvasWrapper, RaycastHit hit)
|
||||
{
|
||||
return hit.distance <= canvasWrapper.MaxInteractDistance;
|
||||
}
|
||||
// private static bool IsCVRCanvasWrapperWithinRange(CVRCanvasWrapper canvasWrapper, RaycastHit hit)
|
||||
// {
|
||||
// return hit.distance <= canvasWrapper.MaxInteractDistance;
|
||||
// }
|
||||
|
||||
#endregion Utility Because Original Methods Are Broken
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,10 +4,24 @@ namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
|||
{
|
||||
public class CVRPlayerRaycasterMouse : CVRPlayerRaycaster
|
||||
{
|
||||
private readonly Camera _camera;
|
||||
#region Constructor
|
||||
|
||||
public CVRPlayerRaycasterMouse(Transform rayOrigin, Camera camera) : base(rayOrigin) { _camera = camera; }
|
||||
|
||||
private readonly Camera _camera;
|
||||
|
||||
#endregion Constructor
|
||||
|
||||
#region Overrides
|
||||
|
||||
protected override Ray GetRayFromImpl() => Cursor.lockState == CursorLockMode.Locked
|
||||
? new Ray(_camera.transform.position, _camera.transform.forward)
|
||||
: _camera.ScreenPointToRay(Input.mousePosition);
|
||||
|
||||
protected override Ray GetProximityRayFromImpl() => Cursor.lockState == CursorLockMode.Locked
|
||||
? new Ray(_camera.transform.position, _camera.transform.forward)
|
||||
: _camera.ScreenPointToRay(Input.mousePosition);
|
||||
|
||||
#endregion Overrides
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,44 @@ namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
|||
{
|
||||
public class CVRPlayerRaycasterTransform : CVRPlayerRaycaster
|
||||
{
|
||||
public CVRPlayerRaycasterTransform(Transform rayOrigin) : base(rayOrigin) { }
|
||||
#region Proximity Grab
|
||||
|
||||
public const float ProximityGrabRadiusScaleDefault = 0.1f;
|
||||
private float _proximityDetectionRadiusRelativeValue = ProximityGrabRadiusScaleDefault;
|
||||
private float ProximityDetectionRadius => _proximityDetectionRadiusRelativeValue * PlayerSetup.Instance.GetPlaySpaceScale();
|
||||
|
||||
#endregion Proximity Grab
|
||||
|
||||
#region Constructor
|
||||
|
||||
public CVRPlayerRaycasterTransform(Transform rayOrigin, CVRHand hand) : base(rayOrigin) { _hand = hand; }
|
||||
|
||||
private readonly CVRHand _hand;
|
||||
|
||||
#endregion Constructor
|
||||
|
||||
#region Overrides
|
||||
|
||||
protected override Ray GetRayFromImpl() => new(_rayOrigin.position, _rayOrigin.forward);
|
||||
|
||||
protected override Ray GetProximityRayFromImpl()
|
||||
{
|
||||
Vector3 handPosition = _rayOrigin.position;
|
||||
Vector3 handRight = _rayOrigin.right;
|
||||
|
||||
// Offset the detection center forward, so we don't grab stuff behind our writs
|
||||
handPosition += _rayOrigin.forward * (ProximityDetectionRadius * 0.25f);
|
||||
|
||||
// Offset the detection center away from the palm, so we don't grab stuff behind our hand palm
|
||||
Vector3 palmOffset = handRight * (ProximityDetectionRadius * 0.75f);
|
||||
if (_hand == CVRHand.Left)
|
||||
handPosition += palmOffset;
|
||||
else
|
||||
handPosition -= palmOffset;
|
||||
|
||||
return new Ray(handPosition, _hand == CVRHand.Left ? handRight : -handRight);
|
||||
}
|
||||
|
||||
#endregion Overrides
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,6 @@
|
|||
using ABI_RC.Core.InteractionSystem.Base;
|
||||
using ABI_RC.Core.UI;
|
||||
using NAK.SuperAwesomeMod.Components;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
||||
|
|
@ -19,6 +17,7 @@ namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
|||
// Main raycast hit info
|
||||
public RaycastHit hit;
|
||||
public RaycastHit? waterHit; // Only valid if hitWater is true
|
||||
public Vector2 hitScreenPoint; // Screen coordinates of the hit
|
||||
|
||||
// Specific hit components
|
||||
public Pickupable hitPickupable;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace ABI_RC.Core.Player.Interaction.RaycastImpl
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue