Ejemplo n.º 1
0
        private void EnterLoader()
        {
            if (UILevelLoader == null)
            {
                UILevelLoader = GameCloneUtils.CloneNewObject(GameManager.FindStaticPrefabs("UILevelLoader"), "UILevelLoader");
                GameManager.UIManager.AttatchViewToCanvas(UILevelLoader.GetComponent <RectTransform>());

                LoaderProgressOuter = UILevelLoader.transform.Find("LoaderProgressOuter").GetComponent <RectTransform>();
                LoaderError         = UILevelLoader.transform.Find("LoaderError").gameObject;
                LoaderProgress      = LoaderProgressOuter.transform.Find("LoaderProgress").GetComponent <RectTransform>();
                LoaderProgressImage = LoaderProgress.GetComponent <Image>();
                LoaderErrorContent  = UILevelLoader.transform.Find("LoaderError/Scroll View/Viewport/LoaderErrorContent").GetComponent <Text>();

                BtnContinue = UILevelLoader.transform.Find("LoaderError/Continue").GetComponent <Button>();
                BtnQuit     = UILevelLoader.transform.Find("LoaderError/Quit").GetComponent <Button>();

                BtnQuit.onClick.AddListener(() => QuitLoader());
            }

            LoaderProgress.gameObject.SetActive(true);
            LoaderError.SetActive(false);
            UpdateLoaderProgress(0.01f);

            GameManager.NotifyGameCurrentScenseChanged(GameCurrentScense.LevelLoader);
        }
