OnTriggerEnter2D not recognize player if already inside of collision

Hello, I have a problem with OnTriggerEnter2D.
I’m trying to make afire trap which if the character enters collision of fire trap object, after few seconds delay, it it will activate fire and will cause instant death to my character.

Everything works fine if my character started from the outside of the firetrap collider, then trigger the trap and move towards the collider when the fire activated that will cause death to my character.

However, when i move my character to the trap, which triggering it and stay there wait for few seconds until the fire being activated, the fire trap collision does not detect/recognize my character when I already inside of the collision, thus not causing death to my character.

I’ve tried using OnTriggerStay instead/making sure my fire trap collider is Triggered/adding RigidBody2D to firetrap object , but nothing is working.

If you know how to fix this, please help!

Firetrap.cs

public class Firetrap : MonoBehaviour
{
    [Header("Firetrap Timer")]
    [SerializeField] private float activationDelay;
    [SerializeField] private float activeTime;
    private Animator firetrapanim;
    private SpriteRenderer spriteRend;

    private bool traptriggered;
    private bool trapactivated;

    PlayerCharacterController PlayerCharacterController;
    [SerializeField] private GameObject PlayerCharacter;

    void Awake()
    {
        firetrapanim = GetComponent<Animator>();
        spriteRend = GetComponent<SpriteRenderer>();
        PlayerCharacterController = PlayerCharacter.GetComponent<PlayerCharacterController>();
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if(other.tag == "Player")
        {
            if (!traptriggered)
            {
                //trigger the firetrap
                StartCoroutine(ActivateFiretrap());
            }

            if (trapactivated)
            {
                PlayerCharacterController.Death = true;
            }
        }
    }

    IEnumerator ActivateFiretrap()
    {
        //turn red to notify player and trigger the trap
        traptriggered = true;
        spriteRend.color = Color.red;

        //wait for delay, activate trap, turn on animation, return color back to normal
        yield return new WaitForSeconds(activationDelay);
        spriteRend.color = Color.white;
        trapactivated = true;
        firetrapanim.SetBool("activated", true);

        //wait "activetime" seconds, deactivate trap and reset all variables and animatior 
        yield return new WaitForSeconds(activeTime);
        trapactivated = false;
        traptriggered = false;
        firetrapanim.SetBool("activated", false);
    }
}

You need to register player controllers that are trapped (List<PlayerCharacterController>) and finish them once time runs out

public class Firetrap : MonoBehaviour
{

    [Header("Components")]
    [SerializeField] Animator _animator;
    [SerializeField] SpriteRenderer _spriteRenderer;

    [Header("Firetrap Timer")]
    [SerializeField] float _activationDelay;
    [SerializeField] float _activeTime;

    List<PlayerCharacterController> _trapped = new ();
    bool _isActivationRoutineRunning = false;
    bool _isTrapArmed = false;
    
    void OnTriggerEnter2D ( Collider2D other )
    {
        var playerController = other.GetComponent<PlayerCharacterController>();
        if( playerController!=null )
        {
            if( _isTrapArmed )
            {
                // activated already, kill on sight
                playerController.Death = true;
            }
            else if( !_isActivationRoutineRunning )
            {
                // trigger the firetrap
                _trapped.Add( playerController );
                StartCoroutine( ActivationRoutine() );
            }
        }
    }

    void OnTriggerExit2D ( Collider2D other )
    {
        var playerController = other.GetComponent<PlayerCharacterController>();
        if( playerController!=null )
        {
            _trapped.Remove( playerController );
        }
    }

    IEnumerator ActivationRoutine ()
    {
        // turn red to notify player and trigger the trap
        _isActivationRoutineRunning = true;
        _spriteRenderer.color = Color.red;

        // wait for delay
        yield return new WaitForSeconds(_activationDelay);

        // activate trap, turn on animation, return color back to normal
        _spriteRenderer.color = Color.white;
        _isTrapArmed = true;
        _animator.SetBool( "activated" , true );

        // kill all trapped
        foreach( var trappedPlayer in _trapped )
        {
            trappedPlayer.Death = true;
        }
        _trapped.Clear();

        // wait "activeTime" seconds
        yield return new WaitForSeconds(_activeTime);

        // deactivate trap and reset all variables and animator 
        _isTrapArmed = false;
        _isActivationRoutineRunning = false;
        _animator.SetBool( "activated" , false );
    }
}