public override void HandleTypeAfterParse(BSMLParser.ComponentTypeWithData componentType, BSMLParserParams parserParams)
        {
            BSMLScrollableContainer scrollView = componentType.component as BSMLScrollableContainer;

            if (componentType.data.TryGetValue("id", out string id))
            {
                scrollView.PageUpButton = parserParams.GetObjectsWithTag("PageUpFor:" + id)
                                          .Select(o => o.GetComponent <Button>())
                                          .Where(b => b != null)
                                          .FirstOrDefault();

                scrollView.PageDownButton = parserParams.GetObjectsWithTag("PageDownFor:" + id)
                                            .Select(o => o.GetComponent <Button>())
                                            .Where(b => b != null)
                                            .FirstOrDefault();

                scrollView.ScrollIndicator = parserParams.GetObjectsWithTag("IndicatorFor:" + id)
                                             .Select(o => o.GetComponent <VerticalScrollIndicator>() ?? o.GetComponent <BSMLScrollIndicator>())
                                             .Where(i => i != null)
                                             .FirstOrDefault();
            }

            scrollView.RefreshContent();
            scrollView.RefreshButtons();
            //scrollView.ScrollAt(0, false);
        }
Esempio n. 2
0
        public override void HandleType(BSMLParser.ComponentTypeWithData componentType, BSMLParserParams parserParams)
        {
            BSMLScrollableContainer scrollView = componentType.component as BSMLScrollableContainer;

            if (componentType.data.TryGetValue("id", out string id))
            {
                parserParams.AddEvent(id + "#PageUp", scrollView.PageUpButtonPressed);
                parserParams.AddEvent(id + "#PageDown", scrollView.PageDownButtonPressed);
            }

            if (componentType.data.TryGetValue("maskOverflow", out string value))
            {
                scrollView.MaskOverflow = bool.TryParse(value, out bool bval) ? bval : true;
            }

            if (componentType.data.TryGetValue("alignBottom", out value))
            {
                scrollView.AlignBottom = bool.TryParse(value, out bool bval) ? bval : false;
            }
        }
        public override GameObject CreateObject(Transform parent)
        {
            GameObject go = new GameObject("BSMLScrollScrollableContainer");

            go.SetActive(false);

            RectTransform transform = go.AddComponent <RectTransform>();

            transform.SetParent(parent, false);
            transform.localPosition    = Vector2.zero;
            transform.anchorMin        = Vector2.zero;
            transform.anchorMax        = Vector2.one;
            transform.anchoredPosition = Vector2.zero;
            transform.sizeDelta        = Vector2.zero;

            GameObject    vpgo     = new GameObject("Viewport");
            RectTransform viewport = vpgo.AddComponent <RectTransform>();

            viewport.SetParent(transform, false);
            viewport.localPosition    = Vector2.zero;
            viewport.anchorMin        = Vector2.zero;
            viewport.anchorMax        = Vector2.one;
            viewport.anchoredPosition = Vector2.zero;
            viewport.sizeDelta        = Vector2.zero;

            Mask  vpmask  = vpgo.AddComponent <Mask>();
            Image vpimage = vpgo.AddComponent <ImageView>(); // a Mask needs an Image to work

            vpmask.showMaskGraphic = false;
            vpimage.color          = Color.white;
            vpimage.sprite         = Utilities.ImageResources.WhitePixel;
            vpimage.material       = Utilities.ImageResources.NoGlowMat;

            GameObject    contentgo = new GameObject("Content Wrapper");
            RectTransform content   = contentgo.AddComponent <RectTransform>();

            content.SetParent(viewport, false);
            content.localPosition    = Vector2.zero;
            content.anchorMin        = new Vector2(0f, 1f);
            content.anchorMax        = new Vector2(1f, 1f);
            content.anchoredPosition = Vector2.zero;
            content.pivot            = new Vector2(0.5f, 1f);

            ContentSizeFitter contentFitter = contentgo.AddComponent <ContentSizeFitter>();

            contentFitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained;
            contentFitter.verticalFit   = ContentSizeFitter.FitMode.PreferredSize;
            VerticalLayoutGroup layout = contentgo.AddComponent <VerticalLayoutGroup>();

            layout.childControlHeight     = false;
            layout.childForceExpandHeight = false;
            layout.childForceExpandWidth  = false;

            /*LayoutElement layoutElement = contentgo.AddComponent<LayoutElement>();
             * layoutElement.minWidth = -1;
             * layoutElement.preferredWidth = -1;
             * layoutElement.flexibleWidth = 0;*/

            go.AddComponent <Touchable>();           // Required by EventSystemListener
            go.AddComponent <EventSystemListener>(); // Required by ScrollView
            BSMLScrollableContainer scrollView = go.AddComponent <BSMLScrollableContainer>();

            scrollView.ContentRect = content;
            scrollView.Viewport    = viewport;
            (scrollView as ScrollView).SetField("_platformHelper", BeatSaberUI.PlatformHelper);

            contentgo.AddComponent <ExternalComponents>().components.Add(scrollView);

            go.SetActive(true);
            return(contentgo);
        }