예제 #1
0
    public void SetScreenConfig(string name, TitlePanelConfig titleConfig)
    {
        BackButtonParts.SetActive(titleConfig.IsShowBackButton);
        BackgroundParts.SetActive(titleConfig.IsShowBackground);

        BackAndButtonParts.SetActive(titleConfig.IsShowBackButton || titleConfig.IsShowBackground);

        Title.text = name;
    }
예제 #2
0
 public static ScreenConfig GetConfig(TitlePanelConfig titleConfig, ScreenTypeEnum screenType, bool isMainScreen, bool isShowOnTop = false)
 {
     return(new ScreenConfig
     {
         TitleConfig = titleConfig,
         ScreenType = screenType,
         IsMainScreen = isMainScreen,
         ShowOnTop = isShowOnTop
     });
 }
예제 #3
0
 /// <summary>
 /// Экран закрылся
 /// </summary>
 private void OnCloseCurrentScreen(object screenObj)
 {
     if (stackScreen != null && stackScreen.Count > 0)
     {
         var screen = (screenObj as AbstractView);
         screen.OnClose -= OnCloseCurrentScreen;
         if (OpenedScreens.ContainsKey(screenObj))
         {
             OnCloseView?.Invoke(screenObj as IViewUI, OpenedScreens[screenObj].Id);
             OnCloseScreenView?.Invoke(screenObj as IViewUI, OpenedScreens[screenObj].Id);
             OpenedScreens[screenObj].OnDestroy?.Invoke(screenObj);
             OpenedScreens.Remove(screenObj);
             if (OpenedScreens.Count > 0)
             {
                 var openedScreen = OpenedScreens.Last();
                 var config       = openedScreen.Value.Id.Config.TitleConfig;
                 titlePanelUIController.SetScreenConfig(openedScreen.Value.Id.Name, config);
             }
             else
             {
                 if (currentMainScreen != null)
                 {
                     var config = ScreenId.GetMainScreen().Config.TitleConfig;
                     titlePanelUIController.SetScreenConfig("", config);
                 }
                 else
                 {
                     titlePanelUIController.SetScreenConfig("", TitlePanelConfig.GetEmpty());
                 }
             }
         }
         stackScreen.Remove(screen); //.RemoveAt(stackScreen.Count - 1);
         if (currentScreen == screen)
         {
             currentScreen = null;
         }
     }
     NextScreen();
     if (!IsAnyOpenScreen)
     {
         if (currentMainScreen != null)
         {
             var config = ScreenId.GetMainScreen().Config.TitleConfig;
             titlePanelUIController.SetScreenConfig("", config);
         }
         else
         {
             titlePanelUIController.SetScreenConfig("", TitlePanelConfig.GetEmpty());
         }
     }
 }
예제 #4
0
    public void CreateWindow <TController, TView>(ScreenId id, ControllerData paramsWindow, bool showOnTop = false) where TController : IControllerUI <TView>
    {
        titlePanelUIView.gameObject.SetActive(true);
        var prefab = GetPrefab(id, "[Window]");

        var target = modalRect;
        var winGo  = Instantiate(prefab, target);
        var window = winGo.GetComponent <AbstractWindow>();

        window.SetTitle(id.Name);
        var controller = (TController)Activator.CreateInstance(typeof(TController));

        controller.SetData(paramsWindow);
        var createdAction = new Action <object>((obj) => { controller.OnCreatedView((TView)obj); });
        var closedAction  = new Action <object>((obj) => { controller.OnWantToCloseView((TView)obj); });
        var destroyAction = new Action <object>((obj) => { controller.OnDestoyView((TView)obj); });

        window.OnWantClose += (z) =>
        {
            if (OpenedWindows.ContainsKey(z))
            {
                closedAction?.Invoke(z);
            }
        };
        window.OnClose += (z) =>
        {
            if (OpenedWindows.ContainsKey(z))
            {
                OpenedWindows[z].OnDestroy?.Invoke(z);
                OnCloseView?.Invoke(z as IViewUI, OpenedWindows[z].Id);
                OnCloseWindowView?.Invoke(z as IViewUI, OpenedWindows[z].Id);
                OpenedWindows.Remove(z);
                if (OpenedWindows.Count > 0)
                {
                    var last   = OpenedWindows.Last();
                    var config = last.Value.Id.Config.TitleConfig;
                }
                else
                {
                    if (IsAnyOpenScreen)
                    {
                        if (OpenedScreens.Count > 0)
                        {
                            var openedScreen = OpenedScreens.Last();
                            var config       = openedScreen.Value.Id.Config.TitleConfig;
                        }
                    }
                    else
                    {
                        if (currentMainScreen != null)
                        {
                            var config = ScreenId.GetMainScreen().Config.TitleConfig;
                            titlePanelUIController.SetScreenConfig("", config);
                        }
                        else
                        {
                            titlePanelUIController.SetScreenConfig("", TitlePanelConfig.GetEmpty());
                        }
                    }
                }
            }
        };
        createdAction.Invoke(window);

        var windowElement = new ViewElementData {
            ViewElement = window, Id = id, OnClosed = closedAction, OnCreated = createdAction, OnDestroy = destroyAction
        };

        OpenedWindows[window] = windowElement;
    }
예제 #5
0
 public static ScreenConfig GetScreenWithoutTopPanel() => GetConfig(TitlePanelConfig.GetEmpty(), ScreenTypeEnum.Screen, false);
예제 #6
0
 public static ScreenConfig GetScreenWithoutBackground() => GetConfig(TitlePanelConfig.GetBacButtonWithoutBackground(), ScreenTypeEnum.Screen, false);
예제 #7
0
 public static ScreenConfig GetShowOnTopWindow() => GetConfig(TitlePanelConfig.GetFromNormalWindow(), ScreenTypeEnum.Window, false, true);
예제 #8
0
 public static ScreenConfig GetNormalScreen() => GetConfig(TitlePanelConfig.GetFromNormalScreen(), ScreenTypeEnum.Screen, false);
예제 #9
0
 public static ScreenConfig GetMainScreen() => GetConfig(TitlePanelConfig.GetFromMainSceen(), ScreenTypeEnum.Screen, true);
 public void SetScreenConfig(string name, TitlePanelConfig titlePanelConfig)
 {
     view?.SetScreenConfig(name, titlePanelConfig);
 }