203 lines
9.7 KiB
C#
203 lines
9.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEditor.Tilemaps
|
|
{
|
|
internal class GridPaintPaletteWindowPreferences
|
|
{
|
|
[SettingsProvider]
|
|
internal static SettingsProvider CreateSettingsProvider()
|
|
{
|
|
var settingsProvider = new SettingsProvider("Preferences/2D/Tile Palette", SettingsScope.User, SettingsProvider.GetSearchKeywordsFromGUIContentProperties<GridPaintPaletteWindowPreferences>())
|
|
{
|
|
guiHandler = searchContext =>
|
|
{
|
|
GridPaintPaletteWindow.PreferencesGUI();
|
|
GridPaintActiveTargetsPreferences.PreferencesGUI();
|
|
SceneViewOpenTilePaletteHelper.PreferencesGUI();
|
|
TilemapPrefabStageHelper.PreferencesGUI();
|
|
}
|
|
};
|
|
return settingsProvider;
|
|
}
|
|
}
|
|
|
|
internal class GridPaintActiveTargetsPreferences
|
|
{
|
|
public static readonly string targetSortingModeEditorPref = "TilePalette.ActiveTargetsSortingMode";
|
|
public static readonly string targetSortingModeLookup = "Active Targets Sorting Mode";
|
|
public static readonly string targetRestoreEditModeSelectionEditorPref = "TilePalette.RestoreEditModeSelection";
|
|
public static readonly string targetRestoreEditModeSelectionLookup = "Restore Edit Mode Active Target";
|
|
public static readonly string createTileFromPaletteEditorPref = "TilePalette.CreateTileFromPalette";
|
|
public static readonly string createTileFromPaletteLookup = "Create Tile Method";
|
|
|
|
public static readonly string defaultSortingMode = L10n.Tr("None");
|
|
|
|
public static readonly GUIContent targetSortingModeLabel =
|
|
EditorGUIUtility.TrTextContent(targetSortingModeLookup,
|
|
"Controls the sorting of the Active Targets in the Tile Palette");
|
|
|
|
public static readonly GUIContent targetRestoreEditModeSelectionLabel = EditorGUIUtility.TrTextContent(
|
|
targetRestoreEditModeSelectionLookup
|
|
, "When exiting Play Mode, restores the Active Target in the Tile Palette to the last selected target from Edit Mode");
|
|
|
|
public static readonly GUIContent createTileFromPaletteLabel = EditorGUIUtility.TrTextContent(
|
|
createTileFromPaletteLookup
|
|
, "Method used to create Tiles when drag and dropping assets to the Tile Palette");
|
|
|
|
public static bool restoreEditModeSelection
|
|
{
|
|
get { return EditorPrefs.GetBool(targetRestoreEditModeSelectionEditorPref, true); }
|
|
set { EditorPrefs.SetBool(targetRestoreEditModeSelectionEditorPref, value); }
|
|
}
|
|
|
|
private static string[] s_SortingNames;
|
|
private static int s_SortingSelectionIndex;
|
|
private static string[] s_CreateTileNames;
|
|
private static int s_CreateTileIndex;
|
|
|
|
private static bool CompareMethodName(string[] methodNames, MethodInfo method)
|
|
{
|
|
return methodNames.Length == 2 && methodNames[0] == method.ReflectedType.Name &&
|
|
methodNames[1] == method.Name;
|
|
}
|
|
|
|
private static bool CompareTypeName(string typeFullName, Type type)
|
|
{
|
|
return typeFullName == type.FullName;
|
|
}
|
|
|
|
internal static void PreferencesGUI()
|
|
{
|
|
using (new SettingsWindow.GUIScope())
|
|
{
|
|
if (s_SortingNames == null)
|
|
{
|
|
var sortingTypeFullName = EditorPrefs.GetString(targetSortingModeEditorPref, defaultSortingMode);
|
|
var sortingMethodNames = sortingTypeFullName.Split('.');
|
|
s_SortingNames = new string[1 + GridPaintSortingAttribute.sortingMethods.Count +
|
|
GridPaintSortingAttribute.sortingTypes.Count];
|
|
int count = 0;
|
|
s_SortingNames[count++] = defaultSortingMode;
|
|
foreach (var sortingMethod in GridPaintSortingAttribute.sortingMethods)
|
|
{
|
|
if (CompareMethodName(sortingMethodNames, sortingMethod))
|
|
s_SortingSelectionIndex = count;
|
|
s_SortingNames[count++] = sortingMethod.Name;
|
|
}
|
|
|
|
foreach (var sortingType in GridPaintSortingAttribute.sortingTypes)
|
|
{
|
|
if (CompareTypeName(sortingTypeFullName, sortingType))
|
|
s_SortingSelectionIndex = count;
|
|
s_SortingNames[count++] = sortingType.Name;
|
|
}
|
|
}
|
|
|
|
if (s_CreateTileNames == null)
|
|
{
|
|
var createTileFullName = EditorPrefs.GetString(createTileFromPaletteEditorPref, defaultSortingMode);
|
|
var createTileMethodNames = createTileFullName.Split('.');
|
|
int count = 0;
|
|
s_CreateTileNames = new string[CreateTileFromPaletteAttribute.createTileFromPaletteMethods.Count];
|
|
foreach (var createTileMethod in CreateTileFromPaletteAttribute.createTileFromPaletteMethods)
|
|
{
|
|
if (CompareMethodName(createTileMethodNames, createTileMethod))
|
|
s_CreateTileIndex = count;
|
|
s_CreateTileNames[count++] = createTileMethod.Name;
|
|
}
|
|
}
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
var sortingSelection =
|
|
EditorGUILayout.Popup(targetSortingModeLabel, s_SortingSelectionIndex, s_SortingNames);
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
s_SortingSelectionIndex = sortingSelection;
|
|
var sortingTypeFullName = defaultSortingMode;
|
|
if (s_SortingSelectionIndex > 0 &&
|
|
s_SortingSelectionIndex <= GridPaintSortingAttribute.sortingMethods.Count)
|
|
{
|
|
var sortingMethod = GridPaintSortingAttribute.sortingMethods[s_SortingSelectionIndex - 1];
|
|
sortingTypeFullName =
|
|
String.Format("{0}.{1}", sortingMethod.ReflectedType.Name, sortingMethod.Name);
|
|
}
|
|
else
|
|
{
|
|
var idx = s_SortingSelectionIndex - GridPaintSortingAttribute.sortingMethods.Count - 1;
|
|
if (idx >= 0 && idx < GridPaintSortingAttribute.sortingTypes.Count)
|
|
{
|
|
var sortingType = GridPaintSortingAttribute.sortingTypes[idx];
|
|
sortingTypeFullName = sortingType.FullName;
|
|
}
|
|
}
|
|
|
|
EditorPrefs.SetString(targetSortingModeEditorPref, sortingTypeFullName);
|
|
GridPaintingState.FlushCache();
|
|
}
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
var editModeSelection = EditorGUILayout.Toggle(targetRestoreEditModeSelectionLabel, restoreEditModeSelection);
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
restoreEditModeSelection = editModeSelection;
|
|
}
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
var createTileSelection = EditorGUILayout.Popup(createTileFromPaletteLabel, s_CreateTileIndex, s_CreateTileNames);
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
var createTileFullName = defaultSortingMode;
|
|
s_CreateTileIndex = createTileSelection;
|
|
if (s_CreateTileIndex < CreateTileFromPaletteAttribute.createTileFromPaletteMethods.Count)
|
|
{
|
|
var createTileMethod = CreateTileFromPaletteAttribute.createTileFromPaletteMethods[s_CreateTileIndex];
|
|
createTileFullName = String.Format("{0}.{1}", createTileMethod.ReflectedType.Name, createTileMethod.Name);
|
|
}
|
|
|
|
EditorPrefs.SetString(createTileFromPaletteEditorPref, createTileFullName);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static IComparer<GameObject> GetTargetComparer()
|
|
{
|
|
var sortingTypeFullName = EditorPrefs.GetString(targetSortingModeEditorPref, defaultSortingMode);
|
|
if (!sortingTypeFullName.Equals(defaultSortingMode))
|
|
{
|
|
var sortingMethodNames = sortingTypeFullName.Split('.');
|
|
foreach (var sortingMethod in GridPaintSortingAttribute.sortingMethods)
|
|
{
|
|
if (CompareMethodName(sortingMethodNames, sortingMethod))
|
|
return sortingMethod.Invoke(null, null) as IComparer<GameObject>;
|
|
}
|
|
|
|
foreach (var sortingType in GridPaintSortingAttribute.sortingTypes)
|
|
{
|
|
if (CompareTypeName(sortingTypeFullName, sortingType))
|
|
return Activator.CreateInstance(sortingType) as IComparer<GameObject>;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static MethodInfo GetCreateTileFromPaletteUsingPreferences()
|
|
{
|
|
var createTileFullName = EditorPrefs.GetString(createTileFromPaletteEditorPref, defaultSortingMode);
|
|
if (!createTileFullName.Equals(defaultSortingMode))
|
|
{
|
|
var methodNames = createTileFullName.Split('.');
|
|
foreach (var createTileMethod in CreateTileFromPaletteAttribute.createTileFromPaletteMethods)
|
|
{
|
|
if (CompareMethodName(methodNames, createTileMethod))
|
|
return createTileMethod;
|
|
}
|
|
}
|
|
return typeof(TileUtility).GetMethod("DefaultTile", BindingFlags.Static | BindingFlags.Public);
|
|
}
|
|
}
|
|
}
|