void OnTriggerExit2D(Collider2D collider)
    {
        _playerColliderState = PlayerColliderState.Outside;

        var handler = Exited;

        if (handler != null)
        {
            InvokeHandler(handler, collider);
        }
    }
    void OnTriggerEnter2D(Collider2D collider)
    {
        _playerColliderState = PlayerColliderState.Inside;

        var playerState = GameManager.Instance.Player.PlayerState;

        if (PlayerStatesNeededToEnter != null &&
            PlayerStatesNeededToEnter.Any(ps => (playerState & ps) == 0))
        {
            _playerColliderState |= PlayerColliderState.WrongStateOnEnter;

            return;
        }

        InvokeEnter(collider);
    }
    void OnTriggerStay2D(Collider2D collider)
    {
        if ((_playerColliderState & PlayerColliderState.WrongStateOnEnter) == 0)
        {
            return;
        }

        var playerState = GameManager.Instance.Player.PlayerState;

        if (PlayerStatesNeededToEnter.All(ps => (playerState & ps) != 0))
        {
            _playerColliderState &= ~PlayerColliderState.WrongStateOnEnter;

            InvokeEnter(collider);
        }
    }