private GameObject CreateCategory(GameObject container, ShopItems.Categories categorie)
        {
            GameObject Panel = new GameObject("Element"); //Create the GameObject#

            Image  img = Panel.AddComponent <Image>();
            Button btn = Panel.AddComponent <Button>();

            img.color = notBuyable;

            GameObject textObj = new GameObject("Text");

            textObj.AddComponent <Text>();
            textObj.GetComponent <RectTransform>().SetParent(btn.GetComponent <RectTransform>());
            textObj.GetComponent <RectTransform>().anchorMin = new Vector2(0, 0f);
            textObj.GetComponent <RectTransform>().anchorMax = new Vector2(1, 1f);
            textObj.GetComponent <RectTransform>().pivot     = new Vector2(0.5f, 0.5f);
            //Left Bottom
            textObj.GetComponent <RectTransform>().offsetMin = new Vector2(0, 0);
            //-Right -Top
            textObj.GetComponent <RectTransform>().offsetMax = new Vector2(0, 0);
            textObj.GetComponent <Text>().font = Resources.GetBuiltinResource <Font>("Arial.ttf");

            btn.GetComponentInChildren <Text>().color     = Color.white;
            btn.GetComponentInChildren <Text>().alignment = TextAnchor.MiddleCenter;
            btn.GetComponentInChildren <Text>().text      = categorie.ToString();

            /*EventTrigger.Entry entry = new EventTrigger.Entry();
             * entry.eventID = EventTriggerType.PointerClick;
             * entry.callback.AddListener( (eventdata) => { Debug.Log("TEST"); } );
             *
             * btn.triggers.Add(entry);*/
            btn.onClick.AddListener(delegate()
            {
                List <GameObject> gameObjects            = allBuyMenuItems.FindAll(x => x.name != categorie.ToString());
                List <GameObject> gameObjectsOfCategorie = allBuyMenuItems.FindAll(x => x.name == categorie.ToString());

                foreach (GameObject item in gameObjects)
                {
                    item.SetActive(false);
                }

                foreach (GameObject item in gameObjectsOfCategorie)
                {
                    item.SetActive(true);
                }

                foreach (GameObject item in allBuyMenuCategories)
                {
                    item.GetComponent <Image>().color = notBuyable;
                }
                img.color = buyable;
            });

            Panel.GetComponent <RectTransform>().SetParent(container.transform);
            Panel.SetActive(true); //Activate the GameObject

            Panel.AddComponent <LayoutElement>();
            Panel.GetComponent <LayoutElement>().preferredWidth = 80;
            Panel.GetComponent <LayoutElement>().flexibleHeight = 1;


            Panel.transform.localScale = Vector3.one;

            return(Panel);
        }
        private GameObject CreateElement(GameObject container, GameObject descriptionOBJ, string name, int price, Func <PlayerCharacterMasterController, int> func, int index, ShopItems.Categories categorie, bool isFoldout, Sprite itemIcon = null, string description = null)
        {
            GameObject Empty = new GameObject("ElementHolder");

            Empty.AddComponent <RectTransform>();
            Empty.name = categorie.ToString();

            Empty.AddComponent <ItemOnHover>();
            Empty.GetComponent <ItemOnHover>().descriptionOBJ = descriptionOBJ;
            Empty.GetComponent <ItemOnHover>().description    = description;

            GameObject Panel = new GameObject("Element"); //Create the GameObject
            Image      img   = Panel.AddComponent <Image>();
            Button     btn   = Panel.AddComponent <Button>();

            Panel.GetComponent <RectTransform>().anchorMin = new Vector2(0, 1f);
            Panel.GetComponent <RectTransform>().anchorMax = new Vector2(0, 1f);
            Panel.GetComponent <RectTransform>().pivot     = new Vector2(0.0f, 1f);

            Panel.GetComponent <RectTransform>().sizeDelta = new Vector2(400, 50);

            img.color = notBuyable;

            GameObject textObj = new GameObject("Text");

            textObj.AddComponent <Text>();
            textObj.GetComponent <RectTransform>().SetParent(btn.GetComponent <RectTransform>());
            textObj.GetComponent <RectTransform>().anchorMin = new Vector2(0, 0f);
            textObj.GetComponent <RectTransform>().anchorMax = new Vector2(1, 1f);
            textObj.GetComponent <RectTransform>().pivot     = new Vector2(0.5f, 0.5f);
            //Left Bottom
            textObj.GetComponent <RectTransform>().offsetMin = new Vector2(0, 0);
            //-Right -Top
            textObj.GetComponent <RectTransform>().offsetMax = new Vector2(0, 0);
            textObj.GetComponent <Text>().font = Resources.GetBuiltinResource <Font>("Arial.ttf");

            btn.GetComponentInChildren <Text>().color     = Color.white;
            btn.GetComponentInChildren <Text>().alignment = TextAnchor.MiddleCenter;

            if (isFoldout)
            {
                btn.GetComponentInChildren <Text>().text = string.Format("{0}", name);

                btn.onClick.AddListener(delegate()
                {
                    List <GameObject> gameObjects = allBuyMenuItems.FindAll(x => x.name == categorie.ToString());

                    foreach (GameObject item in gameObjects)
                    {
                        if (item == Panel)
                        {
                            continue;
                        }

                        item.SetActive(!item.activeSelf);
                    }
                });
            }
            else
            {
                GameObject icon = new GameObject("Icon");
                icon.AddComponent <Image>();
                icon.GetComponent <Image>().sprite = itemIcon;
                icon.GetComponent <RectTransform>().SetParent(btn.GetComponent <RectTransform>());
                icon.GetComponent <RectTransform>().anchorMin = new Vector2(0, 0f);
                icon.GetComponent <RectTransform>().anchorMax = new Vector2(0, 1f);
                icon.GetComponent <RectTransform>().pivot     = new Vector2(0f, 0.5f);
                //Left Bottom
                icon.GetComponent <RectTransform>().offsetMin = new Vector2(25, 0);
                //-Right -Top
                icon.GetComponent <RectTransform>().offsetMax = new Vector2(-50, 0);
                icon.GetComponent <RectTransform>().sizeDelta = new Vector2(50, 0);

                btn.GetComponentInChildren <Text>().text = string.Format("{0} ({1} Souls)", name, price);

                shopItems.GetShopItems()[index].OnBought += delegate()
                {
                    btn.GetComponentInChildren <Text>().text = string.Format("{0} ({1} Souls)", name, shopItems.GetShopItems()[index].Price);
                };

                btn.onClick.AddListener(delegate()
                {
                    if (shopItems.GetShopItems()[index].Price > kills)
                    {
                        return;
                    }

                    //Save the Price
                    int oldPrice = shopItems.GetShopItems()[index].Price;
                    //Call the function (Updates the price)
                    func(LocalUserManager.GetFirstLocalUser().cachedMasterController);
                    //Deduct the souls
                    kills -= oldPrice;
                    //Update the text
                    //btn.GetComponentInChildren<Text>().text = string.Format("{0} ({1} Souls)", name, shopItems.GetShopItems()[index].Price);
                    shopItems.GetShopItems()[index].OnBought();
                });

                //btn.OnPointerEnter

                OnKillsChanged += delegate()
                {
                    if (shopItems.GetShopItems()[index].Price > kills)
                    {
                        img.color = notBuyable;
                    }
                    else
                    {
                        img.color = buyable;
                    }
                };
            }


            Empty.GetComponent <RectTransform>().SetParent(container.transform);
            Panel.GetComponent <RectTransform>().SetParent(Empty.transform);
            Panel.SetActive(true); //Activate the GameObject

            Empty.AddComponent <LayoutElement>();
            Empty.GetComponent <LayoutElement>().preferredHeight = 50;
            Empty.GetComponent <LayoutElement>().flexibleWidth   = 1;

            AddXButtons(Empty, price, func, index);

            Panel.GetComponent <RectTransform>().anchoredPosition = new Vector2(0, 0);

            return(Empty);
        }