Example #1
0
 public void ApplyStatusToAll(ColliderStatus status)
 {
     for (int i = 0; i < m_Items.Length; i++)
     {
         if (m_Items[i])
         {
             m_Items[i].Status = status;
         }
     }
 }
Example #2
0
        /// <summary>
        /// Configures the collider for the specified behavior.
        /// </summary>
        /// <remarks>
        /// <para>
        /// See the
        /// <a href="http://docs.unity3d.com/Manual/CollidersOverview.html">Collider Overview</a>
        /// page in the Unity Manual for details.
        /// </para>
        /// <para>
        /// This method is not appropriate for use with compound rigidbody collider configurations
        /// since it only updates the specified collider and its ridigbody.  It does not try to
        /// locate other colliders that might be associated with the rigidbody.
        /// </para>
        /// <para>
        /// Transitions between rigidbody and static behaviors is not supported since doing so
        /// would required adding and destroying rigidbodys.
        /// </para>
        /// </remarks>
        /// <param name="collider">The collider to update.</param>
        /// <param name="status">The desired behavior type.</param>
        public static void SetStatus(this Collider collider, ColliderStatus status)
        {
            if (status == ColliderStatus.Disabled && !collider)
            {
                return;
            }

            var rigidbody = collider.GetAssociatedRigidBody();

            switch (status)
            {
            case ColliderStatus.KinematicCollider:

                if (rigidbody)
                {
                    rigidbody.detectCollisions = true;
                    rigidbody.isKinematic      = true;
                    collider.isTrigger         = false;
                    collider.enabled           = true;
                }
                else
                {
                    Debug.LogErrorFormat(
                        collider, BadRigidBodyTransition, collider.GetStatus(), status);
                }

                break;

            case ColliderStatus.KinematicTrigger:

                if (rigidbody)
                {
                    rigidbody.detectCollisions = true;
                    rigidbody.isKinematic      = true;
                    collider.isTrigger         = true;
                    collider.enabled           = true;
                }
                else
                {
                    Debug.LogErrorFormat(
                        collider, BadRigidBodyTransition, collider.GetStatus(), status);
                }

                break;

            case ColliderStatus.Disabled:

                if (collider)
                {
                    collider.enabled = false;
                }

                break;

            case ColliderStatus.RigidbodyCollider:

                if (rigidbody)
                {
                    rigidbody.detectCollisions = true;
                    rigidbody.isKinematic      = false;
                    collider.isTrigger         = false;
                    collider.enabled           = true;
                }
                else
                {
                    Debug.LogErrorFormat(
                        collider, BadRigidBodyTransition, collider.GetStatus(), status);
                }

                break;

            case ColliderStatus.RigidbodyTrigger:

                if (rigidbody)
                {
                    rigidbody.detectCollisions = true;
                    rigidbody.isKinematic      = false;
                    collider.isTrigger         = true;
                    collider.enabled           = true;
                }
                else
                {
                    Debug.LogErrorFormat(
                        collider, BadRigidBodyTransition, collider.GetStatus(), status);
                }

                break;

            case ColliderStatus.StaticCollider:

                if (rigidbody)
                {
                    Debug.LogErrorFormat(
                        collider, BadStaticTransition, collider.GetStatus(), status);
                }
                else
                {
                    collider.isTrigger = false;
                    collider.enabled   = true;
                }

                break;

            case ColliderStatus.StaticTrigger:

                if (rigidbody)
                {
                    Debug.LogErrorFormat(
                        collider, BadStaticTransition, collider.GetStatus(), status);
                }
                else
                {
                    collider.isTrigger = true;
                    collider.enabled   = true;
                }

                break;
            }
        }
        /*
         * Design notes:
         *
         * Custom editors exist for this class.  In order to reduce hard coded field names,
         * the fields are organized into sections. Take care when refactoring field names that
         * are marked as being used in the editor, and make sure you understand the custom
         * editor design before rearranging, adding, or deleting fields.
         */

        #region Body Parts (Editor Section)

        public sealed override void ApplyBodyPartStatus(ColliderStatus status)
        {
            CheckInitializeBodyParts();
            m_Parts.ApplyStatusToAll(status);
        }
 /// <summary>
 /// Applies the colider status to all body parts.
 /// </summary>
 /// <param name="status">The desired status.</param>
 public abstract void ApplyBodyPartStatus(ColliderStatus status);