Net.Like.Xue.Tokyo/Assets/Plugins/RapidIcon/Editor/Scripts/Windows/CopyWindow.cs

142 lines
4.5 KiB
C#
Raw Normal View History

2025-02-26 15:34:59 +08:00
using UnityEditor;
using UnityEngine;
namespace RapidIcon_1_7_2
{
public class CopyWindow : EditorWindow
{
public static CopyWindow window;
private static int option;
private static int subOption;
private static int selectedVariantIdx;
private static IconEditor iconEditor;
public static void Init(IconEditor editor)
{
window = (CopyWindow)GetWindow(typeof(CopyWindow), true, "Copy to other icons");
window.position = new Rect(Screen.currentResolution.width / 2 - 230, Screen.currentResolution.height / 2 - 64, 460, 128);
iconEditor = editor;
selectedVariantIdx = iconEditor.currentIconSet.icons.IndexOf(iconEditor.currentIcon);
window.Show();
}
void OnGUI()
{
GUILayout.Space(4);
GUILayout.Label("Copy to");
//---Draw dropdown list of selected assets---//
string[] options = new string[] { "All variants of this icon", "Currently selected variant of selected icons", "All variants of selected icons", "Specific variant of selected icons" };
option = EditorGUILayout.Popup(option, options);
string[] subOptions = new string[] { "Current tab only", "All tabs" };
subOption = EditorGUILayout.Popup(subOption, subOptions);
if (option == 3)
{
selectedVariantIdx = EditorGUILayout.IntField("Variant Index", selectedVariantIdx);
if (selectedVariantIdx < 0)
selectedVariantIdx = 0;
bool showWarning = false;
foreach (IconSet iconSet in iconEditor.assetGrid.selectedIconSets)
{
if (selectedVariantIdx >= iconSet.icons.Count)
{
showWarning = true;
break;
}
}
if (showWarning)
{
GUIStyle s = new GUIStyle(GUI.skin.label);
s.normal.textColor = new Color(1.0f, 0.5f, 0.0f, 1.0f);
GUILayout.Label("Not all selected icons have a variant at index " + selectedVariantIdx + ", a new variant will be created", s);
}
}
GUILayout.FlexibleSpace();
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Copy"))
{
DoCopy();
window.Close();
}
GUILayout.EndHorizontal();
}
private void DoCopy()
{
switch (option)
{
case 0:
int idx = 0;
int count = iconEditor.currentIconSet.icons.Count;
foreach (Icon icon in iconEditor.currentIconSet.icons)
{
EditorUtility.DisplayProgressBar("Copy to Other Icons", "Copying to icon (" + idx + "/" + count + ")", (float)(idx++)/count);
Utils.CopyIconSettings(iconEditor.currentIcon, icon, subOption == 0 ? iconEditor.tab : -1);
Utils.UpdateIcon(icon, iconEditor);
}
EditorUtility.ClearProgressBar();
break;
case 1:
idx = 0;
count = iconEditor.assetGrid.selectedIconSets.Count;
foreach (IconSet iconSet in iconEditor.assetGrid.selectedIconSets)
{
EditorUtility.DisplayProgressBar("Copy to Other Icons", "Copying to icon (" + idx + "/" + count + ")", (float)(idx++) / count);
Icon icon = iconSet.GetCurrentIcon();
Utils.CopyIconSettings(iconEditor.currentIcon, icon, subOption == 0 ? iconEditor.tab : -1);
Utils.UpdateIcon(icon, iconEditor);
}
EditorUtility.ClearProgressBar();
break;
case 2:
idx = 0;
count = iconEditor.assetGrid.selectedIconSets.Count;
foreach (IconSet iconSet in iconEditor.assetGrid.selectedIconSets)
{
EditorUtility.DisplayProgressBar("Copy to Other Icons", "Copying to icon (" + idx + "/" + count + ")", (float)(idx++) / count);
foreach (Icon icon in iconSet.icons)
{
Utils.CopyIconSettings(iconEditor.currentIcon, icon, subOption == 0 ? iconEditor.tab : -1);
Utils.UpdateIcon(icon, iconEditor);
}
}
EditorUtility.ClearProgressBar();
break;
case 3:
idx = 0;
count = iconEditor.assetGrid.selectedIconSets.Count;
foreach (IconSet iconSet in iconEditor.assetGrid.selectedIconSets)
{
EditorUtility.DisplayProgressBar("Copy to Other Icons", "Copying to icon (" + idx + "/" + count + ")", (float)(idx++) / count);
Icon icon;
if (iconSet.icons.Count > selectedVariantIdx)
icon = iconSet.icons[selectedVariantIdx];
else
{
icon = iconSet.AddDefaultIcon(iconEditor.assetGrid, new ObjectPathPair { path = iconSet.assetPath, UnityEngine_object = iconSet.assetObject });
iconSet.iconIndex = iconSet.icons.Count - 1;
icon.iconSettings.exportName += " (" + iconSet.iconIndex + ")";
}
Utils.CopyIconSettings(iconEditor.currentIcon, icon, subOption == 0 ? iconEditor.tab : -1);
Utils.UpdateIcon(icon, iconEditor);
}
EditorUtility.ClearProgressBar();
break;
}
}
}
}