/// <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++; } }
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; }
/// <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); }
/// <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); }
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); } }
/// <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."); }
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); } } }
public CollisionListener(ABCollider _collider) { Collider = _collider; LastStepCollisions = new List <ABCollider>(); }
public void OnRightWallTriggerLeave(ABCollider _collider) { isCollidingRightWall = false; }
public void OnLeftWallTriggerLeave(ABCollider _collider) { isCollidingLeftWall = false; }