/// <summary> /// Get the red ray direction according to a prism. /// </summary> /// <param name="direction"></param> /// <returns></returns> private Direction GetRedRayDirection(Direction direction) { var redRayDirection = DirectionUtility.GetDirectionAsVector3(direction); redRayDirection = Quaternion.AngleAxis(0, Vector3.up) * redRayDirection; return(DirectionUtility.ToDirection(redRayDirection)); }
/// <summary> /// Get the blue ray direction according to a prism. /// </summary> /// <param name="direction"></param> /// <returns></returns> private Direction GetBlueRayDirection(Direction direction) { var blueRayDirection = DirectionUtility.GetDirectionAsVector3(direction); blueRayDirection = Quaternion.AngleAxis(90, Vector3.up) * blueRayDirection; return(DirectionUtility.ToDirection(blueRayDirection)); }
/// <summary> /// Get the green ray direction according to a prism. /// </summary> /// <param name="direction"></param> /// <returns></returns> private Direction GetGreenRayDirection(Direction direction) { var greenRayDirection = DirectionUtility.GetDirectionAsVector3(direction); greenRayDirection = Quaternion.AngleAxis(-90, Vector3.up) * greenRayDirection; return(DirectionUtility.ToDirection(greenRayDirection)); }
public void DirectionUtilityReturnsValidDirectionAsVector3Passes() { Assert.AreEqual(new Vector3(1, 0, 0), DirectionUtility.GetDirectionAsVector3(Direction.East)); Assert.AreEqual(new Vector3(1, 1, 0), DirectionUtility.GetDirectionAsVector3(Direction.NorthEast)); Assert.AreEqual(new Vector3(0, 1, 0), DirectionUtility.GetDirectionAsVector3(Direction.North)); Assert.AreEqual(new Vector3(-1, 1, 0), DirectionUtility.GetDirectionAsVector3(Direction.NorthWest)); Assert.AreEqual(new Vector3(-1, 0, 0), DirectionUtility.GetDirectionAsVector3(Direction.West)); Assert.AreEqual(new Vector3(-1, -1, 0), DirectionUtility.GetDirectionAsVector3(Direction.SouthWest)); Assert.AreEqual(new Vector3(0, -1, 0), DirectionUtility.GetDirectionAsVector3(Direction.South)); Assert.AreEqual(new Vector3(1, -1, 0), DirectionUtility.GetDirectionAsVector3(Direction.SouthEast)); }
/// <summary> /// Draw a line in a direction /// </summary> public void Emit() { if (Enabled) { if (LineRenderer.enabled != true) { LineRenderer.enabled = true; } //Debug.Log(string.Format("Ray receiver: {0}", RayReceiver)); // Update the line renderer color SetGradientColor(); // Set line initial position LineRenderer.SetPosition(0, LineRenderer.transform.position); // Set the line renderer position count to two positions (only one segment) LineRenderer.positionCount = 2; int layerMask = 1 << LayerMask.NameToLayer("ActiveItems"); // Check if the ray hits an object in the input direction RaycastHit hit; if (Physics.Raycast( LineRenderer.transform.position, DirectionUtility.GetDirectionAsVector3(Direction), out hit, Mathf.Infinity, layerMask)) { // If the ray hits an object with a collider if (hit.collider) { // Set the end position to the object that was hit position LineRenderer.SetPosition(1, hit.transform.position + VectorOffset); // Check if the object that was hit is a HitObject var rayReceiver = hit.transform.gameObject.GetComponent <RaySensitive>(); // If the receiver hit by the ray is the current receiver if (rayReceiver != null && rayReceiver == RayReceiver) { return; } DeleteRayReceiver(); if (rayReceiver != null) { // Store the new HitObject RayReceiver = rayReceiver; RayReceiver.HitEnter(this); } } // If the ray hits an object with not collider and object and a current HitObject is set else { DeleteRayReceiver(); } } // If the ray hits nothing else { // Draw a line in the input direction to the infinite LineRenderer.SetPosition(1, DirectionUtility.GetDirectionAsVector3(Direction) * 5000); DeleteRayReceiver(); } } else { if (LineRenderer.enabled != false) { LineRenderer.enabled = false; } } }