コード例 #1
0
        public static void RefreshVertical(SplitScreenManager self, DictionaryExt <int, SplitPlayer> localUIs)
        {
            if (GameDisplayInUI.Instance.gameObject.activeSelf != self.RenderInImage)
            {
                GameDisplayInUI.Instance.gameObject.SetActive(self.RenderInImage);
            }

            for (int i = 0; i < localUIs.Count; i++)
            {
                SplitPlayer splitPlayer    = localUIs.Values[i];
                Vector3     default_OFFSET = CharacterCamera.DEFAULT_OFFSET;
                Vector2     zero           = Vector2.zero;
                Vector2     zero2          = Vector2.zero;
                Rect        splitRect      = new Rect(0f, 0f, 0f, 0f);
                RawImage    rawImage       = (!self.RenderInImage) ? null : GameDisplayInUI.Instance.Screens[i];
                float       foV;
                if (localUIs.Count == 1)
                {
                    splitRect.position = Vector2.zero;
                    splitRect.size     = Vector2.one;
                    foV = OptionManager.Instance.GetFoVSolo(i);
                    if (self.RenderInImage)
                    {
                        rawImage.rectTransform.localScale = Vector3.one;
                        GameDisplayInUI.Instance.Screens[1].gameObject.SetActive(false);
                    }
                    GameDisplayInUI.Instance.SetMultiDisplayActive(false);
                }
                else
                {
                    if (localUIs.Count != 2)
                    {
                        throw new NotImplementedException("Support for more than 2 players is not implemented.");
                    }

                    int num = i + 1;
                    if (self.RenderInImage)
                    {
                        splitRect.position = ((i != 0) ? new Vector2(0.5f, 0f) : Vector2.zero);
                        splitRect.size     = new Vector2(0.5f, 1f);
                    }
                    else
                    {
                        splitRect.position = new Vector2(0.5f * (float)((i != 0) ? 1 : -1), 0f);
                        splitRect.size     = Vector2.one;
                    }

                    foV = OptionManager.Instance.GetFoVSplit(i);
                    default_OFFSET.z = -2.5f;
                    zero2.x          = -0.5f;
                    zero.x           = (float)((num % 2 != 1) ? -1 : 1) * 0.5f;

                    if (self.RenderInImage)
                    {
                        GameDisplayInUI.Instance.Screens[1].gameObject.SetActive(true);
                    }
                }

                CameraSettings settings;
                settings.FoV         = foV;
                settings.SplitRect   = splitRect;
                settings.Offset      = default_OFFSET;
                settings.CameraDepth = 2 * i;
                settings.Image       = rawImage;
                splitPlayer.RefreshSplitScreen(zero, zero2, settings);
            }

            if ((bool)CONFIG.GetValue(Settings.moveGlobalUiToPlayer1.ToString()))
            {
                Vector2 zero3 = Vector2.zero;
                Vector2 zero4 = Vector2.zero;
                if (self.LocalPlayers.Count == 2)
                {
                    zero4.x = -0.5f;
                    zero3.x = 0.5f;
                }

                Vector2 vector           = Vector2.Scale(zero4, MenuManager.Instance.ScreenSize);
                Vector2 anchoredPosition = Vector2.Scale(zero3, vector);

                if (At.GetField(MenuManager.Instance, "m_masterLoading") is LoadingFade loadingFade)
                {
                    RectTransform componentInChildren = loadingFade.GetComponentInChildren <RectTransform>();
                    bool          flag7 = componentInChildren != null;
                    if (flag7)
                    {
                        componentInChildren.sizeDelta        = vector;
                        componentInChildren.anchoredPosition = anchoredPosition;
                    }
                }

                if (At.GetField(MenuManager.Instance, "m_prologueScreen") is ProloguePanel prologuePanel)
                {
                    RectTransform rectTransform = prologuePanel.RectTransform;
                    rectTransform.sizeDelta        = vector;
                    rectTransform.anchoredPosition = anchoredPosition;
                }
            }
        }
