public GameObject AddUIText(GameObject gameObject, string sharedVar,
                                DynValue translationTable = null)
    {
        EntityUI  entityUI        = gameObject.GetComponent <EntityUI>();
        Transform canvasTransform = gameObject.transform.Find("Canvas");

        if (canvasTransform == null || entityUI == null)
        {
            Debug.LogError("canvasTransform == null (" + canvasTransform
                           + ") || entityUI == null (" + entityUI + ")");
            return(null);
        }

        GameObject text = GameObject.Instantiate(EntityFactory.textPrefab);

        text.SetActive(true); // XXX WTF? Not active by default?

        Text textComponent = text.GetComponent <Text>();

        text.transform.SetParent(canvasTransform);
        text.transform.localScale = new Vector3(1, 1, 1); // XXX WTF? Keep it!
        Vector3 pos = text.transform.localPosition;

        pos.z = 0; // XXX Again, why does it take the position of the parent?
        text.transform.localPosition = pos;

        entityUI.AddElement(sharedVar, textComponent);

        if (translationTable != null &&
            translationTable.Type != DataType.Void)
        {
            if (translationTable.Type == DataType.Table)
            {
                entityUI.AddTranslationTable(translationTable.Table);
            }
            else
            {
                Debug.LogError("[AddUIText] Translation table is not a Table.");
                Debug.LogError("[AddUIText] Translation table is a "
                               + translationTable.Type);
            }
        }

        return(text);
    }
    public GameObject AddUISlider(GameObject gameObject, string sharedVar,
                                  float minValue, float maxValue, float r = 1, float g = 59 / 255,
                                  float b = 59 / 255)
    {
        EntityUI  entityUI        = gameObject.GetComponent <EntityUI>();
        Transform canvasTransform = gameObject.transform.Find("Canvas");

        if (canvasTransform == null || entityUI == null)
        {
            Debug.LogError("canvasTransform == null (" + canvasTransform
                           + ") || entityUI == null (" + entityUI + ")");
            return(null);
        }

        GameObject slider = GameObject.Instantiate(EntityFactory.sliderPrefab);

        slider.SetActive(true); // XXX WTF? Not active by default?

        Slider sliderComponent = slider.GetComponent <Slider>();

        sliderComponent.minValue = minValue;
        sliderComponent.maxValue = maxValue;
        slider.transform.SetParent(canvasTransform);
        slider.transform.localScale = new Vector3(1, 1, 1); // XXX WTF? Keep it!
        Vector3 pos = slider.transform.localPosition;

        pos.z = 0; // XXX Again, why does it take the position of the parent?
        slider.transform.localPosition = pos;

        GameObject fill  = slider.transform.Find("Fill Area/Fill").gameObject;
        Image      image = fill.GetComponent <Image>();

        image.color = new Color(r, g, b, 1);

        entityUI.AddElement(sharedVar, sliderComponent);

        return(slider);
    }