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.
|
/// 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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user