/// <summary>
		/// Activates the Teleport function to a specific point.
		/// </summary>
		/// <param name="targetPoint">the point to teleport to</param>
		/// 
		public void Activate(Vector3 targetPoint)
		{
			if (!IsReady()) return;

			// calculate target point
			Vector3 startPoint = this.transform.position;
			Vector3 offset = targetPoint - this.transform.position;
			offset.y = 0;
			Vector3 endPoint = startPoint + offset;

			// activate transition
			switch (transitionType)
			{
				case TransitionType.Fade:
					transition = new Transition_Fade(endPoint, transitionTime, this.gameObject);
					break;

				case TransitionType.MoveLinear:
					transition = new Transition_Move(startPoint, endPoint, transitionTime, false);
					break;

				case TransitionType.MoveSmooth:
					transition = new Transition_Move(startPoint, endPoint, transitionTime, true);
					break;
			}
		}
    void Update()
    {
        if (button.GetButtonDown())
        {
            RaycastHit hit;
            if (rayComponent != null)
            {
                // ray component is there > query
                hit = rayComponent.GetRayTarget();
            }
            else
            {
                // no ray component, constryct raycast here
                // construct ray
                Ray ray = new Ray(transform.position, transform.forward);
                // do raycast
                Physics.Raycast(ray, out hit);
            }

            if ((hit.distance > 0) && hit.transform.gameObject.tag.Equals(groundTag))
            {
                // calculate target point
                Vector3 startPoint = offsetObject.position;
                Vector3 offset     = hit.point - this.transform.position;
                offset.y = 0;
                Vector3 endPoint = startPoint + offset;

                // activate transition
                transition = new Transition_Move(startPoint, endPoint, transitionTime, false);

                // disable ray while transitioning
                if (rayComponent != null)
                {
                    rayComponent.SetEnabled(false);
                }
            }
        }

        if (transition != null)
        {
            transition.Update(offsetObject);
            if (transition.IsFinished())
            {
                transition = null;
                // enable ray after transitioning
                if (rayComponent != null)
                {
                    rayComponent.SetEnabled(true);
                }
            }
        }
    }
Esempio n. 3
0
        /// <summary>
        /// Activates the Teleport function to a specific point.
        /// </summary>
        /// <param name="originPoint">the point to teleport from</param>
        /// <param name="targetPoint">the point to teleport to</param>
        ///
        public void Activate(Vector3 originPoint, Vector3 targetPoint)
        {
            if (!IsReady())
            {
                return;
            }

            if (teleportSound != null)
            {
                teleportSound.pitch = UnityEngine.Random.Range(0.9f, 1.1f);
                teleportSound.Play();
            }

            // calculate offset to target point (relativ to floor level, not camera height)
            originPoint.y = this.transform.position.y;
            Vector3 offset = targetPoint - originPoint;

            if (!allowVerticalMovement)
            {
                offset.y = 0;
            }

            Vector3 startPoint = this.transform.position;
            Vector3 endPoint   = startPoint + offset;

            // activate transition
            switch (transitionType)
            {
            case TransitionType.Fade:
                transition = new Transition_Fade(endPoint, transitionTime, this.gameObject);
                break;

            case TransitionType.MoveLinear:
                transition = new Transition_Move(startPoint, endPoint, transitionTime, false);
                break;

            case TransitionType.MoveSmooth:
                transition = new Transition_Move(startPoint, endPoint, transitionTime, true);
                break;
            }
        }