Esempio n. 1
0
        protected override void DidActivate(bool firstActivation, ActivationType type)
        {
            try
            {
                if (firstActivation)
                {
                    //Largely unchanged from CustomListController. Keep all of this.
                    Instance = this;
                    levelPackTableCellInstance = Resources.FindObjectsOfTypeAll <LevelPackTableCell>().First(x => x.name == "LevelPackTableCell");
                    levelPackTableCellInstance.reuseIdentifier = ReuseIdentifier;

                    RectTransform container = new GameObject("HorizontalListContainer", typeof(RectTransform)).transform as RectTransform;
                    container.SetParent(rectTransform, false);
                    container.sizeDelta = new Vector2(0, 0);
                    container.anchorMin = new Vector2(0.1f, 0); //Squish the list container a little bit
                    container.anchorMax = new Vector2(0.9f, 1); //To make room for the forward/backward buttons

                    var go = new GameObject("CustomListTableView");
                    go.SetActive(false);
                    CustomListTableView = go.AddComponent <TableView>();
                    CustomListTableView.gameObject.AddComponent <RectMask2D>();
                    CustomListTableView.transform.SetParent(container, false);
                    CustomListTableView.SetPrivateField("_tableType", TableView.TableType.Horizontal);

                    (CustomListTableView.transform as RectTransform).anchorMin        = new Vector2(0, 0);
                    (CustomListTableView.transform as RectTransform).anchorMax        = new Vector2(1, 1);
                    (CustomListTableView.transform as RectTransform).sizeDelta        = new Vector2(0, 0);
                    (CustomListTableView.transform as RectTransform).anchoredPosition = new Vector2(0, 0);

                    CustomListTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                    CustomListTableView.SetPrivateField("_isInitialized", false);
                    CustomListTableView.dataSource = this;
                    go.SetActive(true);

                    //Code copied from monkeymanboy's Beat Saber Custom Campaigns mod. Keep these too.
                    PageLeftButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageLeftButton")), transform);
                    RectTransform buttonTransform = PageLeftButton.transform.Find("BG") as RectTransform;
                    RectTransform glow            = Instantiate(Resources.FindObjectsOfTypeAll <GameObject>().Last(x => (x.name == "GlowContainer")), PageLeftButton.transform).transform as RectTransform;
                    glow.localPosition    = buttonTransform.localPosition;
                    glow.anchoredPosition = buttonTransform.anchoredPosition;
                    glow.anchorMin        = buttonTransform.anchorMin;
                    glow.anchorMax        = buttonTransform.anchorMax;
                    glow.sizeDelta        = buttonTransform.sizeDelta;
                    PageLeftButton.transform.localPosition = new Vector3(-80, 2.5f, -5);
                    PageLeftButton.interactable            = true;
                    PageLeftButton.onClick.AddListener(() => CustomListTableView.PageScrollUp());
                    PageRightButton       = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageRightButton")), transform);
                    buttonTransform       = PageRightButton.transform.Find("BG") as RectTransform;
                    glow                  = Instantiate(Resources.FindObjectsOfTypeAll <GameObject>().Last(x => (x.name == "GlowContainer")), PageRightButton.transform).transform as RectTransform;
                    glow.localPosition    = buttonTransform.localPosition;
                    glow.anchoredPosition = buttonTransform.anchoredPosition;
                    glow.anchorMin        = buttonTransform.anchorMin;
                    glow.anchorMax        = buttonTransform.anchorMax;
                    glow.sizeDelta        = buttonTransform.sizeDelta;
                    PageRightButton.transform.localPosition = new Vector3(80, 2.5f, -5);
                    PageRightButton.interactable            = true;
                    PageRightButton.onClick.AddListener(() => CustomListTableView.PageScrollDown());

                    //Now load my Counter settings and data. The rest from here on out is mainly copied from
                    //the old CountersPlusSettingsViewController, and can be safely removed.
                    foreach (var kvp in AdvancedCounterSettings.counterUIItems)
                    {
                        counterInfos.Add(CreateFromModel(kvp.Key));
                    }
                    foreach (CustomConfigModel potential in ConfigLoader.LoadCustomCounters())
                    {
                        counterInfos.Add(new SettingsInfo()
                        {
                            Name        = potential.DisplayName,
                            Description = $"A custom counter added by {potential.ModCreator}!",
                            Model       = potential,
                            IsCustom    = true,
                        });
                    }

                    //Reload the data, and select the first cell in the list.
                    CustomListTableView.didSelectCellWithIdxEvent += OnCellSelect;
                    CustomListTableView.ReloadData();
                    CustomListTableView.SelectCellWithIdx(0, false);
                }
            } catch (Exception e)
            {  //Edit this with your logging system of choice, or delete it altogether (As this shouldn't really cause Exceptions)
                Plugin.Log(e.ToString(), Plugin.LogInfo.Error, "Report this as an issue on the Counters+ GitHub.");
            }
        }
