예제 #1
0
        /// <summary>
        /// Returns the ghost from posessing whatever it is currently haunting to its true form.
        /// </summary>
        public void EndHaunt(GameObject overrideHauntedObject = null, bool useTransition = true, float transitionDuration = .55f)
        {
            if (haunted)
            {
                // store return position so we can raycast to it and make sure we don't cross any boundaries
                Vector3 destination       = haunted.GetReturnPosition();
                Vector3 returnPos         = destination;
                Vector3 destinationVector = destination - transform.position;

                RaycastHit hit;
                if (Physics.CapsuleCast(
                        transform.position,
                        transform.position + collider.height * Vector3.up,
                        collider.radius,
                        destinationVector, out hit, destinationVector.magnitude, hauntReturnColliders))
                {
                    returnPos = hit.point - destinationVector.normalized * collider.radius * 1.1f;
                }

                transform.position = GhostTools.GroundPoint(returnPos);

                if (useTransition && GhostTools.SafeToInstantiate(gameObject))
                {
                    GameObject hauntedObject = overrideHauntedObject ? overrideHauntedObject : haunted.gameObject;
                    SpawnTransitionObject(transform.position, hauntedObject, transitionDuration);
                }
                haunted.OnUnHaunted();
            }

            playMaker.FsmVariables.GetFsmFloat("transitionDuration").Value = transitionDuration + hauntTransitionOffset.Value;
            playMaker.SendEvent("endHaunt");
            haunted = null;

            burningCandles.Value = 0;
        }
예제 #2
0
    void OnDrawGizmosSelected()
    {
        Vector3 point = GhostTools.GroundPoint(transform.position);

        Gizmos.color = Color.yellow;
        Gizmos.DrawWireSphere(transform.position, .5f);

        Gizmos.color = Color.cyan;
        Gizmos.DrawLine(transform.position, point);
        Gizmos.DrawWireSphere(point, .25f);
    }