/// <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); }