Esempio n. 1
0
    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;
        }
    }
Esempio n. 2
0
 private void OnTriggerExit2D(Collider2D other)
 {
     if (IsPenguin(other))
     {
         OnTriggerExit.Invoke(currentPenguin);
     }
 }
Esempio n. 3
0
    private void OnCollisionExit(Collision collision)
    {
        if (OnTriggerExit != null && IsTriggerCollision(collision))
        {
            _deltaForceMod = _pushDeltaForceMod;

            OnTriggerExit.Invoke();
        }
    }
Esempio n. 4
0
    void OnTriggerExit2D(Collider2D other)
    {
        if (!enabled || other.gameObject != PlayerManager.Instance.LocalPlayer.gameObject)
        {
            return;
        }

        OnTriggerExit?.Invoke(this);
    }
Esempio n. 5
0
 /// <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();
 }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
 private void OnTriggerExit2D(Collider2D otherCollider)
 {
     OnTriggerExit?.Invoke(otherCollider);
 }
 void OnTriggerExit2D(Collider2D collider)
 {
     OnTriggerExit?.Invoke(collider);
 }
Esempio n. 9
0
 private void OnTriggerExit2D(Collider2D other)
 {
     OnTriggerExit?.Invoke(other, gameObject);
 }
Esempio n. 10
0
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 11
0
 private void OnTriggerExit2D(Collider2D col)
 {
     OnTriggerExit?.Invoke(col);
 }
 public void TriggerExit(ChunkLinker.Chunk chunk)
 {
     Debug.Log("[EXIT] " + chunk.Description);
     OnTriggerExit?.Invoke(chunk);
 }
Esempio n. 13
0
 public void FireEventExit(Rigidbody other) => OnTriggerExit?.Invoke(other);
Esempio n. 14
0
 protected override void OnExit(T component) => OnTriggerExit?.Invoke();
Esempio n. 15
0
 public static void TriggerExit(BC_TriggerData data)
 {
     //DebugManager.LogToFile("[OnTriggerExit] " + data.collider.name + " exited collision with " + data.myCollider.name);
     OnTriggerExit?.Invoke(data);
 }