Esempio n. 2
0
        protected override void DidActivate(bool firstActivation, VRUIViewController.ActivationType activationType)
        {
            if (firstActivation && activationType == VRUIViewController.ActivationType.AddedToHierarchy)
            {
                _additionalContentModel = Resources.FindObjectsOfTypeAll <AdditionalContentModelSO>().FirstOrDefault();
                RectTransform container = new GameObject("HorizontalListContainer", typeof(RectTransform)).transform as RectTransform;
                container.SetParent(rectTransform, false);
                container.sizeDelta = Vector2.zero;
                container.anchorMin = new Vector2(0.1f, 0); //Squish the list container a little bit
                container.anchorMax = new Vector2(0.9f, 1); //To make room for the forward/backward buttons

                var tableGameObject = new GameObject("CustomTableView");
                tableGameObject.SetActive(false);
                tableView = tableGameObject.AddComponent <TableView>();
                tableView.gameObject.AddComponent <RectMask2D>();
                tableView.transform.SetParent(container, false);
                tableView.SetPrivateField("_isInitialized", false);
                tableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                tableView.SetPrivateField("_tableType", TableView.TableType.Horizontal);

                (tableView.transform as RectTransform).anchorMin        = Vector2.zero;
                (tableView.transform as RectTransform).anchorMax        = Vector2.one;
                (tableView.transform as RectTransform).sizeDelta        = Vector2.zero;
                (tableView.transform as RectTransform).anchoredPosition = Vector2.zero;

                // Thanks alot Caeden117 for helping out. Used his Counters+ Horizontal Settings view controller to get all rects set correctly.

                PageLeftButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageLeftButton")), transform);
                RectTransform buttonTransform = PageLeftButton.transform.Find("BG") as RectTransform;
                RectTransform glow            = Instantiate(Resources.FindObjectsOfTypeAll <GameObject>().Last(x => (x.name == "GlowContainer")), PageLeftButton.transform).transform as RectTransform;
                glow.localPosition    = buttonTransform.localPosition;
                glow.anchoredPosition = buttonTransform.anchoredPosition;
                glow.anchorMin        = buttonTransform.anchorMin;
                glow.anchorMax        = buttonTransform.anchorMax;
                glow.sizeDelta        = buttonTransform.sizeDelta;
                PageLeftButton.transform.localPosition = new Vector3(-80, 2.5f, -5);
                PageLeftButton.interactable            = true;
                PageRightButton       = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageRightButton")), transform);
                buttonTransform       = PageRightButton.transform.Find("BG") as RectTransform;
                glow                  = Instantiate(Resources.FindObjectsOfTypeAll <GameObject>().Last(x => (x.name == "GlowContainer")), PageRightButton.transform).transform as RectTransform;
                glow.localPosition    = buttonTransform.localPosition;
                glow.anchoredPosition = buttonTransform.anchoredPosition;
                glow.anchorMin        = buttonTransform.anchorMin;
                glow.anchorMax        = buttonTransform.anchorMax;
                glow.sizeDelta        = buttonTransform.sizeDelta;
                PageRightButton.transform.localPosition = new Vector3(80, 2.5f, -5);
                PageRightButton.interactable            = true;

                RectTransform viewport = new GameObject("Viewport").AddComponent <RectTransform>(); //Make a Viewport RectTransform
                viewport.SetParent(tableView.transform as RectTransform, false);                    //It expects one from a ScrollRect, so we have to make one ourselves.
                viewport.sizeDelta = Vector2.zero;                                                  //Important to set this to zero so the TableView can scroll through all available cells.
                tableView.SetPrivateField("_pageUpButton", PageLeftButton);                         //Set Up button to Left
                tableView.SetPrivateField("_pageDownButton", PageRightButton);                      //Set down button to Right

                tableView.Init();
                tableView.SetPrivateField("_scrollRectTransform", viewport); //Set it with our hot-out-of-the-oven Viewport.
                tableGameObject.SetActive(true);
                _levelPacksTableView = new LevelPacksTableView();
                _levelPacksTableView.SetPrivateField("_tableView", tableView);
                string[] packs = new string[1];
                packs[0] = "";
                _levelPacksTableView.SetPrivateField("_promoPackIDStrings", packs);
                LevelPackTableCell prefab = Resources.FindObjectsOfTypeAll <LevelPackTableCell>().First(x => (x.name == "LevelPackTableCell"));
                _levelPacksTableView.SetPrivateField("_cellPrefab", prefab);
                _levelPacksTableView.SetPrivateField("_cellWidth", 30f);
                _levelPacksTableView.SetPrivateField("_additionalContentModel", _additionalContentModel);

                _levelPacksTableView.didSelectPackEvent += didSelectPackEvent;
                _levelPacksTableView.Init();
                for (int i = 0; i < tableView.transform.childCount; i++)
                {
                    (tableView.transform.GetChild(i).transform as RectTransform).anchoredPosition = Vector3.zero;
                    (tableView.transform.GetChild(i).transform as RectTransform).anchorMin        = Vector3.zero;
                    (tableView.transform.GetChild(i).transform as RectTransform).anchorMax        = Vector3.one;
                }
                tableView.ReloadData();
                tableView.SelectCellWithIdx(0, false);
                _levelPacksTableView.SelectCellWithIdx(_selectedPackNum);
                _levelPacksTableView.RefreshPacksAvailability();
            }
            _additionalContentModel.didInvalidateDataEvent += HandleAdditionalContentModelDidInvalidateData;
        }
