/// <summary> /// Ensures all of the ItemSet categories are valid. /// </summary> /// <param name="categories">The categories that the ItemSet contains.</param> protected void CheckCategories(IItemCategoryIdentifier[] categories) { var categoryItemSets = m_ItemSetManager.CategoryItemSets; if (categoryItemSets == null) { return; } for (int i = categoryItemSets.Length - 1; i >= 0; --i) { var hasCategory = false; for (int j = 0; j < categories.Length; ++j) { if (categoryItemSets[i].CategoryID == categories[j].ID && IsItemSetCategory(categories[j])) { if (categoryItemSets[i].CategoryName != categories[j].ToString()) { categoryItemSets[i].CategoryName = categories[j].ToString(); GUI.changed = true; } if (categoryItemSets[i].ItemCategory != categories[j]) { categoryItemSets[i].ItemCategory = categories[j]; GUI.changed = true; } hasCategory = true; break; } } if (!hasCategory) { var categoryList = new List <CategoryItemSet>(categoryItemSets); categoryList.RemoveAt(i); m_ItemSetManager.CategoryItemSets = categoryItemSets = categoryList.ToArray(); m_ItemSetReorderableList = null; GUI.changed = true; } } var nonItemSetCategoryCount = 0; for (int i = 0; i < categories.Length; ++i) { if (!IsItemSetCategory(categories[i])) { nonItemSetCategoryCount++; } } // The number of categories must match. var diff = categories.Length - nonItemSetCategoryCount - categoryItemSets.Length; if (diff > 0) { System.Array.Resize(ref categoryItemSets, categoryItemSets.Length + diff); for (int i = categoryItemSets.Length - diff; i < categoryItemSets.Length; ++i) { // A category has been added. Populate the new category. for (int j = 0; j < categories.Length; ++j) { if (!IsItemSetCategory(categories[j])) { continue; } var hasCategory = false; for (int k = 0; k < categoryItemSets.Length; ++k) { if (categoryItemSets[k] != null && categoryItemSets[k].CategoryID == categories[j].ID) { hasCategory = true; break; } } // Don't add an existing category. if (hasCategory) { continue; } categoryItemSets[i] = new CategoryItemSet(categories[j].ID, categories[j].ToString(), categories[j]); break; } } m_ItemSetManager.CategoryItemSets = categoryItemSets; m_ItemSetReorderableList = null; GUI.changed = true; } else if (diff < 0) { var updatedCategoryItemSets = new CategoryItemSet[categoryItemSets.Length + diff]; var insertCount = 0; // Remove the ItemSet that no longer has a category. for (int i = 0; i < categoryItemSets.Length; ++i) { var categoryID = categoryItemSets[i].CategoryID; var hasCategory = false; for (int j = 0; j < categories.Length; ++j) { if (categoryID == categories[j].ID && IsItemSetCategory(categories[j])) { hasCategory = true; break; } } // Add the CategoryItemSet to the list if it exists. If the category ID no longer exists then don't transfer it to the new array. if (hasCategory) { updatedCategoryItemSets[insertCount] = categoryItemSets[i]; insertCount++; } } m_ItemSetManager.CategoryItemSets = updatedCategoryItemSets; m_ItemSetReorderableList = null; GUI.changed = true; } }
/// <summary> /// Ensures all of the ItemSet categories are valid. /// </summary> private void CheckCategories() { var categoryItemSets = m_ItemSetManager.CategoryItemSets; for (int i = categoryItemSets.Length - 1; i >= 0; --i) { var hasCategory = false; for (int j = 0; j < m_ItemCollection.Categories.Length; ++j) { if (categoryItemSets[i].CategoryID == m_ItemCollection.Categories[j].ID) { hasCategory = true; break; } } if (!hasCategory) { var categoryList = new List <CategoryItemSet>(categoryItemSets); categoryList.RemoveAt(i); m_ItemSetManager.CategoryItemSets = categoryItemSets = categoryList.ToArray(); m_ItemSetReorderableList = null; } } // The number of categories must match. var diff = m_ItemCollection.Categories.Length - categoryItemSets.Length; if (diff > 0) { System.Array.Resize(ref categoryItemSets, categoryItemSets.Length + diff); for (int i = categoryItemSets.Length - diff; i < categoryItemSets.Length; ++i) { categoryItemSets[i] = new CategoryItemSet(); categoryItemSets[i].CategoryID = m_ItemCollection.Categories[i].ID; categoryItemSets[i].ItemSetList = new List <ItemSet>(); } m_ItemSetManager.CategoryItemSets = categoryItemSets; m_ItemSetReorderableList = null; } else if (diff < 0) { var updatedCategoryItemSets = new CategoryItemSet[categoryItemSets.Length + diff]; var insertCount = 0; // Remove the ItemSet that no longer has a category. for (int i = 0; i < categoryItemSets.Length; ++i) { var categoryID = categoryItemSets[i].CategoryID; var hasCategory = false; for (int j = 0; j < m_ItemCollection.Categories.Length; ++j) { if (categoryID == m_ItemCollection.Categories[j].ID) { hasCategory = true; break; } } // Add the CategoryItemSet to the list if it exists. If the category ID no longer exists then don't transfer it to the new array. if (hasCategory) { updatedCategoryItemSets[insertCount] = categoryItemSets[i]; insertCount++; } } m_ItemSetManager.CategoryItemSets = updatedCategoryItemSets; m_ItemSetReorderableList = null; } }