public void AnimateMenuExit() { //TODO: hack fix sometimes mediator is still there after the gameobject has been destroyed by Unity if (View != null) { View.StartExitAnimation(() => SceneMenuStateExitAnimationEndedSignal.Dispatch()); if (MenuState.ExitBGM != BibaBGM.None) { PlayBibaBGMSignal.Dispatch(MenuState.ExitBGM); } if (MenuState.ExitSFX != BibaSFX.None) { PlayBibaSFXSignal.Dispatch(MenuState.ExitSFX); } } }
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.AnimateMenuExit(); SceneMenuStateExitAnimationEndedSignal.AddListener(ExitedAnimationCompleted); } } } } }
void ExitedAnimationCompleted() { SceneMenuStateExitAnimationEndedSignal.RemoveListener(ExitedAnimationCompleted); Release(); }