public void AnimateMenuEntry()
        {
            //TODO: hack fix sometimes mediator is still there after the gameobject has been destroyed by Unity
            if (View != null)
            {
                View.StartEntryAnimation(() => SceneMenuStateEntryAnimationEndedSignal.Dispatch());

                if (MenuState.EnterBGM != BibaBGM.None)
                {
                    PlayBibaBGMSignal.Dispatch(MenuState.EnterBGM);
                }

                if (MenuState.EnterSFX != BibaSFX.None)
                {
                    PlayBibaSFXSignal.Dispatch(MenuState.EnterSFX);
                }
            }
        }
        public override void Execute()
        {
            if (BibaSceneStack.Count > 0)
            {
                var menuState = BibaSceneStack.Peek();
                if (menuState != null && menuState is SceneMenuState)
                {
                    var menuStateGo = BibaSceneStack.GetTopGameObjectForTopMenuState();
                    if (menuStateGo != null)
                    {
                        var menuStateMediator = menuStateGo.GetComponent <SceneMenuStateMediator>();
                        if (menuStateMediator != null)
                        {
                            Retain();

                            menuStateMediator.AnimateMenuEntry();
                            SceneMenuStateEntryAnimationEndedSignal.AddListener(MenuEntryAnimationCompleted);
                        }
                    }
                }
            }
        }
 void MenuEntryAnimationCompleted()
 {
     SceneMenuStateEntryAnimationEndedSignal.RemoveListener(MenuEntryAnimationCompleted);
     Release();
 }