/* #region CONTEXT MENU METHODS * [ContextMenu( "Build SwatchPalette None" )] * public void BuildColorSwatch_None() { BuildSwatchPalette( SwatchSortMode.None ); } * * [ContextMenu( "Build SwatchPalette Ascending" )] * public void BuildColorSwatch_Ascending() { BuildSwatchPalette( SwatchSortMode.Ascending ); } * * [ContextMenu( "Build SwatchPalette Descending" )] * public void BuildColorSwatch_Descending() { BuildSwatchPalette( SwatchSortMode.Descending ); } * * [ContextMenu( "Build SwatchPalette RGB MaxDifference" )] * public void BuildColorSwatch_MaxDifferenceRGB() { BuildSwatchPalette( SwatchSortMode.MaxDifferenceRGB ); } * * [ContextMenu( "Build SwatchPalette HSV MaxDifference" )] * public void BuildColorSwatch_MaxDifferenceHSV() { BuildSwatchPalette( SwatchSortMode.MaxDifferenceHSV ); } #endregion */ #if UNITY_EDITOR public void BuildSwatchPalette(SwatchSortMode swatchSortMode) { ColorSwatchPalette colorSwatchPalette = CreateColorSwatchAsset(); if (null == colorSwatchPalette) { Debug.LogError("Unable to create ColorSwatchPalette asset"); return; } // Get Colors from texture Color[] srcSwatches = GetColorsFromTextureSwatch(); // Apply sort mode switch (swatchSortMode) { case SwatchSortMode.Ascending: SortByLinq(srcSwatches, swatchSortMode); break; case SwatchSortMode.Descending: SortByLinq(srcSwatches, swatchSortMode); break; case SwatchSortMode.MaxDifferenceRGB: SortByMaxDiffRGB(srcSwatches); break; case SwatchSortMode.MaxDifferenceHSV: SortByMaxDiffHSV(srcSwatches); break; } // Put colors into asset colorSwatchPalette.m_SwatchColors = srcSwatches; // Save Asset SaveUpdatedAssets(colorSwatchPalette); }
// Can probably be done better with custom sorting method comparrision test in linq? void SortByLinq(Color[] srcSwatches, SwatchSortMode swatchSortMode) { List <ColorData> colorDataList = PreCalculateColorData(srcSwatches); // List<ColorData> sortedList; if (swatchSortMode == SwatchSortMode.Ascending) { colorDataList = colorDataList.OrderBy(o => o.positionRGB.magnitude).ToList(); } else { colorDataList = colorDataList.OrderByDescending(o => o.positionRGB.magnitude).ToList(); } for (int i = m_SkipColorCount; i < srcSwatches.Length; i++) { srcSwatches[i] = colorDataList[i - m_SkipColorCount].color; } // srcSwatches = sortedList.Select( o => o.color ).ToArray(); }