Beispiel #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.");
            }
        }
        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.");
            }
        }