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