Beispiel #1
0
        void OnTriggerEnter(Collider other)
        {
            if (!enabled || !_canGenerateCollisions || _checkedColliders.Contains(other))
            {
                return;
            }
            _checkedColliders.Add(other);
            var hitEntity = EntityController.GetEntity(UnityToEntityBridge.GetEntityId(other));
            var entity    = EntityController.GetEntity(EntityID);

            if (hitEntity == null || hitEntity.Id == EntityID)
            {
                return;
            }
            if (!CollisionCheckSystem.IsValidCollision(entity, _limitToEnemy, hitEntity, other, out var sourceNode, out var targetNode))
            {
                return;
            }
            var position  = transform.position;
            var hitPnt    = other.ClosestPointOnBounds(position);
            var hitNormal = (hitPnt - position).normalized;

#if DEBUG
            DebugExtension.DrawPoint(hitPnt, Color.yellow, 1.5f, 4f);
#endif
            hitEntity.Post(new CollisionEvent(entity, sourceNode, targetNode, hitPnt, hitNormal));
            entity.Post(new PerformedCollisionEvent(sourceNode, targetNode, hitPnt, hitNormal));
        }
        void OnCollisionEnter(Collision collision)
        {
            if (!enabled || !_canGenerateCollisions || _checkedColliders.Contains(collision.collider))
            {
                return;
            }
            var other = collision.collider;

            _checkedColliders.Add(other);
            var hitEntity = EntityController.GetEntity(UnityToEntityBridge.GetEntityId(other));
            var entity    = EntityController.GetEntity(EntityID);

            if (hitEntity == null || hitEntity.Id == EntityID)
            {
                return;
            }
            if (!CollisionCheckSystem.IsValidCollision(entity, _limitToEnemy, hitEntity, other, out var sourceNode, out var targetNode))
            {
                return;
            }
            var collisionPnt = collision.contacts[0];
            var hitPnt       = collisionPnt.point;
            var hitNormal    = collisionPnt.normal;

#if DEBUG
            DebugExtension.DrawPoint(hitPnt, Color.magenta, 1.5f, 4f);
#endif
            hitEntity.Post(new CollisionEvent(entity, sourceNode, targetNode, hitPnt, hitNormal));
            entity.Post(new PerformedCollisionEvent(sourceNode, targetNode, hitPnt, hitNormal));
        }