Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        /// <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));
        }
Exemplo n.º 3
0
        /// <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));
        }
Exemplo n.º 4
0
 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));
 }
Exemplo n.º 5
0
        /// <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;
                }
            }
        }