Ejemplo n.º 2
0
        public void AddCustomDebugToolItem(string text, GameHandler callbackHandler)
        {
            GameObject    newGo         = GameCloneUtils.CreateEmptyUIObjectWithParent(DebugToolsItemHost.transform, "DebugToolItem");
            RectTransform rectTransform = newGo.GetComponent <RectTransform>();

            rectTransform.pivot = new Vector2(0, 1);
            UIAnchorPosUtils.SetUIAnchor(rectTransform, UIAnchor.Stretch, UIAnchor.Top);

            CustomData customData = newGo.AddComponent <CustomData> ();

            customData.customData = callbackHandler;
            Text newText = newGo.AddComponent <Text>();

            newText.font      = Resources.GetBuiltinResource <Font>("Arial.ttf");
            newText.text      = text;
            newText.color     = Color.white;
            newText.fontSize  = 11;
            newText.alignment = TextAnchor.MiddleCenter;
            ContentSizeFitter contentSizeFitter = newGo.AddComponent <ContentSizeFitter>();

            contentSizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize;

            EventTriggerListener.Get(newGo).onClick = OnCustomDebugToolItemClick;
            rectTransform.anchoredPosition          = new Vector2(rectTransform.anchoredPosition.x, -customDebugToolItemY);
            customDebugToolItemY        += 20;
            DebugToolsItemHost.sizeDelta = new Vector2(DebugToolsItemHost.sizeDelta.x, customDebugToolItemY);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 添加条目
        /// </summary>
        /// <returns></returns>
        public CommonListItem AddItem()
        {
            CommonListItem newItem = new CommonListItem();

            newItem.itemObject                       = GameCloneUtils.CloneNewObjectWithParent(ItemPrefab, rectTransform.transform);
            newItem.itemRectTransform                = newItem.itemObject.GetComponent <RectTransform>();
            newItem.backgroundImage                  = newItem.itemObject.AddComponent <Image>();
            newItem.backgroundImage.type             = Image.Type.Sliced;
            newItem.backgroundImageButton            = newItem.itemObject.AddComponent <Button>();
            newItem.backgroundImageButton.transition = Selectable.Transition.SpriteSwap;
            newItem.backgroundImage.sprite           = itemBackgroundNormal;
            newItem.visible  = true;
            newItem.selected = false;
            SpriteState spriteState = new SpriteState();

            spriteState.highlightedSprite = itemBackgroundHover;
            spriteState.selectedSprite    = itemBackgroundSelected;
            spriteState.pressedSprite     = itemBackgroundPressed;
            spriteState.disabledSprite    = itemBackgroundPressed;

            newItem.backgroundImageButton.spriteState = spriteState;

            EventTriggerListener.Get(newItem.itemObject).onClick = (g) => OnItemClicked(newItem);
            List.Add(newItem);
            needRelayout = 10;
            return(newItem);
        }
Ejemplo n.º 4
0
 private void StartDebugCore(GameObject basePrefab)
 {
     GameManager.SetGameBaseCameraVisible(false);
     GameCloneUtils.CloneNewObjectWithParent(basePrefab, GameManager.GameRoot.transform, "DebugFloor");
     GameManager.GameMediator.CallAction(GamePartName.CamManager, "CamStart");
     ResetEnergy();
 }
Ejemplo n.º 5
0
        private IEnumerator LoadLevel(string levelFullPath)
        {
            GameLevel currentLevel = GameManager.ModManager.FindLevel(levelFullPath);

            if (currentLevel == null)
            {
                LoadeErrorFail("加载关卡失败:\n未找到文件:" + levelFullPath + ",请确保关卡文件已放在 Levels 文件夹下。");
                yield break;
            }

            //加载关卡中的模组
            yield return(new WaitUntil(GameManager.ModManager.IsNoneModLoading));

            UpdateLoaderProgress(0.1f);

            //通知模组加载
            GameManager.GameMediator.DispatchGlobalEvent(GameEventNames.EVENT_ENTER_LEVEL_LOADER, "*", (ILevelLoader)this);

            //加载关卡本体
            yield return(StartCoroutine(currentLevel.Load()));

            UpdateLoaderProgress(0.2f);

            if (currentLevel.LoadStatus != ModBase.GameModStatus.InitializeSuccess)
            {
                LoadeErrorFail("加载关卡 " + currentLevel.Name + " 失败:\n错误信息:" + currentLevel.LoadError);
                yield break;
            }

            //加载基础prefab
            if (string.IsNullOrEmpty(currentLevel.BasePrefab))
            {
                LoadeErrorFail("加载关卡失败:\nBasePrefab 不能为空");
                yield break;
            }
            currentLevelPrefab = currentLevel.LevelAssetBundle.LoadAsset <GameObject>(currentLevel.BasePrefab);
            if (currentLevelPrefab == null)
            {
                LoadeErrorFail("加载关卡失败:\n未找到 BasePrefab :" + currentLevel.BasePrefab);
                yield break;
            }
            currentLevelPrefab = GameCloneUtils.CloneNewObjectWithParent(currentLevelPrefab, transform, currentLevel.Name);
            UpdateLoaderProgress(0.23f);



            yield break;
        }
Ejemplo n.º 6
0
        public void ShowExceptionDialog(string title, string message, LogType type)
        {
            if (showedExceptionDialogs.Count >= 10)
            {
                GameManager.UIManager.GlobalToast(title + "\n发生的错误过多,请打开控制台查看\n\n" +
                                                  (message.Length > 50 ? (message.Substring(0, 40) + "\n... (" + (message.Length - 50) + " more)") : message));
            }

            RectTransform debugRectTransform = GameCloneUtils.CloneNewObjectWithParent(GameManager.FindStaticPrefabs("UIErrorAlertDialog"), GameManager.UIManager.UIRoot.transform).GetComponent <RectTransform>();
            UIWindow      errWindow          = GameManager.UIManager.CreateWindow(title, debugRectTransform);

            errWindow.CanClose  = true;
            errWindow.CanResize = true;
            errWindow.CanDrag   = true;
            errWindow.SetMinSize(300, 200);
            errWindow.Show();
            errWindow.onClose = (id) => showedExceptionDialogs.Remove(id);

            showedExceptionDialogs.Add(errWindow.GetWindowId());

            debugRectTransform.Find("UIButtonCopy").GetComponent <Button>().onClick.AddListener(() =>
            {
                GUIUtility.systemCopyBuffer = message;
                GameManager.UIManager.GlobalToast("错误信息已复制到剪贴板!");
            });
            debugRectTransform.Find("UIButtonClose").GetComponent <Button>().onClick.AddListener(() => errWindow.Close());

            Image ico  = debugRectTransform.Find("UIErrorImage").GetComponent <Image>();
            Text  text = debugRectTransform.Find("UIScrollView/Viewport/Content").GetComponent <Text>();

            text.text = message;

            switch (type)
            {
            case LogType.Error: ico.sprite = ico_error_big; break;

            case LogType.Exception: ico.sprite = ico_error_big; break;

            case LogType.Assert: ico.sprite = ico_warning2_big; break;

            case LogType.Warning: ico.sprite = ico_warning_big; break;

            case LogType.Log: ico.sprite = ico_info_big; break;
            }
        }
Ejemplo n.º 7
0
        private void AddLogItem(GameLogger.LogData data)
        {
            if (logDestroyed)
            {
                return;
            }

            GameObject newGo      = GameCloneUtils.CloneNewObjectWithParent(UIDebugTextItem, DebugCmdContent.transform, "Text");
            GameObject newT       = newGo.transform.Find("Text").gameObject;
            Image      newI       = newGo.transform.Find("Image").gameObject.GetComponent <Image>();
            Text       newText    = newT.GetComponent <Text>();
            CustomData customData = newGo.GetComponent <CustomData>();

            customData.customData = data;

            if (data.Data.Length > 32767)//字符过长Text无法显示
            {
                data.Data = data.Data.Substring(0, 32766);
            }

            switch (data.Type)
            {
            case GameLogger.LogType.Text:
                newText.text = data.Data + "        ";
                newI.sprite  = ico_success;
                break;

            case GameLogger.LogType.Error:
                newText.text = "<color=#FF2400>" + data.Data + "</color>       ";
                newI.sprite  = ico_error;
                break;

            case GameLogger.LogType.Assert:
                newText.text = "<color=#FF0000>" + data.Data + "</color>       ";
                newI.sprite  = ico_error;
                break;

            case GameLogger.LogType.Info:
                newText.text = "<color=#70DBDB>" + data.Data + "</color>       ";
                newI.sprite  = ico_info;
                break;

            case GameLogger.LogType.Warning:
                newText.text = "<color=#FF7F00>" + data.Data + "</color>       ";
                newI.sprite  = ico_warning;
                break;
            }

            RectTransform newGoRectTransform   = newGo.GetComponent <RectTransform>();
            RectTransform newTextRectTransform = newT.GetComponent <RectTransform>();

            newGoRectTransform.anchoredPosition = new Vector2(newGoRectTransform.anchoredPosition.x, -currentLogY);

            Vector2 textSize = UIContentSizeUtils.GetContentSizeFitterPreferredSize(newTextRectTransform,
                                                                                    newT.GetComponent <ContentSizeFitter>());

            currentLogY += 12;
            if (textSize.x + 2 > currentLogX)
            {
                currentLogX = textSize.x + 2;
            }
            DebugCmdContent.sizeDelta = new Vector2(currentLogX, currentLogY + 6);

            EventTriggerListener.Get(newT).onClick = SetCurrentActiveLogItem;

            if (lastActiveLogItem == null || lastActiveLogItem == lastLogItem)
            {
                SetCurrentActiveLogItem(newT);
                DebugCmdScrollViewScrollRect.verticalNormalizedPosition = 0;
            }

            lastLogItem = newT;
        }
Ejemplo n.º 8
0
        private void InitDebugWindow()
        {
            RectTransform debugRectTransform = GameCloneUtils.CloneNewObjectWithParent(GameManager.FindStaticPrefabs("UIDebugWindow"), GameManager.UIManager.UIRoot.transform).GetComponent <RectTransform>();

            debugWindow             = GameManager.UIManager.CreateWindow("Debug console window", debugRectTransform);
            UIDebugToolBar          = GameCloneUtils.CloneNewObjectWithParent(GameManager.FindStaticPrefabs("UIDebugToolBar"), GameManager.UIManager.UIRoot.transform, "GameUIDebugToolBar");
            debugWindow.CloseAsHide = true;
            debugWindow.SetSize(450, 330);
            debugWindow.SetMinSize(420, 270);
            debugWindow.MoveToCenter();
            debugWindow.Hide();

            ico_warning2_big       = GameManager.FindStaticAssets <Sprite>("ico_warning2_big");
            ico_warning_big        = GameManager.FindStaticAssets <Sprite>("ico_warning_big");
            ico_info_big           = GameManager.FindStaticAssets <Sprite>("ico_info_big");
            ico_error_big          = GameManager.FindStaticAssets <Sprite>("ico_error_big");
            ico_success_big        = GameManager.FindStaticAssets <Sprite>("ico_success_big");
            ico_warning            = GameManager.FindStaticAssets <Sprite>("ico_warning");
            ico_info               = GameManager.FindStaticAssets <Sprite>("ico_info");
            ico_error              = GameManager.FindStaticAssets <Sprite>("ico_error");
            ico_success            = GameManager.FindStaticAssets <Sprite>("ico_success");
            box_round_light        = GameManager.FindStaticAssets <Sprite>("box_round_grey");
            background_transparent = GameManager.FindStaticAssets <Sprite>("background_transparent");

            GameManager.UIManager.RegisterWindow(debugWindow);

            UIDebugToolBar.SetActive(true);
            DebugTextFPS       = UIDebugToolBar.transform.Find("DebugTextFPS").GetComponent <Text>();
            DebugTextErrors    = debugRectTransform.transform.Find("DebugToolErrors/Text").GetComponent <Text>();
            DebugTextWarnings  = debugRectTransform.transform.Find("DebugToolWarnings/Text").GetComponent <Text>();
            DebugTextInfos     = debugRectTransform.transform.Find("DebugToolInfos/Text").GetComponent <Text>();
            DebugCmdContent    = debugRectTransform.transform.Find("DebugCmdScrollView/Viewport/DebugCmdContent").GetComponent <RectTransform>();
            DebugInputCommand  = debugRectTransform.transform.Find("DebugInputCommand").GetComponent <InputField>();
            DebugToggleInfo    = debugRectTransform.transform.Find("DebugToggleInfo").GetComponent <Toggle>();
            DebugToggleWarning = debugRectTransform.transform.Find("DebugToggleWarning").GetComponent <Toggle>();
            DebugToggleError   = debugRectTransform.transform.Find("DebugToggleError").GetComponent <Toggle>();
            DebugItemContent   = debugRectTransform.transform.Find("DebugDetailsScrollView/Viewport/DebugItemContent").GetComponent <Text>();
            Toggle DebugToggleStackTrace = debugRectTransform.transform.Find("DebugToggleStackTrace").GetComponent <Toggle>();

            DebugCmdScrollView           = debugRectTransform.transform.Find("DebugCmdScrollView").GetComponent <RectTransform>();
            DebugCmdScrollViewScrollRect = DebugCmdScrollView.GetComponent <ScrollRect>();
            DebugDetailsScrollView       = debugRectTransform.transform.Find("DebugDetailsScrollView").GetComponent <RectTransform>();
            DebugToolsItem     = UIDebugToolBar.transform.Find("DebugToolsItem").gameObject;
            DebugToolsItemHost = UIDebugToolBar.transform.Find("DebugToolsItem/Viewport/DebugToolsItemHost").GetComponent <RectTransform>();

            UIDebugTextItem = GameManager.FindStaticPrefabs("UIDebugTextItem");

            fPSManager         = GameCloneUtils.CreateEmptyObjectWithParent(GameManager.GameRoot.transform, "FPSManager").AddComponent <FPSManager>();
            fPSManager.FpsText = DebugTextFPS;

            EventTriggerListener.Get(UIDebugToolBar.transform.Find("DebugToolCmd").gameObject).onClick = (g) => {
                if (debugWindow.GetVisible())
                {
                    debugWindow.Hide();
                }
                else
                {
                    debugWindow.Show();
                    ForceReloadLogList();
                }
            };
            EventTriggerListener.Get(UIDebugToolBar.transform.Find("DebugTools").gameObject).onClick = (g) => { DebugToolsItem.SetActive(!DebugToolsItem.activeSelf); };

            EventTriggerListener.Get(debugRectTransform.transform.Find("DebugButtonRun").gameObject).onClick = (g) =>
            {
                if (RunCommand(DebugInputCommand.text))
                {
                    DebugInputCommand.text = "";
                }
            };
            EventTriggerListener.Get(debugRectTransform.transform.Find("DebugButtonClear").gameObject).onClick = (g) => { ClearLogs(); };

            DebugInputCommand.onEndEdit.AddListener((s) =>
            {
                ClearCurrentActiveLogItem();
                if (RunCommand(s))
                {
                    DebugInputCommand.text = "";
                }
            });
            DebugToggleError.onValueChanged.AddListener((b) =>
            {
                SetShowLogTypes(GameLogger.LogType.Error, b);
                SetShowLogTypes(GameLogger.LogType.Assert, b);
                ForceReloadLogList();
            });
            DebugToggleWarning.onValueChanged.AddListener((b) =>
            {
                SetShowLogTypes(GameLogger.LogType.Warning, b);
                ForceReloadLogList();
            });
            DebugToggleInfo.onValueChanged.AddListener((b) =>
            {
                SetShowLogTypes(GameLogger.LogType.Text, b);
                SetShowLogTypes(GameLogger.LogType.Info, b);
                ForceReloadLogList();
            });
            DebugToggleStackTrace.onValueChanged.AddListener((b) =>
            {
                DebugDetailsScrollView.gameObject.SetActive(b);
                if (!b)
                {
                    UIAnchorPosUtils.SetUILeftBottom(DebugCmdScrollView, UIAnchorPosUtils.GetUILeft(DebugCmdScrollView), 30);
                }
                else
                {
                    UIAnchorPosUtils.SetUILeftBottom(DebugCmdScrollView, UIAnchorPosUtils.GetUILeft(DebugCmdScrollView), 100);
                }
            });

            GameLogger.RegisterLogCallback(HandleLog);
            ForceReloadLogList();
        }
Ejemplo n.º 9
0
        private void InitModManagementWindow()
        {
            mod_icon_not_load = GameManager.FindStaticAssets <Sprite>("mod_icon_not_load");
            mod_icon_default  = GameManager.FindStaticAssets <Sprite>("mod_icon_default");
            mod_icon_failed   = GameManager.FindStaticAssets <Sprite>("mod_icon_failed");
            mod_icon_bad      = GameManager.FindStaticAssets <Sprite>("mod_icon_bad");

            modManagerView  = GameCloneUtils.CloneNewObjectWithParent(GameManager.FindStaticPrefabs("UIModManagement"), UIManager.UIRoot.transform).GetComponent <RectTransform>();
            modManageWindow = UIManager.CreateWindow("模组管理", modManagerView);
            modManageWindow.SetSize(500, 300);
            modManageWindow.SetMinSize(400, 250);
            modManageWindow.CloseAsHide = true;
            modManageWindow.Hide();
            modManageWindow.MoveToCenter();
            modManageWindow.onHide += (windowId) => { SaveModEnableStatusList(); };
            modManageWindow.onShow += (windowId) => { FlushModList(); };
            modList                  = modManagerView.transform.Find("UIScrollView/Viewport/Content").gameObject.GetComponent <UICommonList>();
            TextModCount             = modManagerView.transform.Find("TextModCount").GetComponent <Text>();
            hideCoreMod              = settings.GetBool("modmgr.hideCoreMod", true);
            UIToggleHideCoreMod      = modManagerView.transform.Find("UIToggleHideCoreMod").GetComponent <Toggle>();
            UIToggleHideCoreMod.isOn = hideCoreMod;
            UIToggleHideCoreMod.onValueChanged.AddListener((b) =>
            {
                hideCoreMod = b;
                FlushModList();
            });

            GameManager.GameMediator.RegisterEventHandler(GameEventNames.EVENT_MOD_REGISTERED, "ModDebug", (evtName, param) =>
            {
                OnModAdded((GameMod)param[1]);
                return(false);
            });
            GameManager.GameMediator.RegisterEventHandler(GameEventNames.EVENT_MOD_UNLOAD, "ModDebug", (evtName, param) =>
            {
                OnModRemoved((GameMod)param[1]);
                return(false);
            });
            GameManager.GameMediator.RegisterEventHandler(GameEventNames.EVENT_MOD_LOAD_FAILED, "ModDebug", (evtName, param) =>
            {
                GameMod m = (GameMod)param[1];
                UpdateModListItemInfos(modList.GetItemById(m.Uid), m);
                return(false);
            });
            GameManager.GameMediator.RegisterEventHandler(GameEventNames.EVENT_MOD_LOAD_SUCCESS, "ModDebug", (evtName, param) =>
            {
                GameMod m = (GameMod)param[1];
                UpdateModListItemInfos(modList.GetItemById(m.Uid), m);
                return(false);
            });
            GameManager.GameMediator.RegisterEventHandler(GameEventNames.EVENT_GLOBAL_ALERT_CLOSE, "ModDebug", (evtName, param) =>
            {
                if (currentModConfirm != null)
                {
                    int id       = (int)param[0];
                    bool confirm = (bool)param[1];
                    if (confirm)
                    {
                        if (id == unloadModConfirmUid)
                        {
                            UnLoadGameMod(currentModConfirm);
                            currentModConfirm = null;
                        }
                        else if (id == initModConfirmUid)
                        {
                            currentModConfirm.Load(this);
                            currentModConfirm = null;
                        }
                    }
                }
                return(false);
            });

            InitModList();
        }
Ejemplo n.º 10
0
        //加载主函数
        private IEnumerator GameInitCore()
        {
            GameLogger.Log(TAG, "Gameinit start");

            yield return(new WaitUntil(IsGameInitUILoaded));

            //播放音乐和动画
            if (GameManager.Mode == GameMode.Game)
            {
                IntroAnimator.Play("IntroAnimation");
                IntroAudio.Play();
            }

            //选择加载包模式
            switch (GameManager.Mode)
            {
            case GameMode.Game: currentLoadMask = GameModRunMask.GameBase; break;

            case GameMode.Level: currentLoadMask = GameModRunMask.Level | GameModRunMask.LevelLoader; break;

            case GameMode.LevelEditor: currentLoadMask = GameModRunMask.LevelEditor | GameModRunMask.Level; break;

            case GameMode.MinimumDebug: currentLoadMask = GameModRunMask.GameBase; break;

            case GameMode.LoaderDebug: currentLoadMask = GameModRunMask.Level | GameModRunMask.LevelLoader; break;

            case GameMode.CoreDebug: currentLoadMask = GameModRunMask.GameCore; break;
            }

            UIProgressText.text = "Loading";

            //加载 core.gameinit.txt 获得要加载的模块
            string gameInitTxt = "";

#if UNITY_EDITOR // 编辑器中直接加载
            TextAsset gameInitEditorAsset = null;
            if (DebugSettings.Instance.GameInitLoadInEditor &&
                (gameInitEditorAsset =
                     UnityEditor.AssetDatabase.LoadAssetAtPath <TextAsset>(
                         GamePathManager.DEBUG_MOD_FOLDER + "/core.gameinit.txt")) != null)
            {
                gameInitTxt = gameInitEditorAsset.text;
                GameLogger.Log(TAG, "Load gameinit table in Editor : \n" + gameInitTxt);
            }
#else
            if (false)
            {
            }
#endif
            else
            {
                //加载 gameinit
                string          gameinit_txt_path = GamePathManager.GetResRealPath("gameinit", "");
                UnityWebRequest request           = UnityWebRequest.Get(gameinit_txt_path);
                yield return(request.SendWebRequest());

                if (!string.IsNullOrEmpty(request.error))
                {
                    GameErrorManager.ThrowGameError(GameError.GameInitReadFailed, "加载 GameInit.txt  " + gameinit_txt_path + " 时发生错误:" + request.error);
                    yield break;
                }

                gameInitTxt = request.downloadHandler.text;
            }

            //加载包
            yield return(StartCoroutine(GameInitPackages(gameInitTxt)));

            //加载模组
            yield return(StartCoroutine(GameInitUserMods()));

            //加载关卡信息
            yield return(StartCoroutine(GameInitLevels()));

            UIProgressText.text = "Loading";

            //加载游戏内核管理器
            GameManager.RegisterManager(typeof(LevelLoader), false);
            GameManager.RegisterManager(typeof(LevelManager), false);
            GameManager.ICManager = (ICManager)GameManager.RegisterManager(typeof(ICManager), false);

            BaseManager ballManager = GameCloneUtils.CloneNewObjectWithParent(
                GameManager.FindStaticPrefabs("BallManager"),
                GameManager.GameRoot.transform).GetComponent <BaseManager>();
            BaseManager camManager = GameCloneUtils.CloneNewObjectWithParent(
                GameManager.FindStaticPrefabs("CamManager"),
                GameManager.GameRoot.transform).GetComponent <BaseManager>();

            GameManager.RegisterManager(ballManager, false);
            GameManager.RegisterManager(camManager, false);

            //初始化管理器
            GameManager.RequestAllManagerInitialization();

            //正常情况下,等待动画播放完成
            if (GameManager.Mode == GameMode.Game)
            {
                yield return(new WaitUntil(IsGameInitAnimPlayend));

                //hide cp
                GameManager.UIManager.UIFadeManager.AddFadeOut(GameObject.Find("GlobalCopyrightText").GetComponent <Text>(), 1.3f, true);

                IntroAnimator.Play("IntroAnimationHide");
                IntroAudio.Stop();

                yield return(new WaitForSeconds(0.8f));
            }

            yield return(new WaitUntil(GameManager.IsManagersInitFinished));

            //初始化模组启动代码(游戏初始化完成)
            ModManager.ExecuteModEntry(GameModEntryCodeExecutionAt.AtStart);

            yield return(new WaitUntil(GameManager.IsManagersInitFinished));

            //分发接管事件
            int hC = GameManager.GameMediator.DispatchGlobalEvent(GameEventNames.EVENT_GAME_INIT_TAKE_OVER_CONTROL, "*", (BooleanDelegate)GameInitContinueInit);
            if (hC == 0)//无接管
            {
                if (GameInitContinueInit())
                {
                    //正常模式,加载menulevel
                    GameManager.NotifyGameCurrentScenseChanged(GameCurrentScense.MenuLevel);

                    yield return(new WaitUntil(ModManager.IsNoneModLoading));

                    int initEventHandledCount = GameManager.GameMediator.DispatchGlobalEvent(GameEventNames.EVENT_ENTER_MENULEVEL, "*");
                    GameManager.GameMediator.UnRegisterGlobalEvent(GameEventNames.EVENT_ENTER_MENULEVEL);

                    if (initEventHandledCount == 0)
                    {
                        GameErrorManager.ThrowGameError(GameError.HandlerLost, "未找到 EVENT_ENTER_MENULEVEL 的下一步事件接收器\n此错误出现原因可能是配置不正确");
                        GameLogger.Warning(TAG, "None EVENT_GAME_INIT_FINISH handler was found, the game will not continue.");
                    }
                    else
                    {
                        GameInitHideGameInitUi(true);
                    }
                }
            }
            else
            {
                GameInitHideGameInitUi(true);
            }
        }
Ejemplo n.º 11
0
        private UILayout BuildLayoutByTemplateInternal(string name, XmlNode templateXml,
                                                       Dictionary <string, GameHandler> handlers,
                                                       UILayout parent, UILayout root, string[] initialProps)
        {
            //实例化UI预制体
            string     prefabName = templateXml.Name;
            GameObject prefab     = UIManager.FindRegisterElementPrefab(prefabName);

            if (prefab == null)
            {
                GameLogger.Log(TAG, "BuildLayoutByTemplate failed, not found prefab {0}", prefabName);
                GameErrorManager.LastError = GameError.PrefabNotFound;
                return(null);
            }

            //获取预制体上的脚本
            UILayout ilayout = prefab.GetComponent <UILayout>();

            if (ilayout == null) //该方法必须实例化UI容器
            {
                GameLogger.Error(TAG, "BuildLayoutByTemplate with prefab {0} failed, root must be a container", prefabName);
                GameErrorManager.LastError = GameError.MustBeContainer;
                return(null);
            }

            GameObject newCon = GameCloneUtils.CloneNewObjectWithParent(prefab,
                                                                        parent == null ? UIManager.UIRoot.transform : parent.RectTransform);

            ilayout = newCon.GetComponent <UILayout>();
            ilayout.DoCallStart();
            ilayout.LayoutLock();
            ilayout.RectTransform = newCon.GetComponent <RectTransform>();
            UIAnchorPosUtils.SetUIPivot(ilayout.RectTransform, UIPivot.TopCenter);
            ilayout.RectTransform.anchoredPosition = Vector2.zero;

            if (root == null)
            {
                root = ilayout;
                root.IsRootLayout = true;
            }

            GameObject newEle    = null;
            UIElement  uIElement = null;

            //子元素
            for (int i = 0, c = templateXml.ChildNodes.Count; i < c; i++)
            {
                string eleName = "";
                //xml 属性读取
                XmlNode eleNode = templateXml.ChildNodes[i];
                foreach (XmlAttribute a in eleNode.Attributes)
                {
                    if (a.Name.ToLower() == "name")
                    {
                        eleName = a.Value;
                    }
                }

                //预制体
                prefab = UIManager.FindRegisterElementPrefab(eleNode.Name);
                if (prefab == null)
                {
                    GameLogger.Error(TAG, "BuildLayoutByTemplate failed, not found prefab {0}", prefabName);
                    continue;
                }
                if (prefab.GetComponent <UILayout>() != null)                                                                    //这是UI容器
                {
                    UILayout newLayout = BuildLayoutByTemplateInternal(eleName, eleNode, handlers, ilayout, root, initialProps); //递归构建

                    uIElement = newLayout;
                    uIElement.rootContainer = root;
                    uIElement.Name          = eleName;
                }
                else
                {
                    //构建子元素
                    newEle = GameCloneUtils.CloneNewObjectWithParent(prefab, ilayout.RectTransform, eleName);

                    uIElement = newEle.GetComponent <UIElement>();
                    uIElement.RectTransform = newEle.GetComponent <RectTransform>();
                    uIElement.DoCallStart();
                    uIElement.Init(eleNode);
                    uIElement.rootContainer = root;
                    uIElement.Name          = eleName;
                }

                //初始化
                InitiazeChildElement(uIElement, handlers, initialProps);

                //添加元素
                ilayout.AddElement(uIElement, false);
            }

            ilayout.Init(templateXml); //容器的XML读取
            InitiazeChildElement(ilayout, handlers, initialProps);
            ilayout.LayoutUnLock();
            ilayout.PostDoLayout();

            if (root == ilayout)
            {
                ilayout.DoLayout();
            }

            return(ilayout);
        }