public static void NotifyTriggerEnter(Collider c, GameObject caller, OnTriggerExit onTriggerExit) { ReliableOnTriggerExit thisComponent = null; ReliableOnTriggerExit[] ftncs = c.gameObject.GetComponents <ReliableOnTriggerExit>(); foreach (ReliableOnTriggerExit ftnc in ftncs) { if (ftnc.thisCollider == c) { thisComponent = ftnc; break; } } if (thisComponent == null) { thisComponent = c.gameObject.AddComponent <ReliableOnTriggerExit>(); thisComponent.thisCollider = c; } // Removing a Rigidbody while the collider is in contact will call OnTriggerEnter twice, so need to check to make sure it isn't in the list twice if (thisComponent.waitingForOnTriggerExit.ContainsKey(caller) == false) { thisComponent.waitingForOnTriggerExit.Add(caller, onTriggerExit); thisComponent.enabled = true; } else { thisComponent.ignoreNotifyTriggerExit = true; thisComponent.waitingForOnTriggerExit[caller].Invoke(c); thisComponent.ignoreNotifyTriggerExit = false; } }
private void OnTriggerExit2D(Collider2D other) { if (IsPenguin(other)) { OnTriggerExit.Invoke(currentPenguin); } }
private void OnCollisionExit(Collision collision) { if (OnTriggerExit != null && IsTriggerCollision(collision)) { _deltaForceMod = _pushDeltaForceMod; OnTriggerExit.Invoke(); } }
void OnTriggerExit2D(Collider2D other) { if (!enabled || other.gameObject != PlayerManager.Instance.LocalPlayer.gameObject) { return; } OnTriggerExit?.Invoke(this); }
/// <summary> /// Updates the lists that handle OnEnter and OnExit detection. /// Fires OnExit event if an object has left the area. /// </summary> /// <param name="deltaTime">Time in milliseconds since last update.</param> public void Update(double deltaTime) { for (int i = triggeredGameObj.Count - 1; i >= 0; i--) { if (!triggeredThisFrame.Contains(triggeredGameObj[i])) { OnTriggerExit?.Invoke(this, triggeredGameObj[i], Side.Unknown); triggeredGameObj.Remove(triggeredGameObj[i]); } } triggeredThisFrame.Clear(); }
public void HandlePhysicsEvents() { for (int i = 0; i < currentlyCollidingWith.Count; i++) { if (lastCollidedWith.Contains(currentlyCollidingWith[i])) { //Collided with it last frame. if (coll.isTrigger) { OnTriggerStay?.Invoke(currentlyCollidingWith[i]); } else { OnCollisionStay?.Invoke(new TFCollision(currentlyCollidingWith[i])); } } else { //Did not collide with last frame. if (coll.isTrigger) { OnTriggerEnter?.Invoke(currentlyCollidingWith[i]); } else { OnCollisionEnter?.Invoke(new TFCollision(currentlyCollidingWith[i])); } } } for (int w = 0; w < lastCollidedWith.Count; w++) { //If we've exited collision with a collider. if (!currentlyCollidingWith.Contains(lastCollidedWith[w])) { if (coll.isTrigger) { OnTriggerExit?.Invoke(lastCollidedWith[w]); } else { OnCollisionExit?.Invoke(new TFCollision(lastCollidedWith[w])); } } } lastCollidedWith = new List <TFCollider>(currentlyCollidingWith); currentlyCollidingWith.Clear(); }
private void OnTriggerExit2D(Collider2D otherCollider) { OnTriggerExit?.Invoke(otherCollider); }
void OnTriggerExit2D(Collider2D collider) { OnTriggerExit?.Invoke(collider); }
private void OnTriggerExit2D(Collider2D other) { OnTriggerExit?.Invoke(other, gameObject); }
public void DoCollisionCheck(bool triggered = false, CollidAble collidable = null) { if (IsActiv) { List <CollidAble> collisions; List <int> alreadyExists = new List <int>(); if (!triggered) { grids = CollisionDetection.ActivCollisionDetection.UpdateGrids(this); collisions = CollisionDetection.ActivCollisionDetection.CheckCollision(this); } else { collisions = new List <CollidAble>(); collisions.Add(collidable); } if (OnCollisionExit != null || OnTriggerExit != null) { for (int i = 0; i < previouseCollisions.Length; i++) { if (!collisions.Contains(previouseCollisions[i])) { if (blocking && previouseCollisions[i].blocking) { OnCollisionExit?.Invoke(previouseCollisions[i], new CollisionArgs(previouseCollisions[i])); if (!triggered) { collisions[i].DoCollisionCheck(true, this); } } else { OnTriggerExit?.Invoke(previouseCollisions[i], new CollisionArgs(previouseCollisions[i])); if (!triggered) { collisions[i].DoCollisionCheck(true, this); } } } else { alreadyExists.Add(i); } } } for (int i = 0; i < collisions.Count; i++) { if (!alreadyExists.Contains(i)) { if (blocking && collisions[i].blocking) { OnCollisionEnter?.Invoke(collisions[i], new CollisionArgs(collisions[i])); if (!triggered) { collisions[i].DoCollisionCheck(true, this); } } else { OnTriggerEnter?.Invoke(collisions[i], new CollisionArgs(collisions[i])); if (!triggered) { collisions[i].DoCollisionCheck(true, this); } } } else { if (blocking && collisions[i].blocking) { OnCollision?.Invoke(collisions[i], new CollisionArgs(collisions[i])); if (!triggered) { collisions[i].DoCollisionCheck(true, this); } } else { OnTrigger?.Invoke(collisions[i], new CollisionArgs(collisions[i])); if (!triggered) { collisions[i].DoCollisionCheck(true, this); } } } } } }
private void OnTriggerExit2D(Collider2D col) { OnTriggerExit?.Invoke(col); }
public void TriggerExit(ChunkLinker.Chunk chunk) { Debug.Log("[EXIT] " + chunk.Description); OnTriggerExit?.Invoke(chunk); }
public void FireEventExit(Rigidbody other) => OnTriggerExit?.Invoke(other);
protected override void OnExit(T component) => OnTriggerExit?.Invoke();
public static void TriggerExit(BC_TriggerData data) { //DebugManager.LogToFile("[OnTriggerExit] " + data.collider.name + " exited collision with " + data.myCollider.name); OnTriggerExit?.Invoke(data); }