Added InteractionPointer focusDistance

This commit is contained in:
Pascal Serrarens 2022-01-30 15:26:22 +01:00
parent c02a9fffe5
commit a222f1e64f

View File

@ -129,6 +129,12 @@ namespace Passer {
/// The value is null when the pointer is not reaching any object. /// The value is null when the pointer is not reaching any object.
public GameObject objectInFocus; public GameObject objectInFocus;
/// <summary>
/// Distance to the objectInFocus
/// </summary>
/// This is float.infintiy when no object is in focus
public float focusDistance;
//protected new EventSystem eventSystem; //protected new EventSystem eventSystem;
//protected PointerEventData data; //protected PointerEventData data;
protected InteractionModule interactionModule; protected InteractionModule interactionModule;
@ -332,6 +338,7 @@ namespace Passer {
focusPointObj.SetActive(false); focusPointObj.SetActive(false);
focusPointObj.transform.position = transform.position; focusPointObj.transform.position = transform.position;
objectInFocus = null; objectInFocus = null;
focusDistance = float.PositiveInfinity;
hasClicked = false; hasClicked = false;
} }
} }
@ -349,9 +356,11 @@ namespace Passer {
focusPosition = hit.point; focusPosition = hit.point;
focusRotation = Quaternion.LookRotation(hit.normal); focusRotation = Quaternion.LookRotation(hit.normal);
objectInFocus = hit.transform.gameObject; objectInFocus = hit.transform.gameObject;
focusDistance = hit.distance;
} }
else { else {
objectInFocus = null; objectInFocus = null;
focusDistance = float.PositiveInfinity;
} }
focusPointObj.transform.position = focusPosition; focusPointObj.transform.position = focusPosition;
@ -379,7 +388,6 @@ namespace Passer {
focusPointObj.transform.position = focusPosition; // bezierPositions[bezierPositions.Length - 1]; focusPointObj.transform.position = focusPosition; // bezierPositions[bezierPositions.Length - 1];
focusPointObj.transform.rotation = focusRotation; // Quaternion.LookRotation(normal, transform.forward); focusPointObj.transform.rotation = focusRotation; // Quaternion.LookRotation(normal, transform.forward);
for (int i = 0; i < bezierPositions.Length; i++) for (int i = 0; i < bezierPositions.Length; i++)
bezierPositions[i] = focusPointObj.transform.InverseTransformPoint(bezierPositions[i]); bezierPositions[i] = focusPointObj.transform.InverseTransformPoint(bezierPositions[i]);
@ -406,21 +414,22 @@ namespace Passer {
} }
intermediatePosition = Vector3.forward * distance; intermediatePosition = Vector3.forward * distance;
Debug.DrawLine(this.transform.position, transform.TransformPoint(intermediatePosition)); //Debug.DrawLine(this.transform.position, transform.TransformPoint(intermediatePosition));
RaycastHit rayHit; RaycastHit rayHit;
if (Physics.Raycast(transform.TransformPoint(intermediatePosition), Vector3.down, out rayHit)) { if (Physics.Raycast(transform.TransformPoint(intermediatePosition), Vector3.down, out rayHit)) {
normal = rayHit.normal; normal = rayHit.normal;
focusObject = rayHit.transform.gameObject; focusObject = rayHit.transform.gameObject;
focusDistance = Vector3.Distance(transform.position, rayHit.point);
endPosition = transform.InverseTransformPoint(rayHit.point); endPosition = transform.InverseTransformPoint(rayHit.point);
for (int i = 0; i <= nCurveSegments; i++) for (int i = 0; i <= nCurveSegments; i++)
curvePoints[i] = GetPoint(i / (float)nCurveSegments, transform); curvePoints[i] = GetPoint(i / (float)nCurveSegments, transform);
} }
else { else {
normal = Vector3.up; normal = Vector3.up;
focusObject = null; focusObject = null;
focusDistance = float.PositiveInfinity;
} }
return curvePoints; return curvePoints;
@ -484,6 +493,7 @@ namespace Passer {
Vector3 segVelocity = transform.forward * forwardSpeed; Vector3 segVelocity = transform.forward * forwardSpeed;
normal = Vector3.up; normal = Vector3.up;
hitObject = null; hitObject = null;
focusDistance = float.PositiveInfinity;
for (int i = 1; i < nCurveSegments + 1; i++) { for (int i = 1; i < nCurveSegments + 1; i++) {
if (hitObject != null) { if (hitObject != null) {
@ -501,6 +511,7 @@ namespace Passer {
if (Physics.Raycast(curvePoints[i - 1], segVelocity.normalized, out hit, resolution)) { if (Physics.Raycast(curvePoints[i - 1], segVelocity.normalized, out hit, resolution)) {
normal = hit.normal; normal = hit.normal;
hitObject = hit.transform.gameObject; hitObject = hit.transform.gameObject;
focusDistance = Vector3.Distance(transform.position, hit.point);
// set next position to the position where we hit the physics object // set next position to the position where we hit the physics object
curvePoints[i] = curvePoints[i - 1] + segVelocity.normalized * hit.distance; curvePoints[i] = curvePoints[i - 1] + segVelocity.normalized * hit.distance;
@ -511,9 +522,11 @@ namespace Passer {
} }
} }
} }
#endregion #endregion
#region Spherecast #region Spherecast
/// <summary>The radius of the sphere in a SphereCast</summary> /// <summary>The radius of the sphere in a SphereCast</summary>
public float radius = 0.1F; public float radius = 0.1F;
@ -521,16 +534,19 @@ namespace Passer {
RaycastHit hit; RaycastHit hit;
if (Physics.SphereCast(transform.position, radius, transform.forward, out hit, maxDistance)) { if (Physics.SphereCast(transform.position, radius, transform.forward, out hit, maxDistance)) {
objectInFocus = hit.transform.gameObject; objectInFocus = hit.transform.gameObject;
focusDistance = hit.distance;
focusPointObj.transform.position = hit.point; focusPointObj.transform.position = hit.point;
focusPointObj.transform.rotation = Quaternion.LookRotation(hit.normal, transform.forward); focusPointObj.transform.rotation = Quaternion.LookRotation(hit.normal, transform.forward);
} }
else { else {
objectInFocus = null; objectInFocus = null;
focusDistance = float.PositiveInfinity;
focusPointObj.transform.position = transform.position + transform.forward * maxDistance; focusPointObj.transform.position = transform.position + transform.forward * maxDistance;
focusPointObj.transform.rotation = Quaternion.identity; focusPointObj.transform.rotation = Quaternion.identity;
} }
} }
#endregion #endregion
#endregion #endregion