// MonoBehaviour's interface

    void Awake()
    {
        m_Energy = GetComponentInParent <tnEnergy>();

        if (m_SlotPrefab == null || m_SlotsRoot == null)
        {
            return;
        }

        m_SlotsCount = Mathf.Max(1, m_SlotsCount);

        m_Slots = new tnUIEnergySlot[m_SlotsCount];

        // Spawn slots.

        for (int slotIndex = 0; slotIndex < m_Slots.Length; ++slotIndex)
        {
            tnUIEnergySlot slotInstance = Instantiate <tnUIEnergySlot>(m_SlotPrefab);
            slotInstance.Clear();

            slotInstance.transform.SetParent(m_SlotsRoot, false);

            slotInstance.SetColor(m_StartingBarColor);

            m_Slots[slotIndex] = slotInstance;
        }

        // Spawn separators

        if (m_SeparatorsRoot == null || m_SeparatorPrefab == null)
        {
            return;
        }

        m_Separators = new tnUIEnergySlotSeparator[m_SlotsCount - 1];

        float barLenght  = m_SlotsRoot.rect.width;
        float slotLenght = barLenght / m_Slots.Length;

        for (int separatorIndex = 0; separatorIndex < m_Separators.Length; ++separatorIndex)
        {
            tnUIEnergySlotSeparator separatorInstance = Instantiate <tnUIEnergySlotSeparator>(m_SeparatorPrefab);

            separatorInstance.transform.SetParent(m_SeparatorsRoot, false);
            RectTransform separatorTransform = (RectTransform)separatorInstance.transform;
            separatorTransform.anchoredPosition = new Vector2(slotLenght * (separatorIndex + 1), 0f);

            m_Separators[separatorIndex] = separatorInstance;
        }
    }
    public void SetColor(Color i_Color)
    {
        if (m_Slots == null)
        {
            return;
        }

        for (int slotIndex = 0; slotIndex < m_Slots.Length; ++slotIndex)
        {
            tnUIEnergySlot slot = m_Slots[slotIndex];
            if (slot != null)
            {
                slot.SetColor(i_Color);
            }
        }
    }