Example #1
0
            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;
                }
            }
Example #2
0
        /// <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}");
                }
            }
        }