Compare commits
4 Commits
da3e29a712
...
a655c457e2
Author | SHA1 | Date | |
---|---|---|---|
a655c457e2 | |||
19135d607a | |||
f432ee445b | |||
8d5c2e0e01 |
@ -22,6 +22,16 @@ public static class AppBuildHelper
|
||||
|
||||
Debug.Log("Generate AppBuilderSetting.bytes");
|
||||
|
||||
PlayerSettings.fullScreenMode = appBuildParameter.FullScreenMode;
|
||||
if (appBuildParameter.FullScreenMode == FullScreenMode.Windowed)
|
||||
{
|
||||
PlayerSettings.defaultScreenWidth = appBuildParameter.WindowedScreenSize.x;
|
||||
PlayerSettings.defaultScreenHeight = appBuildParameter.WindowedScreenSize.y;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(appBuildParameter.Version))
|
||||
{
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -1,7 +1,9 @@
|
||||
using System;
|
||||
using AlicizaX;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
|
||||
@ -14,7 +16,22 @@ public class AppBuildParameter
|
||||
public int ResMode;
|
||||
public string FileName;
|
||||
public Language Language;
|
||||
public string [] Scenes;
|
||||
public string[] Scenes;
|
||||
|
||||
/// <summary>
|
||||
/// 版本
|
||||
/// </summary>
|
||||
public string Version;
|
||||
|
||||
/// <summary>
|
||||
/// 是否全屏
|
||||
/// </summary>
|
||||
public FullScreenMode FullScreenMode;
|
||||
|
||||
/// <summary>
|
||||
/// 窗口化大小
|
||||
/// </summary>
|
||||
public Vector2Int WindowedScreenSize;
|
||||
}
|
||||
|
||||
|
||||
@ -28,7 +45,7 @@ public class ResourceBuildParameter
|
||||
|
||||
|
||||
public ECompressOption CompressOption = ECompressOption.LZ4;
|
||||
// public EFileNameStyle FileNameStyle = EFileNameStyle.BundleName_HashName;
|
||||
public EFileNameStyle FileNameStyle = EFileNameStyle.BundleName_HashName;
|
||||
public string EncryptionServiceType = "AlicizaX.Resource.Editor.FileOffsetEncryption";
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,7 @@ public static class ResourceBuildHelper
|
||||
BuildinFileCopyOption = copyOption,
|
||||
BuildinFileCopyParams = copyParams,
|
||||
EnableSharePackRule = EnableSharePack,
|
||||
FileNameStyle = buildParameter.FileNameStyle,
|
||||
EncryptionServices = CreateEncryptionInstance(buildParameter.EncryptionServiceType)
|
||||
};
|
||||
|
||||
|
@ -9,7 +9,7 @@ using System.IO;
|
||||
|
||||
public class EditorIcons : EditorWindow
|
||||
{
|
||||
[MenuItem("Tools/Editor Icons %e", priority = -1001)]
|
||||
[MenuItem("Tools/EditorExtension/Editor Icons %e", priority = -1001)]
|
||||
public static void EditorIconsOpen()
|
||||
{
|
||||
#if UNITY_2018
|
||||
@ -43,9 +43,9 @@ public class EditorIcons : EditorWindow
|
||||
search = EditorGUILayout.TextField(search, EditorStyles.toolbarSearchField);
|
||||
#endif
|
||||
if (GUILayout.Button(EditorGUIUtility.IconContent("winbtn_mac_close_h"), //SVN_DeletedLocal
|
||||
EditorStyles.toolbarButton,
|
||||
GUILayout.Width(22))
|
||||
) search = "";
|
||||
EditorStyles.toolbarButton,
|
||||
GUILayout.Width(22))
|
||||
) search = "";
|
||||
}
|
||||
}
|
||||
|
||||
@ -157,7 +157,7 @@ public class EditorIcons : EditorWindow
|
||||
//List<string> found = new List<string>();
|
||||
List<string> unique = new List<string>();
|
||||
//var skip_flag = HideFlags.HideInInspector | HideFlags.HideAndDontSave;
|
||||
//int unique_to_resources = 0, skipped_empty_str = 0, skipped_flags = 0,
|
||||
//int unique_to_resources = 0, skipped_empty_str = 0, skipped_flags = 0,
|
||||
// skipped_not_persistent = 0, skipped_nulls = 0, unique_to_list = 0;
|
||||
|
||||
foreach (Texture2D x in Resources.FindObjectsOfTypeAll<Texture2D>())
|
||||
@ -167,10 +167,10 @@ public class EditorIcons : EditorWindow
|
||||
//if (x.hideFlags != HideFlags.HideAndDontSave && x.hideFlags != skip_flag) skipped_flags++; // skipped 27 icons
|
||||
|
||||
GUIContent icoContent = GetIcon(x.name);
|
||||
if (icoContent == null) continue; // skipped 14 icons
|
||||
//{
|
||||
// skipped_nulls++;
|
||||
// continue;
|
||||
if (icoContent == null) continue; // skipped 14 icons
|
||||
//{
|
||||
// skipped_nulls++;
|
||||
// continue;
|
||||
//}
|
||||
|
||||
if (!all_icons.Contains(x.name))
|
||||
@ -211,8 +211,8 @@ public class EditorIcons : EditorWindow
|
||||
if (GUILayout.Button("Save all icons to folder...", EditorStyles.miniButton)) SaveAllIcons();
|
||||
GUILayout.Label("Select what icons to show", GUILayout.Width(160));
|
||||
viewBigIcons = GUILayout.SelectionGrid(
|
||||
viewBigIcons ? 1 : 0, new string[] { "Small", "Big" },
|
||||
2, EditorStyles.toolbarButton) == 1;
|
||||
viewBigIcons ? 1 : 0, new string[] { "Small", "Big" },
|
||||
2, EditorStyles.toolbarButton) == 1;
|
||||
|
||||
if (isWide) SearchGUI();
|
||||
}
|
||||
@ -236,8 +236,9 @@ public class EditorIcons : EditorWindow
|
||||
|
||||
List<GUIContent> iconList;
|
||||
|
||||
if (doSearch) iconList = iconContentListAll.Where(x => x.tooltip.ToLower()
|
||||
.Contains(search.ToLower())).ToList();
|
||||
if (doSearch)
|
||||
iconList = iconContentListAll.Where(x => x.tooltip.ToLower()
|
||||
.Contains(search.ToLower())).ToList();
|
||||
else iconList = viewBigIcons ? iconContentListBig : iconContentListSmall;
|
||||
|
||||
while (index < iconList.Count)
|
||||
@ -253,9 +254,9 @@ public class EditorIcons : EditorWindow
|
||||
var icon = iconList[k];
|
||||
|
||||
if (GUILayout.Button(icon,
|
||||
iconButtonStyle,
|
||||
GUILayout.Width(buttonSize),
|
||||
GUILayout.Height(buttonSize)))
|
||||
iconButtonStyle,
|
||||
GUILayout.Width(buttonSize),
|
||||
GUILayout.Height(buttonSize)))
|
||||
{
|
||||
EditorGUI.FocusTextInControl("");
|
||||
iconSelected = icon;
|
||||
@ -291,8 +292,8 @@ public class EditorIcons : EditorWindow
|
||||
GUILayout.Space(5);
|
||||
|
||||
darkPreview = GUILayout.SelectionGrid(
|
||||
darkPreview ? 1 : 0, new string[] { "Light", "Dark" },
|
||||
2, EditorStyles.miniButton) == 1;
|
||||
darkPreview ? 1 : 0, new string[] { "Light", "Dark" },
|
||||
2, EditorStyles.miniButton) == 1;
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
}
|
||||
@ -321,7 +322,6 @@ public class EditorIcons : EditorWindow
|
||||
{
|
||||
iconSelected = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -394,353 +394,353 @@ public class EditorIcons : EditorWindow
|
||||
|
||||
public static string[] ico_list =
|
||||
{
|
||||
"_Help","_Popup","aboutwindow.mainheader","ageialogo","AlphabeticalSorting","Animation.AddEvent",
|
||||
"Animation.AddKeyframe","Animation.EventMarker","Animation.FirstKey","Animation.LastKey",
|
||||
"Animation.NextKey","Animation.Play","Animation.PrevKey","Animation.Record","Animation.SequencerLink",
|
||||
"animationanimated","animationdopesheetkeyframe","animationkeyframe","animationnocurve",
|
||||
"animationvisibilitytoggleoff","animationvisibilitytoggleon","AnimationWrapModeMenu","AssemblyLock",
|
||||
"Asset Store","Audio Mixer","AvatarCompass","AvatarController.Layer","AvatarController.LayerHover",
|
||||
"AvatarController.LayerSelected","BodyPartPicker","BodySilhouette","DotFill","DotFrame","DotFrameDotted",
|
||||
"DotSelection","Head","HeadIk","HeadZoom","HeadZoomSilhouette","LeftArm","LeftFeetIk","LeftFingers",
|
||||
"LeftFingersIk","LeftHandZoom","LeftHandZoomSilhouette","LeftLeg","MaskEditor_Root","RightArm","RightFeetIk",
|
||||
"RightFingers","RightFingersIk","RightHandZoom","RightHandZoomSilhouette","RightLeg","Torso","AvatarPivot",
|
||||
"back","back@2x","beginButton-On","beginButton","blendKey","blendKeyOverlay","blendKeySelected",
|
||||
"blendSampler","blueGroove","BuildSettings.Android","BuildSettings.Android.Small","BuildSettings.Broadcom",
|
||||
"BuildSettings.Editor","BuildSettings.Editor.Small","BuildSettings.Facebook",
|
||||
"BuildSettings.Facebook.Small","BuildSettings.FlashPlayer","BuildSettings.FlashPlayer.Small",
|
||||
"BuildSettings.iPhone","BuildSettings.iPhone.Small","BuildSettings.Lumin","BuildSettings.Lumin.small",
|
||||
"BuildSettings.Metro","BuildSettings.Metro.Small","BuildSettings.N3DS","BuildSettings.N3DS.Small",
|
||||
"BuildSettings.PS4","BuildSettings.PS4.Small","BuildSettings.PSM","BuildSettings.PSM.Small",
|
||||
"BuildSettings.PSP2","BuildSettings.PSP2.Small","BuildSettings.SelectedIcon","BuildSettings.Standalone",
|
||||
"BuildSettings.Standalone.Small","BuildSettings.StandaloneBroadcom.Small",
|
||||
"BuildSettings.StandaloneGLES20Emu.Small","BuildSettings.StandaloneGLESEmu",
|
||||
"BuildSettings.StandaloneGLESEmu.Small","BuildSettings.Switch","BuildSettings.Switch.Small",
|
||||
"BuildSettings.tvOS","BuildSettings.tvOS.Small","BuildSettings.Web","BuildSettings.Web.Small",
|
||||
"BuildSettings.WebGL","BuildSettings.WebGL.Small","BuildSettings.WP8","BuildSettings.WP8.Small",
|
||||
"BuildSettings.Xbox360","BuildSettings.Xbox360.Small","BuildSettings.XboxOne",
|
||||
"BuildSettings.XboxOne.Small","BuildSettings.Xiaomi","Camera Gizmo","CheckerFloor","Clipboard",
|
||||
"ClothInspector.PaintTool","ClothInspector.PaintValue","ClothInspector.SelectTool",
|
||||
"ClothInspector.SettingsTool","ClothInspector.ViewValue","CloudConnect","Collab.Build",
|
||||
"Collab.BuildFailed","Collab.BuildSucceeded","Collab.FileAdded","Collab.FileConflict","Collab.FileDeleted",
|
||||
"Collab.FileIgnored","Collab.FileMoved","Collab.FileUpdated","Collab.FolderAdded","Collab.FolderConflict",
|
||||
"Collab.FolderDeleted","Collab.FolderIgnored","Collab.FolderMoved","Collab.FolderUpdated",
|
||||
"Collab.NoInternet","Collab","Collab.Warning","CollabConflict","CollabError","CollabNew","CollabOffline",
|
||||
"CollabProgress","CollabPull","CollabPush","ColorPicker.ColorCycle","ColorPicker.CycleColor",
|
||||
"ColorPicker.CycleSlider","ColorPicker.SliderCycle","console.erroricon.inactive.sml","console.erroricon",
|
||||
"console.erroricon.sml","console.infoicon","console.infoicon.sml","console.warnicon.inactive.sml",
|
||||
"console.warnicon","console.warnicon.sml","curvekeyframe","curvekeyframeselected",
|
||||
"curvekeyframeselectedoverlay","curvekeyframesemiselectedoverlay","curvekeyframeweighted","CustomSorting",
|
||||
"d__Popup","d_aboutwindow.mainheader","d_ageialogo","d_AlphabeticalSorting","d_Animation.AddEvent",
|
||||
"d_Animation.AddKeyframe","d_Animation.EventMarker","d_Animation.FirstKey","d_Animation.LastKey",
|
||||
"d_Animation.NextKey","d_Animation.Play","d_Animation.PrevKey","d_Animation.Record",
|
||||
"d_Animation.SequencerLink","d_animationanimated","d_animationkeyframe","d_animationnocurve",
|
||||
"d_animationvisibilitytoggleoff","d_animationvisibilitytoggleon","d_AnimationWrapModeMenu",
|
||||
"d_AS Badge Delete","d_AS Badge New","d_AssemblyLock","d_Asset Store","d_Audio Mixer",
|
||||
"d_AvatarBlendBackground","d_AvatarBlendLeft","d_AvatarBlendLeftA","d_AvatarBlendRight",
|
||||
"d_AvatarBlendRightA","d_AvatarCompass","d_AvatarPivot","d_back","d_back@2x","d_beginButton-On",
|
||||
"d_beginButton","d_blueGroove","d_BuildSettings.Android","d_BuildSettings.Android.Small",
|
||||
"d_BuildSettings.Broadcom","d_BuildSettings.FlashPlayer","d_BuildSettings.FlashPlayer.Small",
|
||||
"d_BuildSettings.iPhone","d_BuildSettings.iPhone.Small","d_BuildSettings.Lumin",
|
||||
"d_BuildSettings.Lumin.small","d_BuildSettings.PS4","d_BuildSettings.PS4.Small","d_BuildSettings.PSP2",
|
||||
"d_BuildSettings.PSP2.Small","d_BuildSettings.SelectedIcon","d_BuildSettings.Standalone",
|
||||
"d_BuildSettings.Standalone.Small","d_BuildSettings.tvOS","d_BuildSettings.tvOS.Small",
|
||||
"d_BuildSettings.Web","d_BuildSettings.Web.Small","d_BuildSettings.WebGL","d_BuildSettings.WebGL.Small",
|
||||
"d_BuildSettings.Xbox360","d_BuildSettings.Xbox360.Small","d_BuildSettings.XboxOne",
|
||||
"d_BuildSettings.XboxOne.Small","d_CheckerFloor","d_CloudConnect","d_Collab.FileAdded",
|
||||
"d_Collab.FileConflict","d_Collab.FileDeleted","d_Collab.FileIgnored","d_Collab.FileMoved",
|
||||
"d_Collab.FileUpdated","d_Collab.FolderAdded","d_Collab.FolderConflict","d_Collab.FolderDeleted",
|
||||
"d_Collab.FolderIgnored","d_Collab.FolderMoved","d_Collab.FolderUpdated","d_ColorPicker.CycleColor",
|
||||
"d_ColorPicker.CycleSlider","d_console.erroricon","d_console.erroricon.sml","d_console.infoicon",
|
||||
"d_console.infoicon.sml","d_console.warnicon","d_console.warnicon.sml","d_curvekeyframe",
|
||||
"d_curvekeyframeselected","d_curvekeyframeselectedoverlay","d_curvekeyframesemiselectedoverlay",
|
||||
"d_curvekeyframeweighted","d_CustomSorting","d_DefaultSorting","d_EditCollider","d_editcollision_16",
|
||||
"d_editconstraints_16","d_editicon.sml","d_endButton-On","d_endButton","d_eyeDropper.Large",
|
||||
"d_eyeDropper.sml","d_Favorite","d_FilterByLabel","d_FilterByType","d_FilterSelectedOnly",
|
||||
"d_FilterSelectedOnly@2x","d_forward","d_forward@2x","d_GEAR","d_Groove","d_HorizontalSplit",
|
||||
"d_icon dropdown","d_InspectorLock","d_JointAngularLimits","d_leftBracket","d_Lighting",
|
||||
"d_LightmapEditor.WindowTitle","d_LookDevCenterLight","d_LookDevCenterLight@2x","d_LookDevClose",
|
||||
"d_LookDevClose@2x","d_LookDevEnvRotation","d_LookDevEnvRotation@2x","d_LookDevMirrorViews",
|
||||
"d_LookDevMirrorViews@2x","d_LookDevMirrorViewsActive","d_LookDevMirrorViewsActive@2x",
|
||||
"d_LookDevMirrorViewsInactive","d_LookDevMirrorViewsInactive@2x","d_LookDevObjRotation",
|
||||
"d_LookDevObjRotation@2x","d_LookDevPaneOption","d_LookDevPaneOption@2x","d_LookDevResetEnv",
|
||||
"d_LookDevResetEnv@2x","d_LookDevShadow","d_LookDevShadow@2x","d_LookDevSideBySide",
|
||||
"d_LookDevSideBySide@2x","d_LookDevSingle1","d_LookDevSingle1@2x","d_LookDevSingle2",
|
||||
"d_LookDevSingle2@2x","d_LookDevSplit","d_LookDevSplit@2x","d_LookDevZone","d_LookDevZone@2x",
|
||||
"d_Mirror","d_model large","d_monologo","d_MoveTool on","d_MoveTool","d_Navigation","d_Occlusion",
|
||||
"d_P4_AddedLocal","d_P4_AddedRemote","d_P4_CheckOutLocal","d_P4_CheckOutRemote","d_P4_Conflicted",
|
||||
"d_P4_DeletedLocal","d_P4_DeletedRemote","d_P4_Local","d_P4_LockedLocal","d_P4_LockedRemote",
|
||||
"d_P4_OutOfSync","d_Particle Effect","d_PauseButton On","d_PauseButton","d_PlayButton On","d_PlayButton",
|
||||
"d_PlayButtonProfile On","d_PlayButtonProfile","d_playLoopOff","d_playLoopOn","d_preAudioAutoPlayOff",
|
||||
"d_preAudioAutoPlayOn","d_preAudioLoopOff","d_preAudioLoopOn","d_preAudioPlayOff","d_preAudioPlayOn",
|
||||
"d_PreMatCube","d_PreMatCylinder","d_PreMatLight0","d_PreMatLight1","d_PreMatSphere","d_PreMatTorus",
|
||||
"d_Preset.Context","d_PreTextureAlpha","d_PreTextureMipMapHigh","d_PreTextureMipMapLow","d_PreTextureRGB",
|
||||
"d_Profiler.Audio","d_Profiler.CPU","d_Profiler.FirstFrame","d_Profiler.GPU","d_Profiler.LastFrame",
|
||||
"d_Profiler.Memory","d_Profiler.Network","d_Profiler.NextFrame","d_Profiler.Physics","d_Profiler.PrevFrame",
|
||||
"d_Profiler.Record","d_Profiler.Rendering","d_Profiler.Video","d_ProfilerColumn.WarningCount","d_Project",
|
||||
"d_RectTool On","d_RectTool","d_RectTransformBlueprint","d_RectTransformRaw","d_redGroove","d_Refresh",
|
||||
"d_renderdoc","d_rightBracket","d_RotateTool On","d_RotateTool","d_ScaleTool On","d_ScaleTool",
|
||||
"d_SceneViewAlpha","d_SceneViewAudio","d_SceneViewFx","d_SceneViewLighting","d_SceneViewOrtho",
|
||||
"d_SceneViewRGB","d_ScrollShadow","d_Settings","d_SettingsIcon","d_SocialNetworks.FacebookShare",
|
||||
"d_SocialNetworks.LinkedInShare","d_SocialNetworks.Tweet","d_SocialNetworks.UDNOpen","d_SpeedScale",
|
||||
"d_StepButton On","d_StepButton","d_StepLeftButton-On","d_StepLeftButton","d_SVN_AddedLocal",
|
||||
"d_SVN_Conflicted","d_SVN_DeletedLocal","d_SVN_Local","d_SVN_LockedLocal","d_SVN_OutOfSync","d_tab_next",
|
||||
"d_tab_next@2x","d_tab_prev","d_tab_prev@2x","d_TerrainInspector.TerrainToolLower On",
|
||||
"d_TerrainInspector.TerrainToolLowerAlt","d_TerrainInspector.TerrainToolPlants On",
|
||||
"d_TerrainInspector.TerrainToolPlants","d_TerrainInspector.TerrainToolPlantsAlt On",
|
||||
"d_TerrainInspector.TerrainToolPlantsAlt","d_TerrainInspector.TerrainToolRaise On",
|
||||
"d_TerrainInspector.TerrainToolRaise","d_TerrainInspector.TerrainToolSetheight On",
|
||||
"d_TerrainInspector.TerrainToolSetheight","d_TerrainInspector.TerrainToolSetheightAlt On",
|
||||
"d_TerrainInspector.TerrainToolSetheightAlt","d_TerrainInspector.TerrainToolSettings On",
|
||||
"d_TerrainInspector.TerrainToolSettings","d_TerrainInspector.TerrainToolSmoothHeight On",
|
||||
"d_TerrainInspector.TerrainToolSmoothHeight","d_TerrainInspector.TerrainToolSplat On",
|
||||
"d_TerrainInspector.TerrainToolSplat","d_TerrainInspector.TerrainToolSplatAlt On",
|
||||
"d_TerrainInspector.TerrainToolSplatAlt","d_TerrainInspector.TerrainToolTrees On",
|
||||
"d_TerrainInspector.TerrainToolTrees","d_TerrainInspector.TerrainToolTreesAlt On",
|
||||
"d_TerrainInspector.TerrainToolTreesAlt","d_TimelineDigIn","d_TimelineEditModeMixOFF",
|
||||
"d_TimelineEditModeMixON","d_TimelineEditModeReplaceOFF","d_TimelineEditModeReplaceON",
|
||||
"d_TimelineEditModeRippleOFF","d_TimelineEditModeRippleON","d_TimelineSelector","d_Toolbar Minus",
|
||||
"d_Toolbar Plus More","d_Toolbar Plus","d_ToolHandleCenter","d_ToolHandleGlobal","d_ToolHandleLocal",
|
||||
"d_ToolHandlePivot","d_tranp","d_TransformTool On","d_TransformTool","d_tree_icon","d_tree_icon_branch",
|
||||
"d_tree_icon_branch_frond","d_tree_icon_frond","d_tree_icon_leaf","d_TreeEditor.AddBranches",
|
||||
"d_TreeEditor.AddLeaves","d_TreeEditor.Branch On","d_TreeEditor.Branch","d_TreeEditor.BranchFreeHand On",
|
||||
"d_TreeEditor.BranchFreeHand","d_TreeEditor.BranchRotate On","d_TreeEditor.BranchRotate",
|
||||
"d_TreeEditor.BranchScale On","d_TreeEditor.BranchScale","d_TreeEditor.BranchTranslate On",
|
||||
"d_TreeEditor.BranchTranslate","d_TreeEditor.Distribution On","d_TreeEditor.Distribution",
|
||||
"d_TreeEditor.Duplicate","d_TreeEditor.Geometry On","d_TreeEditor.Geometry","d_TreeEditor.Leaf On",
|
||||
"d_TreeEditor.Leaf","d_TreeEditor.LeafFreeHand On","d_TreeEditor.LeafFreeHand","d_TreeEditor.LeafRotate On",
|
||||
"d_TreeEditor.LeafRotate","d_TreeEditor.LeafScale On","d_TreeEditor.LeafScale",
|
||||
"d_TreeEditor.LeafTranslate On","d_TreeEditor.LeafTranslate","d_TreeEditor.Material On",
|
||||
"d_TreeEditor.Material","d_TreeEditor.Refresh","d_TreeEditor.Trash","d_TreeEditor.Wind On",
|
||||
"d_TreeEditor.Wind","d_UnityEditor.AnimationWindow","d_UnityEditor.ConsoleWindow",
|
||||
"d_UnityEditor.DebugInspectorWindow","d_UnityEditor.FindDependencies","d_UnityEditor.GameView",
|
||||
"d_UnityEditor.HierarchyWindow","d_UnityEditor.InspectorWindow","d_UnityEditor.LookDevView",
|
||||
"d_UnityEditor.ProfilerWindow","d_UnityEditor.SceneHierarchyWindow","d_UnityEditor.SceneView",
|
||||
"d_UnityEditor.Timeline.TimelineWindow","d_UnityEditor.VersionControl","d_UnityLogo","d_VerticalSplit",
|
||||
"d_ViewToolMove On","d_ViewToolMove","d_ViewToolOrbit On","d_ViewToolOrbit","d_ViewToolZoom On",
|
||||
"d_ViewToolZoom","d_VisibilityOff","d_VisibilityOn","d_VUMeterTextureHorizontal","d_VUMeterTextureVertical",
|
||||
"d_WaitSpin00","d_WaitSpin01","d_WaitSpin02","d_WaitSpin03","d_WaitSpin04","d_WaitSpin05","d_WaitSpin06",
|
||||
"d_WaitSpin07","d_WaitSpin08","d_WaitSpin09","d_WaitSpin10","d_WaitSpin11","d_WelcomeScreen.AssetStoreLogo",
|
||||
"d_winbtn_graph","d_winbtn_graph_close_h","d_winbtn_graph_max_h","d_winbtn_graph_min_h",
|
||||
"d_winbtn_mac_close","d_winbtn_mac_close_a","d_winbtn_mac_close_h","d_winbtn_mac_inact","d_winbtn_mac_max",
|
||||
"d_winbtn_mac_max_a","d_winbtn_mac_max_h","d_winbtn_mac_min","d_winbtn_mac_min_a","d_winbtn_mac_min_h",
|
||||
"d_winbtn_win_close","d_winbtn_win_close_a","d_winbtn_win_close_h","d_winbtn_win_max","d_winbtn_win_max_a",
|
||||
"d_winbtn_win_max_h","d_winbtn_win_min","d_winbtn_win_min_a","d_winbtn_win_min_h","d_winbtn_win_rest",
|
||||
"d_winbtn_win_rest_a","d_winbtn_win_rest_h","DefaultSorting","EditCollider","editcollision_16",
|
||||
"editconstraints_16","editicon.sml","endButton-On","endButton","eyeDropper.Large","eyeDropper.sml",
|
||||
"Favorite","FilterByLabel","FilterByType","FilterSelectedOnly","FilterSelectedOnly@2x","forward",
|
||||
"forward@2x","GEAR","Grid.BoxTool","Grid.Default","Grid.EraserTool","Grid.FillTool","Grid.MoveTool",
|
||||
"Grid.PaintTool","Grid.PickingTool","Grid.SelectTool","Groove","align_horizontally",
|
||||
"align_horizontally_center","align_horizontally_center_active","align_horizontally_left",
|
||||
"align_horizontally_left_active","align_horizontally_right","align_horizontally_right_active",
|
||||
"align_vertically","align_vertically_bottom","align_vertically_bottom_active","align_vertically_center",
|
||||
"align_vertically_center_active","align_vertically_top","align_vertically_top_active",
|
||||
"d_align_horizontally","d_align_horizontally_center","d_align_horizontally_center_active",
|
||||
"d_align_horizontally_left","d_align_horizontally_left_active","d_align_horizontally_right",
|
||||
"d_align_horizontally_right_active","d_align_vertically","d_align_vertically_bottom",
|
||||
"d_align_vertically_bottom_active","d_align_vertically_center","d_align_vertically_center_active",
|
||||
"d_align_vertically_top","d_align_vertically_top_active","HorizontalSplit","icon dropdown",
|
||||
"InspectorLock","JointAngularLimits","KnobCShape","KnobCShapeMini","leftBracket","Lighting",
|
||||
"LightmapEditor.WindowTitle","Lightmapping","d_greenLight","d_lightOff","d_lightRim","d_orangeLight",
|
||||
"d_redLight","greenLight","lightOff","lightRim","orangeLight","redLight","LockIcon-On","LockIcon",
|
||||
"LookDevCenterLight","LookDevCenterLightl@2x","LookDevClose","LookDevClose@2x","LookDevEnvRotation",
|
||||
"LookDevEnvRotation@2x","LookDevEyedrop","LookDevLight","LookDevLight@2x","LookDevMirrorViewsActive",
|
||||
"LookDevMirrorViewsActive@2x","LookDevMirrorViewsInactive","LookDevMirrorViewsInactive@2x",
|
||||
"LookDevObjRotation","LookDevObjRotation@2x","LookDevPaneOption","LookDevPaneOption@2x","LookDevResetEnv",
|
||||
"LookDevResetEnv@2x","LookDevShadow","LookDevShadow@2x","LookDevShadowFrame","LookDevShadowFrame@2x",
|
||||
"LookDevSideBySide","LookDevSideBySide@2x","LookDevSingle1","LookDevSingle1@2x","LookDevSingle2",
|
||||
"LookDevSingle2@2x","LookDevSplit","LookDevSplit@2x","LookDevZone","LookDevZone@2x","loop","Mirror",
|
||||
"monologo","MoveTool on","MoveTool","Navigation","Occlusion","P4_AddedLocal","P4_AddedRemote",
|
||||
"P4_BlueLeftParenthesis","P4_BlueRightParenthesis","P4_CheckOutLocal","P4_CheckOutRemote","P4_Conflicted",
|
||||
"P4_DeletedLocal","P4_DeletedRemote","P4_Local","P4_LockedLocal","P4_LockedRemote","P4_OutOfSync",
|
||||
"P4_RedLeftParenthesis","P4_RedRightParenthesis","P4_Updating","PackageBadgeDelete","PackageBadgeNew",
|
||||
"Particle Effect","PauseButton On","PauseButton","PlayButton On","PlayButton","PlayButtonProfile On",
|
||||
"PlayButtonProfile","playLoopOff","playLoopOn","playSpeed","preAudioAutoPlayOff","preAudioAutoPlayOn",
|
||||
"preAudioLoopOff","preAudioLoopOn","preAudioPlayOff","preAudioPlayOn","PreMatCube","PreMatCylinder",
|
||||
"PreMatLight0","PreMatLight1","PreMatQuad","PreMatSphere","PreMatTorus","Preset.Context","PreTextureAlpha",
|
||||
"PreTextureArrayFirstSlice","PreTextureArrayLastSlice","PreTextureMipMapHigh","PreTextureMipMapLow",
|
||||
"PreTextureRGB","AreaLight Gizmo","AreaLight Icon","Assembly Icon","AssetStore Icon","AudioMixerView Icon",
|
||||
"AudioSource Gizmo","Camera Gizmo","CGProgram Icon","ChorusFilter Icon","CollabChanges Icon",
|
||||
"CollabChangesConflict Icon","CollabChangesDeleted Icon","CollabConflict Icon","CollabCreate Icon",
|
||||
"CollabDeleted Icon","CollabEdit Icon","CollabExclude Icon","CollabMoved Icon","cs Script Icon",
|
||||
"d_AudioMixerView Icon","d_CollabChanges Icon","d_CollabChangesConflict Icon","d_CollabChangesDeleted Icon",
|
||||
"d_CollabConflict Icon","d_CollabCreate Icon","d_CollabDeleted Icon","d_CollabEdit Icon",
|
||||
"d_CollabExclude Icon","d_CollabMoved Icon","d_GridLayoutGroup Icon","d_HorizontalLayoutGroup Icon",
|
||||
"d_Prefab Icon","d_PrefabModel Icon","d_PrefabVariant Icon","d_VerticalLayoutGroup Icon",
|
||||
"DefaultSlate Icon","DirectionalLight Gizmo","DirectionalLight Icon","DiscLight Gizmo","DiscLight Icon",
|
||||
"dll Script Icon","EchoFilter Icon","Favorite Icon","Folder Icon","FolderEmpty Icon",
|
||||
"FolderFavorite Icon","GameManager Icon","GridBrush Icon","HighPassFilter Icon",
|
||||
"HorizontalLayoutGroup Icon","LensFlare Gizmo","LightingDataAssetParent Icon","LightProbeGroup Gizmo",
|
||||
"LightProbeProxyVolume Gizmo","LowPassFilter Icon","Main Light Gizmo","MetaFile Icon",
|
||||
"Microphone Icon","MuscleClip Icon","ParticleSystem Gizmo","PointLight Gizmo","Prefab Icon",
|
||||
"PrefabModel Icon","PrefabOverlayAdded Icon","PrefabOverlayModified Icon","PrefabOverlayRemoved Icon",
|
||||
"PrefabVariant Icon","Projector Gizmo","RaycastCollider Icon","ReflectionProbe Gizmo",
|
||||
"ReverbFilter Icon","SceneSet Icon","Search Icon","SoftlockProjectBrowser Icon","SpeedTreeModel Icon",
|
||||
"SpotLight Gizmo","Spotlight Icon","SpriteCollider Icon","sv_icon_dot0_pix16_gizmo",
|
||||
"sv_icon_dot10_pix16_gizmo","sv_icon_dot11_pix16_gizmo","sv_icon_dot12_pix16_gizmo",
|
||||
"sv_icon_dot13_pix16_gizmo","sv_icon_dot14_pix16_gizmo","sv_icon_dot15_pix16_gizmo",
|
||||
"sv_icon_dot1_pix16_gizmo","sv_icon_dot2_pix16_gizmo","sv_icon_dot3_pix16_gizmo",
|
||||
"sv_icon_dot4_pix16_gizmo","sv_icon_dot5_pix16_gizmo","sv_icon_dot6_pix16_gizmo",
|
||||
"sv_icon_dot7_pix16_gizmo","sv_icon_dot8_pix16_gizmo","sv_icon_dot9_pix16_gizmo",
|
||||
"AnimatorController Icon","AnimatorState Icon","AnimatorStateMachine Icon",
|
||||
"AnimatorStateTransition Icon","BlendTree Icon","AnimationWindowEvent Icon","AudioMixerController Icon",
|
||||
"DefaultAsset Icon","EditorSettings Icon","AnyStateNode Icon","HumanTemplate Icon",
|
||||
"LightingDataAsset Icon","LightmapParameters Icon","Preset Icon","SceneAsset Icon",
|
||||
"SubstanceArchive Icon","AssemblyDefinitionAsset Icon","NavMeshAgent Icon","NavMeshData Icon",
|
||||
"NavMeshObstacle Icon","OffMeshLink Icon","AnalyticsTracker Icon","Animation Icon",
|
||||
"AnimationClip Icon","AimConstraint Icon","d_AimConstraint Icon","d_LookAtConstraint Icon",
|
||||
"d_ParentConstraint Icon","d_PositionConstraint Icon","d_RotationConstraint Icon",
|
||||
"d_ScaleConstraint Icon","LookAtConstraint Icon","ParentConstraint Icon","PositionConstraint Icon",
|
||||
"RotationConstraint Icon","ScaleConstraint Icon","Animator Icon","AnimatorOverrideController Icon",
|
||||
"AreaEffector2D Icon","AudioMixerGroup Icon","AudioMixerSnapshot Icon","AudioSpatializerMicrosoft Icon",
|
||||
"AudioChorusFilter Icon","AudioClip Icon","AudioDistortionFilter Icon","AudioEchoFilter Icon",
|
||||
"AudioHighPassFilter Icon","AudioListener Icon","AudioLowPassFilter Icon","AudioReverbFilter Icon",
|
||||
"AudioReverbZone Icon","AudioSource Icon","Avatar Icon","AvatarMask Icon","BillboardAsset Icon",
|
||||
"BillboardRenderer Icon","BoxCollider Icon","BoxCollider2D Icon","BuoyancyEffector2D Icon","Camera Icon",
|
||||
"Canvas Icon","CanvasGroup Icon","CanvasRenderer Icon","CapsuleCollider Icon","CapsuleCollider2D Icon",
|
||||
"CharacterController Icon","CharacterJoint Icon","CircleCollider2D Icon","Cloth Icon",
|
||||
"CompositeCollider2D Icon","ComputeShader Icon","ConfigurableJoint Icon","ConstantForce Icon",
|
||||
"ConstantForce2D Icon","Cubemap Icon","d_Canvas Icon","d_CanvasGroup Icon","d_CanvasRenderer Icon",
|
||||
"d_GameObject Icon","d_LightProbeProxyVolume Icon","d_ParticleSystem Icon","d_ParticleSystemForceField Icon",
|
||||
"d_RectTransform Icon","d_StreamingController Icon","DistanceJoint2D Icon","EdgeCollider2D Icon",
|
||||
"d_EventSystem Icon","d_EventTrigger Icon","d_Physics2DRaycaster Icon","d_PhysicsRaycaster Icon",
|
||||
"d_StandaloneInputModule Icon","d_TouchInputModule Icon","EventSystem Icon","EventTrigger Icon",
|
||||
"HoloLensInputModule Icon","Physics2DRaycaster Icon","PhysicsRaycaster Icon","StandaloneInputModule Icon",
|
||||
"TouchInputModule Icon","SpriteShapeRenderer Icon","VisualTreeAsset Icon","d_VisualEffect Icon",
|
||||
"d_VisualEffectAsset Icon","VisualEffect Icon","VisualEffectAsset Icon","FixedJoint Icon",
|
||||
"FixedJoint2D Icon","Flare Icon","FlareLayer Icon","Font Icon","FrictionJoint2D Icon",
|
||||
"GameObject Icon","Grid Icon","GUILayer Icon","GUISkin Icon","GUIText Icon","GUITexture Icon",
|
||||
"Halo Icon","HingeJoint Icon","HingeJoint2D Icon","LensFlare Icon","Light Icon","LightProbeGroup Icon",
|
||||
"LightProbeProxyVolume Icon","LightProbes Icon","LineRenderer Icon","LODGroup Icon","Material Icon",
|
||||
"Mesh Icon","MeshCollider Icon","MeshFilter Icon","MeshRenderer Icon","Motion Icon","MovieTexture Icon",
|
||||
"NetworkAnimator Icon","NetworkDiscovery Icon","NetworkIdentity Icon","NetworkLobbyManager Icon",
|
||||
"NetworkLobbyPlayer Icon","NetworkManager Icon","NetworkManagerHUD Icon","NetworkMigrationManager Icon",
|
||||
"NetworkProximityChecker Icon","NetworkStartPosition Icon","NetworkTransform Icon",
|
||||
"NetworkTransformChild Icon","NetworkTransformVisualizer Icon","NetworkView Icon","OcclusionArea Icon",
|
||||
"OcclusionPortal Icon","ParticleSystem Icon","ParticleSystemForceField Icon","PhysicMaterial Icon",
|
||||
"PhysicsMaterial2D Icon","PlatformEffector2D Icon","d_PlayableDirector Icon","PlayableDirector Icon",
|
||||
"PointEffector2D Icon","PolygonCollider2D Icon","ProceduralMaterial Icon","Projector Icon",
|
||||
"RectTransform Icon","ReflectionProbe Icon","RelativeJoint2D Icon","d_SortingGroup Icon",
|
||||
"SortingGroup Icon","RenderTexture Icon","Rigidbody Icon","Rigidbody2D Icon","ScriptableObject Icon",
|
||||
"Shader Icon","ShaderVariantCollection Icon","SkinnedMeshRenderer Icon","Skybox Icon","SliderJoint2D Icon",
|
||||
"TrackedPoseDriver Icon","SphereCollider Icon","SpringJoint Icon","SpringJoint2D Icon","Sprite Icon",
|
||||
"SpriteMask Icon","SpriteRenderer Icon","StreamingController Icon","StyleSheet Icon","SurfaceEffector2D Icon",
|
||||
"TargetJoint2D Icon","Terrain Icon","TerrainCollider Icon","TerrainData Icon","TextAsset Icon",
|
||||
"TextMesh Icon","Texture Icon","Texture2D Icon","Tile Icon","Tilemap Icon","TilemapCollider2D Icon",
|
||||
"TilemapRenderer Icon","d_TimelineAsset Icon","TimelineAsset Icon","TrailRenderer Icon","Transform Icon",
|
||||
"SpriteAtlas Icon","AspectRatioFitter Icon","Button Icon","CanvasScaler Icon","ContentSizeFitter Icon",
|
||||
"d_AspectRatioFitter Icon","d_CanvasScaler Icon","d_ContentSizeFitter Icon","d_FreeformLayoutGroup Icon",
|
||||
"d_GraphicRaycaster Icon","d_GridLayoutGroup Icon","d_HorizontalLayoutGroup Icon","d_LayoutElement Icon",
|
||||
"d_PhysicalResolution Icon","d_ScrollViewArea Icon","d_SelectionList Icon","d_SelectionListItem Icon",
|
||||
"d_SelectionListTemplate Icon","d_VerticalLayoutGroup Icon","Dropdown Icon","FreeformLayoutGroup Icon",
|
||||
"GraphicRaycaster Icon","GridLayoutGroup Icon","HorizontalLayoutGroup Icon","Image Icon","InputField Icon",
|
||||
"LayoutElement Icon","Mask Icon","Outline Icon","PositionAsUV1 Icon","RawImage Icon","RectMask2D Icon",
|
||||
"Scrollbar Icon","ScrollRect Icon","Selectable Icon","Shadow Icon","Slider Icon","Text Icon","Toggle Icon",
|
||||
"ToggleGroup Icon","VerticalLayoutGroup Icon","VideoClip Icon","VideoPlayer Icon","VisualEffect Icon",
|
||||
"VisualEffectAsset Icon","WheelCollider Icon","WheelJoint2D Icon","WindZone Icon",
|
||||
"SpatialMappingCollider Icon","SpatialMappingRenderer Icon","WorldAnchor Icon","UssScript Icon",
|
||||
"UxmlScript Icon","VerticalLayoutGroup Icon","VideoEffect Icon","VisualEffect Gizmo",
|
||||
"VisualEffectAsset Icon","AnchorBehaviour Icon","AnchorInputListenerBehaviour Icon",
|
||||
"AnchorStageBehaviour Icon","CloudRecoBehaviour Icon","ContentPlacementBehaviour Icon",
|
||||
"ContentPositioningBehaviour Icon","CylinderTargetBehaviour Icon","d_AnchorBehaviour Icon",
|
||||
"d_AnchorInputListenerBehaviour Icon","d_AnchorStageBehaviour Icon","d_CloudRecoBehaviour Icon",
|
||||
"d_ContentPlacementBehaviour Icon","d_ContentPositioningBehaviour Icon","d_CylinderTargetBehaviour Icon",
|
||||
"d_ImageTargetBehaviour Icon","d_MidAirPositionerBehaviour Icon","d_ModelTargetBehaviour Icon",
|
||||
"d_MultiTargetBehaviour Icon","d_ObjectTargetBehaviour Icon","d_PlaneFinderBehaviour Icon",
|
||||
"d_UserDefinedTargetBuildingBehaviour Icon","d_VirtualButtonBehaviour Icon","d_VuforiaBehaviour Icon",
|
||||
"d_VuMarkBehaviour Icon","d_WireframeBehaviour Icon","ImageTargetBehaviour Icon",
|
||||
"MidAirPositionerBehaviour Icon","ModelTargetBehaviour Icon","MultiTargetBehaviour Icon",
|
||||
"ObjectTargetBehaviour Icon","PlaneFinderBehaviour Icon","UserDefinedTargetBuildingBehaviour Icon",
|
||||
"VirtualButtonBehaviour Icon","VuforiaBehaviour Icon","VuMarkBehaviour Icon","WireframeBehaviour Icon",
|
||||
"WindZone Gizmo","Profiler.Audio","Profiler.CPU","Profiler.FirstFrame","Profiler.GlobalIllumination",
|
||||
"Profiler.GPU","Profiler.Instrumentation","Profiler.LastFrame","Profiler.Memory","Profiler.NetworkMessages",
|
||||
"Profiler.NetworkOperations","Profiler.NextFrame","Profiler.Physics","Profiler.Physics2D",
|
||||
"Profiler.PrevFrame","Profiler.Record","Profiler.Rendering","Profiler.UI","Profiler.UIDetails",
|
||||
"Profiler.Video","ProfilerColumn.WarningCount","Project","RectTool On","RectTool","RectTransformBlueprint",
|
||||
"RectTransformRaw","redGroove","Refresh","renderdoc","rightBracket","RotateTool On","RotateTool",
|
||||
"SaveActive","SaveFromPlay","SavePassive","ScaleTool On","ScaleTool","SceneLoadIn","SceneLoadOut",
|
||||
"SceneSave","SceneSaveGrey","SceneViewAlpha","SceneViewAudio","SceneViewFx","SceneViewLighting",
|
||||
"SceneViewOrtho","SceneViewRGB","ScrollShadow","Settings","SettingsIcon","SocialNetworks.FacebookShare",
|
||||
"SocialNetworks.LinkedInShare","SocialNetworks.Tweet","SocialNetworks.UDNLogo","SocialNetworks.UDNOpen",
|
||||
"SoftlockInline","SpeedScale","StateMachineEditor.ArrowTip","StateMachineEditor.ArrowTipSelected",
|
||||
"StateMachineEditor.Background","StateMachineEditor.State","StateMachineEditor.StateHover",
|
||||
"StateMachineEditor.StateSelected","StateMachineEditor.StateSub","StateMachineEditor.StateSubHover",
|
||||
"StateMachineEditor.StateSubSelected","StateMachineEditor.UpButton","StateMachineEditor.UpButtonHover",
|
||||
"StepButton On","StepButton","StepLeftButton-On","StepLeftButton","sticky_arrow","sticky_p4","sticky_skin",
|
||||
"sv_icon_dot0_sml","sv_icon_dot10_sml","sv_icon_dot11_sml","sv_icon_dot12_sml","sv_icon_dot13_sml",
|
||||
"sv_icon_dot14_sml","sv_icon_dot15_sml","sv_icon_dot1_sml","sv_icon_dot2_sml","sv_icon_dot3_sml",
|
||||
"sv_icon_dot4_sml","sv_icon_dot5_sml","sv_icon_dot6_sml","sv_icon_dot7_sml","sv_icon_dot8_sml",
|
||||
"sv_icon_dot9_sml","sv_icon_name0","sv_icon_name1","sv_icon_name2","sv_icon_name3","sv_icon_name4",
|
||||
"sv_icon_name5","sv_icon_name6","sv_icon_name7","sv_icon_none","sv_label_0","sv_label_1","sv_label_2",
|
||||
"sv_label_3","sv_label_4","sv_label_5","sv_label_6","sv_label_7","SVN_AddedLocal","SVN_Conflicted",
|
||||
"SVN_DeletedLocal","SVN_Local","SVN_LockedLocal","SVN_OutOfSync","tab_next","tab_next@2x","tab_prev",
|
||||
"tab_prev@2x","TerrainInspector.TerrainToolLower On","TerrainInspector.TerrainToolLower",
|
||||
"TerrainInspector.TerrainToolLowerAlt","TerrainInspector.TerrainToolPlants On",
|
||||
"TerrainInspector.TerrainToolPlants","TerrainInspector.TerrainToolPlantsAlt On",
|
||||
"TerrainInspector.TerrainToolPlantsAlt","TerrainInspector.TerrainToolRaise On",
|
||||
"TerrainInspector.TerrainToolRaise","TerrainInspector.TerrainToolSculpt On",
|
||||
"TerrainInspector.TerrainToolSculpt","TerrainInspector.TerrainToolSetheight On",
|
||||
"TerrainInspector.TerrainToolSetheight","TerrainInspector.TerrainToolSetheightAlt On",
|
||||
"TerrainInspector.TerrainToolSetheightAlt","TerrainInspector.TerrainToolSettings On",
|
||||
"TerrainInspector.TerrainToolSettings","TerrainInspector.TerrainToolSmoothHeight On",
|
||||
"TerrainInspector.TerrainToolSmoothHeight","TerrainInspector.TerrainToolSplat On",
|
||||
"TerrainInspector.TerrainToolSplat","TerrainInspector.TerrainToolSplatAlt On",
|
||||
"TerrainInspector.TerrainToolSplatAlt","TerrainInspector.TerrainToolTrees On",
|
||||
"TerrainInspector.TerrainToolTrees","TerrainInspector.TerrainToolTreesAlt On",
|
||||
"TerrainInspector.TerrainToolTreesAlt","TestFailed","TestIgnored","TestInconclusive","TestNormal",
|
||||
"TestPassed","TestStopwatch","TimelineClipBG","TimelineClipFG","TimelineDigIn","TimelineEditModeMixOFF",
|
||||
"TimelineEditModeMixON","TimelineEditModeReplaceOFF","TimelineEditModeReplaceON","TimelineEditModeRippleOFF",
|
||||
"TimelineEditModeRippleON","TimelineSelector","Toolbar Minus","Toolbar Plus More","Toolbar Plus",
|
||||
"ToolHandleCenter","ToolHandleGlobal","ToolHandleLocal","ToolHandlePivot","tranp","TransformTool On",
|
||||
"TransformTool","tree_icon","tree_icon_branch","tree_icon_branch_frond","tree_icon_frond","tree_icon_leaf",
|
||||
"TreeEditor.AddBranches","TreeEditor.AddLeaves","TreeEditor.Branch On","TreeEditor.Branch",
|
||||
"TreeEditor.BranchFreeHand On","TreeEditor.BranchFreeHand","TreeEditor.BranchRotate On",
|
||||
"TreeEditor.BranchRotate","TreeEditor.BranchScale On","TreeEditor.BranchScale",
|
||||
"TreeEditor.BranchTranslate On","TreeEditor.BranchTranslate","TreeEditor.Distribution On",
|
||||
"TreeEditor.Distribution","TreeEditor.Duplicate","TreeEditor.Geometry On","TreeEditor.Geometry",
|
||||
"TreeEditor.Leaf On","TreeEditor.Leaf","TreeEditor.LeafFreeHand On","TreeEditor.LeafFreeHand",
|
||||
"TreeEditor.LeafRotate On","TreeEditor.LeafRotate","TreeEditor.LeafScale On","TreeEditor.LeafScale",
|
||||
"TreeEditor.LeafTranslate On","TreeEditor.LeafTranslate","TreeEditor.Material On","TreeEditor.Material",
|
||||
"TreeEditor.Refresh","TreeEditor.Trash","TreeEditor.Wind On","TreeEditor.Wind","UnityEditor.AnimationWindow",
|
||||
"UnityEditor.ConsoleWindow","UnityEditor.DebugInspectorWindow","UnityEditor.FindDependencies",
|
||||
"UnityEditor.GameView","UnityEditor.Graphs.AnimatorControllerTool","UnityEditor.HierarchyWindow",
|
||||
"UnityEditor.InspectorWindow","UnityEditor.LookDevView","UnityEditor.ProfilerWindow",
|
||||
"UnityEditor.SceneHierarchyWindow","UnityEditor.SceneView","UnityEditor.Timeline.TimelineWindow",
|
||||
"UnityEditor.VersionControl","UnityLogo","UnityLogoLarge","UpArrow","vcs_add","vcs_branch","vcs_change",
|
||||
"vcs_check","vcs_delete","vcs_document","vcs_edit","vcs_incoming","vcs_integrate","vcs_local","vcs_lock",
|
||||
"vcs_refresh","vcs_sync","vcs_unresolved","vcs_update","VerticalSplit","ViewToolMove On","ViewToolMove",
|
||||
"ViewToolOrbit On","ViewToolOrbit","ViewToolZoom On","ViewToolZoom","VisibilityOff","VisibilityOn",
|
||||
"VisualEffect Gizmo","VUMeterTextureHorizontal","VUMeterTextureVertical","WaitSpin00","WaitSpin01",
|
||||
"WaitSpin02","WaitSpin03","WaitSpin04","WaitSpin05","WaitSpin06","WaitSpin07","WaitSpin08","WaitSpin09",
|
||||
"WaitSpin10","WaitSpin11","WelcomeScreen.AssetStoreLogo","winbtn_graph","winbtn_graph_close_h",
|
||||
"winbtn_graph_max_h","winbtn_graph_min_h","winbtn_mac_close","winbtn_mac_close_a","winbtn_mac_close_h",
|
||||
"winbtn_mac_inact","winbtn_mac_max","winbtn_mac_max_a","winbtn_mac_max_h","winbtn_mac_min",
|
||||
"winbtn_mac_min_a","winbtn_mac_min_h","winbtn_win_close","winbtn_win_close_a","winbtn_win_close_h",
|
||||
"winbtn_win_max","winbtn_win_max_a","winbtn_win_max_h","winbtn_win_min","winbtn_win_min_a",
|
||||
"winbtn_win_min_h","winbtn_win_rest","winbtn_win_rest_a","winbtn_win_rest_h",
|
||||
"AvatarInspector/RightFingersIk","AvatarInspector/LeftFingersIk","AvatarInspector/RightFeetIk",
|
||||
"AvatarInspector/LeftFeetIk","AvatarInspector/RightFingers","AvatarInspector/LeftFingers",
|
||||
"AvatarInspector/RightArm","AvatarInspector/LeftArm","AvatarInspector/RightLeg","AvatarInspector/LeftLeg",
|
||||
"AvatarInspector/Head","AvatarInspector/Torso","AvatarInspector/MaskEditor_Root",
|
||||
"AvatarInspector/BodyPartPicker","AvatarInspector/BodySIlhouette","boo Script Icon","js Script Icon",
|
||||
"EyeDropper.Large","AboutWindow.MainHeader","AgeiaLogo","MonoLogo","PlayButtonProfile Anim",
|
||||
"StepButton Anim","PauseButton Anim","PlayButton Anim","MoveTool On","Icon Dropdown",
|
||||
"AvatarInspector/DotSelection","AvatarInspector/DotFrameDotted","AvatarInspector/DotFrame",
|
||||
"AvatarInspector/DotFill","AvatarInspector/RightHandZoom","AvatarInspector/LeftHandZoom",
|
||||
"AvatarInspector/HeadZoom","AvatarInspector/RightLeg","AvatarInspector/LeftLeg",
|
||||
"AvatarInspector/RightFingers","AvatarInspector/RightArm","AvatarInspector/LeftFingers",
|
||||
"AvatarInspector/LeftArm","AvatarInspector/Head","AvatarInspector/Torso",
|
||||
"AvatarInspector/RightHandZoomSilhouette","AvatarInspector/LeftHandZoomSilhouette",
|
||||
"AvatarInspector/HeadZoomSilhouette","AvatarInspector/BodySilhouette","lightMeter/redLight",
|
||||
"lightMeter/orangeLight","lightMeter/lightRim","lightMeter/greenLight","SceneviewAudio",
|
||||
"SceneviewLighting","TerrainInspector.TerrainToolSetHeight","AS Badge New","AS Badge Move",
|
||||
"AS Badge Delete","WelcomeScreen.UnityAnswersLogo","WelcomeScreen.UnityForumLogo",
|
||||
"WelcomeScreen.UnityBasicsLogo","WelcomeScreen.VideoTutLogo","WelcomeScreen.MainHeader","Icon Dropdown",
|
||||
"PrefabNormal Icon","PrefabNormal Icon","BuildSettings.BlackBerry.Small","BuildSettings.Tizen.Small",
|
||||
"BuildSettings.XBox360.Small","BuildSettings.PS3.Small","BuildSettings.SamsungTV.Small",
|
||||
"BuildSettings.BlackBerry","BuildSettings.Tizen","BuildSettings.XBox360","BuildSettings.PS3",
|
||||
"_Help", "_Popup", "aboutwindow.mainheader", "ageialogo", "AlphabeticalSorting", "Animation.AddEvent",
|
||||
"Animation.AddKeyframe", "Animation.EventMarker", "Animation.FirstKey", "Animation.LastKey",
|
||||
"Animation.NextKey", "Animation.Play", "Animation.PrevKey", "Animation.Record", "Animation.SequencerLink",
|
||||
"animationanimated", "animationdopesheetkeyframe", "animationkeyframe", "animationnocurve",
|
||||
"animationvisibilitytoggleoff", "animationvisibilitytoggleon", "AnimationWrapModeMenu", "AssemblyLock",
|
||||
"Asset Store", "Audio Mixer", "AvatarCompass", "AvatarController.Layer", "AvatarController.LayerHover",
|
||||
"AvatarController.LayerSelected", "BodyPartPicker", "BodySilhouette", "DotFill", "DotFrame", "DotFrameDotted",
|
||||
"DotSelection", "Head", "HeadIk", "HeadZoom", "HeadZoomSilhouette", "LeftArm", "LeftFeetIk", "LeftFingers",
|
||||
"LeftFingersIk", "LeftHandZoom", "LeftHandZoomSilhouette", "LeftLeg", "MaskEditor_Root", "RightArm", "RightFeetIk",
|
||||
"RightFingers", "RightFingersIk", "RightHandZoom", "RightHandZoomSilhouette", "RightLeg", "Torso", "AvatarPivot",
|
||||
"back", "back@2x", "beginButton-On", "beginButton", "blendKey", "blendKeyOverlay", "blendKeySelected",
|
||||
"blendSampler", "blueGroove", "BuildSettings.Android", "BuildSettings.Android.Small", "BuildSettings.Broadcom",
|
||||
"BuildSettings.Editor", "BuildSettings.Editor.Small", "BuildSettings.Facebook",
|
||||
"BuildSettings.Facebook.Small", "BuildSettings.FlashPlayer", "BuildSettings.FlashPlayer.Small",
|
||||
"BuildSettings.iPhone", "BuildSettings.iPhone.Small", "BuildSettings.Lumin", "BuildSettings.Lumin.small",
|
||||
"BuildSettings.Metro", "BuildSettings.Metro.Small", "BuildSettings.N3DS", "BuildSettings.N3DS.Small",
|
||||
"BuildSettings.PS4", "BuildSettings.PS4.Small", "BuildSettings.PSM", "BuildSettings.PSM.Small",
|
||||
"BuildSettings.PSP2", "BuildSettings.PSP2.Small", "BuildSettings.SelectedIcon", "BuildSettings.Standalone",
|
||||
"BuildSettings.Standalone.Small", "BuildSettings.StandaloneBroadcom.Small",
|
||||
"BuildSettings.StandaloneGLES20Emu.Small", "BuildSettings.StandaloneGLESEmu",
|
||||
"BuildSettings.StandaloneGLESEmu.Small", "BuildSettings.Switch", "BuildSettings.Switch.Small",
|
||||
"BuildSettings.tvOS", "BuildSettings.tvOS.Small", "BuildSettings.Web", "BuildSettings.Web.Small",
|
||||
"BuildSettings.WebGL", "BuildSettings.WebGL.Small", "BuildSettings.WP8", "BuildSettings.WP8.Small",
|
||||
"BuildSettings.Xbox360", "BuildSettings.Xbox360.Small", "BuildSettings.XboxOne",
|
||||
"BuildSettings.XboxOne.Small", "BuildSettings.Xiaomi", "Camera Gizmo", "CheckerFloor", "Clipboard",
|
||||
"ClothInspector.PaintTool", "ClothInspector.PaintValue", "ClothInspector.SelectTool",
|
||||
"ClothInspector.SettingsTool", "ClothInspector.ViewValue", "CloudConnect", "Collab.Build",
|
||||
"Collab.BuildFailed", "Collab.BuildSucceeded", "Collab.FileAdded", "Collab.FileConflict", "Collab.FileDeleted",
|
||||
"Collab.FileIgnored", "Collab.FileMoved", "Collab.FileUpdated", "Collab.FolderAdded", "Collab.FolderConflict",
|
||||
"Collab.FolderDeleted", "Collab.FolderIgnored", "Collab.FolderMoved", "Collab.FolderUpdated",
|
||||
"Collab.NoInternet", "Collab", "Collab.Warning", "CollabConflict", "CollabError", "CollabNew", "CollabOffline",
|
||||
"CollabProgress", "CollabPull", "CollabPush", "ColorPicker.ColorCycle", "ColorPicker.CycleColor",
|
||||
"ColorPicker.CycleSlider", "ColorPicker.SliderCycle", "console.erroricon.inactive.sml", "console.erroricon",
|
||||
"console.erroricon.sml", "console.infoicon", "console.infoicon.sml", "console.warnicon.inactive.sml",
|
||||
"console.warnicon", "console.warnicon.sml", "curvekeyframe", "curvekeyframeselected",
|
||||
"curvekeyframeselectedoverlay", "curvekeyframesemiselectedoverlay", "curvekeyframeweighted", "CustomSorting",
|
||||
"d__Popup", "d_aboutwindow.mainheader", "d_ageialogo", "d_AlphabeticalSorting", "d_Animation.AddEvent",
|
||||
"d_Animation.AddKeyframe", "d_Animation.EventMarker", "d_Animation.FirstKey", "d_Animation.LastKey",
|
||||
"d_Animation.NextKey", "d_Animation.Play", "d_Animation.PrevKey", "d_Animation.Record",
|
||||
"d_Animation.SequencerLink", "d_animationanimated", "d_animationkeyframe", "d_animationnocurve",
|
||||
"d_animationvisibilitytoggleoff", "d_animationvisibilitytoggleon", "d_AnimationWrapModeMenu",
|
||||
"d_AS Badge Delete", "d_AS Badge New", "d_AssemblyLock", "d_Asset Store", "d_Audio Mixer",
|
||||
"d_AvatarBlendBackground", "d_AvatarBlendLeft", "d_AvatarBlendLeftA", "d_AvatarBlendRight",
|
||||
"d_AvatarBlendRightA", "d_AvatarCompass", "d_AvatarPivot", "d_back", "d_back@2x", "d_beginButton-On",
|
||||
"d_beginButton", "d_blueGroove", "d_BuildSettings.Android", "d_BuildSettings.Android.Small",
|
||||
"d_BuildSettings.Broadcom", "d_BuildSettings.FlashPlayer", "d_BuildSettings.FlashPlayer.Small",
|
||||
"d_BuildSettings.iPhone", "d_BuildSettings.iPhone.Small", "d_BuildSettings.Lumin",
|
||||
"d_BuildSettings.Lumin.small", "d_BuildSettings.PS4", "d_BuildSettings.PS4.Small", "d_BuildSettings.PSP2",
|
||||
"d_BuildSettings.PSP2.Small", "d_BuildSettings.SelectedIcon", "d_BuildSettings.Standalone",
|
||||
"d_BuildSettings.Standalone.Small", "d_BuildSettings.tvOS", "d_BuildSettings.tvOS.Small",
|
||||
"d_BuildSettings.Web", "d_BuildSettings.Web.Small", "d_BuildSettings.WebGL", "d_BuildSettings.WebGL.Small",
|
||||
"d_BuildSettings.Xbox360", "d_BuildSettings.Xbox360.Small", "d_BuildSettings.XboxOne",
|
||||
"d_BuildSettings.XboxOne.Small", "d_CheckerFloor", "d_CloudConnect", "d_Collab.FileAdded",
|
||||
"d_Collab.FileConflict", "d_Collab.FileDeleted", "d_Collab.FileIgnored", "d_Collab.FileMoved",
|
||||
"d_Collab.FileUpdated", "d_Collab.FolderAdded", "d_Collab.FolderConflict", "d_Collab.FolderDeleted",
|
||||
"d_Collab.FolderIgnored", "d_Collab.FolderMoved", "d_Collab.FolderUpdated", "d_ColorPicker.CycleColor",
|
||||
"d_ColorPicker.CycleSlider", "d_console.erroricon", "d_console.erroricon.sml", "d_console.infoicon",
|
||||
"d_console.infoicon.sml", "d_console.warnicon", "d_console.warnicon.sml", "d_curvekeyframe",
|
||||
"d_curvekeyframeselected", "d_curvekeyframeselectedoverlay", "d_curvekeyframesemiselectedoverlay",
|
||||
"d_curvekeyframeweighted", "d_CustomSorting", "d_DefaultSorting", "d_EditCollider", "d_editcollision_16",
|
||||
"d_editconstraints_16", "d_editicon.sml", "d_endButton-On", "d_endButton", "d_eyeDropper.Large",
|
||||
"d_eyeDropper.sml", "d_Favorite", "d_FilterByLabel", "d_FilterByType", "d_FilterSelectedOnly",
|
||||
"d_FilterSelectedOnly@2x", "d_forward", "d_forward@2x", "d_GEAR", "d_Groove", "d_HorizontalSplit",
|
||||
"d_icon dropdown", "d_InspectorLock", "d_JointAngularLimits", "d_leftBracket", "d_Lighting",
|
||||
"d_LightmapEditor.WindowTitle", "d_LookDevCenterLight", "d_LookDevCenterLight@2x", "d_LookDevClose",
|
||||
"d_LookDevClose@2x", "d_LookDevEnvRotation", "d_LookDevEnvRotation@2x", "d_LookDevMirrorViews",
|
||||
"d_LookDevMirrorViews@2x", "d_LookDevMirrorViewsActive", "d_LookDevMirrorViewsActive@2x",
|
||||
"d_LookDevMirrorViewsInactive", "d_LookDevMirrorViewsInactive@2x", "d_LookDevObjRotation",
|
||||
"d_LookDevObjRotation@2x", "d_LookDevPaneOption", "d_LookDevPaneOption@2x", "d_LookDevResetEnv",
|
||||
"d_LookDevResetEnv@2x", "d_LookDevShadow", "d_LookDevShadow@2x", "d_LookDevSideBySide",
|
||||
"d_LookDevSideBySide@2x", "d_LookDevSingle1", "d_LookDevSingle1@2x", "d_LookDevSingle2",
|
||||
"d_LookDevSingle2@2x", "d_LookDevSplit", "d_LookDevSplit@2x", "d_LookDevZone", "d_LookDevZone@2x",
|
||||
"d_Mirror", "d_model large", "d_monologo", "d_MoveTool on", "d_MoveTool", "d_Navigation", "d_Occlusion",
|
||||
"d_P4_AddedLocal", "d_P4_AddedRemote", "d_P4_CheckOutLocal", "d_P4_CheckOutRemote", "d_P4_Conflicted",
|
||||
"d_P4_DeletedLocal", "d_P4_DeletedRemote", "d_P4_Local", "d_P4_LockedLocal", "d_P4_LockedRemote",
|
||||
"d_P4_OutOfSync", "d_Particle Effect", "d_PauseButton On", "d_PauseButton", "d_PlayButton On", "d_PlayButton",
|
||||
"d_PlayButtonProfile On", "d_PlayButtonProfile", "d_playLoopOff", "d_playLoopOn", "d_preAudioAutoPlayOff",
|
||||
"d_preAudioAutoPlayOn", "d_preAudioLoopOff", "d_preAudioLoopOn", "d_preAudioPlayOff", "d_preAudioPlayOn",
|
||||
"d_PreMatCube", "d_PreMatCylinder", "d_PreMatLight0", "d_PreMatLight1", "d_PreMatSphere", "d_PreMatTorus",
|
||||
"d_Preset.Context", "d_PreTextureAlpha", "d_PreTextureMipMapHigh", "d_PreTextureMipMapLow", "d_PreTextureRGB",
|
||||
"d_Profiler.Audio", "d_Profiler.CPU", "d_Profiler.FirstFrame", "d_Profiler.GPU", "d_Profiler.LastFrame",
|
||||
"d_Profiler.Memory", "d_Profiler.Network", "d_Profiler.NextFrame", "d_Profiler.Physics", "d_Profiler.PrevFrame",
|
||||
"d_Profiler.Record", "d_Profiler.Rendering", "d_Profiler.Video", "d_ProfilerColumn.WarningCount", "d_Project",
|
||||
"d_RectTool On", "d_RectTool", "d_RectTransformBlueprint", "d_RectTransformRaw", "d_redGroove", "d_Refresh",
|
||||
"d_renderdoc", "d_rightBracket", "d_RotateTool On", "d_RotateTool", "d_ScaleTool On", "d_ScaleTool",
|
||||
"d_SceneViewAlpha", "d_SceneViewAudio", "d_SceneViewFx", "d_SceneViewLighting", "d_SceneViewOrtho",
|
||||
"d_SceneViewRGB", "d_ScrollShadow", "d_Settings", "d_SettingsIcon", "d_SocialNetworks.FacebookShare",
|
||||
"d_SocialNetworks.LinkedInShare", "d_SocialNetworks.Tweet", "d_SocialNetworks.UDNOpen", "d_SpeedScale",
|
||||
"d_StepButton On", "d_StepButton", "d_StepLeftButton-On", "d_StepLeftButton", "d_SVN_AddedLocal",
|
||||
"d_SVN_Conflicted", "d_SVN_DeletedLocal", "d_SVN_Local", "d_SVN_LockedLocal", "d_SVN_OutOfSync", "d_tab_next",
|
||||
"d_tab_next@2x", "d_tab_prev", "d_tab_prev@2x", "d_TerrainInspector.TerrainToolLower On",
|
||||
"d_TerrainInspector.TerrainToolLowerAlt", "d_TerrainInspector.TerrainToolPlants On",
|
||||
"d_TerrainInspector.TerrainToolPlants", "d_TerrainInspector.TerrainToolPlantsAlt On",
|
||||
"d_TerrainInspector.TerrainToolPlantsAlt", "d_TerrainInspector.TerrainToolRaise On",
|
||||
"d_TerrainInspector.TerrainToolRaise", "d_TerrainInspector.TerrainToolSetheight On",
|
||||
"d_TerrainInspector.TerrainToolSetheight", "d_TerrainInspector.TerrainToolSetheightAlt On",
|
||||
"d_TerrainInspector.TerrainToolSetheightAlt", "d_TerrainInspector.TerrainToolSettings On",
|
||||
"d_TerrainInspector.TerrainToolSettings", "d_TerrainInspector.TerrainToolSmoothHeight On",
|
||||
"d_TerrainInspector.TerrainToolSmoothHeight", "d_TerrainInspector.TerrainToolSplat On",
|
||||
"d_TerrainInspector.TerrainToolSplat", "d_TerrainInspector.TerrainToolSplatAlt On",
|
||||
"d_TerrainInspector.TerrainToolSplatAlt", "d_TerrainInspector.TerrainToolTrees On",
|
||||
"d_TerrainInspector.TerrainToolTrees", "d_TerrainInspector.TerrainToolTreesAlt On",
|
||||
"d_TerrainInspector.TerrainToolTreesAlt", "d_TimelineDigIn", "d_TimelineEditModeMixOFF",
|
||||
"d_TimelineEditModeMixON", "d_TimelineEditModeReplaceOFF", "d_TimelineEditModeReplaceON",
|
||||
"d_TimelineEditModeRippleOFF", "d_TimelineEditModeRippleON", "d_TimelineSelector", "d_Toolbar Minus",
|
||||
"d_Toolbar Plus More", "d_Toolbar Plus", "d_ToolHandleCenter", "d_ToolHandleGlobal", "d_ToolHandleLocal",
|
||||
"d_ToolHandlePivot", "d_tranp", "d_TransformTool On", "d_TransformTool", "d_tree_icon", "d_tree_icon_branch",
|
||||
"d_tree_icon_branch_frond", "d_tree_icon_frond", "d_tree_icon_leaf", "d_TreeEditor.AddBranches",
|
||||
"d_TreeEditor.AddLeaves", "d_TreeEditor.Branch On", "d_TreeEditor.Branch", "d_TreeEditor.BranchFreeHand On",
|
||||
"d_TreeEditor.BranchFreeHand", "d_TreeEditor.BranchRotate On", "d_TreeEditor.BranchRotate",
|
||||
"d_TreeEditor.BranchScale On", "d_TreeEditor.BranchScale", "d_TreeEditor.BranchTranslate On",
|
||||
"d_TreeEditor.BranchTranslate", "d_TreeEditor.Distribution On", "d_TreeEditor.Distribution",
|
||||
"d_TreeEditor.Duplicate", "d_TreeEditor.Geometry On", "d_TreeEditor.Geometry", "d_TreeEditor.Leaf On",
|
||||
"d_TreeEditor.Leaf", "d_TreeEditor.LeafFreeHand On", "d_TreeEditor.LeafFreeHand", "d_TreeEditor.LeafRotate On",
|
||||
"d_TreeEditor.LeafRotate", "d_TreeEditor.LeafScale On", "d_TreeEditor.LeafScale",
|
||||
"d_TreeEditor.LeafTranslate On", "d_TreeEditor.LeafTranslate", "d_TreeEditor.Material On",
|
||||
"d_TreeEditor.Material", "d_TreeEditor.Refresh", "d_TreeEditor.Trash", "d_TreeEditor.Wind On",
|
||||
"d_TreeEditor.Wind", "d_UnityEditor.AnimationWindow", "d_UnityEditor.ConsoleWindow",
|
||||
"d_UnityEditor.DebugInspectorWindow", "d_UnityEditor.FindDependencies", "d_UnityEditor.GameView",
|
||||
"d_UnityEditor.HierarchyWindow", "d_UnityEditor.InspectorWindow", "d_UnityEditor.LookDevView",
|
||||
"d_UnityEditor.ProfilerWindow", "d_UnityEditor.SceneHierarchyWindow", "d_UnityEditor.SceneView",
|
||||
"d_UnityEditor.Timeline.TimelineWindow", "d_UnityEditor.VersionControl", "d_UnityLogo", "d_VerticalSplit",
|
||||
"d_ViewToolMove On", "d_ViewToolMove", "d_ViewToolOrbit On", "d_ViewToolOrbit", "d_ViewToolZoom On",
|
||||
"d_ViewToolZoom", "d_VisibilityOff", "d_VisibilityOn", "d_VUMeterTextureHorizontal", "d_VUMeterTextureVertical",
|
||||
"d_WaitSpin00", "d_WaitSpin01", "d_WaitSpin02", "d_WaitSpin03", "d_WaitSpin04", "d_WaitSpin05", "d_WaitSpin06",
|
||||
"d_WaitSpin07", "d_WaitSpin08", "d_WaitSpin09", "d_WaitSpin10", "d_WaitSpin11", "d_WelcomeScreen.AssetStoreLogo",
|
||||
"d_winbtn_graph", "d_winbtn_graph_close_h", "d_winbtn_graph_max_h", "d_winbtn_graph_min_h",
|
||||
"d_winbtn_mac_close", "d_winbtn_mac_close_a", "d_winbtn_mac_close_h", "d_winbtn_mac_inact", "d_winbtn_mac_max",
|
||||
"d_winbtn_mac_max_a", "d_winbtn_mac_max_h", "d_winbtn_mac_min", "d_winbtn_mac_min_a", "d_winbtn_mac_min_h",
|
||||
"d_winbtn_win_close", "d_winbtn_win_close_a", "d_winbtn_win_close_h", "d_winbtn_win_max", "d_winbtn_win_max_a",
|
||||
"d_winbtn_win_max_h", "d_winbtn_win_min", "d_winbtn_win_min_a", "d_winbtn_win_min_h", "d_winbtn_win_rest",
|
||||
"d_winbtn_win_rest_a", "d_winbtn_win_rest_h", "DefaultSorting", "EditCollider", "editcollision_16",
|
||||
"editconstraints_16", "editicon.sml", "endButton-On", "endButton", "eyeDropper.Large", "eyeDropper.sml",
|
||||
"Favorite", "FilterByLabel", "FilterByType", "FilterSelectedOnly", "FilterSelectedOnly@2x", "forward",
|
||||
"forward@2x", "GEAR", "Grid.BoxTool", "Grid.Default", "Grid.EraserTool", "Grid.FillTool", "Grid.MoveTool",
|
||||
"Grid.PaintTool", "Grid.PickingTool", "Grid.SelectTool", "Groove", "align_horizontally",
|
||||
"align_horizontally_center", "align_horizontally_center_active", "align_horizontally_left",
|
||||
"align_horizontally_left_active", "align_horizontally_right", "align_horizontally_right_active",
|
||||
"align_vertically", "align_vertically_bottom", "align_vertically_bottom_active", "align_vertically_center",
|
||||
"align_vertically_center_active", "align_vertically_top", "align_vertically_top_active",
|
||||
"d_align_horizontally", "d_align_horizontally_center", "d_align_horizontally_center_active",
|
||||
"d_align_horizontally_left", "d_align_horizontally_left_active", "d_align_horizontally_right",
|
||||
"d_align_horizontally_right_active", "d_align_vertically", "d_align_vertically_bottom",
|
||||
"d_align_vertically_bottom_active", "d_align_vertically_center", "d_align_vertically_center_active",
|
||||
"d_align_vertically_top", "d_align_vertically_top_active", "HorizontalSplit", "icon dropdown",
|
||||
"InspectorLock", "JointAngularLimits", "KnobCShape", "KnobCShapeMini", "leftBracket", "Lighting",
|
||||
"LightmapEditor.WindowTitle", "Lightmapping", "d_greenLight", "d_lightOff", "d_lightRim", "d_orangeLight",
|
||||
"d_redLight", "greenLight", "lightOff", "lightRim", "orangeLight", "redLight", "LockIcon-On", "LockIcon",
|
||||
"LookDevCenterLight", "LookDevCenterLightl@2x", "LookDevClose", "LookDevClose@2x", "LookDevEnvRotation",
|
||||
"LookDevEnvRotation@2x", "LookDevEyedrop", "LookDevLight", "LookDevLight@2x", "LookDevMirrorViewsActive",
|
||||
"LookDevMirrorViewsActive@2x", "LookDevMirrorViewsInactive", "LookDevMirrorViewsInactive@2x",
|
||||
"LookDevObjRotation", "LookDevObjRotation@2x", "LookDevPaneOption", "LookDevPaneOption@2x", "LookDevResetEnv",
|
||||
"LookDevResetEnv@2x", "LookDevShadow", "LookDevShadow@2x", "LookDevShadowFrame", "LookDevShadowFrame@2x",
|
||||
"LookDevSideBySide", "LookDevSideBySide@2x", "LookDevSingle1", "LookDevSingle1@2x", "LookDevSingle2",
|
||||
"LookDevSingle2@2x", "LookDevSplit", "LookDevSplit@2x", "LookDevZone", "LookDevZone@2x", "loop", "Mirror",
|
||||
"monologo", "MoveTool on", "MoveTool", "Navigation", "Occlusion", "P4_AddedLocal", "P4_AddedRemote",
|
||||
"P4_BlueLeftParenthesis", "P4_BlueRightParenthesis", "P4_CheckOutLocal", "P4_CheckOutRemote", "P4_Conflicted",
|
||||
"P4_DeletedLocal", "P4_DeletedRemote", "P4_Local", "P4_LockedLocal", "P4_LockedRemote", "P4_OutOfSync",
|
||||
"P4_RedLeftParenthesis", "P4_RedRightParenthesis", "P4_Updating", "PackageBadgeDelete", "PackageBadgeNew",
|
||||
"Particle Effect", "PauseButton On", "PauseButton", "PlayButton On", "PlayButton", "PlayButtonProfile On",
|
||||
"PlayButtonProfile", "playLoopOff", "playLoopOn", "playSpeed", "preAudioAutoPlayOff", "preAudioAutoPlayOn",
|
||||
"preAudioLoopOff", "preAudioLoopOn", "preAudioPlayOff", "preAudioPlayOn", "PreMatCube", "PreMatCylinder",
|
||||
"PreMatLight0", "PreMatLight1", "PreMatQuad", "PreMatSphere", "PreMatTorus", "Preset.Context", "PreTextureAlpha",
|
||||
"PreTextureArrayFirstSlice", "PreTextureArrayLastSlice", "PreTextureMipMapHigh", "PreTextureMipMapLow",
|
||||
"PreTextureRGB", "AreaLight Gizmo", "AreaLight Icon", "Assembly Icon", "AssetStore Icon", "AudioMixerView Icon",
|
||||
"AudioSource Gizmo", "Camera Gizmo", "CGProgram Icon", "ChorusFilter Icon", "CollabChanges Icon",
|
||||
"CollabChangesConflict Icon", "CollabChangesDeleted Icon", "CollabConflict Icon", "CollabCreate Icon",
|
||||
"CollabDeleted Icon", "CollabEdit Icon", "CollabExclude Icon", "CollabMoved Icon", "cs Script Icon",
|
||||
"d_AudioMixerView Icon", "d_CollabChanges Icon", "d_CollabChangesConflict Icon", "d_CollabChangesDeleted Icon",
|
||||
"d_CollabConflict Icon", "d_CollabCreate Icon", "d_CollabDeleted Icon", "d_CollabEdit Icon",
|
||||
"d_CollabExclude Icon", "d_CollabMoved Icon", "d_GridLayoutGroup Icon", "d_HorizontalLayoutGroup Icon",
|
||||
"d_Prefab Icon", "d_PrefabModel Icon", "d_PrefabVariant Icon", "d_VerticalLayoutGroup Icon",
|
||||
"DefaultSlate Icon", "DirectionalLight Gizmo", "DirectionalLight Icon", "DiscLight Gizmo", "DiscLight Icon",
|
||||
"dll Script Icon", "EchoFilter Icon", "Favorite Icon", "Folder Icon", "FolderEmpty Icon",
|
||||
"FolderFavorite Icon", "GameManager Icon", "GridBrush Icon", "HighPassFilter Icon",
|
||||
"HorizontalLayoutGroup Icon", "LensFlare Gizmo", "LightingDataAssetParent Icon", "LightProbeGroup Gizmo",
|
||||
"LightProbeProxyVolume Gizmo", "LowPassFilter Icon", "Main Light Gizmo", "MetaFile Icon",
|
||||
"Microphone Icon", "MuscleClip Icon", "ParticleSystem Gizmo", "PointLight Gizmo", "Prefab Icon",
|
||||
"PrefabModel Icon", "PrefabOverlayAdded Icon", "PrefabOverlayModified Icon", "PrefabOverlayRemoved Icon",
|
||||
"PrefabVariant Icon", "Projector Gizmo", "RaycastCollider Icon", "ReflectionProbe Gizmo",
|
||||
"ReverbFilter Icon", "SceneSet Icon", "Search Icon", "SoftlockProjectBrowser Icon", "SpeedTreeModel Icon",
|
||||
"SpotLight Gizmo", "Spotlight Icon", "SpriteCollider Icon", "sv_icon_dot0_pix16_gizmo",
|
||||
"sv_icon_dot10_pix16_gizmo", "sv_icon_dot11_pix16_gizmo", "sv_icon_dot12_pix16_gizmo",
|
||||
"sv_icon_dot13_pix16_gizmo", "sv_icon_dot14_pix16_gizmo", "sv_icon_dot15_pix16_gizmo",
|
||||
"sv_icon_dot1_pix16_gizmo", "sv_icon_dot2_pix16_gizmo", "sv_icon_dot3_pix16_gizmo",
|
||||
"sv_icon_dot4_pix16_gizmo", "sv_icon_dot5_pix16_gizmo", "sv_icon_dot6_pix16_gizmo",
|
||||
"sv_icon_dot7_pix16_gizmo", "sv_icon_dot8_pix16_gizmo", "sv_icon_dot9_pix16_gizmo",
|
||||
"AnimatorController Icon", "AnimatorState Icon", "AnimatorStateMachine Icon",
|
||||
"AnimatorStateTransition Icon", "BlendTree Icon", "AnimationWindowEvent Icon", "AudioMixerController Icon",
|
||||
"DefaultAsset Icon", "EditorSettings Icon", "AnyStateNode Icon", "HumanTemplate Icon",
|
||||
"LightingDataAsset Icon", "LightmapParameters Icon", "Preset Icon", "SceneAsset Icon",
|
||||
"SubstanceArchive Icon", "AssemblyDefinitionAsset Icon", "NavMeshAgent Icon", "NavMeshData Icon",
|
||||
"NavMeshObstacle Icon", "OffMeshLink Icon", "AnalyticsTracker Icon", "Animation Icon",
|
||||
"AnimationClip Icon", "AimConstraint Icon", "d_AimConstraint Icon", "d_LookAtConstraint Icon",
|
||||
"d_ParentConstraint Icon", "d_PositionConstraint Icon", "d_RotationConstraint Icon",
|
||||
"d_ScaleConstraint Icon", "LookAtConstraint Icon", "ParentConstraint Icon", "PositionConstraint Icon",
|
||||
"RotationConstraint Icon", "ScaleConstraint Icon", "Animator Icon", "AnimatorOverrideController Icon",
|
||||
"AreaEffector2D Icon", "AudioMixerGroup Icon", "AudioMixerSnapshot Icon", "AudioSpatializerMicrosoft Icon",
|
||||
"AudioChorusFilter Icon", "AudioClip Icon", "AudioDistortionFilter Icon", "AudioEchoFilter Icon",
|
||||
"AudioHighPassFilter Icon", "AudioListener Icon", "AudioLowPassFilter Icon", "AudioReverbFilter Icon",
|
||||
"AudioReverbZone Icon", "AudioSource Icon", "Avatar Icon", "AvatarMask Icon", "BillboardAsset Icon",
|
||||
"BillboardRenderer Icon", "BoxCollider Icon", "BoxCollider2D Icon", "BuoyancyEffector2D Icon", "Camera Icon",
|
||||
"Canvas Icon", "CanvasGroup Icon", "CanvasRenderer Icon", "CapsuleCollider Icon", "CapsuleCollider2D Icon",
|
||||
"CharacterController Icon", "CharacterJoint Icon", "CircleCollider2D Icon", "Cloth Icon",
|
||||
"CompositeCollider2D Icon", "ComputeShader Icon", "ConfigurableJoint Icon", "ConstantForce Icon",
|
||||
"ConstantForce2D Icon", "Cubemap Icon", "d_Canvas Icon", "d_CanvasGroup Icon", "d_CanvasRenderer Icon",
|
||||
"d_GameObject Icon", "d_LightProbeProxyVolume Icon", "d_ParticleSystem Icon", "d_ParticleSystemForceField Icon",
|
||||
"d_RectTransform Icon", "d_StreamingController Icon", "DistanceJoint2D Icon", "EdgeCollider2D Icon",
|
||||
"d_EventSystem Icon", "d_EventTrigger Icon", "d_Physics2DRaycaster Icon", "d_PhysicsRaycaster Icon",
|
||||
"d_StandaloneInputModule Icon", "d_TouchInputModule Icon", "EventSystem Icon", "EventTrigger Icon",
|
||||
"HoloLensInputModule Icon", "Physics2DRaycaster Icon", "PhysicsRaycaster Icon", "StandaloneInputModule Icon",
|
||||
"TouchInputModule Icon", "SpriteShapeRenderer Icon", "VisualTreeAsset Icon", "d_VisualEffect Icon",
|
||||
"d_VisualEffectAsset Icon", "VisualEffect Icon", "VisualEffectAsset Icon", "FixedJoint Icon",
|
||||
"FixedJoint2D Icon", "Flare Icon", "FlareLayer Icon", "Font Icon", "FrictionJoint2D Icon",
|
||||
"GameObject Icon", "Grid Icon", "GUILayer Icon", "GUISkin Icon", "GUIText Icon", "GUITexture Icon",
|
||||
"Halo Icon", "HingeJoint Icon", "HingeJoint2D Icon", "LensFlare Icon", "Light Icon", "LightProbeGroup Icon",
|
||||
"LightProbeProxyVolume Icon", "LightProbes Icon", "LineRenderer Icon", "LODGroup Icon", "Material Icon",
|
||||
"Mesh Icon", "MeshCollider Icon", "MeshFilter Icon", "MeshRenderer Icon", "Motion Icon", "MovieTexture Icon",
|
||||
"NetworkAnimator Icon", "NetworkDiscovery Icon", "NetworkIdentity Icon", "NetworkLobbyManager Icon",
|
||||
"NetworkLobbyPlayer Icon", "NetworkManager Icon", "NetworkManagerHUD Icon", "NetworkMigrationManager Icon",
|
||||
"NetworkProximityChecker Icon", "NetworkStartPosition Icon", "NetworkTransform Icon",
|
||||
"NetworkTransformChild Icon", "NetworkTransformVisualizer Icon", "NetworkView Icon", "OcclusionArea Icon",
|
||||
"OcclusionPortal Icon", "ParticleSystem Icon", "ParticleSystemForceField Icon", "PhysicMaterial Icon",
|
||||
"PhysicsMaterial2D Icon", "PlatformEffector2D Icon", "d_PlayableDirector Icon", "PlayableDirector Icon",
|
||||
"PointEffector2D Icon", "PolygonCollider2D Icon", "ProceduralMaterial Icon", "Projector Icon",
|
||||
"RectTransform Icon", "ReflectionProbe Icon", "RelativeJoint2D Icon", "d_SortingGroup Icon",
|
||||
"SortingGroup Icon", "RenderTexture Icon", "Rigidbody Icon", "Rigidbody2D Icon", "ScriptableObject Icon",
|
||||
"Shader Icon", "ShaderVariantCollection Icon", "SkinnedMeshRenderer Icon", "Skybox Icon", "SliderJoint2D Icon",
|
||||
"TrackedPoseDriver Icon", "SphereCollider Icon", "SpringJoint Icon", "SpringJoint2D Icon", "Sprite Icon",
|
||||
"SpriteMask Icon", "SpriteRenderer Icon", "StreamingController Icon", "StyleSheet Icon", "SurfaceEffector2D Icon",
|
||||
"TargetJoint2D Icon", "Terrain Icon", "TerrainCollider Icon", "TerrainData Icon", "TextAsset Icon",
|
||||
"TextMesh Icon", "Texture Icon", "Texture2D Icon", "Tile Icon", "Tilemap Icon", "TilemapCollider2D Icon",
|
||||
"TilemapRenderer Icon", "d_TimelineAsset Icon", "TimelineAsset Icon", "TrailRenderer Icon", "Transform Icon",
|
||||
"SpriteAtlas Icon", "AspectRatioFitter Icon", "Button Icon", "CanvasScaler Icon", "ContentSizeFitter Icon",
|
||||
"d_AspectRatioFitter Icon", "d_CanvasScaler Icon", "d_ContentSizeFitter Icon", "d_FreeformLayoutGroup Icon",
|
||||
"d_GraphicRaycaster Icon", "d_GridLayoutGroup Icon", "d_HorizontalLayoutGroup Icon", "d_LayoutElement Icon",
|
||||
"d_PhysicalResolution Icon", "d_ScrollViewArea Icon", "d_SelectionList Icon", "d_SelectionListItem Icon",
|
||||
"d_SelectionListTemplate Icon", "d_VerticalLayoutGroup Icon", "Dropdown Icon", "FreeformLayoutGroup Icon",
|
||||
"GraphicRaycaster Icon", "GridLayoutGroup Icon", "HorizontalLayoutGroup Icon", "Image Icon", "InputField Icon",
|
||||
"LayoutElement Icon", "Mask Icon", "Outline Icon", "PositionAsUV1 Icon", "RawImage Icon", "RectMask2D Icon",
|
||||
"Scrollbar Icon", "ScrollRect Icon", "Selectable Icon", "Shadow Icon", "Slider Icon", "Text Icon", "Toggle Icon",
|
||||
"ToggleGroup Icon", "VerticalLayoutGroup Icon", "VideoClip Icon", "VideoPlayer Icon", "VisualEffect Icon",
|
||||
"VisualEffectAsset Icon", "WheelCollider Icon", "WheelJoint2D Icon", "WindZone Icon",
|
||||
"SpatialMappingCollider Icon", "SpatialMappingRenderer Icon", "WorldAnchor Icon", "UssScript Icon",
|
||||
"UxmlScript Icon", "VerticalLayoutGroup Icon", "VideoEffect Icon", "VisualEffect Gizmo",
|
||||
"VisualEffectAsset Icon", "AnchorBehaviour Icon", "AnchorInputListenerBehaviour Icon",
|
||||
"AnchorStageBehaviour Icon", "CloudRecoBehaviour Icon", "ContentPlacementBehaviour Icon",
|
||||
"ContentPositioningBehaviour Icon", "CylinderTargetBehaviour Icon", "d_AnchorBehaviour Icon",
|
||||
"d_AnchorInputListenerBehaviour Icon", "d_AnchorStageBehaviour Icon", "d_CloudRecoBehaviour Icon",
|
||||
"d_ContentPlacementBehaviour Icon", "d_ContentPositioningBehaviour Icon", "d_CylinderTargetBehaviour Icon",
|
||||
"d_ImageTargetBehaviour Icon", "d_MidAirPositionerBehaviour Icon", "d_ModelTargetBehaviour Icon",
|
||||
"d_MultiTargetBehaviour Icon", "d_ObjectTargetBehaviour Icon", "d_PlaneFinderBehaviour Icon",
|
||||
"d_UserDefinedTargetBuildingBehaviour Icon", "d_VirtualButtonBehaviour Icon", "d_VuforiaBehaviour Icon",
|
||||
"d_VuMarkBehaviour Icon", "d_WireframeBehaviour Icon", "ImageTargetBehaviour Icon",
|
||||
"MidAirPositionerBehaviour Icon", "ModelTargetBehaviour Icon", "MultiTargetBehaviour Icon",
|
||||
"ObjectTargetBehaviour Icon", "PlaneFinderBehaviour Icon", "UserDefinedTargetBuildingBehaviour Icon",
|
||||
"VirtualButtonBehaviour Icon", "VuforiaBehaviour Icon", "VuMarkBehaviour Icon", "WireframeBehaviour Icon",
|
||||
"WindZone Gizmo", "Profiler.Audio", "Profiler.CPU", "Profiler.FirstFrame", "Profiler.GlobalIllumination",
|
||||
"Profiler.GPU", "Profiler.Instrumentation", "Profiler.LastFrame", "Profiler.Memory", "Profiler.NetworkMessages",
|
||||
"Profiler.NetworkOperations", "Profiler.NextFrame", "Profiler.Physics", "Profiler.Physics2D",
|
||||
"Profiler.PrevFrame", "Profiler.Record", "Profiler.Rendering", "Profiler.UI", "Profiler.UIDetails",
|
||||
"Profiler.Video", "ProfilerColumn.WarningCount", "Project", "RectTool On", "RectTool", "RectTransformBlueprint",
|
||||
"RectTransformRaw", "redGroove", "Refresh", "renderdoc", "rightBracket", "RotateTool On", "RotateTool",
|
||||
"SaveActive", "SaveFromPlay", "SavePassive", "ScaleTool On", "ScaleTool", "SceneLoadIn", "SceneLoadOut",
|
||||
"SceneSave", "SceneSaveGrey", "SceneViewAlpha", "SceneViewAudio", "SceneViewFx", "SceneViewLighting",
|
||||
"SceneViewOrtho", "SceneViewRGB", "ScrollShadow", "Settings", "SettingsIcon", "SocialNetworks.FacebookShare",
|
||||
"SocialNetworks.LinkedInShare", "SocialNetworks.Tweet", "SocialNetworks.UDNLogo", "SocialNetworks.UDNOpen",
|
||||
"SoftlockInline", "SpeedScale", "StateMachineEditor.ArrowTip", "StateMachineEditor.ArrowTipSelected",
|
||||
"StateMachineEditor.Background", "StateMachineEditor.State", "StateMachineEditor.StateHover",
|
||||
"StateMachineEditor.StateSelected", "StateMachineEditor.StateSub", "StateMachineEditor.StateSubHover",
|
||||
"StateMachineEditor.StateSubSelected", "StateMachineEditor.UpButton", "StateMachineEditor.UpButtonHover",
|
||||
"StepButton On", "StepButton", "StepLeftButton-On", "StepLeftButton", "sticky_arrow", "sticky_p4", "sticky_skin",
|
||||
"sv_icon_dot0_sml", "sv_icon_dot10_sml", "sv_icon_dot11_sml", "sv_icon_dot12_sml", "sv_icon_dot13_sml",
|
||||
"sv_icon_dot14_sml", "sv_icon_dot15_sml", "sv_icon_dot1_sml", "sv_icon_dot2_sml", "sv_icon_dot3_sml",
|
||||
"sv_icon_dot4_sml", "sv_icon_dot5_sml", "sv_icon_dot6_sml", "sv_icon_dot7_sml", "sv_icon_dot8_sml",
|
||||
"sv_icon_dot9_sml", "sv_icon_name0", "sv_icon_name1", "sv_icon_name2", "sv_icon_name3", "sv_icon_name4",
|
||||
"sv_icon_name5", "sv_icon_name6", "sv_icon_name7", "sv_icon_none", "sv_label_0", "sv_label_1", "sv_label_2",
|
||||
"sv_label_3", "sv_label_4", "sv_label_5", "sv_label_6", "sv_label_7", "SVN_AddedLocal", "SVN_Conflicted",
|
||||
"SVN_DeletedLocal", "SVN_Local", "SVN_LockedLocal", "SVN_OutOfSync", "tab_next", "tab_next@2x", "tab_prev",
|
||||
"tab_prev@2x", "TerrainInspector.TerrainToolLower On", "TerrainInspector.TerrainToolLower",
|
||||
"TerrainInspector.TerrainToolLowerAlt", "TerrainInspector.TerrainToolPlants On",
|
||||
"TerrainInspector.TerrainToolPlants", "TerrainInspector.TerrainToolPlantsAlt On",
|
||||
"TerrainInspector.TerrainToolPlantsAlt", "TerrainInspector.TerrainToolRaise On",
|
||||
"TerrainInspector.TerrainToolRaise", "TerrainInspector.TerrainToolSculpt On",
|
||||
"TerrainInspector.TerrainToolSculpt", "TerrainInspector.TerrainToolSetheight On",
|
||||
"TerrainInspector.TerrainToolSetheight", "TerrainInspector.TerrainToolSetheightAlt On",
|
||||
"TerrainInspector.TerrainToolSetheightAlt", "TerrainInspector.TerrainToolSettings On",
|
||||
"TerrainInspector.TerrainToolSettings", "TerrainInspector.TerrainToolSmoothHeight On",
|
||||
"TerrainInspector.TerrainToolSmoothHeight", "TerrainInspector.TerrainToolSplat On",
|
||||
"TerrainInspector.TerrainToolSplat", "TerrainInspector.TerrainToolSplatAlt On",
|
||||
"TerrainInspector.TerrainToolSplatAlt", "TerrainInspector.TerrainToolTrees On",
|
||||
"TerrainInspector.TerrainToolTrees", "TerrainInspector.TerrainToolTreesAlt On",
|
||||
"TerrainInspector.TerrainToolTreesAlt", "TestFailed", "TestIgnored", "TestInconclusive", "TestNormal",
|
||||
"TestPassed", "TestStopwatch", "TimelineClipBG", "TimelineClipFG", "TimelineDigIn", "TimelineEditModeMixOFF",
|
||||
"TimelineEditModeMixON", "TimelineEditModeReplaceOFF", "TimelineEditModeReplaceON", "TimelineEditModeRippleOFF",
|
||||
"TimelineEditModeRippleON", "TimelineSelector", "Toolbar Minus", "Toolbar Plus More", "Toolbar Plus",
|
||||
"ToolHandleCenter", "ToolHandleGlobal", "ToolHandleLocal", "ToolHandlePivot", "tranp", "TransformTool On",
|
||||
"TransformTool", "tree_icon", "tree_icon_branch", "tree_icon_branch_frond", "tree_icon_frond", "tree_icon_leaf",
|
||||
"TreeEditor.AddBranches", "TreeEditor.AddLeaves", "TreeEditor.Branch On", "TreeEditor.Branch",
|
||||
"TreeEditor.BranchFreeHand On", "TreeEditor.BranchFreeHand", "TreeEditor.BranchRotate On",
|
||||
"TreeEditor.BranchRotate", "TreeEditor.BranchScale On", "TreeEditor.BranchScale",
|
||||
"TreeEditor.BranchTranslate On", "TreeEditor.BranchTranslate", "TreeEditor.Distribution On",
|
||||
"TreeEditor.Distribution", "TreeEditor.Duplicate", "TreeEditor.Geometry On", "TreeEditor.Geometry",
|
||||
"TreeEditor.Leaf On", "TreeEditor.Leaf", "TreeEditor.LeafFreeHand On", "TreeEditor.LeafFreeHand",
|
||||
"TreeEditor.LeafRotate On", "TreeEditor.LeafRotate", "TreeEditor.LeafScale On", "TreeEditor.LeafScale",
|
||||
"TreeEditor.LeafTranslate On", "TreeEditor.LeafTranslate", "TreeEditor.Material On", "TreeEditor.Material",
|
||||
"TreeEditor.Refresh", "TreeEditor.Trash", "TreeEditor.Wind On", "TreeEditor.Wind", "UnityEditor.AnimationWindow",
|
||||
"UnityEditor.ConsoleWindow", "UnityEditor.DebugInspectorWindow", "UnityEditor.FindDependencies",
|
||||
"UnityEditor.GameView", "UnityEditor.Graphs.AnimatorControllerTool", "UnityEditor.HierarchyWindow",
|
||||
"UnityEditor.InspectorWindow", "UnityEditor.LookDevView", "UnityEditor.ProfilerWindow",
|
||||
"UnityEditor.SceneHierarchyWindow", "UnityEditor.SceneView", "UnityEditor.Timeline.TimelineWindow",
|
||||
"UnityEditor.VersionControl", "UnityLogo", "UnityLogoLarge", "UpArrow", "vcs_add", "vcs_branch", "vcs_change",
|
||||
"vcs_check", "vcs_delete", "vcs_document", "vcs_edit", "vcs_incoming", "vcs_integrate", "vcs_local", "vcs_lock",
|
||||
"vcs_refresh", "vcs_sync", "vcs_unresolved", "vcs_update", "VerticalSplit", "ViewToolMove On", "ViewToolMove",
|
||||
"ViewToolOrbit On", "ViewToolOrbit", "ViewToolZoom On", "ViewToolZoom", "VisibilityOff", "VisibilityOn",
|
||||
"VisualEffect Gizmo", "VUMeterTextureHorizontal", "VUMeterTextureVertical", "WaitSpin00", "WaitSpin01",
|
||||
"WaitSpin02", "WaitSpin03", "WaitSpin04", "WaitSpin05", "WaitSpin06", "WaitSpin07", "WaitSpin08", "WaitSpin09",
|
||||
"WaitSpin10", "WaitSpin11", "WelcomeScreen.AssetStoreLogo", "winbtn_graph", "winbtn_graph_close_h",
|
||||
"winbtn_graph_max_h", "winbtn_graph_min_h", "winbtn_mac_close", "winbtn_mac_close_a", "winbtn_mac_close_h",
|
||||
"winbtn_mac_inact", "winbtn_mac_max", "winbtn_mac_max_a", "winbtn_mac_max_h", "winbtn_mac_min",
|
||||
"winbtn_mac_min_a", "winbtn_mac_min_h", "winbtn_win_close", "winbtn_win_close_a", "winbtn_win_close_h",
|
||||
"winbtn_win_max", "winbtn_win_max_a", "winbtn_win_max_h", "winbtn_win_min", "winbtn_win_min_a",
|
||||
"winbtn_win_min_h", "winbtn_win_rest", "winbtn_win_rest_a", "winbtn_win_rest_h",
|
||||
"AvatarInspector/RightFingersIk", "AvatarInspector/LeftFingersIk", "AvatarInspector/RightFeetIk",
|
||||
"AvatarInspector/LeftFeetIk", "AvatarInspector/RightFingers", "AvatarInspector/LeftFingers",
|
||||
"AvatarInspector/RightArm", "AvatarInspector/LeftArm", "AvatarInspector/RightLeg", "AvatarInspector/LeftLeg",
|
||||
"AvatarInspector/Head", "AvatarInspector/Torso", "AvatarInspector/MaskEditor_Root",
|
||||
"AvatarInspector/BodyPartPicker", "AvatarInspector/BodySIlhouette", "boo Script Icon", "js Script Icon",
|
||||
"EyeDropper.Large", "AboutWindow.MainHeader", "AgeiaLogo", "MonoLogo", "PlayButtonProfile Anim",
|
||||
"StepButton Anim", "PauseButton Anim", "PlayButton Anim", "MoveTool On", "Icon Dropdown",
|
||||
"AvatarInspector/DotSelection", "AvatarInspector/DotFrameDotted", "AvatarInspector/DotFrame",
|
||||
"AvatarInspector/DotFill", "AvatarInspector/RightHandZoom", "AvatarInspector/LeftHandZoom",
|
||||
"AvatarInspector/HeadZoom", "AvatarInspector/RightLeg", "AvatarInspector/LeftLeg",
|
||||
"AvatarInspector/RightFingers", "AvatarInspector/RightArm", "AvatarInspector/LeftFingers",
|
||||
"AvatarInspector/LeftArm", "AvatarInspector/Head", "AvatarInspector/Torso",
|
||||
"AvatarInspector/RightHandZoomSilhouette", "AvatarInspector/LeftHandZoomSilhouette",
|
||||
"AvatarInspector/HeadZoomSilhouette", "AvatarInspector/BodySilhouette", "lightMeter/redLight",
|
||||
"lightMeter/orangeLight", "lightMeter/lightRim", "lightMeter/greenLight", "SceneviewAudio",
|
||||
"SceneviewLighting", "TerrainInspector.TerrainToolSetHeight", "AS Badge New", "AS Badge Move",
|
||||
"AS Badge Delete", "WelcomeScreen.UnityAnswersLogo", "WelcomeScreen.UnityForumLogo",
|
||||
"WelcomeScreen.UnityBasicsLogo", "WelcomeScreen.VideoTutLogo", "WelcomeScreen.MainHeader", "Icon Dropdown",
|
||||
"PrefabNormal Icon", "PrefabNormal Icon", "BuildSettings.BlackBerry.Small", "BuildSettings.Tizen.Small",
|
||||
"BuildSettings.XBox360.Small", "BuildSettings.PS3.Small", "BuildSettings.SamsungTV.Small",
|
||||
"BuildSettings.BlackBerry", "BuildSettings.Tizen", "BuildSettings.XBox360", "BuildSettings.PS3",
|
||||
"BuildSettings.SamsungTV"
|
||||
};
|
||||
|
||||
#endregion
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -240,11 +240,24 @@ public static class EditorSpriteSaveInfo
|
||||
|
||||
private static List<Sprite> LoadValidSprites(string atlasName)
|
||||
{
|
||||
return _atlasMap[atlasName]
|
||||
.Where(File.Exists)
|
||||
.Select(p => AssetDatabase.LoadAssetAtPath<Sprite>(p))
|
||||
.Where(s => s != null)
|
||||
.ToList();
|
||||
if (_atlasMap.TryGetValue(atlasName, out List<string> spriteList))
|
||||
{
|
||||
var allSprites = new List<Sprite>();
|
||||
|
||||
foreach (var assetPath in spriteList.Where(File.Exists))
|
||||
{
|
||||
// 加载所有子图
|
||||
var sprites = AssetDatabase.LoadAllAssetsAtPath(assetPath)
|
||||
.OfType<Sprite>()
|
||||
.Where(s => s != null)
|
||||
.ToArray();
|
||||
|
||||
allSprites.AddRange(sprites);
|
||||
}
|
||||
|
||||
return allSprites;
|
||||
}
|
||||
return new List<Sprite>();
|
||||
}
|
||||
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
|
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93fb9d2834752b649891dba19cba5169
|
||||
guid: fb7e9c820d4ba2b4d836ffc849b55067
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
8
Editor/ToolBarExtension.meta
Normal file
8
Editor/ToolBarExtension.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93fb9d2834752b649891dba19cba5169
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
69
Editor/ToolBarExtension/LocalizationDropdownField.cs
Normal file
69
Editor/ToolBarExtension/LocalizationDropdownField.cs
Normal file
@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using AlicizaX.Localization.Runtime;
|
||||
using AlicizaX;
|
||||
using Paps.UnityToolbarExtenderUIToolkit;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
[MainToolbarElement("LocalizationDropdownField", alignment: ToolbarAlign.Right, order: 0)]
|
||||
public class LocalizationDropdownField : IMGUIContainer
|
||||
{
|
||||
private static GUIContent appConfigBtContent;
|
||||
|
||||
private static string[] _languageTypeNames;
|
||||
|
||||
public void InitializeElement()
|
||||
{
|
||||
var nameArray = Enum.GetNames(typeof(Language));
|
||||
_languageTypeNames = new string[nameArray.Length - 1];
|
||||
for (int i = 1; i < nameArray.Length; i++)
|
||||
{
|
||||
var name = nameArray[i];
|
||||
_languageTypeNames[i - 1] = name;
|
||||
}
|
||||
|
||||
appConfigBtContent =
|
||||
EditorGUIUtility.TrTextContentWithIcon("", "",
|
||||
"Settings");
|
||||
onGUIHandler = MyGUIMethod;
|
||||
}
|
||||
|
||||
private void MyGUIMethod()
|
||||
{
|
||||
GUILayout.BeginHorizontal();
|
||||
string title = _languageTypeNames[GetPrefsIndex()];
|
||||
appConfigBtContent.text = title;
|
||||
if (EditorGUILayout.DropdownButton(appConfigBtContent, FocusType.Passive, EditorStyles.toolbarPopup, GUILayout.MaxWidth(120)))
|
||||
{
|
||||
DrawEditorToolDropdownMenus();
|
||||
}
|
||||
|
||||
GUILayout.Space(5);
|
||||
GUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
static void DrawEditorToolDropdownMenus()
|
||||
{
|
||||
int index = GetPrefsIndex();
|
||||
GenericMenu popMenu = new GenericMenu();
|
||||
for (int i = 0; i < _languageTypeNames.Length; i++)
|
||||
{
|
||||
var selected = index == i;
|
||||
var toolAttr = _languageTypeNames[i];
|
||||
popMenu.AddItem(new GUIContent(toolAttr), selected, menuIdx => { ClickToolsSubmenu((int)menuIdx); }, i);
|
||||
}
|
||||
|
||||
popMenu.ShowAsContext();
|
||||
}
|
||||
|
||||
static void ClickToolsSubmenu(int menuIdx)
|
||||
{
|
||||
EditorPrefs.SetInt(LocalizationComponent.PrefsKey, menuIdx + 1);
|
||||
}
|
||||
|
||||
static int GetPrefsIndex()
|
||||
{
|
||||
return EditorPrefs.GetInt(LocalizationComponent.PrefsKey, 1) - 1;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2295b86f78274a84a63dc65ab4a69cb1
|
||||
timeCreated: 1742364662
|
@ -23,9 +23,7 @@ namespace AlicizaX.Editor.Extension
|
||||
|
||||
public void InitializeElement()
|
||||
{
|
||||
appConfigBtContent =
|
||||
EditorGUIUtility.TrTextContentWithIcon("Res:", "配置App运行时所需DataTable/Config/Procedure",
|
||||
"Settings");
|
||||
appConfigBtContent = EditorGUIUtility.TrTextContentWithIcon("Res:", "配置App运行时资源模式", "Settings");
|
||||
onGUIHandler = MyGUIMethod;
|
||||
}
|
||||
|
40
Editor/Toolbar/ByAttributeMainToolbarElementRepository.cs
Normal file
40
Editor/Toolbar/ByAttributeMainToolbarElementRepository.cs
Normal file
@ -0,0 +1,40 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class ByAttributeMainToolbarElementRepository : IMainToolbarElementRepository
|
||||
{
|
||||
public MainToolbarElement[] GetAll()
|
||||
{
|
||||
return TypeCache.GetTypesWithAttribute<MainToolbarElementAttribute>()
|
||||
.Where(type => IsValidVisualElementType(type))
|
||||
.Select(type => GetMainToolbarElementFromType(type))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private MainToolbarElement GetMainToolbarElementFromType(Type type)
|
||||
{
|
||||
var elementInstance = (VisualElement)Activator.CreateInstance(type);
|
||||
var attribute = type.GetCustomAttribute<MainToolbarElementAttribute>();
|
||||
|
||||
if (string.IsNullOrEmpty(elementInstance.name))
|
||||
elementInstance.name = elementInstance.GetType().Name;
|
||||
|
||||
return new MainToolbarElement(attribute.Id, elementInstance, attribute.Alignment,
|
||||
attribute.Order, attribute.UseRecommendedStyles);
|
||||
}
|
||||
|
||||
private bool IsValidVisualElementType(Type type)
|
||||
{
|
||||
var visualElementType = typeof(VisualElement);
|
||||
|
||||
return visualElementType != type &&
|
||||
visualElementType.IsAssignableFrom(type) &&
|
||||
!type.IsAbstract;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9e664729ffc0507499365cb1b3393b91
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Editor/Toolbar/ControlPanelWindow.meta
Normal file
8
Editor/Toolbar/ControlPanelWindow.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e5d6770a557fcef47bfab9c1562f972c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,207 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
public class MainToolbarControlPanelWindow : EditorWindow
|
||||
{
|
||||
private const string NATIVE_ELEMENTS_CONTAINER_NAME = "UnityNativeElementsContainer";
|
||||
private const string NATIVE_ELEMENTS_FOLDOUT_TEXT = "Unity Native Elements";
|
||||
|
||||
private const string SINGLE_ELEMENTS_CONTAINER_NAME = "SingleElementsContainer";
|
||||
private const string SINGLE_ELEMENTS_FOLDOUT_TEXT = "Single Elements";
|
||||
|
||||
private const string GROUP_ELEMENTS_CONTAINER_NAME = "GroupElementsContainer";
|
||||
private const string GROUP_ELEMENTS_FOLDOUT_TEXT = "Groups";
|
||||
|
||||
private const float MAIN_CONTAINER_PADDING_TOP = 5;
|
||||
|
||||
private OrganizationalFoldableContainer _nativeElementsContainer;
|
||||
private OrganizationalFoldableContainer _singleElementsContainer;
|
||||
private OrganizationalFoldableContainer _groupElementsContainer;
|
||||
private MainToolbarElementController[] _controllers;
|
||||
|
||||
private Button _resetOverridesButton;
|
||||
|
||||
private VisualElement _noElementsMessageElement;
|
||||
private VisualElement _windowContainer;
|
||||
|
||||
public static void OpenWindow()
|
||||
{
|
||||
var window = GetWindow<MainToolbarControlPanelWindow>();
|
||||
|
||||
window.titleContent = new GUIContent("Main Toolbar Control Panel");
|
||||
}
|
||||
|
||||
private void CreateGUI()
|
||||
{
|
||||
MainToolbarAutomaticExtender.OnAddedCustomContainersToToolbar += Refresh;
|
||||
MainToolbarAutomaticExtender.OnRefresh += Refresh;
|
||||
|
||||
BuildFixedGUI();
|
||||
SetDefaultView();
|
||||
|
||||
if (MainToolbar.IsAvailable)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
MainToolbarAutomaticExtender.OnAddedCustomContainersToToolbar -= Refresh;
|
||||
MainToolbarAutomaticExtender.OnRefresh -= Refresh;
|
||||
}
|
||||
|
||||
private void Refresh()
|
||||
{
|
||||
BuildDynamicGUI();
|
||||
SetCorrespondingView();
|
||||
}
|
||||
|
||||
private void BuildFixedGUI()
|
||||
{
|
||||
_windowContainer = GetContainer();
|
||||
|
||||
_resetOverridesButton = new Button(GlobalActions.ResetOverridesIfUserAccepts);
|
||||
_resetOverridesButton.text = "Reset Overrides";
|
||||
|
||||
_singleElementsContainer = new OrganizationalFoldableContainer(
|
||||
SINGLE_ELEMENTS_CONTAINER_NAME, SINGLE_ELEMENTS_FOLDOUT_TEXT);
|
||||
_groupElementsContainer = new OrganizationalFoldableContainer(
|
||||
GROUP_ELEMENTS_CONTAINER_NAME, GROUP_ELEMENTS_FOLDOUT_TEXT);
|
||||
_nativeElementsContainer = new OrganizationalFoldableContainer(
|
||||
NATIVE_ELEMENTS_CONTAINER_NAME, NATIVE_ELEMENTS_FOLDOUT_TEXT);
|
||||
|
||||
_noElementsMessageElement = CreateNoElementsMessageElement();
|
||||
|
||||
rootVisualElement.Add(_resetOverridesButton);
|
||||
rootVisualElement.Add(_windowContainer);
|
||||
}
|
||||
|
||||
private void SetDefaultView()
|
||||
{
|
||||
_windowContainer.Add(_noElementsMessageElement);
|
||||
}
|
||||
|
||||
private void SetCorrespondingView()
|
||||
{
|
||||
if(_controllers.Length > 0)
|
||||
{
|
||||
if(_windowContainer.Contains(_noElementsMessageElement))
|
||||
_windowContainer.Remove(_noElementsMessageElement);
|
||||
|
||||
if (!_windowContainer.Contains(_singleElementsContainer))
|
||||
{
|
||||
_windowContainer.Add(_singleElementsContainer);
|
||||
_windowContainer.Add(_groupElementsContainer);
|
||||
_windowContainer.Add(_nativeElementsContainer);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_windowContainer.Contains(_singleElementsContainer))
|
||||
{
|
||||
_windowContainer.Remove(_singleElementsContainer);
|
||||
_windowContainer.Remove(_groupElementsContainer);
|
||||
_windowContainer.Remove(_nativeElementsContainer);
|
||||
}
|
||||
|
||||
if (!_windowContainer.Contains(_noElementsMessageElement))
|
||||
_windowContainer.Add(_noElementsMessageElement);
|
||||
}
|
||||
}
|
||||
|
||||
private void BuildDynamicGUI()
|
||||
{
|
||||
_controllers = CreateControllers();
|
||||
|
||||
var controllersOfNativeElements = _controllers
|
||||
.Where(controller => controller.HoldsANativeElement);
|
||||
var controllersOfGroups = _controllers
|
||||
.Where(controller => controller.HoldsAGroup);
|
||||
var controllersOfSingleElements = _controllers
|
||||
.Where(controller => !controller.HoldsAGroup && !controller.HoldsANativeElement)
|
||||
.Where(controller => SingleControllerIsNotInsideAGroupController(controller, controllersOfGroups));
|
||||
|
||||
_singleElementsContainer.SetControllers(controllersOfSingleElements);
|
||||
_groupElementsContainer.SetControllers(controllersOfGroups);
|
||||
_nativeElementsContainer.SetControllers(controllersOfNativeElements);
|
||||
}
|
||||
|
||||
private static bool SingleControllerIsNotInsideAGroupController(MainToolbarElementController controller, IEnumerable<MainToolbarElementController> controllersOfGroups)
|
||||
{
|
||||
foreach (var groupController in controllersOfGroups)
|
||||
if (groupController.ContainsSubController(controller.Id))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private VisualElement GetContainer()
|
||||
{
|
||||
var scrollView = new ScrollView(ScrollViewMode.Vertical);
|
||||
|
||||
scrollView.style.paddingTop = MAIN_CONTAINER_PADDING_TOP;
|
||||
|
||||
return scrollView;
|
||||
}
|
||||
|
||||
private MainToolbarElementController[] CreateControllers()
|
||||
{
|
||||
return GetOverridableElements()
|
||||
.OrderBy(overridableElement => overridableElement.Id)
|
||||
.Select(overridableElement => new MainToolbarElementController(
|
||||
overridableElement,
|
||||
ServicesAndRepositories.MainToolbarElementOverridesRepository,
|
||||
GetSubElementsIfAny(overridableElement))
|
||||
)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private OverridableElement[] GetSubElementsIfAny(OverridableElement overridableElement)
|
||||
{
|
||||
if(overridableElement.VisualElement is GroupElement)
|
||||
{
|
||||
return MainToolbarAutomaticExtender.GetElementsOfGroup(overridableElement.Id)
|
||||
.Select(el => new OverridableElement(
|
||||
el.Id,
|
||||
el.VisualElement,
|
||||
false)
|
||||
)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return new OverridableElement[0];
|
||||
}
|
||||
|
||||
private OverridableElement[] GetOverridableElements()
|
||||
{
|
||||
var nativeElements = MainToolbarAutomaticExtender.NativeElements
|
||||
.Select(nativeElement => new OverridableElement(
|
||||
nativeElement.Id,
|
||||
nativeElement.VisualElement,
|
||||
true
|
||||
)
|
||||
);
|
||||
|
||||
var customElements = MainToolbarAutomaticExtender.CustomMainToolbarElements
|
||||
.Concat(MainToolbarAutomaticExtender.GroupElements)
|
||||
.Select(mainToolbarElement => new OverridableElement(
|
||||
mainToolbarElement.Id,
|
||||
mainToolbarElement.VisualElement,
|
||||
false
|
||||
)
|
||||
);
|
||||
|
||||
return nativeElements.Concat(customElements)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private VisualElement CreateNoElementsMessageElement()
|
||||
{
|
||||
return new HelpBox("No main toolbar elements were found. To use the automatic toolbar extender define a main toolbar element. See the docs.", HelpBoxMessageType.Warning);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fef14479cdf8f5a41bb3b7f4b442484e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,187 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class MainToolbarElementController : VisualElement
|
||||
{
|
||||
private const string FOLDOUT_STATE_SAVE_KEY_BASE = "main-toolbar-element-controller:foldout-state:";
|
||||
private const float LEFT_PADDING_SINGLE = 19;
|
||||
private const float RIGHT_PADDING = 10;
|
||||
|
||||
private readonly IMainToolbarElementOverrideRepository _overridesRepository;
|
||||
private Label _label;
|
||||
private Button _button;
|
||||
private Image _buttonIconImage;
|
||||
private Foldout _foldout;
|
||||
|
||||
private StyleColor _defaultButtonColor;
|
||||
private List<MainToolbarElementController> _subControllers = new List<MainToolbarElementController>();
|
||||
|
||||
public string Id { get; }
|
||||
public VisualElement ControlledVisualElement { get; }
|
||||
public bool HoldsAGroup => _foldout != null;
|
||||
public bool HoldsANativeElement { get; private set; }
|
||||
|
||||
public MainToolbarElementController(OverridableElement overridableElement,
|
||||
IMainToolbarElementOverrideRepository overridesRepository, params OverridableElement[] subElements)
|
||||
{
|
||||
Id = overridableElement.Id;
|
||||
ControlledVisualElement = overridableElement.VisualElement;
|
||||
HoldsANativeElement = overridableElement.IsNative;
|
||||
name = Id + "-Controller";
|
||||
_overridesRepository = overridesRepository;
|
||||
|
||||
_buttonIconImage = new Image();
|
||||
|
||||
style.flexDirection = FlexDirection.Row;
|
||||
style.justifyContent = Justify.SpaceBetween;
|
||||
style.paddingRight = RIGHT_PADDING;
|
||||
|
||||
_label = CreateLabel();
|
||||
_button = CreateButton();
|
||||
|
||||
_defaultButtonColor = _button.style.backgroundColor;
|
||||
|
||||
UpdateButtonStatus(VisibleValueOrDefault());
|
||||
BuildAsGroupOrSingle(subElements);
|
||||
}
|
||||
|
||||
private string GetFullFoldoutStateSaveKey() => FOLDOUT_STATE_SAVE_KEY_BASE + Id;
|
||||
|
||||
private void SaveFoldoutState(ChangeEvent<bool> eventArgs)
|
||||
{
|
||||
UserSettingsPrefs.SetBool(GetFullFoldoutStateSaveKey(), eventArgs.newValue);
|
||||
}
|
||||
|
||||
private bool GetSavedFoldoutState()
|
||||
{
|
||||
return UserSettingsPrefs.GetBool(GetFullFoldoutStateSaveKey(), false);
|
||||
}
|
||||
|
||||
public bool ContainsSubController(string id)
|
||||
{
|
||||
return _subControllers.Any(controller => controller.Id == id);
|
||||
}
|
||||
|
||||
private void BuildAsGroupOrSingle(OverridableElement[] subElements)
|
||||
{
|
||||
if (subElements.Length > 0)
|
||||
BuildFoldout(subElements);
|
||||
else
|
||||
BuildSingleElement();
|
||||
}
|
||||
|
||||
private void BuildSingleElement()
|
||||
{
|
||||
style.paddingLeft = LEFT_PADDING_SINGLE;
|
||||
|
||||
Add(_label);
|
||||
Add(_button);
|
||||
}
|
||||
|
||||
private void BuildFoldout(OverridableElement[] subElements)
|
||||
{
|
||||
_foldout = new Foldout() { text = _label.text };
|
||||
|
||||
foreach (var overridable in subElements)
|
||||
{
|
||||
var subController = new MainToolbarElementController(overridable, _overridesRepository);
|
||||
|
||||
_subControllers.Add(subController);
|
||||
|
||||
_foldout.Add(subController);
|
||||
}
|
||||
|
||||
_foldout.value = GetSavedFoldoutState();
|
||||
_foldout.RegisterCallback<ChangeEvent<bool>>(SaveFoldoutState);
|
||||
_foldout.style.flexGrow = 1;
|
||||
|
||||
Add(_foldout);
|
||||
Add(_button);
|
||||
}
|
||||
|
||||
private bool VisibleValueOrDefault()
|
||||
{
|
||||
var possibleOverride = _overridesRepository.Get(Id);
|
||||
|
||||
if (possibleOverride == null)
|
||||
return CurrentDisplayValueAsBool();
|
||||
|
||||
var overrideValue = possibleOverride.Value;
|
||||
|
||||
return overrideValue.Visible;
|
||||
}
|
||||
|
||||
private Label CreateLabel()
|
||||
{
|
||||
var label = new Label(Id);
|
||||
|
||||
label.style.alignSelf = Align.Center;
|
||||
|
||||
return label;
|
||||
}
|
||||
|
||||
private Button CreateButton()
|
||||
{
|
||||
var button = new Button(ChangeVisibilityValue);
|
||||
|
||||
button.Add(_buttonIconImage);
|
||||
|
||||
button.tooltip = "Change the visibility of element with id " + Id;
|
||||
|
||||
button.style.alignSelf = Align.FlexStart;
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
private Texture IconByVisibilityValue(bool visible)
|
||||
{
|
||||
if (visible)
|
||||
return Icons.VisibilityOnOverrideIcon;
|
||||
|
||||
return Icons.VisibilityOffOverrideIcon;
|
||||
}
|
||||
|
||||
private void ChangeVisibilityValue()
|
||||
{
|
||||
var currentOverrideValue = _overridesRepository.Get(Id);
|
||||
|
||||
bool newValue;
|
||||
|
||||
if (currentOverrideValue == null)
|
||||
newValue = !CurrentDisplayValueAsBool();
|
||||
else
|
||||
newValue = !currentOverrideValue.Value.Visible;
|
||||
|
||||
_overridesRepository.Save(new MainToolbarElementOverride(Id, newValue));
|
||||
UpdateButtonStatus(newValue);
|
||||
|
||||
MainToolbarAutomaticExtender.Refresh();
|
||||
}
|
||||
|
||||
private bool CurrentDisplayValueAsBool()
|
||||
{
|
||||
if (ControlledVisualElement.style.display == DisplayStyle.None)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
private void UpdateButtonStatus(bool visible)
|
||||
{
|
||||
_buttonIconImage.image = IconByVisibilityValue(visible);
|
||||
_button.style.backgroundColor = GetButtonColor(visible);
|
||||
}
|
||||
|
||||
private StyleColor GetButtonColor(bool visible)
|
||||
{
|
||||
if (visible)
|
||||
return _defaultButtonColor;
|
||||
else
|
||||
return new StyleColor(Color.black);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae80166256b03484a9bfc1ad9c4cc0dc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,51 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class OrganizationalFoldableContainer : Box
|
||||
{
|
||||
private static readonly Color ORGANIZATIONAL_FOLDABLE_CONTAINER_BORDER_COLOR = new Color(153f / 255f, 153f / 255f, 153f / 255f);
|
||||
private const string FOLDOUT_STATE_SAVE_KEY_BASE = "organizational-foldable-container:foldout-state:";
|
||||
|
||||
private Foldout _foldout;
|
||||
private string _id;
|
||||
|
||||
public OrganizationalFoldableContainer(string containerId, string foldoutText)
|
||||
{
|
||||
_id = containerId;
|
||||
name = containerId;
|
||||
style.borderTopColor = ORGANIZATIONAL_FOLDABLE_CONTAINER_BORDER_COLOR;
|
||||
style.borderTopWidth = 1;
|
||||
|
||||
_foldout = new Foldout() { text = foldoutText };
|
||||
_foldout.value = GetSavedFoldoutState();
|
||||
_foldout.RegisterCallback<ChangeEvent<bool>>(SaveFoldoutState);
|
||||
|
||||
Add(_foldout);
|
||||
}
|
||||
|
||||
private string GetFullFoldoutStateSaveKey() => FOLDOUT_STATE_SAVE_KEY_BASE + _id;
|
||||
|
||||
private void SaveFoldoutState(ChangeEvent<bool> eventArgs)
|
||||
{
|
||||
UserSettingsPrefs.SetBool(GetFullFoldoutStateSaveKey(), eventArgs.newValue);
|
||||
}
|
||||
|
||||
private bool GetSavedFoldoutState()
|
||||
{
|
||||
return UserSettingsPrefs.GetBool(GetFullFoldoutStateSaveKey(), false);
|
||||
}
|
||||
|
||||
public void SetControllers(IEnumerable<MainToolbarElementController> controllers)
|
||||
{
|
||||
_foldout.Clear();
|
||||
|
||||
foreach (var controller in controllers)
|
||||
{
|
||||
_foldout.Add(controller);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9ac00cb9059df7e43b1c2ed433ce61cc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
18
Editor/Toolbar/ControlPanelWindow/OverridableElement.cs
Normal file
18
Editor/Toolbar/ControlPanelWindow/OverridableElement.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal readonly struct OverridableElement
|
||||
{
|
||||
public string Id { get; }
|
||||
public VisualElement VisualElement { get; }
|
||||
public bool IsNative { get; }
|
||||
|
||||
public OverridableElement(string id, VisualElement visualElement, bool isNative)
|
||||
{
|
||||
Id = id;
|
||||
VisualElement = visualElement;
|
||||
IsNative = isNative;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/ControlPanelWindow/OverridableElement.cs.meta
Normal file
11
Editor/Toolbar/ControlPanelWindow/OverridableElement.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 542f1fb68120090489ba1613162eb17b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Editor/Toolbar/Extensions.meta
Normal file
8
Editor/Toolbar/Extensions.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f0a074f24b9c98d488341e6258c0c0b0
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
17
Editor/Toolbar/Extensions/EditorWindowExtensions.cs
Normal file
17
Editor/Toolbar/Extensions/EditorWindowExtensions.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
public static class EditorWindowExtensions
|
||||
{
|
||||
public static void ShowAsDropdownForMainToolbar(this EditorWindow window, Rect activatorRect, Vector2 size)
|
||||
{
|
||||
window.ShowAsDropDown(activatorRect, size);
|
||||
|
||||
var rect = GUIUtility.GUIToScreenRect(activatorRect);
|
||||
rect.y += activatorRect.size.y;
|
||||
window.position = new Rect(rect.position, window.position.size);
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Extensions/EditorWindowExtensions.cs.meta
Normal file
11
Editor/Toolbar/Extensions/EditorWindowExtensions.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3333a000c60ebce4aa038ee0945d0072
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Editor/Toolbar/GroupDefinitions.meta
Normal file
8
Editor/Toolbar/GroupDefinitions.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1a83afb20ef0f5f40b22a93ff124fe1f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
39
Editor/Toolbar/GroupDefinitions/GroupDefinition.cs
Normal file
39
Editor/Toolbar/GroupDefinitions/GroupDefinition.cs
Normal file
@ -0,0 +1,39 @@
|
||||
using System.Linq;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal readonly struct GroupDefinition
|
||||
{
|
||||
public string GroupId { get; }
|
||||
public string GroupName { get; }
|
||||
public ToolbarAlign Alignment { get; }
|
||||
public int Order { get; }
|
||||
public string[] ToolbarElementsIds { get; }
|
||||
|
||||
public GroupDefinition(string groupId, string groupName, ToolbarAlign alignment, int order, string[] toolbarElementsIds)
|
||||
{
|
||||
GroupId = groupId;
|
||||
GroupName = string.IsNullOrEmpty(groupName) ? groupId : groupName;
|
||||
Alignment = alignment;
|
||||
Order = order;
|
||||
ToolbarElementsIds = toolbarElementsIds;
|
||||
}
|
||||
|
||||
public bool AreEquals(GroupDefinition other)
|
||||
{
|
||||
return GroupId == other.GroupId &&
|
||||
GroupName == other.GroupName &&
|
||||
Alignment == other.Alignment &&
|
||||
Order == other.Order &&
|
||||
AreEquals(ToolbarElementsIds, other.ToolbarElementsIds);
|
||||
}
|
||||
|
||||
private bool AreEquals(string[] types, string[] types2)
|
||||
{
|
||||
if(types.Length != types2.Length)
|
||||
return false;
|
||||
|
||||
return types.All(typeName => types2.Contains(typeName));
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/GroupDefinitions/GroupDefinition.cs.meta
Normal file
11
Editor/Toolbar/GroupDefinitions/GroupDefinition.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8e3f2e82a96ef3246860b2861fa19b15
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
92
Editor/Toolbar/GroupDefinitions/GroupDropdownWindowPopup.cs
Normal file
92
Editor/Toolbar/GroupDefinitions/GroupDropdownWindowPopup.cs
Normal file
@ -0,0 +1,92 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class GroupDropdownWindowPopup : EditorWindow
|
||||
{
|
||||
private VisualElement[] _groupElements;
|
||||
private ScrollView _scrollView;
|
||||
|
||||
public void Initialize(VisualElement[] groupElements)
|
||||
{
|
||||
_groupElements = groupElements;
|
||||
hideFlags = HideFlags.DontSave;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
AssemblyReloadEvents.beforeAssemblyReload += Close;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
AssemblyReloadEvents.beforeAssemblyReload -= Close;
|
||||
}
|
||||
|
||||
private void CreateGUI()
|
||||
{
|
||||
_scrollView = new ScrollView(ScrollViewMode.Vertical);
|
||||
_scrollView.contentContainer.style.alignContent = Align.Center;
|
||||
_scrollView.contentContainer.style.alignItems = Align.Center;
|
||||
_scrollView.horizontalScrollerVisibility = ScrollerVisibility.Hidden;
|
||||
|
||||
foreach (var groupElement in _groupElements)
|
||||
{
|
||||
var container = CreateGroupElementContainer();
|
||||
container.Add(groupElement);
|
||||
groupElement.style.flexWrap = Wrap.Wrap;
|
||||
container.style.display = groupElement.style.display;
|
||||
_scrollView.Add(container);
|
||||
}
|
||||
|
||||
var baseContainer = CreateBaseContainer();
|
||||
baseContainer.Add(_scrollView);
|
||||
|
||||
rootVisualElement.Add(baseContainer);
|
||||
}
|
||||
|
||||
private VisualElement CreateBaseContainer()
|
||||
{
|
||||
return new VisualElement()
|
||||
{
|
||||
style =
|
||||
{
|
||||
flexGrow = 1,
|
||||
borderBottomColor = Color.black,
|
||||
borderTopColor = Color.black,
|
||||
borderLeftColor = Color.black,
|
||||
borderRightColor = Color.black,
|
||||
borderBottomWidth = 2,
|
||||
borderTopWidth = 2,
|
||||
borderLeftWidth = 2,
|
||||
borderRightWidth = 2,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private VisualElement CreateGroupElementContainer()
|
||||
{
|
||||
return new Box()
|
||||
{
|
||||
style =
|
||||
{
|
||||
alignContent = Align.Center,
|
||||
alignItems = Align.Center,
|
||||
flexDirection = FlexDirection.Row,
|
||||
flexGrow = 1,
|
||||
width = Length.Percent(100),
|
||||
height = Length.Auto(),
|
||||
justifyContent = Justify.Center,
|
||||
borderTopColor = Color.black,
|
||||
borderTopWidth = 1,
|
||||
paddingTop = 3f,
|
||||
paddingBottom = 3f,
|
||||
paddingLeft = 8,
|
||||
paddingRight = 8,
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8509c9dbf1627b74c9e521402a3de28b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,144 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
using PopupWindow = UnityEditor.PopupWindow;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal static class GroupDropdownWindowPopupManager
|
||||
{
|
||||
private const string POPUP_WINDOW_CONTENT_FIELD_NAME = "m_WindowContent";
|
||||
private static readonly string[] SPECIAL_EDITOR_WINDOW_TYPE_NAMES =
|
||||
{
|
||||
"UnityEditor.UIElements.Debugger.UIElementsDebugger",
|
||||
"UnityEditor.UIElements.EditorMenuExtensions+ContextMenu",
|
||||
"UnityEditor.ObjectSelector",
|
||||
"UnityEditor.Search.SearchPickerWindow"
|
||||
};
|
||||
private static readonly string[] SPECIAL_POPUP_WINDOW_CONTENT_TYPE_NAMES =
|
||||
{
|
||||
"UnityEditor.UIElements.EditorGenericDropdownMenuWindowContent"
|
||||
};
|
||||
|
||||
private static FieldInfo _popupWindowContentField;
|
||||
private static Type[] _subWindowTypes = new Type[0];
|
||||
private static Type[] _specialWindowTypes = new Type[0];
|
||||
private static List<GroupDropdownWindowPopup> _windows = new List<GroupDropdownWindowPopup>();
|
||||
|
||||
static GroupDropdownWindowPopupManager()
|
||||
{
|
||||
_popupWindowContentField = typeof(PopupWindow)
|
||||
.GetField(POPUP_WINDOW_CONTENT_FIELD_NAME,
|
||||
BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
|
||||
InitializeSpecialWindowTypes();
|
||||
LoadSubWindowTypes();
|
||||
EditorApplication.update += Update;
|
||||
}
|
||||
|
||||
private static void LoadSubWindowTypes()
|
||||
{
|
||||
_subWindowTypes = TypeCache.GetTypesWithAttribute<GroupPopupSubWindowAttribute>()
|
||||
.Where(type => IsValidSubWindowType(type))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private static void InitializeSpecialWindowTypes()
|
||||
{
|
||||
var typeList = new List<Type>();
|
||||
|
||||
typeList.AddRange(TypeCache.GetTypesDerivedFrom<EditorWindow>()
|
||||
.Where(type => SPECIAL_EDITOR_WINDOW_TYPE_NAMES.Contains(type.Name) || SPECIAL_EDITOR_WINDOW_TYPE_NAMES.Contains(type.FullName)));
|
||||
|
||||
typeList.AddRange(TypeCache.GetTypesDerivedFrom<PopupWindowContent>()
|
||||
.Where(type => SPECIAL_POPUP_WINDOW_CONTENT_TYPE_NAMES.Contains(type.Name) || SPECIAL_POPUP_WINDOW_CONTENT_TYPE_NAMES.Contains(type.FullName)));
|
||||
|
||||
_specialWindowTypes = typeList.Where(t => t != null).ToArray();
|
||||
}
|
||||
|
||||
private static bool IsValidSubWindowType(Type type)
|
||||
{
|
||||
return typeof(EditorWindow).IsAssignableFrom(type) ||
|
||||
typeof(PopupWindowContent).IsAssignableFrom(type);
|
||||
}
|
||||
|
||||
private static bool ContainsValidPopupWindowContent(EditorWindow window)
|
||||
{
|
||||
if(window is PopupWindow popupWindow)
|
||||
{
|
||||
var popupContent = _popupWindowContentField.GetValue(popupWindow) as PopupWindowContent;
|
||||
|
||||
var popupContentSpecificType = popupContent.GetType();
|
||||
|
||||
return _subWindowTypes.Contains(popupContentSpecificType) || _specialWindowTypes.Contains(popupContentSpecificType);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void Update()
|
||||
{
|
||||
if (_windows.Count == 0)
|
||||
return;
|
||||
|
||||
if (EditorWindow.focusedWindow == null || !FocusedWindowIsValid())
|
||||
CloseAll();
|
||||
else if(_windows.Contains(EditorWindow.focusedWindow))
|
||||
{
|
||||
var focusedWindow = EditorWindow.focusedWindow;
|
||||
|
||||
var downMostWindow = _windows.Last();
|
||||
|
||||
while(downMostWindow != focusedWindow)
|
||||
{
|
||||
_windows.Remove(downMostWindow);
|
||||
downMostWindow.Close();
|
||||
downMostWindow = _windows.Last();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void CloseAll()
|
||||
{
|
||||
foreach(var window in _windows)
|
||||
{
|
||||
if(window != null)
|
||||
window.Close();
|
||||
}
|
||||
|
||||
_windows.Clear();
|
||||
}
|
||||
|
||||
private static bool FocusedWindowIsValid()
|
||||
{
|
||||
return _windows.Contains(EditorWindow.focusedWindow) ||
|
||||
_subWindowTypes.Contains(EditorWindow.focusedWindow.GetType()) ||
|
||||
_specialWindowTypes.Contains(EditorWindow.focusedWindow.GetType()) ||
|
||||
ContainsValidPopupWindowContent(EditorWindow.focusedWindow);
|
||||
}
|
||||
|
||||
public static void Show(Rect activatorRect, VisualElement[] elements)
|
||||
{
|
||||
var window = ScriptableObject.CreateInstance<GroupDropdownWindowPopup>();
|
||||
|
||||
var rect = GUIUtility.GUIToScreenRect(activatorRect);
|
||||
rect.y += activatorRect.size.y;
|
||||
window.position = new Rect(rect.position, window.position.size);
|
||||
|
||||
_windows.Add(window);
|
||||
|
||||
window.Initialize(elements);
|
||||
|
||||
#if UNITY_EDITOR_WIN
|
||||
window.ShowPopup();
|
||||
#elif UNITY_EDITOR_OSX
|
||||
window.ShowAsDropdownForMainToolbar(activatorRect, window.position.size);
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 88333c3cc209cb143bc93891e1664b41
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
29
Editor/Toolbar/GroupDefinitions/GroupElement.cs
Normal file
29
Editor/Toolbar/GroupDefinitions/GroupElement.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using System.Linq;
|
||||
using UnityEditor.Toolbars;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class GroupElement : EditorToolbarDropdown
|
||||
{
|
||||
private VisualElement[] _groupedElements;
|
||||
public VisualElement[] GroupedElements => _groupedElements.ToArray();
|
||||
|
||||
public GroupElement(string name)
|
||||
{
|
||||
this.name = name;
|
||||
text = name;
|
||||
clicked += ShowDropdown;
|
||||
}
|
||||
|
||||
public void Initialize(VisualElement[] groupedElements)
|
||||
{
|
||||
_groupedElements = groupedElements;
|
||||
}
|
||||
|
||||
private void ShowDropdown()
|
||||
{
|
||||
GroupDropdownWindowPopupManager.Show(worldBound, _groupedElements);
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/GroupDefinitions/GroupElement.cs.meta
Normal file
11
Editor/Toolbar/GroupDefinitions/GroupElement.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c782e5c3d1d2bd7499b358c6aa5703cd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
||||
using System;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
|
||||
public class GroupPopupSubWindowAttribute : Attribute
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f6e542ea23caed94c92fab5ac0d0f1c8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,7 @@
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal interface IGroupDefinitionRepository
|
||||
{
|
||||
public GroupDefinition[] GetAll();
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 15164a1a1815ea04c9ae72e65e0a9fe9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
|
||||
internal class MainToolbarElementDropdownAttribute : PropertyAttribute
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ffb57bb326f1c1247b6e1341c5caecf3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,84 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(MainToolbarElementDropdownAttribute))]
|
||||
internal class MainToolbarElementDropdownDrawer : PropertyDrawer
|
||||
{
|
||||
private string _groupId;
|
||||
private IEnumerable<string> _mainToolbarElementsIds;
|
||||
private IEnumerable<string> _groupIds;
|
||||
private IEnumerable<string> _allIds;
|
||||
|
||||
public override VisualElement CreatePropertyGUI(SerializedProperty property)
|
||||
{
|
||||
_groupId = property.serializedObject.FindProperty("_groupId").stringValue;
|
||||
|
||||
CacheAllIds();
|
||||
|
||||
var availableIds = GetAvailableIds();
|
||||
|
||||
var popupField = new PopupField<string>(
|
||||
choices: availableIds,
|
||||
0);
|
||||
|
||||
Restore(property, availableIds, popupField);
|
||||
|
||||
popupField.RegisterCallback<ChangeEvent<string>>(ev =>
|
||||
{
|
||||
property.stringValue = ev.newValue;
|
||||
property.serializedObject.ApplyModifiedProperties();
|
||||
ScriptableGroupDefinitionHelper.Refresh();
|
||||
CacheAllIds();
|
||||
var newAvailableIds = GetAvailableIds();
|
||||
newAvailableIds.Add(property.stringValue);
|
||||
popupField.choices = newAvailableIds.OrderBy(id => id).ToList();
|
||||
});
|
||||
|
||||
return popupField;
|
||||
}
|
||||
|
||||
private void Restore(SerializedProperty property, List<string> availableIds, PopupField<string> popupField)
|
||||
{
|
||||
if (string.IsNullOrEmpty(property.stringValue))
|
||||
{
|
||||
property.stringValue = popupField.value;
|
||||
property.serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_allIds.Contains(property.stringValue))
|
||||
{
|
||||
availableIds.Add(property.stringValue);
|
||||
popupField.choices = availableIds.OrderBy(id => id).ToList();
|
||||
popupField.SetValueWithoutNotify(property.stringValue);
|
||||
}
|
||||
else
|
||||
popupField.SetValueWithoutNotify("");
|
||||
}
|
||||
}
|
||||
|
||||
private void CacheAllIds()
|
||||
{
|
||||
_mainToolbarElementsIds = MainToolbarAutomaticExtender.CustomMainToolbarElements.Select(el => el.Id);
|
||||
_groupIds = ScriptableGroupDefinitionHelper.GetGroupIds();
|
||||
|
||||
_allIds = _mainToolbarElementsIds
|
||||
.Concat(_groupIds);
|
||||
}
|
||||
|
||||
private List<string> GetAvailableIds()
|
||||
{
|
||||
var unusedMainToolbarElementIds = ScriptableGroupDefinitionHelper.GetUnusedMainToolbarElementIds(_mainToolbarElementsIds);
|
||||
var unusedGroupIds = ScriptableGroupDefinitionHelper.GetEligibleGroupChildsFor(_groupId);
|
||||
|
||||
return unusedMainToolbarElementIds
|
||||
.Concat(unusedGroupIds)
|
||||
.OrderBy(id => id)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cb51db686d5e79d4295bc1a510395e2c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
52
Editor/Toolbar/GroupDefinitions/ScriptableGroupDefinition.cs
Normal file
52
Editor/Toolbar/GroupDefinitions/ScriptableGroupDefinition.cs
Normal file
@ -0,0 +1,52 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
[CreateAssetMenu(menuName = ToolInfo.EDITOR_MENU_BASE + "/Group Definition")]
|
||||
public sealed class ScriptableGroupDefinition : ScriptableObject
|
||||
{
|
||||
[SerializeField]
|
||||
[Tooltip("Id of group. It must be unique")]
|
||||
private string _groupId;
|
||||
[SerializeField]
|
||||
[Tooltip("Text to display in group element dropdown")]
|
||||
private string _groupName;
|
||||
[SerializeField]
|
||||
[Tooltip("Alignment when used as root element. Ignored inside other groups")]
|
||||
private ToolbarAlign _alignment;
|
||||
[Tooltip("Order when used as root element. Ignored inside other groups. Order of elements inside a group is determined by ToolbarElementsIds array elements order.")]
|
||||
[SerializeField] private int _order;
|
||||
[SerializeField]
|
||||
[Tooltip("Elements ids of this group. Order of elements in array determines the order in which the elements will be displayed")]
|
||||
[MainToolbarElementDropdown] private string[] _toolbarElementsIds;
|
||||
|
||||
public string GroupId => _groupId;
|
||||
public string GroupName => _groupName;
|
||||
public ToolbarAlign Alignment => _alignment;
|
||||
public int Order => _order;
|
||||
public string[] ToolbarElementsIds => _toolbarElementsIds == null ? new string[0] : _toolbarElementsIds;
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
SetEqualValuesToEmptyInOrder();
|
||||
}
|
||||
|
||||
private void SetEqualValuesToEmptyInOrder()
|
||||
{
|
||||
for (int i = 0; i < _toolbarElementsIds.Length; i++)
|
||||
{
|
||||
var value = _toolbarElementsIds[i];
|
||||
for (int j = 0; j < _toolbarElementsIds.Length; j++)
|
||||
{
|
||||
if (i == j)
|
||||
continue;
|
||||
|
||||
if (_toolbarElementsIds[j] == value)
|
||||
{
|
||||
_toolbarElementsIds[j] = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6df7c06c2de586e41bb0c33bfd80766f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,63 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal static class ScriptableGroupDefinitionHelper
|
||||
{
|
||||
private static ScriptableGroupDefinition[] _projectGroupDefinitions;
|
||||
|
||||
static ScriptableGroupDefinitionHelper()
|
||||
{
|
||||
LoadProjectGroupDefinitions();
|
||||
|
||||
EditorApplication.projectChanged += OnProjectChange;
|
||||
}
|
||||
|
||||
public static void Refresh()
|
||||
{
|
||||
LoadProjectGroupDefinitions();
|
||||
}
|
||||
|
||||
private static void LoadProjectGroupDefinitions()
|
||||
{
|
||||
var paths = AssetDatabase.FindAssets("t:" + nameof(ScriptableGroupDefinition))
|
||||
.Select(guid => AssetDatabase.GUIDToAssetPath(guid));
|
||||
|
||||
_projectGroupDefinitions = paths
|
||||
.Select(path => AssetDatabase.LoadAssetAtPath<ScriptableGroupDefinition>(path))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
public static IEnumerable<string> GetUnusedMainToolbarElementIds(IEnumerable<string> allIds)
|
||||
{
|
||||
return allIds.Except(GetUsedMainToolbarElementIds());
|
||||
}
|
||||
|
||||
private static IEnumerable<string> GetUsedMainToolbarElementIds()
|
||||
{
|
||||
return _projectGroupDefinitions
|
||||
.SelectMany(groupDefinition => groupDefinition.ToolbarElementsIds);
|
||||
}
|
||||
|
||||
public static IEnumerable<string> GetGroupIds()
|
||||
{
|
||||
return _projectGroupDefinitions.Select(g => g.GroupId);
|
||||
}
|
||||
|
||||
public static IEnumerable<string> GetEligibleGroupChildsFor(string groupId)
|
||||
{
|
||||
var allUsedIds = _projectGroupDefinitions.SelectMany(g => g.ToolbarElementsIds);
|
||||
|
||||
return _projectGroupDefinitions.Select(g => g.GroupId)
|
||||
.Where(id => !allUsedIds.Contains(id))
|
||||
.Where(id => id != groupId);
|
||||
}
|
||||
|
||||
private static void OnProjectChange()
|
||||
{
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 12a0d38180307184e87497e8fbb28985
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,38 @@
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class ScriptableObjectGroupDefinitionRepository : IGroupDefinitionRepository
|
||||
{
|
||||
public GroupDefinition[] GetAll()
|
||||
{
|
||||
var paths = AssetDatabase.FindAssets("t:" + nameof(ScriptableGroupDefinition))
|
||||
.Select(guid => AssetDatabase.GUIDToAssetPath(guid));
|
||||
|
||||
return paths
|
||||
.Select(path => AssetDatabase.LoadAssetAtPath<ScriptableGroupDefinition>(path))
|
||||
.Where(scriptableGroupDefinition => !string.IsNullOrEmpty(scriptableGroupDefinition.GroupId))
|
||||
.GroupBy(scriptableGroupDefinition => scriptableGroupDefinition.GroupId)
|
||||
.Select(scriptableGroupDefinition => scriptableGroupDefinition.First())
|
||||
.Select(scriptableGroupDefinition => new GroupDefinition(
|
||||
scriptableGroupDefinition.GroupId,
|
||||
scriptableGroupDefinition.GroupName,
|
||||
scriptableGroupDefinition.Alignment,
|
||||
scriptableGroupDefinition.Order,
|
||||
FilterIds(scriptableGroupDefinition)
|
||||
)
|
||||
)
|
||||
.Where(m => m.ToolbarElementsIds.Length > 0)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private string[] FilterIds(ScriptableGroupDefinition scriptableGroupDefinition)
|
||||
{
|
||||
return scriptableGroupDefinition.ToolbarElementsIds
|
||||
.Where(id => !string.IsNullOrEmpty(id))
|
||||
.Distinct()
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 225393fc4d1ad744c972f3a876dce3df
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Editor/Toolbar/Helpers.meta
Normal file
8
Editor/Toolbar/Helpers.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: efeeca875749f6d46905cc399ed76bae
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
34
Editor/Toolbar/Helpers/GlobalActions.cs
Normal file
34
Editor/Toolbar/Helpers/GlobalActions.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal static class GlobalActions
|
||||
{
|
||||
public static void ResetOverrides()
|
||||
{
|
||||
ServicesAndRepositories.MainToolbarElementOverridesRepository.Clear();
|
||||
MainToolbarAutomaticExtender.Refresh();
|
||||
}
|
||||
|
||||
public static void ResetOverridesIfUserAccepts()
|
||||
{
|
||||
ShowDialog(
|
||||
"Reset Overrides",
|
||||
"You are about to reset all toolbar elements overrides.\nAre you sure you want to continue?",
|
||||
"Reset",
|
||||
"Cancel",
|
||||
ResetOverrides
|
||||
);
|
||||
}
|
||||
|
||||
public static void ShowDialog(string title, string message, string okMessage,
|
||||
string cancelMessage, Action onOk = null, Action onCancel = null)
|
||||
{
|
||||
if (EditorUtility.DisplayDialog(title, message, okMessage, cancelMessage))
|
||||
onOk?.Invoke();
|
||||
else
|
||||
onCancel?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Helpers/GlobalActions.cs.meta
Normal file
11
Editor/Toolbar/Helpers/GlobalActions.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bfe995773a109214db8292f8ce74d342
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
18
Editor/Toolbar/Helpers/Icons.cs
Normal file
18
Editor/Toolbar/Helpers/Icons.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal static class Icons
|
||||
{
|
||||
private static readonly Lazy<Texture> VISIBILITY_ON_OVERRIDE_ICON_LAZY =
|
||||
new Lazy<Texture>(() => EditorGUIUtility.IconContent("animationvisibilitytoggleon").image);
|
||||
|
||||
private static readonly Lazy<Texture> VISIBILITY_OFF_OVERRIDE_ICON_LAZY =
|
||||
new Lazy<Texture>(() => EditorGUIUtility.IconContent("animationvisibilitytoggleoff").image);
|
||||
|
||||
public static Texture VisibilityOnOverrideIcon => VISIBILITY_ON_OVERRIDE_ICON_LAZY.Value;
|
||||
public static Texture VisibilityOffOverrideIcon => VISIBILITY_OFF_OVERRIDE_ICON_LAZY.Value;
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Helpers/Icons.cs.meta
Normal file
11
Editor/Toolbar/Helpers/Icons.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 51ede7e0c6a32a74faa6298082ed29cc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
19
Editor/Toolbar/Helpers/MenuItems.cs
Normal file
19
Editor/Toolbar/Helpers/MenuItems.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using UnityEditor;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal static class MenuItems
|
||||
{
|
||||
[MenuItem(ToolInfo.EDITOR_MENU_BASE + "/Refresh Toolbar Extender", priority = 1)]
|
||||
public static void Refresh()
|
||||
{
|
||||
MainToolbarAutomaticExtender.Refresh();
|
||||
}
|
||||
|
||||
[MenuItem(ToolInfo.EDITOR_MENU_BASE + "/Main Toolbar Control Panel", priority = 12)]
|
||||
public static void OpenControlPanel()
|
||||
{
|
||||
MainToolbarControlPanelWindow.OpenWindow();
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Helpers/MenuItems.cs.meta
Normal file
11
Editor/Toolbar/Helpers/MenuItems.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a74255adbb601344cb6b565d617de6f1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class RefreshToolbarAutomaticExtenderOnSave : AssetModificationProcessor
|
||||
{
|
||||
private static string[] OnWillSaveAssets(string[] paths)
|
||||
{
|
||||
var groupDefinitionsAssetsPaths = AssetDatabase.FindAssets("t:" + nameof(ScriptableGroupDefinition))
|
||||
.Select(guid => AssetDatabase.GUIDToAssetPath(guid))
|
||||
.ToArray();
|
||||
|
||||
if (GroupDefinitionAssetIsBeingSaved(paths, groupDefinitionsAssetsPaths))
|
||||
{
|
||||
EditorApplication.update += RefreshOneTime;
|
||||
}
|
||||
|
||||
return paths;
|
||||
}
|
||||
|
||||
private static bool GroupDefinitionAssetIsBeingSaved(string[] savingAssetsPaths, string[] groupDefinitionsAssetsPaths)
|
||||
{
|
||||
return savingAssetsPaths.Any(path => groupDefinitionsAssetsPaths.Contains(path));
|
||||
}
|
||||
|
||||
private static void RefreshOneTime()
|
||||
{
|
||||
EditorApplication.update -= RefreshOneTime;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private static void Refresh()
|
||||
{
|
||||
MainToolbarAutomaticExtender.Refresh();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e74405729947e434fb3760be36ad262e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
23
Editor/Toolbar/Helpers/ServicesAndRepositories.cs
Normal file
23
Editor/Toolbar/Helpers/ServicesAndRepositories.cs
Normal file
@ -0,0 +1,23 @@
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal static class ServicesAndRepositories
|
||||
{
|
||||
public static IMainToolbarElementOverrideRepository MainToolbarElementOverridesRepository =
|
||||
new UserSettingsFileMainToolbarElementOverrideRepository();
|
||||
|
||||
public static IGroupDefinitionRepository GroupDefinitionRepository =
|
||||
new ScriptableObjectGroupDefinitionRepository();
|
||||
|
||||
public static IMainToolbarElementRepository MainToolbarElementRepository =
|
||||
new ByAttributeMainToolbarElementRepository();
|
||||
|
||||
public static IValueSerializer ValueSerializer =
|
||||
new UnitySerializationValueSerializer();
|
||||
|
||||
public static IMainToolbarElementVariableSerializer MainToolbarElementVariableSerializer =
|
||||
new UnitySerializationMainToolbarElementVariableSerializer(ValueSerializer);
|
||||
|
||||
public static IMainToolbarElementVariableRepository MainToolbarElementVariableRepository =
|
||||
new UserSettingsFileMainToolbarElementVariableRepository(MainToolbarElementVariableSerializer);
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Helpers/ServicesAndRepositories.cs.meta
Normal file
11
Editor/Toolbar/Helpers/ServicesAndRepositories.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f95a2c4cbecd4f419ae142074dbb03f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Editor/Toolbar/Helpers/ToolInfo.cs
Normal file
8
Editor/Toolbar/Helpers/ToolInfo.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal static class ToolInfo
|
||||
{
|
||||
public const string COMPANY_NAME = "Tools/EditorExtension/Toolbar";
|
||||
public const string EDITOR_MENU_BASE = COMPANY_NAME + "/" ;
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Helpers/ToolInfo.cs.meta
Normal file
11
Editor/Toolbar/Helpers/ToolInfo.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c363bf3b832d93c45b14669aa6ae573c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
120
Editor/Toolbar/Helpers/UnityNativeElementsIds.cs
Normal file
120
Editor/Toolbar/Helpers/UnityNativeElementsIds.cs
Normal file
@ -0,0 +1,120 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal static class UnityNativeElementsIds
|
||||
{
|
||||
// ------------------- ELEMENTS TYPES ---------------------
|
||||
|
||||
// LEFT
|
||||
private const string ACCOUNT_DROPDOWN_TYPE_NAME = "AccountDropdown";
|
||||
private const string CLOUD_BUTTON_TYPE_NAME = "CloudButton";
|
||||
private const string VERSION_CONTROL_BUTTON_TYPE_NAME = "MainToolbarImguiContainer";
|
||||
private const string STORE_BUTTON_TYPE_NAME = "StoreButton";
|
||||
|
||||
// RIGHT
|
||||
private const string LAYOUT_DROPDOWN_TYPE_NAME = "LayoutDropdown";
|
||||
private const string LAYERS_DROPDOWN_TYPE_NAME = "LayersDropdown";
|
||||
private const string SEARCH_BUTTON_TYPE_NAME = "SearchButton";
|
||||
private const string MODES_DROPDOWN_TYPE_NAME = "ModesDropdown";
|
||||
private const string PREVIEW_PACKAGES_IN_USE_DROPDOWN_TYPE_NAME = "PreviewPackagesInUseDropdown";
|
||||
private const string UNDO_BUTTON_TYPE_NAME = "UndoButton";
|
||||
private const string MULTIPLAYER_ROLE_DROPDOWN_TYPE_NAME = "MultiplayerRoleDropdown";
|
||||
|
||||
// ------------------- ELEMENTS NAMES ---------------------
|
||||
|
||||
// LEFT
|
||||
private const string TOOLBAR_PRODUCT_CAPTION_NAME = "ToolbarProductCaption";
|
||||
private const string ACCOUNT_DROPDOWN_ELEMENT_NAME = "AccountDropdown";
|
||||
private const string CLOUD_BUTTON_ELEMENT_NAME = "Cloud";
|
||||
|
||||
// CENTER
|
||||
private const string PLAY_BUTTON_ELEMENT_NAME = "Play";
|
||||
private const string PAUSE_BUTTON_ELEMENT_NAME = "Pause";
|
||||
private const string FRAME_STEP_BUTTON_ELEMENT_NAME = "Step";
|
||||
|
||||
// RIGHT
|
||||
private const string LAYOUT_DROPDOWN_ELEMENT_NAME = "LayoutDropdown";
|
||||
private const string LAYERS_DROPDOWN_ELEMENT_NAME = "LayersDropdown";
|
||||
private const string MODES_DROPDOWN_ELEMENT_NAME = "ModesDropdown";
|
||||
private const string PREVIEW_PACKAGES_IN_USE_DROPDOWN_ELEMENT_NAME = "PreviewPackagesInUseDropdown";
|
||||
private const string UNDO_BUTTON_ELEMENT_NAME = "History";
|
||||
|
||||
// ------------------- FIXED IDS ---------------------
|
||||
|
||||
// LEFT
|
||||
public const string TOOLBAR_PRODUCT_CAPTION = "ToolbarProductCaption";
|
||||
public const string ACCOUNT_DROPDOWN_ID = "AccountDropdown";
|
||||
public const string CLOUD_BUTTON_ID = "CloudButton";
|
||||
public const string VERSION_CONTROL_ID = "VersionControlButton";
|
||||
public const string STORE_BUTTON_ID = "StoreButton";
|
||||
|
||||
// CENTER
|
||||
public const string PLAY_BUTTON_ID = "PlayButton";
|
||||
public const string PAUSE_BUTTON_ID = "PauseButton";
|
||||
public const string FRAME_STEP_BUTTON_ID = "FrameStepButton";
|
||||
|
||||
// RIGHT
|
||||
public const string LAYOUT_DROPDOWN_ID = "LayoutDropdown";
|
||||
public const string LAYERS_DROPDOWN_ID = "LayersDropdown";
|
||||
public const string SEARCH_BUTTON_ID = "SearchButton";
|
||||
public const string MODES_DROPDOWN_ID = "ModesDropdown";
|
||||
public const string PREVIEW_PACKAGES_IN_USE_DROPDOWN_ID = "PreviewPackagesInUseDropdown";
|
||||
public const string UNDO_BUTTON_ID = "UndoButton";
|
||||
public const string MULTIPLAYER_ROLE_DROPDOWN = "MultiplayerRoleDropdown";
|
||||
|
||||
private static readonly Dictionary<string, string> IDS_BY_TYPE = new Dictionary<string, string>()
|
||||
{
|
||||
// LEFT
|
||||
{ ACCOUNT_DROPDOWN_TYPE_NAME, ACCOUNT_DROPDOWN_ID },
|
||||
{ CLOUD_BUTTON_TYPE_NAME, CLOUD_BUTTON_ID },
|
||||
{ VERSION_CONTROL_BUTTON_TYPE_NAME, VERSION_CONTROL_ID },
|
||||
{ STORE_BUTTON_TYPE_NAME, STORE_BUTTON_ID },
|
||||
|
||||
// RIGHT
|
||||
{ LAYOUT_DROPDOWN_TYPE_NAME, LAYOUT_DROPDOWN_ID },
|
||||
{ LAYERS_DROPDOWN_TYPE_NAME, LAYERS_DROPDOWN_ID },
|
||||
{ SEARCH_BUTTON_TYPE_NAME, SEARCH_BUTTON_ID },
|
||||
{ MODES_DROPDOWN_TYPE_NAME, MODES_DROPDOWN_ID },
|
||||
{ PREVIEW_PACKAGES_IN_USE_DROPDOWN_TYPE_NAME, PREVIEW_PACKAGES_IN_USE_DROPDOWN_ID },
|
||||
{ UNDO_BUTTON_TYPE_NAME, UNDO_BUTTON_ID },
|
||||
{ MULTIPLAYER_ROLE_DROPDOWN_TYPE_NAME, MULTIPLAYER_ROLE_DROPDOWN }
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, string> IDS_BY_NAME = new Dictionary<string, string>()
|
||||
{
|
||||
// LEFT
|
||||
{ TOOLBAR_PRODUCT_CAPTION_NAME, TOOLBAR_PRODUCT_CAPTION },
|
||||
{ ACCOUNT_DROPDOWN_ELEMENT_NAME, ACCOUNT_DROPDOWN_ID },
|
||||
{ CLOUD_BUTTON_ELEMENT_NAME, CLOUD_BUTTON_ID },
|
||||
|
||||
// CENTER
|
||||
{ PLAY_BUTTON_ELEMENT_NAME, PLAY_BUTTON_ID },
|
||||
{ PAUSE_BUTTON_ELEMENT_NAME, PAUSE_BUTTON_ID },
|
||||
{ FRAME_STEP_BUTTON_ELEMENT_NAME, FRAME_STEP_BUTTON_ID },
|
||||
|
||||
// RIGHT
|
||||
{ LAYOUT_DROPDOWN_ELEMENT_NAME, LAYOUT_DROPDOWN_ID },
|
||||
{ LAYERS_DROPDOWN_ELEMENT_NAME, LAYERS_DROPDOWN_ID },
|
||||
{ MODES_DROPDOWN_ELEMENT_NAME, MODES_DROPDOWN_ID },
|
||||
{ PREVIEW_PACKAGES_IN_USE_DROPDOWN_ELEMENT_NAME, PREVIEW_PACKAGES_IN_USE_DROPDOWN_ID },
|
||||
{ UNDO_BUTTON_ELEMENT_NAME, UNDO_BUTTON_ID },
|
||||
};
|
||||
|
||||
public static string IdOf(VisualElement visualElement)
|
||||
{
|
||||
var typeName = visualElement.GetType().Name;
|
||||
|
||||
if(IDS_BY_TYPE.ContainsKey(typeName))
|
||||
return IDS_BY_TYPE[typeName];
|
||||
|
||||
var elementName = visualElement.name;
|
||||
|
||||
if(IDS_BY_NAME.ContainsKey(elementName))
|
||||
return IDS_BY_NAME[elementName];
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Helpers/UnityNativeElementsIds.cs.meta
Normal file
11
Editor/Toolbar/Helpers/UnityNativeElementsIds.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 62370caf7a9d1274ba18d9556d83fd07
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
118
Editor/Toolbar/Helpers/UserSettingsPrefs.cs
Normal file
118
Editor/Toolbar/Helpers/UserSettingsPrefs.cs
Normal file
@ -0,0 +1,118 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Unity.Serialization.Json;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
public static class UserSettingsPrefs
|
||||
{
|
||||
private static readonly string DIRECTORY = Path.Combine(Directory.GetParent(Application.dataPath).FullName, "UserSettings/", "unity-toolbar-extender-ui-toolkit", "user-settings-prefs");
|
||||
private static readonly string FILE = Path.Combine(DIRECTORY, "user-settings-prefs.json");
|
||||
|
||||
private static Dictionary<string, object> _prefs;
|
||||
private static Dictionary<string, object> Prefs
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_prefs == null)
|
||||
_prefs = Load();
|
||||
|
||||
return _prefs;
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetInt(string key, int value)
|
||||
{
|
||||
Prefs[key] = value;
|
||||
Save();
|
||||
}
|
||||
|
||||
public static void SetFloat(string key, float value)
|
||||
{
|
||||
Prefs[key] = value;
|
||||
Save();
|
||||
}
|
||||
|
||||
public static void SetDouble(string key, double value)
|
||||
{
|
||||
Prefs[key] = value;
|
||||
Save();
|
||||
}
|
||||
|
||||
public static void SetBool(string key, bool value)
|
||||
{
|
||||
Prefs[key] = value;
|
||||
Save();
|
||||
}
|
||||
|
||||
public static void SetString(string key, string value)
|
||||
{
|
||||
Prefs[key] = value;
|
||||
Save();
|
||||
}
|
||||
|
||||
public static string GetString(string key, string defaultValue = null)
|
||||
{
|
||||
if (Prefs.ContainsKey(key))
|
||||
return (string)Prefs[key];
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static bool GetBool(string key, bool defaultValue = false)
|
||||
{
|
||||
if (Prefs.ContainsKey(key))
|
||||
return (bool)Prefs[key];
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static int GetInt(string key, int defaultValue = 0)
|
||||
{
|
||||
if (Prefs.ContainsKey(key))
|
||||
return Convert.ToInt32(Prefs[key]);
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static float GetFloat(string key, float defaultValue = 0.0f)
|
||||
{
|
||||
if (Prefs.ContainsKey(key))
|
||||
return Convert.ToSingle(Prefs[key]);
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static double GetDouble(string key, double defaultValue = 0.0)
|
||||
{
|
||||
if (Prefs.ContainsKey(key))
|
||||
return Convert.ToDouble(Prefs[key]);
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
private static Dictionary<string, object> Load()
|
||||
{
|
||||
if (!Directory.Exists(DIRECTORY))
|
||||
Directory.CreateDirectory(DIRECTORY);
|
||||
|
||||
if (!File.Exists(FILE))
|
||||
return JsonSerialization.FromJson<Dictionary<string, object>>("{}");
|
||||
|
||||
var json = File.ReadAllText(FILE);
|
||||
|
||||
var serializedDictionary = JsonSerialization.FromJson<Dictionary<string, object>>(json);
|
||||
|
||||
return serializedDictionary;
|
||||
}
|
||||
|
||||
private static void Save()
|
||||
{
|
||||
var json = JsonSerialization.ToJson(Prefs);
|
||||
|
||||
File.WriteAllText(FILE, json);
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Helpers/UserSettingsPrefs.cs.meta
Normal file
11
Editor/Toolbar/Helpers/UserSettingsPrefs.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fad7572312c85da4e80e115c63b2d164
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
7
Editor/Toolbar/IMainToolbarElementRepository.cs
Normal file
7
Editor/Toolbar/IMainToolbarElementRepository.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal interface IMainToolbarElementRepository
|
||||
{
|
||||
public MainToolbarElement[] GetAll();
|
||||
}
|
||||
}
|
11
Editor/Toolbar/IMainToolbarElementRepository.cs.meta
Normal file
11
Editor/Toolbar/IMainToolbarElementRepository.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b6fdece3308162d4994b872bcb838c72
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
88
Editor/Toolbar/MainToolbar.cs
Normal file
88
Editor/Toolbar/MainToolbar.cs
Normal file
@ -0,0 +1,88 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
[InitializeOnLoad]
|
||||
public static class MainToolbar
|
||||
{
|
||||
private const string TOOLBAR_ROOT_ELEMENT_FIELD_NAME = "m_Root";
|
||||
private const string TOOLBAR_CENTER_CONTAINER_NAME = "ToolbarZonePlayMode";
|
||||
private const string TOOLBAR_LEFT_CONTAINER_NAME = "ToolbarZoneLeftAlign";
|
||||
private const string TOOLBAR_RIGHT_CONTAINER_NAME = "ToolbarZoneRightAlign";
|
||||
private const string TOOLBAR_PLAY_BUTTON_NAME = "Play";
|
||||
|
||||
private static Type _toolbarType = typeof(Editor).Assembly.GetType("UnityEditor.Toolbar");
|
||||
private static ScriptableObject _innerToolbarObject;
|
||||
|
||||
public static event Action OnInitialized;
|
||||
public static event Action OnRefresh;
|
||||
|
||||
public static VisualElement UnityToolbarRoot { get; private set; }
|
||||
|
||||
public static VisualElement LeftContainer { get; private set; }
|
||||
public static VisualElement CenterContainer { get; private set; }
|
||||
public static VisualElement RightContainer { get; private set; }
|
||||
public static VisualElement PlayModeButtonsContainer { get; private set; }
|
||||
|
||||
public static bool IsAvailable => _innerToolbarObject != null;
|
||||
|
||||
private static bool _initialized;
|
||||
|
||||
static MainToolbar()
|
||||
{
|
||||
EditorApplication.update -= OnUpdate;
|
||||
EditorApplication.update += OnUpdate;
|
||||
}
|
||||
|
||||
private static void WrapNativeToolbar()
|
||||
{
|
||||
FindUnityToolbar();
|
||||
if (_innerToolbarObject == null)
|
||||
return;
|
||||
CacheNativeToolbarContainers();
|
||||
|
||||
if(!_initialized)
|
||||
{
|
||||
_initialized = true;
|
||||
OnInitialized?.Invoke();
|
||||
}
|
||||
else
|
||||
OnRefresh?.Invoke();
|
||||
}
|
||||
|
||||
private static void FindUnityToolbar()
|
||||
{
|
||||
var toolbars = Resources.FindObjectsOfTypeAll(_toolbarType);
|
||||
_innerToolbarObject = toolbars.Length > 0 ? (ScriptableObject)toolbars[0] : null;
|
||||
}
|
||||
|
||||
private static void CacheNativeToolbarContainers()
|
||||
{
|
||||
var unityToolbarRootFieldInfo = _innerToolbarObject.GetType()
|
||||
.GetField(TOOLBAR_ROOT_ELEMENT_FIELD_NAME, BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
UnityToolbarRoot = unityToolbarRootFieldInfo.GetValue(_innerToolbarObject) as VisualElement;
|
||||
|
||||
LeftContainer = UnityToolbarRoot.Q(TOOLBAR_LEFT_CONTAINER_NAME);
|
||||
CenterContainer = UnityToolbarRoot.Q(TOOLBAR_CENTER_CONTAINER_NAME);
|
||||
RightContainer = UnityToolbarRoot.Q(TOOLBAR_RIGHT_CONTAINER_NAME);
|
||||
PlayModeButtonsContainer = CenterContainer.Q(TOOLBAR_PLAY_BUTTON_NAME).parent;
|
||||
}
|
||||
|
||||
private static void OnUpdate()
|
||||
{
|
||||
if (NeedsWrap())
|
||||
{
|
||||
WrapNativeToolbar();
|
||||
}
|
||||
}
|
||||
|
||||
private static bool NeedsWrap()
|
||||
{
|
||||
return _innerToolbarObject == null;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/MainToolbar.cs.meta
Normal file
11
Editor/Toolbar/MainToolbar.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce77a44ce866ce34d9ce10f93b19c256
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
330
Editor/Toolbar/MainToolbarAutomaticExtender.cs
Normal file
330
Editor/Toolbar/MainToolbarAutomaticExtender.cs
Normal file
@ -0,0 +1,330 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine.UIElements;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
using UnityEditor.SceneManagement;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
[InitializeOnLoad]
|
||||
public static class MainToolbarAutomaticExtender
|
||||
{
|
||||
private static MainToolbarElement[] _mainToolbarElements = new MainToolbarElement[0];
|
||||
private static MainToolbarElement[] _groupElements = new MainToolbarElement[0];
|
||||
private static GroupDefinition[] _groupDefinitions = new GroupDefinition[0];
|
||||
private static MainToolbarElement[] _rootElements = new MainToolbarElement[0];
|
||||
private static NativeToolbarElement[] _nativeElements = new NativeToolbarElement[0];
|
||||
private static MainToolbarElement[] _singleElements = new MainToolbarElement[0];
|
||||
private static MainToolbarElementOverrideApplier _overrideApplier = new MainToolbarElementOverrideApplier(ServicesAndRepositories.MainToolbarElementOverridesRepository);
|
||||
private static Dictionary<string, MainToolbarElement[]> _elementsByGroup = new Dictionary<string, MainToolbarElement[]>();
|
||||
private static MainToolbarElementVariableWatcher _variableWatcher = new MainToolbarElementVariableWatcher(ServicesAndRepositories.MainToolbarElementVariableRepository, ServicesAndRepositories.ValueSerializer);
|
||||
|
||||
internal static MainToolbarCustomContainer LeftCustomContainer { get; private set; } = new MainToolbarCustomContainer("ToolbarAutomaticExtenderLeftContainer", FlexDirection.RowReverse);
|
||||
internal static MainToolbarCustomContainer RightCustomContainer { get; private set; } = new MainToolbarCustomContainer("ToolbarAutomaticExtenderRightContainer", FlexDirection.Row);
|
||||
|
||||
internal static MainToolbarElement[] CustomMainToolbarElements => _mainToolbarElements.ToArray();
|
||||
internal static MainToolbarElement[] GroupElements => _groupElements.ToArray();
|
||||
internal static NativeToolbarElement[] NativeElements => _nativeElements.ToArray();
|
||||
|
||||
public static event Action OnRefresh;
|
||||
public static event Action OnAddedCustomContainersToToolbar;
|
||||
|
||||
static MainToolbarAutomaticExtender()
|
||||
{
|
||||
MainToolbar.OnInitialized += Initialize;
|
||||
}
|
||||
|
||||
private static void Initialize()
|
||||
{
|
||||
BuildCustomToolbarContainers();
|
||||
|
||||
if (_mainToolbarElements.Length == 0)
|
||||
return;
|
||||
|
||||
EditorApplication.projectChanged += OnProjectChange;
|
||||
MainToolbar.OnRefresh += ApplyFixedChangesToToolbar;
|
||||
|
||||
CacheNativeElements();
|
||||
ApplyFixedChangesToToolbar();
|
||||
}
|
||||
|
||||
private static void CacheNativeElements()
|
||||
{
|
||||
var nativeElements = GetNativeElements();
|
||||
if (nativeElements.Length != 0)
|
||||
{
|
||||
_nativeElements = nativeElements;
|
||||
_overrideApplier.SetNativeElements(_nativeElements);
|
||||
}
|
||||
}
|
||||
|
||||
internal static void Refresh()
|
||||
{
|
||||
if (!MainToolbar.IsAvailable)
|
||||
return;
|
||||
|
||||
ResetCustomContainers();
|
||||
BuildCustomToolbarContainers();
|
||||
_overrideApplier.ApplyOverrides();
|
||||
OnRefresh?.Invoke();
|
||||
}
|
||||
|
||||
internal static MainToolbarElement[] GetElementsOfGroup(string id)
|
||||
{
|
||||
return _elementsByGroup[id].ToArray();
|
||||
}
|
||||
|
||||
private static void ResetCustomContainers()
|
||||
{
|
||||
LeftCustomContainer.ClearContainer();
|
||||
RightCustomContainer.ClearContainer();
|
||||
}
|
||||
|
||||
private static void BuildCustomToolbarContainers()
|
||||
{
|
||||
_mainToolbarElements = ServicesAndRepositories.MainToolbarElementRepository.GetAll();
|
||||
|
||||
if (_mainToolbarElements.Count() == 0)
|
||||
return;
|
||||
|
||||
_groupDefinitions = LoadGroupDefinitions();
|
||||
_groupElements = GetGroups();
|
||||
_elementsByGroup = GetElementsByGroup();
|
||||
InitializeGroups();
|
||||
_singleElements = GetSingles();
|
||||
_rootElements = GetRootElements();
|
||||
_overrideApplier.SetCustomElements(_mainToolbarElements.Concat(_groupElements).ToArray());
|
||||
_variableWatcher.RestoreValues(CustomMainToolbarElements);
|
||||
|
||||
InitializeCustomElements();
|
||||
RegisterElementsForRecommendedStyles();
|
||||
|
||||
AddRootElementsToContainers();
|
||||
|
||||
EditorApplication.update += Update;
|
||||
}
|
||||
|
||||
private static void InitializeCustomElements()
|
||||
{
|
||||
foreach(var customElement in CustomMainToolbarElements)
|
||||
{
|
||||
var typeOfElement = customElement.VisualElement.GetType();
|
||||
|
||||
var initializeMethod = typeOfElement.GetMethod("InitializeElement", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
initializeMethod?.Invoke(customElement.VisualElement, null);
|
||||
}
|
||||
}
|
||||
|
||||
private static void Update()
|
||||
{
|
||||
_variableWatcher.Update();
|
||||
}
|
||||
|
||||
private static void InitializeGroups()
|
||||
{
|
||||
foreach (var group in _groupElements)
|
||||
{
|
||||
var groupElement = group.VisualElement as GroupElement;
|
||||
var elementsOfThisGroup = _elementsByGroup[group.Id]
|
||||
.Select(e => e.VisualElement)
|
||||
.ToArray();
|
||||
|
||||
groupElement.Initialize(elementsOfThisGroup);
|
||||
}
|
||||
}
|
||||
|
||||
private static void RegisterElementsForRecommendedStyles()
|
||||
{
|
||||
var eligibleElements = _mainToolbarElements
|
||||
.Concat(_groupElements)
|
||||
.Where(element => element.UseRecommendedStyles)
|
||||
.Select(element => new RecommendedStyleVisualElement(element.VisualElement, IsInGroup(element)))
|
||||
.ToArray();
|
||||
|
||||
RecommendedStyles.SetElements(eligibleElements);
|
||||
}
|
||||
|
||||
private static bool IsInGroup(MainToolbarElement mainToolbarElement)
|
||||
{
|
||||
return !_rootElements.Contains(mainToolbarElement);
|
||||
}
|
||||
|
||||
private static MainToolbarElement[] GetRootElements()
|
||||
{
|
||||
return GetRootGroups()
|
||||
.Concat(_singleElements)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private static MainToolbarElement[] GetRootGroups()
|
||||
{
|
||||
var rootGroups = new List<MainToolbarElement>();
|
||||
|
||||
var allGroupElements = _groupElements.Select(group => group.VisualElement as GroupElement);
|
||||
|
||||
foreach (var group in _groupElements)
|
||||
{
|
||||
var groupElement = group.VisualElement as GroupElement;
|
||||
|
||||
if (!allGroupElements.Any(g => g.GroupedElements.Contains(groupElement)))
|
||||
rootGroups.Add(group);
|
||||
}
|
||||
|
||||
return rootGroups.ToArray();
|
||||
}
|
||||
|
||||
private static NativeToolbarElement[] GetNativeElements()
|
||||
{
|
||||
return MainToolbar.LeftContainer.Children()
|
||||
.Concat(MainToolbar.RightContainer.Children())
|
||||
.Concat(MainToolbar.PlayModeButtonsContainer.Children())
|
||||
.Where(visualElement => UnityNativeElementsIds.IdOf(visualElement) != null)
|
||||
.Select(visualElement => new NativeToolbarElement(UnityNativeElementsIds.IdOf(visualElement), visualElement))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private static void ApplyFixedChangesToToolbar()
|
||||
{
|
||||
ConfigureStyleOfContainers();
|
||||
AddCustomContainers();
|
||||
_overrideApplier.ApplyOverrides();
|
||||
OnAddedCustomContainersToToolbar?.Invoke();
|
||||
}
|
||||
|
||||
private static void AddCustomContainers()
|
||||
{
|
||||
MainToolbar.CenterContainer.Insert(0, LeftCustomContainer);
|
||||
MainToolbar.CenterContainer.Add(RightCustomContainer);
|
||||
}
|
||||
|
||||
private static void AddRootElementsToContainers()
|
||||
{
|
||||
var leftElements = _rootElements.Where(el => el.Alignment == ToolbarAlign.Left)
|
||||
.OrderBy(el => el.Order);
|
||||
|
||||
var rightElements = _rootElements.Where(el => el.Alignment == ToolbarAlign.Right)
|
||||
.OrderBy(el => el.Order);
|
||||
|
||||
foreach (var orderedAlignedElement in leftElements)
|
||||
LeftCustomContainer.AddToContainer(orderedAlignedElement.VisualElement);
|
||||
|
||||
foreach (var orderedAlignedElement in rightElements)
|
||||
RightCustomContainer.AddToContainer(orderedAlignedElement.VisualElement);
|
||||
}
|
||||
|
||||
private static MainToolbarElement[] GetGroups()
|
||||
{
|
||||
var groups = new List<MainToolbarElement>();
|
||||
|
||||
foreach (var groupDefinition in _groupDefinitions)
|
||||
{
|
||||
if (groupDefinition.ToolbarElementsIds.Length == 0)
|
||||
continue;
|
||||
|
||||
var groupToolbarElement = new MainToolbarElement(
|
||||
groupDefinition.GroupId,
|
||||
new GroupElement(groupDefinition.GroupName),
|
||||
groupDefinition.Alignment,
|
||||
groupDefinition.Order,
|
||||
true
|
||||
);
|
||||
|
||||
groups.Add(groupToolbarElement);
|
||||
}
|
||||
|
||||
return groups.ToArray();
|
||||
}
|
||||
|
||||
private static MainToolbarElement[] GetSingles()
|
||||
{
|
||||
var elementsInGroups = _elementsByGroup.Values.SelectMany(list => list);
|
||||
|
||||
return _mainToolbarElements
|
||||
.Where(mainToolbarElement => !elementsInGroups.Contains(mainToolbarElement))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private static Dictionary<string, MainToolbarElement[]> GetElementsByGroup()
|
||||
{
|
||||
var elementsByGroup = new Dictionary<string, MainToolbarElement[]>();
|
||||
|
||||
foreach (var groupDefinition in _groupDefinitions)
|
||||
{
|
||||
var elementsOfThisGroup = groupDefinition.ToolbarElementsIds
|
||||
.Select(id =>
|
||||
{
|
||||
var element = _mainToolbarElements.FirstOrDefault(e => e.Id == id);
|
||||
|
||||
if (element != null)
|
||||
return element;
|
||||
|
||||
element = _groupElements.FirstOrDefault(e => e.Id == id);
|
||||
|
||||
return element;
|
||||
})
|
||||
.Where(mainToolbarElement => mainToolbarElement != null)
|
||||
.ToList();
|
||||
|
||||
elementsByGroup.Add(groupDefinition.GroupId, elementsOfThisGroup.ToArray());
|
||||
}
|
||||
|
||||
return elementsByGroup;
|
||||
}
|
||||
|
||||
private static GroupDefinition[] LoadGroupDefinitions()
|
||||
{
|
||||
return ServicesAndRepositories.GroupDefinitionRepository.GetAll();
|
||||
}
|
||||
|
||||
private static void ConfigureStyleOfContainers()
|
||||
{
|
||||
MainToolbar.LeftContainer.style.flexGrow = 0;
|
||||
MainToolbar.LeftContainer.style.width = Length.Auto();
|
||||
|
||||
MainToolbar.RightContainer.style.flexGrow = 0;
|
||||
MainToolbar.RightContainer.style.width = Length.Auto();
|
||||
|
||||
MainToolbar.CenterContainer.style.flexGrow = 1;
|
||||
|
||||
MainToolbar.CenterContainer.parent.style.paddingTop = 0;
|
||||
MainToolbar.CenterContainer.parent.style.paddingBottom = 0;
|
||||
}
|
||||
|
||||
private static void OnProjectChange()
|
||||
{
|
||||
if(ShouldRefresh())
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private static bool ShouldRefresh()
|
||||
{
|
||||
return GroupsChanged();
|
||||
}
|
||||
|
||||
private static bool GroupsChanged()
|
||||
{
|
||||
var groups = ServicesAndRepositories.GroupDefinitionRepository.GetAll();
|
||||
|
||||
if (_groupDefinitions.Length != groups.Length)
|
||||
return true;
|
||||
|
||||
if (_groupDefinitions.Length == 0 && groups.Length == 0)
|
||||
return false;
|
||||
|
||||
for(int i = 0; i < _groupDefinitions.Length; i++)
|
||||
{
|
||||
var savedGroupDefinition = _groupDefinitions[i];
|
||||
var retrievedGroupDefinition = groups[i];
|
||||
|
||||
if (!savedGroupDefinition.AreEquals(retrievedGroupDefinition))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/MainToolbarAutomaticExtender.cs.meta
Normal file
11
Editor/Toolbar/MainToolbarAutomaticExtender.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6fd1abb4edafb6a4793209e0f154d8a8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
95
Editor/Toolbar/MainToolbarCustomContainer.cs
Normal file
95
Editor/Toolbar/MainToolbarCustomContainer.cs
Normal file
@ -0,0 +1,95 @@
|
||||
using System.Linq;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class MainToolbarCustomContainer : VisualElement
|
||||
{
|
||||
private const string LAST_SCROLLER_POSITION_SAVE_KEY_BASE = "main-toolbar-custom-container:last-scroller-position:";
|
||||
|
||||
private const float SCROLL_VIEW_SCROLLER_HEIGHT = 1;
|
||||
private const float SCROLLER_HEIGHT = 5;
|
||||
private const float SCROLL_VIEW_HORIZONTAL_PADDING = 5;
|
||||
private const float SCROLL_VIEW_SCROLLER_BORDER_TOP_WIDTH = 0;
|
||||
|
||||
private string _id;
|
||||
private ScrollView _scrollView;
|
||||
private Scroller _scroller;
|
||||
private VisualElement _container;
|
||||
|
||||
public MainToolbarCustomContainer(string id, FlexDirection flexDirection)
|
||||
{
|
||||
_id = id;
|
||||
name = id;
|
||||
|
||||
style.flexDirection = flexDirection;
|
||||
style.flexGrow = 1;
|
||||
style.width = 0;
|
||||
|
||||
_container = CreateAndAddContainer(flexDirection);
|
||||
}
|
||||
|
||||
private VisualElement CreateAndAddContainer(FlexDirection flexDirection)
|
||||
{
|
||||
_scrollView = new ScrollView(ScrollViewMode.Horizontal);
|
||||
|
||||
_scrollView.style.paddingLeft = SCROLL_VIEW_HORIZONTAL_PADDING;
|
||||
_scrollView.style.paddingRight = SCROLL_VIEW_HORIZONTAL_PADDING;
|
||||
|
||||
_scrollView.verticalScrollerVisibility = ScrollerVisibility.Hidden;
|
||||
_scrollView.contentContainer.style.flexDirection = flexDirection;
|
||||
|
||||
_scroller = _scrollView.horizontalScroller;
|
||||
|
||||
var leftButton = _scroller.lowButton;
|
||||
var rightButton = _scroller.highButton;
|
||||
var slider = _scroller.slider;
|
||||
|
||||
_scroller.style.height = SCROLL_VIEW_SCROLLER_HEIGHT;
|
||||
_scroller.style.borderTopWidth = SCROLL_VIEW_SCROLLER_BORDER_TOP_WIDTH;
|
||||
leftButton.style.height = SCROLLER_HEIGHT;
|
||||
rightButton.style.height = SCROLLER_HEIGHT;
|
||||
slider.style.height = SCROLLER_HEIGHT;
|
||||
|
||||
Add(_scrollView);
|
||||
_scrollView.RegisterCallback<GeometryChangedEvent>(LoadLastScrollerPosition);
|
||||
|
||||
return _scrollView;
|
||||
}
|
||||
|
||||
private void LoadLastScrollerPosition(GeometryChangedEvent eventArgs)
|
||||
{
|
||||
_scroller.value = (float)LastScrollerPosition();
|
||||
_scroller.valueChanged += SaveScrollerPosition;
|
||||
|
||||
_scrollView.UnregisterCallback<GeometryChangedEvent>(LoadLastScrollerPosition);
|
||||
}
|
||||
|
||||
private double LastScrollerPosition()
|
||||
{
|
||||
return UserSettingsPrefs.GetDouble(GetFullKey(), 0d);
|
||||
}
|
||||
|
||||
private void SaveScrollerPosition(float newPosition)
|
||||
{
|
||||
UserSettingsPrefs.SetDouble(GetFullKey(), newPosition);
|
||||
}
|
||||
|
||||
private string GetFullKey() => LAST_SCROLLER_POSITION_SAVE_KEY_BASE + _id;
|
||||
|
||||
public void AddToContainer(VisualElement child)
|
||||
{
|
||||
_container.Add(child);
|
||||
}
|
||||
|
||||
public void ClearContainer()
|
||||
{
|
||||
_container.Clear();
|
||||
}
|
||||
|
||||
public VisualElement[] GetContainerChilds()
|
||||
{
|
||||
return _container.Children().ToArray();
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/MainToolbarCustomContainer.cs.meta
Normal file
11
Editor/Toolbar/MainToolbarCustomContainer.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3a0122c91e132b8478c5d18c85d0df6f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
23
Editor/Toolbar/MainToolbarElement.cs
Normal file
23
Editor/Toolbar/MainToolbarElement.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class MainToolbarElement
|
||||
{
|
||||
public string Id { get; }
|
||||
public VisualElement VisualElement { get; }
|
||||
public ToolbarAlign Alignment { get; }
|
||||
public int Order { get; }
|
||||
public bool UseRecommendedStyles { get; }
|
||||
|
||||
public MainToolbarElement(string id, VisualElement visualElement,
|
||||
ToolbarAlign alignment, int order, bool useRecommendedStyles)
|
||||
{
|
||||
Id = id;
|
||||
VisualElement = visualElement;
|
||||
Alignment = alignment;
|
||||
Order = order;
|
||||
UseRecommendedStyles = useRecommendedStyles;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/MainToolbarElement.cs.meta
Normal file
11
Editor/Toolbar/MainToolbarElement.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f67ca04efaf7f044fa5a17a7627aca0b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
31
Editor/Toolbar/MainToolbarElementAttribute.cs
Normal file
31
Editor/Toolbar/MainToolbarElementAttribute.cs
Normal file
@ -0,0 +1,31 @@
|
||||
using System;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
|
||||
public class MainToolbarElementAttribute : Attribute
|
||||
{
|
||||
public string Id { get; }
|
||||
public ToolbarAlign Alignment { get; }
|
||||
public int Order { get; }
|
||||
public bool UseRecommendedStyles { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Mark a class derived from VisualElement to be found by toolbar extender
|
||||
/// </summary>
|
||||
/// <param name="id">Id of element. Must be unique. In case of collision, first found is used</param>
|
||||
/// <param name="alignment">Left or right to play buttons. Ignored if inside a group</param>
|
||||
/// <param name="order">Order in which this element will be displayed in toolbar. Ignored if inside a group</param>
|
||||
/// <param name="useRecommendedStyles">True if this element should use recommended styles. Set it to false if you want to style the visual element yourself.</param>
|
||||
/// <param name="name"></param>
|
||||
public MainToolbarElementAttribute(string id, ToolbarAlign alignment = ToolbarAlign.Left,
|
||||
int order = 0,
|
||||
bool useRecommendedStyles = true)
|
||||
{
|
||||
Id = id;
|
||||
Alignment = alignment;
|
||||
Order = order;
|
||||
UseRecommendedStyles = useRecommendedStyles;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/MainToolbarElementAttribute.cs.meta
Normal file
11
Editor/Toolbar/MainToolbarElementAttribute.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d4059a4ac36791549810df04f72dcc75
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
179
Editor/Toolbar/MainToolbarElementOverrideApplier.cs
Normal file
179
Editor/Toolbar/MainToolbarElementOverrideApplier.cs
Normal file
@ -0,0 +1,179 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class MainToolbarElementOverrideApplier
|
||||
{
|
||||
private class HiddenRemovedElement
|
||||
{
|
||||
public VisualElement RemovedVisualElement;
|
||||
public VisualElement Parent;
|
||||
public int Index;
|
||||
}
|
||||
|
||||
private static readonly string[] EXCEPTIONAL_ELEMENTS_FOR_VISIBILITY =
|
||||
{
|
||||
UnityNativeElementsIds.ACCOUNT_DROPDOWN_ID,
|
||||
UnityNativeElementsIds.CLOUD_BUTTON_ID
|
||||
};
|
||||
private readonly IMainToolbarElementOverrideRepository _mainToolbarElementOverrideRepository;
|
||||
private MainToolbarElement[] _mainToolbarElements = new MainToolbarElement[0];
|
||||
private NativeToolbarElement[] _nativeElements = new NativeToolbarElement[0];
|
||||
private readonly Dictionary<string, MainToolbarElementOverride> _nativeElementsInitialState = new Dictionary<string, MainToolbarElementOverride>();
|
||||
private readonly Dictionary<string, HiddenRemovedElement> _hiddenElementsByRemotion = new Dictionary<string, HiddenRemovedElement>();
|
||||
|
||||
public MainToolbarElementOverrideApplier(IMainToolbarElementOverrideRepository mainToolbarElementOverrideRepository)
|
||||
{
|
||||
_mainToolbarElementOverrideRepository = mainToolbarElementOverrideRepository;
|
||||
}
|
||||
|
||||
public void SetNativeElements(NativeToolbarElement[] nativeElements)
|
||||
{
|
||||
_nativeElements = nativeElements.ToArray();
|
||||
|
||||
SaveNativeElementsInitialState();
|
||||
SetNativeElementsDefaultState(); // necesito hacer esto?
|
||||
}
|
||||
|
||||
public void SetCustomElements(MainToolbarElement[] mainToolbarElements)
|
||||
{
|
||||
_mainToolbarElements = mainToolbarElements.ToArray();
|
||||
}
|
||||
|
||||
public void ApplyOverrides()
|
||||
{
|
||||
SetNativeElementsDefaultState();
|
||||
|
||||
ApplyOverridesOnCustomElements();
|
||||
ApplyOverridesOnNativeElements();
|
||||
}
|
||||
|
||||
private void ApplyOverridesOnCustomElements()
|
||||
{
|
||||
foreach (var mainToolbarElement in _mainToolbarElements)
|
||||
{
|
||||
ApplyOverride(mainToolbarElement.Id, mainToolbarElement.VisualElement);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyOverridesOnNativeElements()
|
||||
{
|
||||
foreach (var nativeElement in _nativeElements)
|
||||
{
|
||||
ApplyOverride(nativeElement.Id, nativeElement.VisualElement);
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveNativeElementsInitialState()
|
||||
{
|
||||
if (_nativeElementsInitialState.Count > 0)
|
||||
return;
|
||||
|
||||
foreach (var nativeElement in _nativeElements)
|
||||
{
|
||||
_nativeElementsInitialState[nativeElement.Id] =
|
||||
new MainToolbarElementOverride(
|
||||
nativeElement.Id,
|
||||
nativeElement.VisualElement.resolvedStyle.display == DisplayStyle.Flex
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetNativeElementsDefaultState()
|
||||
{
|
||||
foreach (var nativeElement in _nativeElements)
|
||||
{
|
||||
var defaultStateOverride = _nativeElementsInitialState[nativeElement.Id];
|
||||
|
||||
ApplyOverride(nativeElement, defaultStateOverride);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyOverride(NativeToolbarElement nativeElement, MainToolbarElementOverride overrideData)
|
||||
{
|
||||
ApplyVisibilityOverride(nativeElement.Id, nativeElement.VisualElement, overrideData.Visible);
|
||||
}
|
||||
|
||||
private void ApplyOverride(string id, VisualElement visualElement)
|
||||
{
|
||||
var userOverride = _mainToolbarElementOverrideRepository
|
||||
.Get(id);
|
||||
|
||||
if (userOverride == null)
|
||||
return;
|
||||
|
||||
ApplyVisibilityOverride(id, visualElement, userOverride.Value.Visible);
|
||||
}
|
||||
|
||||
private void ApplyVisibilityOverride(string elementId, VisualElement visualElement, bool visible)
|
||||
{
|
||||
if (IsExceptionElementForVisibility(elementId))
|
||||
HandleVisibilityApplicationOnExceptions(elementId, visualElement, visible);
|
||||
else
|
||||
visualElement.style.display = visible ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
}
|
||||
|
||||
private bool IsExceptionElementForVisibility(string elementId)
|
||||
{
|
||||
return EXCEPTIONAL_ELEMENTS_FOR_VISIBILITY.Contains(elementId);
|
||||
}
|
||||
|
||||
private void HandleVisibilityApplicationOnExceptions(string elementId, VisualElement visualElement, bool visible)
|
||||
{
|
||||
if (visible)
|
||||
HandleExceptionalElementVisibleCase(elementId, visualElement);
|
||||
else
|
||||
HandleExceptionalElementInvisibleCase(elementId, visualElement);
|
||||
}
|
||||
|
||||
private void HandleExceptionalElementInvisibleCase(string elementId, VisualElement visualElement)
|
||||
{
|
||||
var parent = visualElement.parent;
|
||||
var index = parent.IndexOf(visualElement);
|
||||
|
||||
if (parent.Contains(visualElement))
|
||||
parent.Remove(visualElement);
|
||||
|
||||
if (!_hiddenElementsByRemotion.ContainsKey(elementId))
|
||||
_hiddenElementsByRemotion.Add(elementId, new HiddenRemovedElement()
|
||||
{
|
||||
RemovedVisualElement = visualElement,
|
||||
Parent = parent,
|
||||
Index = index
|
||||
});
|
||||
}
|
||||
|
||||
private void HandleExceptionalElementVisibleCase(string elementId, VisualElement visualElement)
|
||||
{
|
||||
if (_hiddenElementsByRemotion.ContainsKey(elementId))
|
||||
{
|
||||
var removedElement = _hiddenElementsByRemotion[elementId];
|
||||
|
||||
var parent = removedElement.Parent;
|
||||
|
||||
if (!parent.Contains(visualElement))
|
||||
{
|
||||
var bestIndex = GetIndexEqualOrLessThan(removedElement.Index, parent);
|
||||
|
||||
parent.Insert(bestIndex, visualElement);
|
||||
}
|
||||
|
||||
_hiddenElementsByRemotion.Remove(elementId);
|
||||
}
|
||||
}
|
||||
|
||||
private int GetIndexEqualOrLessThan(int removedElementIndex, VisualElement parent)
|
||||
{
|
||||
for (int i = parent.childCount - 1; i >= 0; i--)
|
||||
{
|
||||
if (removedElementIndex <= i)
|
||||
return i;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/MainToolbarElementOverrideApplier.cs.meta
Normal file
11
Editor/Toolbar/MainToolbarElementOverrideApplier.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24d310911f14d4d45a02bd5586c371bb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
16
Editor/Toolbar/NativeToolbarElement.cs
Normal file
16
Editor/Toolbar/NativeToolbarElement.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class NativeToolbarElement
|
||||
{
|
||||
public string Id { get; }
|
||||
public VisualElement VisualElement { get; }
|
||||
|
||||
public NativeToolbarElement(string id, VisualElement visualElement)
|
||||
{
|
||||
Id = id;
|
||||
VisualElement = visualElement;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/NativeToolbarElement.cs.meta
Normal file
11
Editor/Toolbar/NativeToolbarElement.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4b9dec15dbb8eea42b0c2254ce4b7177
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Editor/Toolbar/Override.meta
Normal file
8
Editor/Toolbar/Override.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6f722a3e209ed5649a219e2282177125
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal interface IMainToolbarElementOverrideRepository
|
||||
{
|
||||
public MainToolbarElementOverride? Get(string elementId);
|
||||
public MainToolbarElementOverride[] GetAll();
|
||||
public void Save(MainToolbarElementOverride elementOverride);
|
||||
public void Clear();
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 280c883dcd1944448a1b93cecc8877f7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
14
Editor/Toolbar/Override/MainToolbarElementOverride.cs
Normal file
14
Editor/Toolbar/Override/MainToolbarElementOverride.cs
Normal file
@ -0,0 +1,14 @@
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal readonly struct MainToolbarElementOverride
|
||||
{
|
||||
public string ElementId { get; }
|
||||
public bool Visible { get; }
|
||||
|
||||
public MainToolbarElementOverride(string elementId, bool visible)
|
||||
{
|
||||
ElementId = elementId;
|
||||
Visible = visible;
|
||||
}
|
||||
}
|
||||
}
|
11
Editor/Toolbar/Override/MainToolbarElementOverride.cs.meta
Normal file
11
Editor/Toolbar/Override/MainToolbarElementOverride.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e51009f5c83b62f419eee2089fd6e63f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,99 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Unity.Serialization.Json;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class UserSettingsFileMainToolbarElementOverrideRepository : IMainToolbarElementOverrideRepository
|
||||
{
|
||||
private static readonly string DIRECTORY = Path.Combine(Directory.GetParent(Application.dataPath).FullName, "UserSettings/", "unity-toolbar-extender-ui-toolkit", "overrides");
|
||||
private static readonly string FILE = Path.Combine(DIRECTORY, "overrides.json");
|
||||
|
||||
private struct SerializableOverride
|
||||
{
|
||||
public string ElementId;
|
||||
public bool Visible;
|
||||
}
|
||||
|
||||
private Dictionary<string, MainToolbarElementOverride> _overrides = new Dictionary<string, MainToolbarElementOverride>();
|
||||
|
||||
public UserSettingsFileMainToolbarElementOverrideRepository()
|
||||
{
|
||||
_overrides = LoadOverrides();
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
_overrides.Clear();
|
||||
DeleteSave();
|
||||
}
|
||||
|
||||
public MainToolbarElementOverride? Get(string elementId)
|
||||
{
|
||||
if(_overrides.ContainsKey(elementId))
|
||||
return _overrides[elementId];
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public MainToolbarElementOverride[] GetAll()
|
||||
{
|
||||
return _overrides.Values.ToArray();
|
||||
}
|
||||
|
||||
public void Save(MainToolbarElementOverride elementOverride)
|
||||
{
|
||||
_overrides[elementOverride.ElementId] = elementOverride;
|
||||
SaveOverrides();
|
||||
}
|
||||
|
||||
private MainToolbarElementOverride FromSerialized(SerializableOverride serializableOverride)
|
||||
{
|
||||
return new MainToolbarElementOverride(serializableOverride.ElementId, serializableOverride.Visible);
|
||||
}
|
||||
|
||||
private SerializableOverride ToSerialized(MainToolbarElementOverride mainToolbarElementOverride)
|
||||
{
|
||||
return new SerializableOverride() {
|
||||
ElementId = mainToolbarElementOverride.ElementId,
|
||||
Visible = mainToolbarElementOverride.Visible
|
||||
};
|
||||
}
|
||||
|
||||
private void DeleteSave()
|
||||
{
|
||||
File.Delete(FILE);
|
||||
}
|
||||
|
||||
private Dictionary<string, MainToolbarElementOverride> LoadOverrides()
|
||||
{
|
||||
if (!Directory.Exists(DIRECTORY))
|
||||
Directory.CreateDirectory(DIRECTORY);
|
||||
|
||||
if (!File.Exists(FILE))
|
||||
return JsonSerialization.FromJson<Dictionary<string, MainToolbarElementOverride>>("{}");
|
||||
|
||||
var json = File.ReadAllText(FILE);
|
||||
|
||||
var serializedDictionary = JsonSerialization.FromJson<Dictionary<string, SerializableOverride>>(json);
|
||||
|
||||
return serializedDictionary.Values
|
||||
.ToDictionary(serializedOverride => serializedOverride.ElementId,
|
||||
serializedOverride => FromSerialized(serializedOverride));
|
||||
}
|
||||
|
||||
private void SaveOverrides()
|
||||
{
|
||||
var serializableDictionary = _overrides.Values.ToDictionary(
|
||||
mainToolbarElementOverride => mainToolbarElementOverride.ElementId,
|
||||
mainToolbarElementOverride => ToSerialized(mainToolbarElementOverride)
|
||||
);
|
||||
|
||||
var json = JsonSerialization.ToJson(serializableDictionary);
|
||||
|
||||
File.WriteAllText(FILE, json);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 267c04a3d47600c488137859ea7af2a9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
18
Editor/Toolbar/Paps.UnityToolbarExtenderUIToolkit.asmdef
Normal file
18
Editor/Toolbar/Paps.UnityToolbarExtenderUIToolkit.asmdef
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Paps.UnityToolbarExtenderUIToolkit",
|
||||
"rootNamespace": "Paps.UnityToolbarExtenderUIToolkit",
|
||||
"references": [
|
||||
"Unity.Serialization"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": false,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8d62da4aabd2a19419c7378d23ea5849
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Editor/Toolbar/RecommendedStyles.meta
Normal file
8
Editor/Toolbar/RecommendedStyles.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 21a21acb2ce38fb46bd178a11e0cc483
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
19
Editor/Toolbar/RecommendedStyles/ButtonRecommendedStyle.cs
Normal file
19
Editor/Toolbar/RecommendedStyles/ButtonRecommendedStyle.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class ButtonRecommendedStyle : RecommendedStyle
|
||||
{
|
||||
private Button _button;
|
||||
|
||||
public ButtonRecommendedStyle(Button button)
|
||||
{
|
||||
_button = button;
|
||||
}
|
||||
|
||||
protected override void ApplyRootElementStyle()
|
||||
{
|
||||
_button.style.overflow = Overflow.Visible;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dcaec52f220ee13458fa862e8f9f31b6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,20 @@
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Paps.UnityToolbarExtenderUIToolkit
|
||||
{
|
||||
internal class ColorFieldRecommendedStyle : RecommendedStyle
|
||||
{
|
||||
private readonly ColorField _colorField;
|
||||
|
||||
public ColorFieldRecommendedStyle(ColorField colorField)
|
||||
{
|
||||
_colorField = colorField;
|
||||
}
|
||||
|
||||
protected override void ApplyRootElementStyle()
|
||||
{
|
||||
_colorField.labelElement.style.minWidth = Length.Auto();
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user