public void MakeThisScreenActive(ScreenMonoBehaviour screen)
        {
            _activeScreen = screen;

            //call on start show screen
            OnStartShowScreen(_activeScreen);

            //move the active screen to camera
            LeanTween.moveLocalX(_activeScreen.gameObject, 0f, TIME_OF_TRANSITION);

            //call on active screen shown complete
            LeanTween.delayedCall(1f, (s) => OnScreenShown(_activeScreen));
        }
        private void OnScreenShown(ScreenMonoBehaviour screen)
        {
            (screen as IScreenMonoBehaviour).OnScreenShown();

            float x = 0;

            foreach (var item in screens)
            {
                if (item != _activeScreen)
                {
                    //call on hide starts
                    OnStartHideScreen(item);

                    x += item.GetComponent <RectTransform>().rect.width + SPACE_BETWEEN_SCREENS;

                    RectTransform itemTransform = item.GetComponent <RectTransform>();
                    itemTransform.localPosition = new Vector3(x, itemTransform.localPosition.y, itemTransform.localPosition.z);

                    //call on hide ends
                    OnScreenHide(item);
                }
            }
        }
 private void OnStartHideScreen(ScreenMonoBehaviour screen)
 {
     (screen as IScreenMonoBehaviour).OnStartHideScreen();
 }
 private void OnScreenHide(ScreenMonoBehaviour screen)
 {
     (screen as IScreenMonoBehaviour).OnScreenHide();
 }