internal void Toggle(bool isActive) { if (isActive && (currentActive == null || currentActive != this)) { // Deactivate current active if (currentActive != null && currentActive != this) { currentActive.Toggle(false); } // Activate all tabs for this categories foreach (GameObject tab in Hud.instance.m_pieceCategoryTabs) { tab.SetActive(Keys.Contains(tab.name)); } // Reorder tabs ReorderActiveTabs(); // Set last selected category if (lastCategory == Piece.PieceCategory.All) { Piece.PieceCategory firstCategory = Values.Min(); Player.m_localPlayer.m_buildPieces.m_selectedCategory = firstCategory; PieceCategoryScroll(firstCategory); } else { PieceCategoryScroll(lastCategory); } currentActive = this; } if (!isActive && currentActive != null && currentActive == this) { // Activate all vanilla tabs foreach (GameObject tab in Hud.instance.m_pieceCategoryTabs) { tab.SetActive(Enum.GetNames(typeof(Piece.PieceCategory)).Contains(tab.name)); } // Reorder tabs ReorderActiveTabs(); currentActive = null; } }
/// <summary> /// Create piece categories per table if custom categories were added. /// </summary> private void CreatePieceTableCategories() { if (!PieceCategories.Any()) { return; } //Logger.LogInfo($"Adding {PieceCategories.Count} custom piece table categories"); // All piece tables using categories foreach (var table in PieceTableMap.Values.Where(x => x.m_useCategories)) { try { // Create category map if not present PieceTableCategoriesMap.TryGetValue(table.name, out var categories); if (categories == null) { categories = new PieceTableCategories(); PieceTableCategoriesMap.Add(table.name, categories); } // Remap shortcut categories to actual table (e.g. categories added to "Hammer" must be added to "_HammerPieceTable") if (PieceTableNameMap.ContainsValue(table.name)) { string tableItemName = PieceTableNameMap.FirstOrDefault(x => x.Value.Equals(table.name)).Key; if (PieceTableCategoriesMap.ContainsKey(tableItemName)) { foreach (var cat in PieceTableCategoriesMap[tableItemName]) { if (!categories.ContainsKey(cat.Key)) { categories.Add(cat.Key, cat.Value); } } PieceTableCategoriesMap.Remove(tableItemName); } } // Add vanilla categories for vanilla tables CustomPieceTable customTable = PieceTables.FirstOrDefault(x => x.PieceTable.name.Equals(table.name)); if (customTable == null) { for (int i = 0; i < (int)Piece.PieceCategory.Max; i++) { string categoryName = Enum.GetName(typeof(Piece.PieceCategory), i); if (!categories.ContainsKey(categoryName)) { categories.Add(categoryName, (Piece.PieceCategory)i); } } } // Add empty lists up to the max categories count if (table.m_availablePieces.Count < (int)PieceCategoryMax) { for (int i = table.m_availablePieces.Count; i < (int)PieceCategoryMax; i++) { table.m_availablePieces.Add(new List <Piece>()); } } // Resize selectedPiece array Array.Resize(ref table.m_selectedPiece, table.m_availablePieces.Count); // Set first available category table.m_selectedCategory = categories.Values.Min(); Logger.LogDebug($"Added categories for table {table.name}"); } catch (Exception ex) { Logger.LogError($"Error while adding categories for table {table.name}: {ex}"); } } }