Exemplo n.º 1
0
        /// <summary>
        /// Handle the collision for this listener against another collider.
        /// </summary>
        /// <param name="_colliding"></param>
        public void Handle(ABCollider _colliding)
        {
            if (_colliding.RigidBody.GameObject == null)
            {
                LastStepCollisions.Remove(_colliding);
                return;
            }

            if (Collider.RigidBody.GameObject == null)
            {
                _colliding.CollisionListener.LastStepCollisions.Remove(Collider);
                return;
            }

            // Don't allow colliders of the same object root to trigger each other.
            if (Collider.RigidBody.GameObject.transform.root == _colliding.RigidBody.GameObject.transform.root)
            {
                return;
            }

            if (Collider.IsTrigger)
            {
                HandleTrigger(_colliding);
            }
            else
            {
                HandleCollider(_colliding);
            }
        }
 public void OnRightWallTriggerStay(ABCollider _collider)
 {
     if (_collider.RigidBody.GameObject.tag == "Tile" || _collider.RigidBody.GameObject.tag == "BouncePad")
     {
         isCollidingRightWall = true;
     }
 }
 public void OnGroundTriggerStay(ABCollider _collider)
 {
     if (_collider.RigidBody.GameObject.tag == "Coin")
     {
         return;
     }
     isGrounded = true;
 }
 public void OnGroundTriggerLeave(ABCollider _collider)
 {
     if (_collider.RigidBody.GameObject.tag == "Coin")
     {
         return;
     }
     isGrounded = false;
 }
 public void OnBodyCollision(ABCollider _collider)
 {
     if (_collider.RigidBody.GameObject.tag == "Coin")
     {
         var pos = World.Current.WorldPointToGridPoint(_collider.Position);
         FindObjectOfType <WorldController>().RemoveCoinPickup(pos);
         score++;
     }
 }
Exemplo n.º 6
0
 public void OnCollision(ABCollider _collider)
 {
     if (_collider.RigidBody.GameObject.tag == "Player")
     {
         if (levelManager != null)
         {
             levelManager.OnPlayerCaught();
         }
     }
 }
 public void OnGroundTriggerStay(ABCollider _collider)
 {
     // Set grounded to true during stay as if the trigger enters a new tile, and leaves the previous after, grounded will be false
     // even though it is actually grounded.
     if (_collider.RigidBody.GameObject.tag == "Coin")
     {
         return;
     }
     isGrounded = true;
 }
Exemplo n.º 8
0
        /// <summary>
        /// Adds a collider to the world if it doesn't already exist.
        /// </summary>
        /// <param name="_collider"></param>
        public void AddCollider(ABCollider _collider)
        {
            if (Colliders.Contains(_collider))
            {
                Debug.LogWarning("Can't add duplicate collider!");
                return;
            }

            Colliders.Add(_collider);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Check if a collider is exiting this listeners collider.
        /// </summary>
        /// <param name="_collider"></param>
        public void HandleExit(ABCollider _collider)
        {
            if (_collider.RigidBody.GameObject == null)
            {
                //if (LastStepCollisions.Contains(_collider) && _collider.IsTrigger)
                //{
                //    if (OnTriggerLeave != null)
                //    {
                //        OnTriggerLeave(_collider);
                //    }
                //}

                //LastStepCollisions.Remove(_collider);
                return;
            }

            if (Collider.RigidBody.GameObject == null)
            {
                //if (_collider.CollisionListener.LastStepCollisions.Contains(Collider) && Collider.IsTrigger)
                //{
                //    if (_collider.CollisionListener.OnTriggerLeave != null)
                //    {
                //        _collider.CollisionListener.OnTriggerLeave(_collider);
                //    }
                //}

                //_collider.CollisionListener.LastStepCollisions.Remove(Collider);
                return;
            }

            if (Collider.RigidBody.GameObject.transform.root == _collider.RigidBody.GameObject.transform.root)
            {
                return;
            }

            // If the collider wasn't previously colliding with this listeners collider, then break out.
            if (!LastStepCollisions.Contains(_collider))
            {
                return;
            }

            // Otherwise handle exit callback based on collider type.
            if (Collider.IsTrigger)
            {
                if (OnTriggerLeave != null)
                {
                    OnTriggerLeave(_collider);
                }
            }

            // Then remove the collider from the last colliding colliders list.
            LastStepCollisions.Remove(_collider);
        }
Exemplo n.º 10
0
        private void HandleCollider(ABCollider _collider)
        {
            // Call OnCollision callback only if the collider hasnt previously been
            // colliding with this object before leaving / seperating from it.
            if (!LastStepCollisions.Contains(_collider))
            {
                if (OnCollision != null)
                {
                    OnCollision(_collider);
                }

                LastStepCollisions.Add(_collider);
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// Removes a collider from the world if it exists.
        /// </summary>
        /// <param name="_collider"></param>
        public void RemoveCollider(ABCollider _collider)
        {
            if (Colliders.Contains(_collider))
            {
                Colliders.Remove(_collider);

                // Remove the collider from the last step collisions list of any collider it was colliding with if it was
                // destroyed before it exited.
                foreach (var collision in _collider.CollisionListener.LastStepCollisions)
                {
                    if (collision.CollisionListener.LastStepCollisions.Contains(_collider))
                    {
                        collision.CollisionListener.LastStepCollisions.Remove(_collider);
                    }
                }
                return;
            }

            Debug.LogWarning("Attempted to remove a collider from the world that didn't exist.");
        }
Exemplo n.º 12
0
        private void HandleTrigger(ABCollider _trigger)
        {
            // if the colliding object didn't collide with this collider last physics step
            if (!LastStepCollisions.Contains(_trigger))
            {
                // then execute the trigger enter callback
                if (OnTriggerEnter != null)
                {
                    OnTriggerEnter(_trigger);
                }

                LastStepCollisions.Add(_trigger);
            }
            else
            {
                if (OnTriggerStay != null)
                {
                    OnTriggerStay(_trigger);
                }
            }
        }
Exemplo n.º 13
0
 public CollisionListener(ABCollider _collider)
 {
     Collider           = _collider;
     LastStepCollisions = new List <ABCollider>();
 }
 public void OnRightWallTriggerLeave(ABCollider _collider)
 {
     isCollidingRightWall = false;
 }
 public void OnLeftWallTriggerLeave(ABCollider _collider)
 {
     isCollidingLeftWall = false;
 }