protected override void OnUpdate()
    {
        HavokTriggerEvents triggerEvents = ((HavokSimulation)stepPhysicsWorld.Simulation).TriggerEvents;

        var amunitionComponents         = GetComponentDataFromEntity <AmmunitionComponent>(true);
        NativeList <Entity> ammunitions = new NativeList <Entity>(Allocator.Temp);

        foreach (var triggerEvent in triggerEvents)
        {
            if (amunitionComponents.HasComponent(triggerEvent.Entities.EntityA))
            {
                if (!ammunitions.Contains(triggerEvent.Entities.EntityA))
                {
                    ammunitions.Add(triggerEvent.Entities.EntityA);
                }
            }

            if (amunitionComponents.HasComponent(triggerEvent.Entities.EntityB))
            {
                if (!ammunitions.Contains(triggerEvent.Entities.EntityB))
                {
                    ammunitions.Add(triggerEvent.Entities.EntityB);
                }
            }
        }

        foreach (var entity in ammunitions)
        {
            AmmunitionComponent ac = EntityManager.GetComponentData <AmmunitionComponent>(entity);
            EntityManager.DestroyEntity(entity);


            gunComponent = EntityManager.GetComponentData <GunComponent>(GameVariables.Player.PlayerWeaponEntities[ac.TypeAmmunition]);
            gunComponent.CurrentAmountBulletOnPlayer = math.clamp(gunComponent.CurrentAmountBulletOnPlayer + ac.AmmunitionQuantity, 0, gunComponent.MaxBulletOnPlayer);
            EntityManager.SetComponentData(GameVariables.Player.PlayerWeaponEntities[ac.TypeAmmunition], gunComponent);

            SoundEventSystem.PlayPickupSound(DropType.AmmunitionShotgun);

            UIManager.RefreshBulletsText();
            //TODO Play VFX
        }

        ammunitions.Dispose();
    }
    //Will be slow if lots of TriggerEvent (Change to parallel)
    protected override void OnUpdate()
    {
        //Get Collision Events
        HavokTriggerEvents triggerEvents = ((HavokSimulation)stepPhysicsWorld.Simulation).TriggerEvents;

        //Get all Interactable Entities
        ComponentDataFromEntity <InteractableComponent> interactables =
            GetComponentDataFromEntity <InteractableComponent>(true);

        ComponentDataFromEntity <Translation> interactablePositions =
            GetComponentDataFromEntity <Translation>(true);

        ComponentDataFromEntity <Rotation> interactableRotations =
            GetComponentDataFromEntity <Rotation>(true);

        HashSet <CollisionLink> currentFrameCollisions = new HashSet <CollisionLink>();

        //Retrieve all interactables collision with PlayerEntity
        foreach (TriggerEvent triggerEvent in triggerEvents)
        {
            if (interactables.Exists(triggerEvent.Entities.EntityA))
            {
                currentFrameCollisions.Add(new CollisionLink
                {
                    TriggerEntity    = triggerEvent.Entities.EntityA,
                    NotTriggerEntity = triggerEvent.Entities.EntityB
                });
            }
            else if (interactables.Exists(triggerEvent.Entities.EntityB))
            {
                currentFrameCollisions.Add(new CollisionLink
                {
                    TriggerEntity    = triggerEvent.Entities.EntityB,
                    NotTriggerEntity = triggerEvent.Entities.EntityA
                });
            }
        }

        foreach (CollisionLink link in currentFrameCollisions)
        {
            //if interactable was not already colliding previous frame -> OnTriggerEnter
            if (!PreviousFrameCollisions.Contains(link))
            {
                //Create Event
                EventsHolder.InteractableEvents.Add(new InteractableInfo
                {
                    TriggerEntity    = link.TriggerEntity,
                    CollidedEntity   = link.NotTriggerEntity,
                    Position         = interactablePositions[link.TriggerEntity].Value,
                    Rotation         = interactableRotations[link.TriggerEntity].Value,
                    InteractableType = interactables[link.TriggerEntity].Type,
                    ObjectType       = interactables[link.TriggerEntity].ObjectType,
                    CollisionType    = InteractableInfo.InteractableCollisionType.OnTriggerEnter
                });
            }
        }

        foreach (CollisionLink link in PreviousFrameCollisions)
        {
            if (EntityManager.Exists(link.TriggerEntity))
            {
                //if previous collision not detected this frame -> OnTriggerExit
                if (!currentFrameCollisions.Contains(link))
                {
                    //Create Event
                    EventsHolder.InteractableEvents.Add(new InteractableInfo
                    {
                        TriggerEntity    = link.TriggerEntity,
                        CollidedEntity   = link.NotTriggerEntity,
                        Position         = interactablePositions[link.TriggerEntity].Value,
                        Rotation         = interactableRotations[link.TriggerEntity].Value,
                        InteractableType = interactables[link.TriggerEntity].Type,
                        ObjectType       = interactables[link.TriggerEntity].ObjectType,
                        CollisionType    = InteractableInfo.InteractableCollisionType.OnTriggerExit
                    });
                }
            }
        }

        PreviousFrameCollisions = currentFrameCollisions;
    }