/// <summary>
        /// Add prefab into container - reparenting,...
        /// </summary>
        /// <param name="prefab"></param>
        public void AddPrefab(MyPrefabBase prefab)
        {
            //@ Add prefab
            //if (this.Children.Contains(prefab))
            //{
            //    prefab.SetVisible = true;
            //}
            //else
            //{
            //    this.Children.Add(prefab);
            //    m_prefabs.Add(prefab);
            //}

            Debug.Assert(prefab.Parent == this);
            if (!m_prefabs.Contains(prefab))
            {
                m_prefabs.Add(prefab);
            }
            else
            {
                prefab.Visible = true;
            }
            UpdateAABB();

            // update prefab type flags
            foreach (PrefabTypesFlagEnum prefabTypeSingleFlag in MyPrefabTypesFlagHelper.ParseToSingleFlags(prefab.PrefabTypeFlag))
            {
                // if we added first prefab of this type, then we update prefab types flag in prefab container
                if (m_prefabTypeSingleFlagsCount[(int)prefabTypeSingleFlag] == 0)
                {
                    m_prefabTypesFlag = m_prefabTypesFlag | prefabTypeSingleFlag;
                }
                m_prefabTypeSingleFlagsCount[(int)prefabTypeSingleFlag]++;

                if (prefabTypeSingleFlag == PrefabTypesFlagEnum.Vendor)
                {
                    Debug.Assert(m_prefabTypeSingleFlagsCount[(int)prefabTypeSingleFlag] <= 1, "You can have max 1 vendor in prefab container!");
                }
            }

            // add prefab to categories dictionary
            m_prefabsByCategory[(ushort)prefab.PrefabCategory].Add(prefab);

            if (!m_intializing)
            {
                if (prefab is MyPrefabGenerator)
                {
                    UpdateGenerators();
                }
                else
                {
                    FindGeneratorsFor(prefab);
                }
            }
        }
        // Removes prefab from this container working prefabs list
        public void RemovePrefab(MyPrefabBase prefab)
        {
            this.Children.Remove(prefab);
            m_prefabs.Remove(prefab);
            UpdateAABB();

            // update prefab type flags
            foreach (PrefabTypesFlagEnum prefabTypeSingleFlag in MyPrefabTypesFlagHelper.ParseToSingleFlags(prefab.PrefabTypeFlag))
            {
                // if we remove last prefab of this type, then we update prefab types flag in prefab container
                m_prefabTypeSingleFlagsCount[(int)prefabTypeSingleFlag]--;
                if (m_prefabTypeSingleFlagsCount[(int)prefabTypeSingleFlag] == 0)
                {
                    m_prefabTypesFlag = m_prefabTypesFlag & (~prefabTypeSingleFlag);
                }
            }

            // remove prefab from categories dictionary
            m_prefabsByCategory[(ushort)prefab.PrefabCategory].Remove(prefab);

            m_deactivatedPrefabs.Remove(prefab);
        }