Esempio n. 3
0
        }                                    //Tune this to the amount of cells you'll have, whether dynamic or static.

        public TableCell CellForIdx(int row) //Here is where you customize your TableCell.
        {
            LevelPackTableCell cell = CustomListTableView.DequeueReusableCellForIdentifier(ReuseIdentifier) as LevelPackTableCell;

            if (cell == null) //Dequeue the cell, and make an instance if it doesn't exist.
            {
                cell = Instantiate(levelPackTableCellInstance);
                cell.reuseIdentifier = ReuseIdentifier;
            }
            cell.showNewRibbon = false;                                                             //Dequeued cells will keep NEW ribbon value. Always change it to false.
            TextMeshProUGUI packNameText = cell.GetPrivateField <TextMeshProUGUI>("_packNameText"); //Grab some TMP references.
            TextMeshProUGUI packInfoText = cell.GetPrivateField <TextMeshProUGUI>("_infoText");

            packInfoText.richText = true;                                //Enable rich text for info text. Optional, but I use it for Counters+.
            UnityEngine.UI.Image packCoverImage = cell.GetPrivateField <UnityEngine.UI.Image>("_coverImage");
            packCoverImage.mainTexture.wrapMode = TextureWrapMode.Clamp; //Fixes bordering on images (especially transparent ones)
            if (row == 0)                                                //From here on out is mainly Counters+ things, so you can safely remove them.
            {
                packNameText.text     = "Main Settings";
                packInfoText.text     = "Configure basic Counters+ settings.";
                packCoverImage.sprite = Images.Images.LoadSprite("MainSettings");
            }
            else if (row == NumberOfCells() - 1)
            {
                packNameText.text     = "Donators";
                packInfoText.text     = "See who supported me on Ko-fi!";
                packCoverImage.sprite = Images.Images.LoadSprite("Donators");
                cell.showNewRibbon    = true;
            }
            else if (row == NumberOfCells() - 2)
            {
                packNameText.text     = "Contributors";
                packInfoText.text     = "See who helped with Counters+!";
                packCoverImage.sprite = Images.Images.LoadSprite("Contributors");
            }
            else
            {
                SettingsInfo info = counterInfos[row - 1];
                packNameText.text = info.Name;
                packInfoText.text = info.Description;
                try
                {
                    if (info.IsCustom)
                    {
                        packCoverImage.sprite = Images.Images.LoadSprite("Custom");
                        cell.showNewRibbon    = (info.Model as CustomConfigModel).IsNew;
                    }
                    else
                    {
                        packCoverImage.sprite = Images.Images.LoadSprite(info.Name);
                        if (info.Model.VersionAdded != null)
                        {
                            cell.showNewRibbon = Plugin.PluginVersion == info.Model.VersionAdded;
                            packInfoText.text += $"\n\n<i>Version added: {info.Model.VersionAdded.ToString()}</i>";
                        }
                    }
                }
                catch { packCoverImage.sprite = Images.Images.LoadSprite("Bug"); }
            }
            return(cell);
        }
        protected override void DidActivate(bool firstActivation, ActivationType type)
        {
            try
            {
                if (firstActivation)
                {
                    //Firstly, load my Counter settings and data, as its necessary for the NumberOfCells function.
                    //These two foreach loops can be safely removed.
                    foreach (var kvp in AdvancedCounterSettings.counterUIItems)
                    {
                        counterInfos.Add(CreateFromModel(kvp.Key));
                    }
                    foreach (CustomConfigModel potential in ConfigLoader.LoadCustomCounters())
                    {
                        counterInfos.Add(new SettingsInfo()
                        {
                            Name        = potential.DisplayName,
                            Description = $"A custom counter added by {potential.ModCreator}!",
                            Model       = potential,
                            IsCustom    = true,
                        });
                    }

                    //Largely unchanged from CustomListController. Keep all of this.
                    Instance = this;
                    levelPackTableCellInstance = Resources.FindObjectsOfTypeAll <LevelPackTableCell>().First(x => x.name == "LevelPackTableCell");
                    levelPackTableCellInstance.reuseIdentifier = ReuseIdentifier;

                    RectTransform container = new GameObject("HorizontalListContainer", typeof(RectTransform)).transform as RectTransform;
                    container.SetParent(rectTransform, false);
                    container.sizeDelta = Vector2.zero;
                    container.anchorMin = new Vector2(0.1f, 0); //Squish the list container a little bit
                    container.anchorMax = new Vector2(0.9f, 1); //To make room for the forward/backward buttons

                    var go = new GameObject("CustomListTableView");
                    go.SetActive(false);                                        //Disable GameObject to not have scripts run.
                    CustomListTableView = go.AddComponent <TableView>();        //Add TableView
                    CustomListTableView.gameObject.AddComponent <RectMask2D>(); //Add Mask
                    CustomListTableView.transform.SetParent(container, false);
                    CustomListTableView.SetPrivateField("_tableType", TableView.TableType.Horizontal);

                    (CustomListTableView.transform as RectTransform).anchorMin        = Vector2.zero;
                    (CustomListTableView.transform as RectTransform).anchorMax        = Vector2.one;
                    (CustomListTableView.transform as RectTransform).sizeDelta        = Vector2.zero;
                    (CustomListTableView.transform as RectTransform).anchoredPosition = Vector2.zero;

                    CustomListTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                    CustomListTableView.SetPrivateField("_isInitialized", false);

                    //Code copied from monkeymanboy's Beat Saber Custom Campaigns mod. Keep these too.
                    PageLeftButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageLeftButton")), transform);
                    RectTransform buttonTransform = PageLeftButton.transform.Find("BG") as RectTransform;
                    RectTransform glow            = Instantiate(Resources.FindObjectsOfTypeAll <GameObject>().Last(x => (x.name == "GlowContainer")), PageLeftButton.transform).transform as RectTransform;
                    glow.localPosition    = buttonTransform.localPosition;
                    glow.anchoredPosition = buttonTransform.anchoredPosition;
                    glow.anchorMin        = buttonTransform.anchorMin;
                    glow.anchorMax        = buttonTransform.anchorMax;
                    glow.sizeDelta        = buttonTransform.sizeDelta;
                    PageLeftButton.transform.localPosition = new Vector3(-80, 2.5f, -5);
                    PageLeftButton.interactable            = true;
                    PageRightButton       = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageRightButton")), transform);
                    buttonTransform       = PageRightButton.transform.Find("BG") as RectTransform;
                    glow                  = Instantiate(Resources.FindObjectsOfTypeAll <GameObject>().Last(x => (x.name == "GlowContainer")), PageRightButton.transform).transform as RectTransform;
                    glow.localPosition    = buttonTransform.localPosition;
                    glow.anchoredPosition = buttonTransform.anchoredPosition;
                    glow.anchorMin        = buttonTransform.anchorMin;
                    glow.anchorMax        = buttonTransform.anchorMax;
                    glow.sizeDelta        = buttonTransform.sizeDelta;
                    PageRightButton.transform.localPosition = new Vector3(80, 2.5f, -5);
                    PageRightButton.interactable            = true;

                    RectTransform viewport = new GameObject("Viewport").AddComponent <RectTransform>(); //Make a Viewport RectTransform
                    viewport.SetParent(CustomListTableView.transform as RectTransform, false);          //It expects one from a ScrollRect, so we have to make one ourselves.
                    viewport.sizeDelta = Vector2.zero;                                                  //Important to set this to zero so the TableView can scroll through all available cells.

                    CustomListTableView.SetPrivateField("_pageUpButton", PageLeftButton);               //Set Up button to Left
                    CustomListTableView.SetPrivateField("_pageDownButton", PageRightButton);            //Set down button to Right
                    CustomListTableView.Init();                                                         //Init, have "_scrollRectTransform" be null.
                    CustomListTableView.SetPrivateField("_scrollRectTransform", viewport);              //Set it with our hot-out-of-the-oven Viewport.
                    CustomListTableView.dataSource = this;                                              //Add data source
                    go.SetActive(true);

                    //Finally, reset some anchors of each child so that all of the available cells are shown.
                    for (int i = 0; i < CustomListTableView.transform.childCount; i++)
                    {
                        (CustomListTableView.transform.GetChild(i).transform as RectTransform).anchoredPosition = Vector3.zero;
                        (CustomListTableView.transform.GetChild(i).transform as RectTransform).anchorMin        = Vector3.zero;
                        (CustomListTableView.transform.GetChild(i).transform as RectTransform).anchorMax        = Vector3.one;
                    }

                    //Reload the data, and select the first cell in the list.
                    CustomListTableView.didSelectCellWithIdxEvent += OnCellSelect;
                    CustomListTableView.ReloadData();
                    CustomListTableView.SelectCellWithIdx(0, false);
                }
            } catch (Exception e)
            {  //Edit this with your logging system of choice, or delete it altogether (As this shouldn't really cause Exceptions)
                Plugin.Log(e.ToString(), LogInfo.Error, "Report this as an issue on the Counters+ GitHub.");
            }
        }