public void Init(GameObject labelTemplate)
        {
            GameObject obj = this.gameObject;

            HorizontalLayoutGroup hlg = obj.AddComponent <HorizontalLayoutGroup>();

            hlg.childControlWidth  = hlg.childForceExpandWidth = true;
            hlg.childControlHeight = hlg.childForceExpandHeight = true;
            hlg.padding.left       = -1;
            hlg.padding.top        = -1;

            this.Image        = obj.AddComponent <Image>();
            this.Image.sprite = ModHandler.mods.sprites["SatisfactionIcon"];
            this.Image.type   = Image.Type.Simple;

            GameObject textObj = GameObject.Instantiate(labelTemplate, obj.transform);

            Outline outline = textObj.AddComponent <Outline>();

            outline.effectColor    = Color.black;
            outline.effectDistance = new Vector2(1, -1);

            this.Text                    = textObj.GetComponent <Text>();
            this.Text.text               = "0";
            this.Text.alignment          = TextAnchor.MiddleCenter;
            this.Text.fontSize           = 14;
            this.Text.horizontalOverflow = HorizontalWrapMode.Overflow;
            this.Text.verticalOverflow   = VerticalWrapMode.Overflow;
            this.Text.alignByGeometry    = true;

            this.Tooltip           = obj.AddComponent <TooltipHoverable>();
            this.Tooltip.titleCode = "witchy_UIImprovements_satisfactionTooltip_Title";
        }
        public void Init()
        {
            Sprite smallBorders = Resources.FindObjectsOfTypeAll <Sprite>().First(x => x.name == "smallBorder");

            backgroundImage       = this.GetComponent <Image>();
            backgroundImage.color = backgroundColor;

            GameObject iconObj = new GameObject("icon", typeof(RectTransform), typeof(CanvasRenderer), typeof(Image), typeof(Button));

            iconObj.transform.SetParent(this.transform);
            iconImage = iconObj.GetComponent <Image>();
            iconImage.raycastTarget = false;
            iconImage.type          = Image.Type.Simple;

            GameObject frameObj = new GameObject("frame", typeof(RectTransform), typeof(CanvasRenderer), typeof(Image));

            frameObj.transform.SetParent(this.transform);
            frameImage               = frameObj.GetComponent <Image>();
            frameImage.sprite        = smallBorders;
            frameImage.raycastTarget = false;

            RectTransform rectIcon  = iconObj.GetComponent <RectTransform>();
            RectTransform rectFrame = frameObj.GetComponent <RectTransform>();

            rectFrame.anchorMin        = rectIcon.anchorMin = new Vector2(0, 0);
            rectFrame.anchorMax        = rectIcon.anchorMax = new Vector2(1, 1);
            rectFrame.pivot            = rectIcon.pivot = new Vector2(1, 1);
            rectFrame.sizeDelta        = new Vector2(FRAMEOFFSET, FRAMEOFFSET);
            rectFrame.anchoredPosition = new Vector2(FRAMEOFFSET / 2f, FRAMEOFFSET / 2f);

            rectIcon.sizeDelta        = new Vector2(SIZEDIFF, SIZEDIFF);
            rectIcon.anchoredPosition = new Vector2(SIZEDIFF / 2f, SIZEDIFF / 2f);

            this.ToolTip = this.GetComponent <TooltipHoverable>();

            UpdateInteraction(null);
        }