Example #1
0
 protected void OnCollisionDetected(object sender, CollisionEventArgs args)
 {
     if (CollisionDetected != null)
     {
         CollisionDetected.Invoke(sender, args);
     }
 }
Example #2
0
 private void OnCollisionEnter(Collision collision)
 {
     if (collision.gameObject.TryGetComponent(out IDamageable damageable))
     {
         CollisionDetected?.Invoke(damageable);
     }
 }
Example #3
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.TryGetComponent(out IDamageable damageable))
     {
         CollisionDetected?.Invoke(damageable);
     }
 }
Example #4
0
        public static void Update(float delta)
        {
            if (_colliders.Count <= 1)
            {
                return;
            }

            for (var i = 0; i < _colliders.Count; i++)
            {
                for (var j = 0; j < _colliders.Count; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }

                    var first  = _colliders.ElementAt(i);
                    var second = _colliders.ElementAt(j);

                    if (!first.Enabled || !second.Enabled)
                    {
                        continue;
                    }

                    var result = first.Collide(second);

                    if (result.Occured)
                    {
                        if (!first.CollidingWith.Contains(second))
                        {
                            first.CollidingWith.Add(second);
                            first.Entity.OnCollisionEnter(second.Entity);
                        }

                        if (!second.CollidingWith.Contains(first))
                        {
                            second.CollidingWith.Add(first);
                            second.Entity.OnCollisionEnter(first.Entity);
                        }

                        CollisionDetected?.Invoke(null, new CollisionEventArgs(first, second));
                    }
                    else
                    {
                        if (first.CollidingWith.Contains(second))
                        {
                            first.CollidingWith.Remove(second);
                            first.Entity.OnCollisionExit(second.Entity);
                        }

                        if (second.CollidingWith.Contains(first))
                        {
                            second.CollidingWith.Remove(first);
                            second.Entity.OnCollisionExit(first.Entity);
                        }
                    }
                }
            }
        }
        private void FixedUpdate()
        {
            RaycastHit hit;

            if (!Physics.Raycast(_transform.position, -transform.up, out hit, CollisionDistance))
            {
                return;
            }

            var distance = Vector3.Distance(_transform.position, hit.point);

            if (distance > CollisionDistance)
            {
                return;
            }

            if (CollisionDetected != null)
            {
                CollisionDetected.Invoke(hit.point);
            }
        }
Example #6
0
 private void OnCollisionDetected(GameObject gameObject, CollisionEventArgs args)
 {
     CollisionDetected?.Invoke(gameObject, args);
 }
 protected virtual void OnCollisionDetected(CollisionEventArgs e)
 {
     CollisionDetected?.Invoke(this, e);
 }
Example #8
0
 /// <summary>
 /// Raises the CollisionDetected event.
 /// </summary>
 /// <param name="body1">The first body involved in the collision.</param>
 /// <param name="body2">The second body involved in the collision.</param>
 /// <param name="point">The collision point.</param>
 /// <param name="normal">The normal pointing to body1.</param>
 /// <param name="penetration">The penetration depth.</param>
 // CUSTOM: Added triangle as an out parameter.
 protected void RaiseCollisionDetected(RigidBody body1, RigidBody body2,
                                       ref JVector point1, ref JVector point2,
                                       ref JVector normal, JVector[] triangle, float penetration)
 {
     CollisionDetected?.Invoke(body1, body2, point1, point2, normal, triangle, penetration);
 }