コード例 #2
0
ファイル: CoopUIScalerMod.cs プロジェクト: shesk/OutwardMods
        public static void SplitScreenManager_DelayedRefreshSplitScreen_Vertical(On.SplitScreenManager.orig_DelayedRefreshSplitScreen orig, SplitScreenManager self)
        {
            self.CurrentSplitType = SplitScreenManager.SplitType.Vertical;
            DictionaryExt <int, SplitPlayer> privatePart = Utils.GetPrivatePart <DictionaryExt <int, SplitPlayer>, SplitScreenManager>(self, "m_localCharacterUIs");

            if (GameDisplayInUI.Instance.gameObject.activeSelf != self.RenderInImage)
            {
                GameDisplayInUI.Instance.gameObject.SetActive(self.RenderInImage);
            }

            for (int i = 0; i < privatePart.Count; i++)
            {
                SplitPlayer splitPlayer    = privatePart.Values[i];
                Vector3     default_OFFSET = CharacterCamera.DEFAULT_OFFSET;
                Vector2     zero           = Vector2.zero;
                Vector2     zero2          = Vector2.zero;
                Rect        splitRect      = new Rect(0f, 0f, 0f, 0f);
                RawImage    rawImage       = (!self.RenderInImage) ? null : GameDisplayInUI.Instance.Screens[i];
                float       foV;
                if (privatePart.Count == 1)
                {
                    splitRect.position = Vector2.zero;
                    splitRect.size     = Vector2.one;
                    foV = OptionManager.Instance.GetFoVSolo(i);
                    if (self.RenderInImage)
                    {
                        rawImage.rectTransform.localScale = Vector3.one;
                        GameDisplayInUI.Instance.Screens[1].gameObject.SetActive(false);
                    }

                    GameDisplayInUI.Instance.SetMultiDisplayActive(false);
                }
                else
                {
                    if (privatePart.Count != 2)
                    {
                        throw new NotImplementedException("Support for more than 2 players is not implemented.");
                    }

                    int num = i + 1;
                    if (self.RenderInImage)
                    {
                        splitRect.position = ((i != 0) ? new Vector2(0.5f, 0f) : Vector2.zero);
                        splitRect.size     = new Vector2(0.5f, 1f);
                    }
                    else
                    {
                        splitRect.position = new Vector2(0.5f * (float)((i != 0) ? 1 : -1), 0f);
                        splitRect.size     = Vector2.one;
                    }

                    foV = OptionManager.Instance.GetFoVSplit(i);
                    default_OFFSET.z = -2.5f;
                    zero2.x          = -0.5f;
                    zero.x           = (float)((num % 2 != 1) ? -1 : 1) * 0.5f;
                    if (self.RenderInImage)
                    {
                        GameDisplayInUI.Instance.Screens[1].gameObject.SetActive(true);
                    }
                }

                CameraSettings cameraSettings;
                cameraSettings.FoV         = foV;
                cameraSettings.SplitRect   = splitRect;
                cameraSettings.Offset      = default_OFFSET;
                cameraSettings.CameraDepth = 2 * i;
                cameraSettings.Image       = rawImage;
                splitPlayer.RefreshSplitScreen(zero, zero2, cameraSettings);
            }

            if (moveGlobalUiToPlayer1)
            {
                Vector2 zero3 = Vector2.zero;
                Vector2 zero4 = Vector2.zero;
                if (self.LocalPlayers.Count == 2)
                {
                    zero4.x = -0.5f;
                    zero3.x = 0.5f;
                }

                Vector2     vector           = Vector2.Scale(zero4, MenuManager.Instance.ScreenSize);
                Vector2     anchoredPosition = Vector2.Scale(zero3, vector);
                LoadingFade privatePart2     = Utils.GetPrivatePart <LoadingFade, MenuManager>(MenuManager.Instance, "m_masterLoading");
                if (privatePart2 != null)
                {
                    RectTransform componentInChildren = privatePart2.GetComponentInChildren <RectTransform>();
                    if (componentInChildren != null)
                    {
                        componentInChildren.sizeDelta        = vector;
                        componentInChildren.anchoredPosition = anchoredPosition;
                    }
                }

                ProloguePanel privatePart3 = Utils.GetPrivatePart <ProloguePanel, MenuManager>(MenuManager.Instance, "m_prologueScreen");
                if (privatePart3 != null)
                {
                    RectTransform rectTransform = privatePart3.RectTransform;
                    rectTransform.sizeDelta        = vector;
                    rectTransform.anchoredPosition = anchoredPosition;
                }
            }
        }