//Can the trigger be used?
        public virtual bool CanUse()
        {
            //Return false if the trigger is already used
            if (InUse || (BaseTrigger.currentUsedTrigger != null && BaseTrigger.currentUsedTrigger.InUse))
            {
                DisplayInUse();
                return(false);
            }

            if (this.useDistance == -1)
            {
                return(true);
            }

            //Return false if the player is not in range
            if (!InRange)
            {
                DisplayOutOfRange();
                return(false);
            }

            if (this.m_CheckBlocking)
            {
                Vector3 targetPosition = UnityTools.GetBounds(gameObject).center;
                Vector3 playerPosition = PlayerInfo.transform.position;
                Bounds  bounds         = PlayerInfo.bounds;
                playerPosition.y += bounds.center.y + bounds.extents.y;
                Vector3  direction = targetPosition - playerPosition;
                Collider collider  = PlayerInfo.collider;
                collider.enabled = false;
                RaycastHit hit;

                LayerMask layerMask = Physics.DefaultRaycastLayers;
                bool      raycast   = Physics.Raycast(playerPosition, direction, out hit, float.PositiveInfinity, layerMask, QueryTriggerInteraction.Collide);
                collider.enabled = true;
                if (raycast && !UnityEngine.Object.ReferenceEquals(hit.transform, transform))
                {
                    return(false);
                }
            }

            Animator animator = PlayerInfo.animator;

            if (PlayerInfo != null && animator != null)
            {
                for (int j = 0; j < animator.layerCount; j++)
                {
                    if (animator.IsInTransition(j))
                    {
                        return(false);
                    }
                }
            }
            //Trigger can be used
            return(true);
        }
Ejemplo n.º 2
0
        //Can the trigger be used?
        public virtual bool CanUse()
        {
            //Return false if the trigger is already used
            if (InUse || (BaseTrigger.currentUsedTrigger != null && BaseTrigger.currentUsedTrigger.InUse))
            {
                DisplayInUse();
                return(false);
            }

            if (this.useDistance == -1)
            {
                return(true);
            }

            //Return false if the player is not in range
            if (!InRange)
            {
                DisplayOutOfRange();
                return(false);
            }

            Vector3 targetPosition = UnityTools.GetBounds(gameObject).center;
            Vector3 playerPosition = PlayerInfo.transform.position;
            Bounds  bounds         = PlayerInfo.bounds;

            playerPosition.y += bounds.center.y + bounds.extents.y;
            Vector3  direction = targetPosition - playerPosition;
            Collider collider  = PlayerInfo.collider;

            collider.enabled = false;
            RaycastHit hit;
            bool       raycast = Physics.Raycast(playerPosition, direction, out hit);

            collider.enabled = true;
            if (raycast && hit.transform != transform && gameObject != PlayerInfo.gameObject)
            {
                return(false);
            }

            //Trigger can be used
            return(true);
        }